Egy erőteljes http/ftp proxy program: Squid

A Squid angol szó jelentése: tintahal, amely nagyon találó név egy proxy illetve gyorsítótár programra nézve. Egyszerűen egy kis vizuális fantázia kell csak, amint a Squid programot munka közben "elképzeljük".

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:

A http_access direktívával analóg módon használhatjuk az icp_access kulcsszavat is.

É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.

Frank O'Yanco

Forrás: Pcworld/progworld