Debian, Squid, Squidguard, step by step

Nos. Otthoni hálózaton beállítottam egy debian-t átjárónak. Ez már elég régen történt, de az ötlet, hogy legyen rajta egy transzparens proxy, az viszonylag új. El is készült szépen, squidguard is megy, feketelistát szépen kezeli. Néhány helyen látni fogtok "Szívás" kezdetű bekezdéseket. Ezeken a pontokon a nemfigyelésem, alulguglizásom, és "tapasztalatlanságom" miatt sokat káromkodtam. Remélem az utókor már jobban figyel majd... :) Most pedig jöjjön az, hogy hogyan történt mindez:

  1. Squid telepítése
    Debian alatt ez a folyamat viszonylag egyszerű:
    # apt-get install squid
  2. Squid beállítása
    Mint minden szolgáltatás esetében, most sem szabad rögtön a bonyolult, kifinomult szabályokkal kezdeni, lássunk működni egy teljesen alap squid-et. Aztán lehet bonyolítani...
    A squid config file-ja alapértelmezésben (debian alatt): /etc/squid/squid.conf . Ebben az alapvető működéshez legalább az alábbi soroknak kell lennie:
    
    http_port 3128 # mely porton dolgozik (hova kell irányítani a 80-ast...)
    
    hierarchy_stoplist cgi-bin ?
    acl QUERY urlpath_regex cgi-bin \?
    cache deny QUERY
    
    access_log /var/log/squid/access.log squid # a log helye
    cache_mem 64 MB # a squid-nek adott memória mennyisége, szabadon választott
    maximum_object_size 32 MB # a legnagyobb objektum (kép video stb.) amit tárol
    cache_dir ufs /var/spool/squid 1024 64 128 # a cache könyvtár helye, a mögötte lévő számok sorrendben: cache mérete(MB) könyvtárakszáma alkönyvtárakszáma
    
    # néhány alap szabály, amit nem jó kihagyni 
    acl all src 0.0.0.0/0.0.0.0
    acl manager proto cache_object
    acl localhost src 127.0.0.1/255.255.255.255
    acl localnet src 192.168.2.0/255.255.255.0
    
    # Őszinte leszek: ezt pontosan magam sem tudom micsoda, de ha kiveszem nem igazán megy.
    acl purge method PURGE
    acl CONNECT method CONNECT
    
    # most pedig az engedélyzések
    http_access allow localhost
    http_access deny all
    http_access allow localnet
    

    Ez elvileg a minimális squid.conf egy sima, _nem_ transzparens proxy működéséhez. (Aki úgy érzi ennél több kell, vagy elég kevesebb is, az hozzászólásban jelezze, és ha szükséges akkor javítom.) Komolyabb hozzáférési szabályokért nézd meg például ezt.

  3. Transzparens proxy: attól hogy az átjárón van squid, még nem megy simán a proxy szolgáltatás. Kivéve, ha minden belső böngészőnek külön beállítod a proxyt, de ez ugyebár kényelmetlen nagyobb hálózat esetén.
    A squid transzparens módba állítható, ha a config fájl elején lévő
    http_port 3128

    sort kiegészíted így:

    http_port 3128 transparent

    Ennyi.
    Szívás: a transzparens proxy beállítása a squid 2.5-től felfele változott. Néhány régi howto-ban megtalálható, hogy a transzparens proxihoz még négy sor kell a squid.conf-ba:

        
        httpd_accel_host virtual
        httpd_accel_port 80
        httpd_accel_with_proxy on
        httpd_accel_uses_host_header on
    

    Ez csak akkor igaz, ha squid-ed 2.5-nél korábbi, az újabb nem is kezeli.

  4. Tűzfal beállítása: ha nem gondolsz arra, hogy a 80-as portra irányuló kéréseket a squid a 3128-on szeretné fogadni, akkor a squid csak csendben ülni fog a fenekén, és nem dolgozik. Ezért a tűzfal beállításaihoz hozzá kell csapni az alábbi sort:
    /sbin/iptables -t nat -A PREROUTING -i [belsohalokartya] -p tcp --dport 80 -j REDIRECT --to-port 3128
  5. Squidguard telepítése
    A dolog hasonló bonyolultságú mint a squid telepítése volt:
    # apt-get install squidguard
  6. Squidguard beállítása: a squidguard config-file-ja debian alatt alapártelmezésben: /etc/squid/squidGuard.conf . Minimális config igazából nincs, leszámítva az lábbi két sort:
    dbhome /var/lib/squidguard/db # az adatbázisok helye (pl blacklist)
    logdir /var/log/squid # a naplók helye

    Ha ezen kívül üresen hagyod a squidGuard.conf-ot, akkor csak naplóbejegyzéseket fog pakolni a squid minden indításakor (vagy azt sem), de gond nélkül müxik tovább a webelérés. Ha szerkeszteni szeretnénk a squidGuard configját (ami logikus, különben miért telepítettük?), akkor a benne lévő kommentek nagyon jó segítséget nyújtanak (időintervallumra korlátozás, IP-korlát stb.). Ha valaki a komolyabb lehetőségekre is kíváncsi, akkor a squidguard dokumentációja könnyen értelmezhető, sok példával van megáldva.

  7. A squid és a squidGuard házasítása: a squidguard-ot a squid hívogatja minden kapcsolatnál, tehát ha squidnek nem mondjuk meg hogy van mögötte egy squidguard is, akkor ... de ez nyilvánvaló. A squid.conf állományba bele kell tenni ezt a sort:
    url_rewrite_program /usr/bin/squidGuard

    Így már menni fog :)
    Szívás: Néhány régi howto a 2.5 előtti squid-ekre ezt a paramétert írja:

    redirect_program /usr/bin/squidGuard

    Az új squid-ek ezt már nem használják, nem is ismerik.

  8. A feketelista: számomra a squidguard legfontosabb előnye (és gyakorlatilag az egyetlen ok amiért feltettem), hogy lehetőség van olyan adatbázisok használatára feketelistaként, melyek igen nagy arányban ismerik a spyware-terjesztő, vagy vírust terjesztő, vagy agresszív oldalakat. Ezek blokkolása önmagában is komoly vírusvédelmet jelent a belső hálózat windows-ai számára. Ilyen adatbázis letülthető például innen.
  9. Feketelista átadása a squidguard-nak: a feketelista letöltése után azt kicsomagoljuk, és kitesszük a
    /var/lib/squidguard/db

    könyvtárba. Ez ugyanis az alapértelmezett adatbázis könyvtár (kivéve ha squidGuard.conf-ba mást írsz).
    Szívás: Könnyű elfelejteni, hogy a listákra a megfelelő jogokat meg kell adni a proxy usernek. Adjuk hát meg a megfelelő jogosultságokat:

    chown -R proxy:proxy /var/lib/squidguard/db
    chmod -R =rwsr-xr-x /var/lib/squidguard/db

    Most pedig a squdGuard.conf-ban definiálunk egy szabályt, amivel a spyware terjesztő oldalakat blokkoljuk:

    
    # definialjuk a szabalyt
    dest spyware {
        domainlist   spyware/domains
        urllist      spyware/urls
    }
    
    # ervenybe leptetjuk a szabalyt
    acl {
        default {
            pass !spyware all
            redirect http://localhost/blocked.html
        }
    }
    

    A 'redirect' szó utáni URL tetszés szerinti helyre mutathat, az itt látható blocked.html-t én készítettem a felhasználók tájékoztatására.
    Természetesen ilyen módosítás után mindig:

    /etc/init.d/squid reload

    Szívás!!!: A squidguard alapesetben a db formájú listákat szereti, de elég okos ahhoz hogy kezeljen szövegeseket is. A letöltött listáról látható, hogy síma szöveges file-ok. Ha így hagyjuk, akkor a squid reload-ja után (vagy az első webes kérés után) a proxy gépnek a load-ja az egekbe szökik (ha van fennt egy nagios, akkor az elkezdi dobálni a "Load Critical" leveleket), és gyakorlatilag megszűnik a web elérés. Mindennek az az oka, hogy elfelejtettük db-formára hozni a listánkat és a squidguard a szöveges adathalomban keres illeszkedést. Nagyon. Tehát a listákat hozzuk db formára így:

    squidGuard -C /var/lib/squidguard/db/*
    chown -R proxy:proxy /var/lib/squidguard/db
    chmod -R =rwsr-xr-x /var/lib/squidguard/db

    Ezt követően már szépen dolgozik... :)

Egyelőre ennyi. Folytatása következik (ha lesz egy kis időm) a squidclam -el, ami vírusellenőrzést végez a letöltéseken. Félek ez lassítani fog... Meglátjuk.

Hozzászólások

Tipp:

Gondolom kívülről az iptables nem enged konnetálni a 3128-ra, de ettől függetlenül nem baj, ha egy konfig annyira szigorú, amennyire az csak lehet. Ezért az

acl all src 0.0.0.0/0.0.0.0

sort hagynám békén és valami ilyesmit tennék alá

acl helyi_halo src 192.168.0.0/24

(ahol a 192.168.0.0 a helyi hálózat) és engedélyezném ezt

http_access allow helyi_halo

az

acl all src 0.0.0.0/0.0.0.0

pedig hagynám alapértelmezetten deny-n, mert ugye ez a mindenki mindenhonnan.

--
trey @ gépház

Valóban. A kezdeti config-example -k alapján került bele, és bennt is felejtettem (egyébként a saját configom összetettebb az írtaknál, de itt a célom az alapok leírása volt). Még jó hogy az iptables tiltja kívülről a 3128-at, különben akkora open-proxy-m lenne mint egy mozdony :). Módosítottam a bejegyzést, és a saját configjaimat is. Köszönöm.

---
"A megoldásra kell koncentrálni nem a problémára."

Köszönöm! Nagyon hasznos volt számomra, várom a folytatást! :)
--
\\-- blog --//

Üdv !

Nekem speciel a 'squidGuard -C all' -ra csinálta meg a konverziót. A fent leírt módszer nem ment Ubuntu 9.04 alatt.

Szintén Ubuntu 9.04 alatt a squid-nak a "redirect_program /usr/bin/squidGuard" paraméter kellett. "url_rewrite_program /usr/bin/squidGuard" nem ment, hibaüzenet lett belőle.

http://kovisoft.hu

Valami miatt nekem nem szűr.
Jogosultságok ok. A db file-okra van teljes jog. A logban írja, hogy a squidguard várja a kéréseket, ennek ellenére a két tiltott oldal amit megadtam simán bejön.

Mi lehet a gond? Mintha a squid nem kérdezné le a szabályokat. A saját szabályai szerint megy csak...

Nos most már működget, de egy valami nem megy.

Mégpedig, hogy hiába adok meg a squidguard-nak user-t nem veszi figyelembe... mintha nem is olvasná ki.
AD-nől auth-ol ami a squid szerint megy is, hiszen csak a csoport tagjai netezhetnek. De szeretnék bizonyos oldalakat blokkolni 6-8 user kivételével. Ezeket a usereket venném fehér listára... De nem akarja a megadott file-ból kiolvasni...

Ötlet?

Azt hittem végre jól működik erre nem.

Szóval már szinte minden megy. Blokkol adott oldalt adott user-ekre és adott időpontba.. tiszta jó, de!!!

Ha a tiltott időn kívül, azaz amikor minden oldal elérhető lenne, akkor pár lekérés után segfault-al elszáll a squid a squidguard miatt. :(

log részlet:
Jan 18 16:25:52 backup kernel: [37370.007993] squidGuard[7197]: segfault at 8 ip 0804c5ad sp bfabf868 error 4 in squidGuard[8048000+e000]
Jan 18 16:25:52 backup squid[7196]: The url_rewriter helpers are crashing too rapidly, need help!
Jan 18 16:25:52 backup squid[7059]: Squid Parent: child process 7196 exited due to signal 6
Jan 18 16:25:55 backup squid[7059]: Squid Parent: child process 7239 started
Jan 18 16:25:57 backup kernel: [37374.988034] __ratelimit: 9 messages suppressed
Jan 18 16:25:57 backup kernel: [37374.988034] squidGuard[7240]: segfault at 8 ip 0804c5ad sp bf93a668 error 4 in squidGuard[8048000+e000]
Jan 18 16:25:57 backup squid[7239]: The url_rewriter helpers are crashing too rapidly, need help!
Jan 18 16:25:57 backup squid[7059]: Squid Parent: child process 7239 exited due to signal 6
Jan 18 16:26:00 backup squid[7059]: Squid Parent: child process 7282 started

Nekem is ezt mondja, csak a squidGuar-od kihagyja...:
Mar 5 11:18:13 mailserv squid[944]: Squid Parent: child process 947 started
Mar 5 11:18:13 mailserv squid[947]: The url_rewriter helpers are crashing too rapidly, need help!
Mar 5 11:18:13 mailserv squid[944]: Squid Parent: child process 947 exited due to signal 6
Mar 5 11:18:16 mailserv squid[944]: Squid Parent: child process 960 started
Mar 5 11:18:16 mailserv squid[960]: The url_rewriter helpers are crashing too rapidly, need help!
Mar 5 11:18:16 mailserv squid[944]: Squid Parent: child process 960 exited due to signal 6
Mar 5 11:18:19 mailserv squid[944]: Squid Parent: child process 968 started
Mar 5 11:18:20 mailserv squid[968]: The url_rewriter helpers are crashing too rapidly, need help!
Mar 5 11:18:20 mailserv squid[944]: Squid Parent: child process 968 exited due to signal 6

Üdv:
beze

Üdv!
Jó kis leírás, köszi!
Viszont nekem valamiért nem megy...
Valamiért az acces logban mindig ezt kapom:
1267617441.182 0 10.0.1.153 TCP_DENIED/403 1430 GET http://index.hu/ - NONE/- text/html
1267617812.443 0 10.0.1.153 TCP_DENIED/403 1430 GET http://index.hu/ - NONE/- text/html
1267617814.215 0 10.0.1.153 TCP_DENIED/403 1430 GET http://index.hu/ - NONE/- text/html
1267617817.265 0 10.0.1.153 TCP_DENIED/403 1430 GET http://index.hu/ - NONE/- text/html
1267617821.136 1 10.0.1.153 TCP_DENIED/403 1438 GET http://index.hu.com/ - NONE/- text/html
1267617828.614 1 10.0.1.153 TCP_DENIED/403 1434 GET http://www.hup.hu/ - NONE/- text/html
1267617942.401 0 10.0.1.153 TCP_DENIED/403 1436 GET http://www.hwsw.hu/ - NONE/- text/html

A konfigon csak a helyi_lan-t módosítottam:
acl helyi_halo src 10.0.0.0/255.255.0.0

http_access allow localhost
http_access deny all
http_access allow helyi_halo

Hol rontottam el?

Thx:
beze

Szép leírás! (Meg jegyeztem magamnak .:))

Nem akar mukodni...
squidguard.conf:


dest fb {
domainlist facebook/domains
}

acl {
default {
pass !fb all
redirect http://localhost/tiltott.html
}}

domains file:
facebook.com
www.facebook.com
index.hu

Legeneralja a


/usr/bin/squidGuard -C all
chown -R proxy:proxy /var/lib/squidguard/db
chmod -R =rwsr-xr-x /var/lib/squidguard/db

log file:
2011-02-24 13:29:41 [27368] New setting: dbhome: /var/lib/squidguard/db
2011-02-24 13:29:41 [27368] New setting: logdir: /var/log/squid
2011-02-24 13:29:41 [27368] destblock good missing active content, set inactive
2011-02-24 13:29:41 [27368] destblock local missing active content, set inactive
2011-02-24 13:29:41 [27368] init domainlist /var/lib/squidguard/db/facebook/domains
2011-02-24 13:29:41 [27368] create new dbfile /var/lib/squidguard/db/facebook/domains.db
2011-02-24 13:29:41 [27368] squidGuard 1.4 started (1298550581.148)
2011-02-24 13:29:41 [27368] db update done
2011-02-24 13:29:41 [27368] squidGuard stopped (1298550581.165)

Es ennyi...Utana ugyanugy szepen bejonnek a tiltsra rakott oldalak...
A log fileban semmi nem latszik (tail -f figyeli)

squid restart volt.
--
http://www.micros~1

A squidguard.conf -ban csak annyi van amennyit írtál?
A file-ok jogosultságaira érdemes ránézni. Nekem volt olyan, hogy a chown -R =rwsr-xr-x nem ment, de a chown -R 4755 pedig működött. Ennek okát nem tudom, de most nem is számít.

Esetleg meg lehet próbálni a könyvtárra irányítani a squidGuard -C -t, hátha rossz helyen keresi.

---
"A megoldásra kell koncentrálni nem a problémára."

Sziasztok,

iskolában melyik blacklist-ot kell/érdemes használni, hogy megfeleljünk a 2014-es "szűrőszoftver a kiskorúak védelmében" törvénynek?

A törvényt nem ismerem, de ha a józan parasztit veszem, akkor az összeset :)

Komolyan:
Innen választanám a MESD-et.
Ebből a gyermekek miatt kell (_szvsz_) a
- porn
- drugs
- gambling

Neked technikailag legalább:
- aggressive
- redirector
- spyware

---
"A megoldásra kell koncentrálni nem a problémára."

Köszönöm válaszod,

csak arra gondoltam, hogy hátha erősebb pl. a Shalla - ha már üzletileg fizetős (remélem jól értelmeztem, hogy mezei iskoláknak ingyenes)

Azért nincs tapasztalatom, mert eddig norton family volt, de annak több volt a hátránya, mint az előnye, ezért szeretnék váltani.