Követelmények:
- működjön
- klienseket ne kelljen átkonfigurálni
- ne kelljen kernelt fordítani
- lehetőleg ne kelljen semmit fordítani
- lehetőleg ne kelljen semmit kívülről telepíteni
- cache-elni egyelőre nem akarunk
A cégnél van egy tűzfal (CentOS) beállított csomagszűréssel. Sajnos mivel ez tartalomszűrésre soványka, valami proxy kellene, ami okosan tudja lepattintani a nem megfelelő kéréseket. Szerencsére CentOS-ban van egy Squid nevű alkalmazás, ami erre (is) való. Ezt a címben már el is spoilerkedtem, úgyhogy haladjunk.
Adatok: squid a 3128-as default porton fog futni. Kliensek eth0 felől vannak, IP tartományuk: 172.16.0.0/16. Cég saját ip-tartománya az 1.2.3.0/24, erre nem akarunk proxy-t.
Böngészőket nem akarjuk piszkálni, úgyhogy transzparens proxy-t akarunk. Ehhez kell módosítani a tűzfalon ezt-azt.
Engedjük, hogy egyáltalán kapcsolódhassanak a proxy-nkhoz:
#> iptables -I INPUT _megfelelo_hely_ -i eth0 -s 172.16.0.0/16 -p tcp --dport 3128 -j ACCEPT
#> iptables -I OUTPUT _megfelelo_hely_ -o eth0 -d 172.16.0.0/16 -p tcp --sport 3128 -j ACCEPT
80-as portot elkapjuk, és beletoljuk squid-be:
#> iptables -t nat -I PREROUTING _megfelelo_hely_ -i eth0 -p tcp -d ! 1.2.3.0/24 --dport 80 -j REDIRECT --to-port 3128
CentOS-on, ha használjuk az iptables service-t, akkor mentjük a beállítást (vagy más módon rögzítjük):
#> service iptables save
Ha eddig mindent jól csináltunk, akkor most garantáltan nem tudnak a felhasználók netezni, mert a squid még nem fut. Vagy ha fut is, nincs bekonfigolva. Akkor most vagy siessünk, vagy inkább először a squid-et állítsuk be.
A következő belállításokat blokkokba szerveztem, mindegyiket a saját helyére kell pakolni a konfigfájlban.
Mindenekelőtt ugye a transzparens proxy beállításai:
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
ACL-ek. Figyeljük a potenciális klienseket (CLIENTS), a válaszként kapott tartalom típusát (av_rep), az esetleg letöltendő filenév kiterjesztését (av_cd), a kérés típusát (audio, video) és a kérés URL-jét (audio_url, video_url). Az av_rep nagyon fontos, hiszen sokszor csak a válaszból derül ki, mit is töltene a felhasználó. Vedd észre, hogy az av_rep esetén rep_mime_type, a többi esetben req_mime_type a kulcsszó.
acl CLIENTS src 172.16.0.0/255.255.0.0
acl av_rep rep_mime_type -i ^application/(x-)?streamingmedia$
acl av_rep rep_mime_type -i ^video/
acl av_rep rep_mime_type -i ^audio/
acl av_rep rep_mime_type -i ^application/(x-)?pncmd$
acl av_rep rep_mime_type -i ^application/(x-)?ogg$
acl av_rep rep_mime_type -i ^application/vnd.ms.wms-hdr.asfv1$
acl av_rep rep_mime_type -i ^application/x-mms-framed$
acl av_rep rep_mime_type -i ^(application|text|image)/vnd\.rn-
acl av_cd rep_header Content-Disposition -i \.(asx|asf|flv|wmv|mpeg|mpg|mov)
acl av_cd rep_header Content-Disposition -i \.(mp3|ram|rm|ogg)
acl video req_mime_type -i ^application/(x-)?streamingmedia$
acl video req_mime_type -i ^video/
acl video_url url_regex -i \.(asx|asf|wmv|mpeg|mpg|mov|flv|avi)$
acl video_url url_regex -i /video/
acl audio req_mime_type -i ^audio/
acl audio req_mime_type -i ^application/(x-)?pncmd$
acl audio req_mime_type -i ^application/(x-)?ogg$
acl audio req_mime_type -i ^application/vnd.ms.wms-hdr.asfv1$
acl audio req_mime_type -i ^application/x-mms-framed$
acl audio req_mime_type -i ^(application|text|image)/vnd\.rn-
acl audio_url url_regex /SmpDsBhgRl
acl audio_url url_regex -i \.(mp3|m3u|ram|rm|ogg)$
A kérésekeket szabályozzuk a fenti ACL-ekkel. Nyilván a tartalom tiltása a kiensek beengedése elé kell kerüljön, mindez pedig a deny all elé:
http_access deny video
http_access deny audio
http_access deny video_url
http_access deny audio_url
http_access allow CLIENTS
#...http_access deny all
Szabályozzuk a lehetséges válaszokat is, ezt külön kell (http_reply_access allow all elé, ha van olyan):
http_reply_access deny av_rep
http_reply_access deny av_cd
Cache: azt beszéltük, hogy nem kell (pl. mert nincs tárhely, erőforrás)
cache_dir null /null
Ha megvolt, mehet a squid:
service squid condrestart
A fennt használt ACL-ek persze nem kőbe vésettek, mindenki variálhatja saját igényeinek megfelelően.
Egyelőre úgy néz ki, itt működik.
Kiegészítés: nem részleteztem, csak említettem, hogy ezen kívül már működött egy szigorúan beállított netfilter tűzfal. Mágikus portokra kapcsolódó stream-elgetés tehát eleve kizárt.
Kiegészítés 2: beraktam URL szűrést *.flv-re és *.avi-ra, mert egyes oldalak nem vacakolnak a Content-Type mezővel.
Kiegészítés 3: application/vnd.ms.wms-hdr.asfv1 és application/x-mms-framed, valamint mime regexpekhez -i kapcsoló (doksi nem írja, de squid megeszi)
Kiegészítés 4: új MIME-k, Content-Disposition, regexp-ek tömörítése.
- siposa blogja
- A hozzászóláshoz be kell jelentkezni
- 2704 megtekintés
Hozzászólások
Köszi, jól jön ez az írás!
-- pgergely --
- A hozzászóláshoz be kell jelentkezni
Ha tenyleg arra mentek, hogy dogozzanak a dogozok, akkor
ifconfig eth0 down
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
Jó ötlet, javasolni fogom a vezetőségnek :)
- A hozzászóláshoz be kell jelentkezni
nem vagyok verprofi, de nem jobb lenne ha forditva csinalnad?
ersd: felsorolni amit lehet, html php cgi stb
mert pl: van olyan webserver ami "unknown" nak nezi pl az mp3 at, vagy a rpm-t (red hat pkg manager) -t real audio nak
- A hozzászóláshoz be kell jelentkezni
Attól tartok, túl sok problémát vetne fel a felhasználók felé, hogy hirtelen nem tudnak bizonyos dolgokat letölteni, ami nekem nem jutott az eszembe. Időt pedig keveset tudok áldozni erre a gépre, mert nem kifizetődő (külsősként tartjuk karban).
A lényeg, hogy elérjék a netet, de ne tudják a sávot foglalni alapvetően "csúnya" dolgokkal.
- A hozzászóláshoz be kell jelentkezni
Nekem erőteljesen úgy tűnik hogy ezen szabályok mellett még a youtube és tsai simán elmennek. :(
- A hozzászóláshoz be kell jelentkezni
Nem szabadna, mert a "video/*" szabályok megfogják.
- A hozzászóláshoz be kell jelentkezni
Akkor viszont nállam lehet a hiba. Lehet hogy nincs belefordítva a mime_header vizsgálata a sarge féle squidbe?
- A hozzászóláshoz be kell jelentkezni
Nem tudom mi lehet a hiba, nekem ez van az access.log-ban:
1181643088.725 500 192.168.111.1 TCP_DENIED/403 1424
GET http://youtube-371.vo.llnwd.net/d1/00/60/NVOFmu2ZIqI.flv -
DIRECT/87.248.217.84 text/html
Itt úgy látszik, az URL-re vonatkozó szabály fogta meg.
Szerk.: de nem az, mert *.flv re nincs szabály. Az av_rep állítja meg, tehát a válasz szűréséhez kell támogatás a squid-be a Te esetedben.
- A hozzászóláshoz be kell jelentkezni
application/x-shockwave-flash az swf-é. Viszont azt nem tudom, hogy a youtube player-e az flv-t kéri le, vagy valami más módszerrel szedi a videót. De az biztos, hogy nem a böngészőn keresztül, mert az oldal adatai -> media alatt flv file nem volt listázva.
- A hozzászóláshoz be kell jelentkezni
Az ilyen hasznos okosságokat miért nem cuppantod rögtön a Wiki-be? S utána itt, vagy akárhol megemlíted (linkkel, nyilván) hogy van ilyen új cikk, s Te szerezted...
- A hozzászóláshoz be kell jelentkezni
Nincs wiki hozzáférésem, úgyhogy ide írtam. Ha valaki érdemesnek találja berakni, tegye be nyugodtan.
- A hozzászóláshoz be kell jelentkezni