Az előző részben ismertetett proxy program kiválóan használható kis hálózatok esetén, viszont a lekérdezések számát növelve csökken a kiszolgálás minősége, mivel a wwwoffle nincs felkészítve nagyszámú kérés közel egyidejű kiszolgálására. A Squid programot állandó kapcsolatra tervezték, bár megvan benne az offline működés lehetősége, mégis az online összeköttetés jelenti a hazai pályát. A konfigurációs állományát átfutva rögtön látszik, hogy nem lesz könnyű hamar elvégezni a megfelelő beállításokat, szerencsére az alapértelmezett állomány tulajdonképpen működőképes, néhány apróbb beállítást kell elvégezni, hogy számunkra is megfelelő legyen. A proxy egy jól nevelt rendszerprogramhoz illően általában démonként fut, megfelelő parancssori paraméterekkel viszont előtérben való futásra is kényszeríthető. Induláskor feldolgozza a /etc/squid.conf állományt, hogy az általunk szükségesnek gondolt működési körülményeknek eleget tegyen, ugyanakkor különféle paraméterekkel ettől eltérő működésre is bírhatjuk:
-a port
Megadhatjuk egy HTTP port számát, amelyet használni
fogunk, alapesetben ez 3128.
-d szint
A hibakövetés szintjét állíthatjuk be, amelyet az stderr
kimenetre fog írni a program.
-f file
A /etc/squid.conf fájltól eltérő konfigurációs állomány
használata.
-h
Egy összefoglaló oldal a parancssori paraméterekről.
-k reconfigure|rotate|shutdown|interrupt|kill|debug|check|parse
Különféle parancsokat adhatunk a futó démonnak.
-s
A naplózáshoz a syslog démont használja.
-u port
Megadhatunk egy port számot az ICP protokollhoz, amely
alapesetben 3130. Ha nullát adunk meg, akkor letilthatjuk az ICP forgalmazást.
-v
A Squid program verzióját írja ki.
-z
Létrehozza a megfelelő könyvtárban a gyorsítótár funkcióhoz
használt könyvtárszerkezetet. Ha létezik, akkor törli azt.
-C
Ezt megadva a Squid figyelmen kívül hagyja a legtöbb szignált.
-D
Letiltjuk az induláskor lefutó DNS ellenörzést. Ezt általában
offline környezetben érdemes használni.
-N
Nem démon módban indul a program.
Láthatjuk, hogy a Squid lényegében a konfigurációs állományát használja fel a
tevékenységeihez, mivel a parancssori paraméterekkel eléggé szegényesek a
lehetőségeink. Ezért keressük meg a /etc/squid.conf fájlt és nyissuk meg
valamilyen editorral (például mcedit).
Legelső paraméter, amit
átállíthatunk, az a proxy HTTP portja, amelyet a
http_port 3128
szöveg jelez. A 3128 a Squid alapértelmezett portja, ezt általában szokás a hazánkban inkább elterjedt 8080 számú portra átírni.
Kisebb proxy-k nem szokták használni, de a nagy forgalmú helyeken használják az ICP illetve HTCP protokollokat, amelyek rendre Internet Cacheing Protocol illetve Hyper Text Cacheing Protocol rövidítései. Ezen protokollokat használja a Squid a többi proxy szerverrel való kapcsolattartáshoz, hogy a helyi gyorsítótárban nem található oldalakat például nem a lassabb külföldi vonalakat terhelve kezdi leszedni, hanem megkérdezi a gyorsabb hazai kapcsolatokon található társproxy-szervereket, amelyeken lehet, hogy megtalálható a kérdéses oldal.
icp_port 3130
htcp_port 4827
A fentiekkel összhangban megadható a többi proxy elérhetősége és típusa. Minden sort a cache_peer kulcsszóval kell bevezetni, amelyet a társproxy elérhetősége követ. Továbbá kijelölhetjük a megnevezett proxy szerver elérési módját, majd a HTTP és az ICP portokat. Ezeket követően megadhatunk különféle paramétereket.
cache_peer proxy.akarhol.hu parent 3128 3130 login=usernev:jelszo
Általában a parent kulcsszót használjuk, ez jelenti a hierarchiát a proxy
szerverek között. Értelemszerűen a parent a mi gyorsítótárunk felett álló
szervert jelenti.
Meg kell adni a Squid által lefoglalt memória maximális
méretét. Fontos, hogy mindenképpen sokkal több memória legyen a gépben, mert ha
a rendszermag swap használatára kényszerül, akkor nagyságrenddel lassabb lesz a
kiszolgálás. Általános szabály, hogy a gépben hosszabb idejű működés után
megnézzük, hogy mennyi memória használatos lemezgyorsítótárnak (free parancsnál
a cached
sor) és ennek felét nyugodtan használhatjuk, ha csak a squid fut,
egyébként ennél kevesebbet használjunk.
cache_mem 8 MB
Érdemes meghatározni, hogy mekkora legyen egy objektum maximális mérete amelyet már nem ment le a gyorsítótárba. Ennek alapértéke 4M, de ha például nem szeretnénk, hogy 512kBájt méretnél nagyobb objektumok a lemezen tárolva legyenek, akkor ezt itt adhatjuk meg.
maximum_object_size 512 kB
Ennek ellentéte az a direktíva, amely meghatározza, hogy mekkora az a legkisebb objektum, amelyet letárolunk a lemezen. Ennek alapértéke 0 Bájt, ezt hagyhatjuk így is, de beállíthatunk más értéket is.
minimum_object_size 128 B
A legfontosabb paraméter a gyorsítótár helyének és méretének meghatározása. Érdemes külön partícióra tenni, illetve a legjobb egy külön lemezegységre tenni, amely lehetőleg SCSI legyen, vagy lehet akár RAID lemeztömb is. Hm, legtöbb alkalmazás helyén erre sajnos nincs anyagi lehetőség, úgyhogy elégedjünk meg egy könyvtárral vagy egy külön partícióval... :) Fontos meghatározni a gyorsítótár maximális méretét, amelyet MBájt mértékegységgel kell megadni. A Squid az itt megadott méretig fogja elfoglalni a szabad területet, viszont előre nem foglalja le. Ebből sajnos menet közben kellemetlen meglepetések várhatnak minket, mégpedig a szabad hely meglepetésszerű eltünése, kivéve, ha külön fájlrendszerre raktuk a gyorsítótárat.
cache_dir ufs /var/squid/cache 1024 256 256
Nagyon fontos megadni a Squid naplófájlok helyét. Ha túl részletes naplózást állítunk be, akkor észrevehetjük, hogy a naplók vég nélkül nőnek nagyon hamar betöltve a rendelkezésre álló helyet. Fontos ezért gondoskodni a naplóállományok rendszeres karbantartásáról, archiválásáról, illetve a naplók helyének megfelelő kijelöléséről, nehogy fontos dolgok vesszenek el a hely elfogyásakor. Ezen okok miatt is részesítsük előnyben a külön partíció használatát.
cache_log /var/squid/log/cache.log
cache_store_log
/var/squid/store.log
Érdemes megadni az anonymous FTP kapcsolatok esetén használt jelszó helyett megadott email címet. Sok FTP szerver nem kezd ezzel semmit, de néhány szerver létező címet vár. Ez utóbbi esetben létező címet kell megadni, vagy felvenni a mail alias nevek közé a squid felhasználót is.
ftp_user squid@valahol.hu
Érdemes megnézni a timeout paramétereket, mert jelentősen terhelt vonalak esetén lehet, hogy meg kell növelni ezeket.
connect_timeout 120 seconds
peer_connect_timeout 30
seconds
Ez utóbbit gyors vonalak esetén érdemes lecsökkenteni, hogy elkerüljük a felesleges várakozást. Ha kellemesen gyors vonalon két-három másodperc alatt nem válaszol a társproxy-szerver, akkor értelmetlen tovább várni. Viszont lassú, illetve csomagvesztéses hálózat esetén lehet, hogy az idők növelése a célszerűbb. Ezen paraméterek optimális értékét a gyakorlatban kell kitapasztalni.
Nagyon fontos része a proxy programnak az elérhetőségének korlátozása. A Squid nagyon kellemesen konfigurálható ebből a szempontból, mivel nem csak a tiltást illetve engedélyezést lehet célként megadni, hanem akár a sávszélességet korlátok közé is lehet szorítani.
Nagyon sok paraméter alapján lehet szűrést végezni. Ezeket az "acl" kulcsszó (Access Control List) vezeti be. Ezeket követi az adott lista általunk megadott neve, majd az acl típusa:
src Forrás IP címe, például:
acl sajat01 src 10.1.1.1/30
acl sajat02 src 10.1.1.6-10.1.1.15/32
dst Cél IP címe, például:
acl sajat03 dst 192.168.1.5/32
acl sajat04 dst 192.168.1.5-192.168.2.34/32
srcdomain Forrás neve, például:
acl sajat05 srcdomain valahol.hu
dstdomain Cél neve, például:
acl sajat06 dstdomain valahol.hu
srcdom_regex A forrás nevére illesztett regexp eredménye, például:
acl sajat07 srcdom_regex user.*valahol\.hu
dstdom_regex A cél nevére illesztett regexp eredménye, például:
acl sajat08 dstdom_regex sex
time Idő, például:
acl sajat09 time M 10:00-12:00
url_regex A kért URL szövegére illesztett regexp eredménye,
például:
acl sajat10 url_regex ^ftp.*porn
urlpath_regex A kért URL út szövegére illesztett regexp eredménye,
például:
acl sajat11 urlpath_regex \.mpg$
port A megadott portok, például:
acl sajat12 port 3128 8080
acl sajat13 port 1024-2048
proto A megadott protokollok, például:
acl sajat14 proto HTTP
method A megadott metódusok, például:
acl sajat15 method POST
browser A használt böngésző azonosító szövegére illesztett
regexp eredménye, például:
acl sajat16 browser MSIE
maxconn Egyidejüleg engedélyezett kérések száma, például:
acl sajat17 maxconn 5
A fenti acl listák elkészítése után még nincs elvégezve a munka, a
"http_access" direktívával kell beállítani, hogy mely acl számára engedélyezzük,
vagy tiltjuk a proxy elérhetőségét. Például:
http_access allow sajat01
http_access deny sajat02
http_access allow sajat03
http_access deny sajat04
http_access allow sajat05
http_access deny sajat06
http_access allow sajat07
http_access deny sajat08
http_access allow sajat09
http_access deny sajat10
http_access allow sajat11
http_access deny sajat12
http_access deny sajat13
http_access allow sajat14
http_access deny sajat15
http_access deny sajat16
http_access deny sajat17
http_access deny all
Ehhez a listához kell még egy
acl all src 0.0.0.0/0.0.0.0
sor az acl listánál.
Amikor a Squid kap egy kérést, akkor végigszalad a listán és ha az adott sor acl szabálya igaz, akkor "allow" esetén engedélyezi, ha "deny" akkor tiltja a kapcsolatot. Ha nincs illeszkedés a listában, akkor az utolsó sor a döntő: jelen esetben tiltva van a kapcsolat. Nézzük sorról-sorra:
Érdemes használni a DELAY POOL névvel illetett sávszélesség korlátozó direktívákat. Ezeket használva a http_access sorokon túljutott kérések újabb akadályokkal találkoznak. Ha illeszkednek egy ilyen korlátozásra, akkor a sávszélességből csak adott szeletet használhatnak majd.
Alapvetően meg kell határozni a különféle korlátozások számát.
delay_pools 3
Ezek után meg kell adni a használt korlátozás osztályát. Amelyek szerint az első korlátozás hármas típusú, a második egyes illetve a harmadik kettes.
delay_class 1 3
delay_class 2 1
delay_class 3
2
Ezt követi a korlátozások paraméterezése. Az első paraméter az adott korlátozás száma. A három osztály szerint meg kell különböztetni a három paraméterezést. Az osztályok szerint a következő formátumot kell használni
delay_parameter 1 osszes
delay_parameter 2 osszes
halozati
delay_parameter 3 osszes halozati egygep
ahol az "osszes" a teljes forgalom, a "halozati" a 255.255.255.0 hálózati maszkba eső gépek forgalma az "egygep" pedig a 255.255.255.255 hálózati maszkba eső gép forgalma.
A fentiek értelmében a második késleltetés egyes típusú, így egy paramétere van, vagyis 1600 Bájt/másodperc sávszélességet enged, és egyszerre maximum 3200 Bájt adatot szed le a kért objektumból.
delay_parameter 2 1600/3200
A harmadik késleltetés a kettes típusú, két paramétere van, a teljes forgalom nincs korlátozva, viszont az alhálózat 3200 Bájt/másodpercre van korlátozva és egyszerre maximum 6400 Bájtot tölt le.
delay_parameter 3 -1/-1 3200/6400
Az első késleltetés hármas típusú, három paramétere van, az első kettő azonos funkciót lát el, mint az előző, a harmadik egy gép korlátozása, vagyis 512 Bájt jut egy gépre másodpercenként és egyszerre 2048 Bájt terheli a kifelé irányuló vonalat.
delay_paramter 1 1600/3200 800/1600 512/2048
Amint megvannak a paraméterezések, következik az engedélyezés. Amelyik kérés túljutott a http_access sorokon (és már-már kezd örülni, hogy hipp-hopp kiszolgálja a kérést :) még a késletetést engedélyező sorokon is túl kell esnie.
delay_access 1 allow sajat04
delay_access 1 deny all
delay_access 2 allow sajat11
delay_access 2 deny all
delay_access 3 allow sajat09
A fenti sorok például a sajat04 acl sorba eső kéréseket beleirányítja az első korlátozásba. Minden más kikerüli az első korlátot.
A második korlátozásba a sajat11 kerül, vagyis például vállalati szinten maximálisan 1.6 kBájt/mp sebességgel lehet mpg állományokat letölteni.
A harmadik korlátozásba akkor jut egy kérés, ha 10 és 12 óra között kapcsolódik.
Reménykedek benne, hogy sikerült felkeltenem az érdeklődést a Squid iránt. A
program működésével kapcsolatos fórum például a squid-users@ircache.net
levelezőlista, a hibák bejelentésére a squid-bugs@ircache.net illetve az egyéb
témákban a squid@ircache.net cím használható.
A következő részben egy NEWS
proxy programot mutatok be, amelynek a neve leafnode.
Forrás: Pcworld/progworld