Dokumentáció/SL9.3/Szolgáltatások/A Squid proxyszerver
A Squid, mint proxy gyorsítótár
A Squid proxy gyorsítótárként működik. Átirányítja az objektumkéréseket a kliensektől (ebben az esetben a webböngészőtől) a szerverhez. Amikor a kért objektumok megérkeznek a szervertől, továbbítja azokat a klienshez, viszont megtart egy másolatot a merevlemezes gyorsítótárban. Ennek az az egyik előnye, hogy ha több kliens is ugyanazt az objektumot kéri, akkor a merevlemezes gyorsítótárból szolgálhatók ki. Így a kliensek gyorsabban megkaphatják az adatokat, mintha újra a szerverhez kell fordulni. A megoldás csökkenti a szerverkapcsolat forgalmát, ami különösen az értékes (és relatíve lassú) távolsági kapcsolatok esetében fontos. A Squid a gyorsítótár kezelésén kívül még számos más funkciót is biztosít: több proxyszerver belső kommunikációt folytató hierarchiájával meg tudja osztani a terhelést, szigorú hozzáférés-vezérlési listák határozhatók meg a proxyt elérő kliensek számára, kiegészítő alkalmazások segítségével képes engedélyezni vagy letiltani bizonyos weboldalak elérését, valamint statisztikákat generál a leglátogatottabb weboldalakról a felhasználók böngészési szokásainak kiértékeléséhez. A Squid nem egy általános (mindenféle portra és forgalomra jó) proxy. Szinte kizárólag HTTP-kapcsolatokhoz használják. Támogatja az FTP, Gopher, SSL és WAIS protokollokat, de nem támogat más internetes protokollokat, például a RealAudio formátumot, az RSS-hírszolgáltatást vagy a videokonferenciákat. Mivel a Squid a különféle gyorsítótárak közötti kommunikációhoz csak az UDP protokollt képes használni, számos más multimédiás program sem támogatott.Néhány tény a proxy gyorsítótárakról
A Squid és a biztonság
A Squidet egy tűzfallal kombinálva nagyon jó megoldást lehet kialakítani, amely védi a belső hálózatot, ugyanakkor gyorsítja a web elérését. A tűzfal minden kliens számára megtiltja a külső szolgáltatások használatát, kivéve a Squidet. Webes kapcsolatok csak a proxyn keresztül építhetők fel. Ha a tűzfalkonfigurációnak része egy DMZ, akkor a proxynak ebben a zónában kell működnie. Ebben az esetben fontos, hogy a DMZ-ben levő összes számítógép a biztonságos hálózaton belül lévő gépeknek küldje el naplófájljait. Az átlátszó (láthatatlan) proxyk kialakítását később tárgyaljuk (Átlátszó proxy beállítása).Több gyorsítótár
Több proxy beállítható úgy, hogy képesek kicserélni az objektumokat egymás között. Ez csökkenti a rendszer összterhelését és megnöveli annak esélyét, hogy a keresett objektumot megtaláljuk a helyi hálózatban. Gyorsítótár-hierarchiák is kiépíthetők, amelyben a gyorsítótár az objektumkéréseket továbbíthatja azonos szinten lévő vagy felsőbb szintű gyorsítótáraknak is – az objektumokat pedig vagy a helyi hálózat egy másik gyorsítótárától vagy közvetlenül a forrástól kapja meg.Nagyon fontos, hogy a megfelelő topológiát válasszuk ki a gyorsítótár-hierarchiához, hiszen a cél az, hogy csökkentsük, ne pedig növeljük a hálózat összforgalmát. Egy nagyon nagy hálózatban például logikus lépés minden alhálózathoz beállítani egy proxyszervert és csatlakoztatni őket egy felsőbb szintű proxyhoz, és csak azt kötni az internet-szolgáltató szerveréhez (sőt, proxyszerveréhez).
Ezt a kommunikációt az UDP-protokollra épülő ICP (Internet Cache Protocol) kezeli. A gyorsítótárak közötti adatátvitel a TCP-re épülő HTTP (hypertext transmission protocol) használatával zajlik.
Az objektumlekéréshez legmegfelelőbb szerver megkereséséhez a gyorsítótár ICP-kérést küld az összes vele azonos szinten lévő proxynak. Ezek a kérdésre választ adnak, szintén az ICP protokoll használatával: ha megtalálták az objektumot, HIT kódot, ha nem, MISS kódot adnak vissza. Ha több HIT válasz is érkezik, akkor a proxyszerver a különböző tényezőktől függően – például hogy melyik gyorsítótár küldte leggyorsabban a választ, vagy melyik van legközelebb – eldönti, hogy mely szerverről töltse le az objektumot. Ha nem érkezik kielégítő válasz, akkor a kérést elküldi a felsőbb szintű gyorsítótárnak.
Internetes objektumok gyorsítótárazása
A hálózatban rendelkezésre álló objektumok nem mindegyike statikus. Sok a dinamikusan előállított CGI-oldal, a látogatószámláló és a titkosított SSL tartalmú dokumentum. Mivel az ilyen objektumok minden eléréskor megváltoznak, nem kerülnek be a gyorsítótárba.A kérdés csak az, hogy a többi objektum mennyi ideig tárolódjon a gyorsítótárban. Ennek meghatározására a gyorsítótár minden objektumához egy meghatározott állapot van rendelve. A web- és proxyszerverek az objektum állapotát úgy állapítják meg, hogy egy fejlécet – például »Utolsó módosítás« vagy »Lejárat« – és egy megfelelő dátumot rendelnek hozzá. Más fejlécek azt jelzik, hogy az objektumok nem helyezhetők a gyorsítótárba.
Ha a merevlemezen fogy a terület, a gyorsítótárban tárolt objektumok valamilyen algoritmus szerint lecserélődnek (pl: LRU, last recently used, legrégebben nem használt). Ez alapvetően azt jelenti, hogy a proxy törli azokat az objektumokat, amelyeket a leghosszabb ideje nem kért senki.
Rendszerkövetelmények
A legfontosabb dolog a rendszer maximális terhelésének meghatározása. Fontos odafigyelni a terhelési csúcsokra, mivel ezek sokszor a napi átlagnak akár több mint négyszeresei is lehetnek. Ha nem állnak rendelkezésre megfelelő adatok, akkor érdemes inkább túlméretezni a rendszert, mert ha a Squid lehetőségeinek felső határa közelében működik, az komoly visszaesést jelenthet a szolgáltatás minőségében. A következő fejezetekben fontosság szerint sorra vesszük a rendszertényezőket.Merevlemezek
A gyorsaság fontos szerepet játszik a gyorsítótárak világában, így ez a tényező külön figyelmet érdemel. Merevlemezek esetén az egyik legfontosabb tulajdonság a véletlen keresési idő (random seek time), amelyet ezredmásodpercben szokás megadni. Mivel a Squid által a merevlemezről olvasott vagy merevlemezre írt adatblokkok általában viszonylag kicsik, a merevlemez keresési ideje sokkal fontosabb, mint a tényleges adatátviteli sebesség. Proxynak szánt gépekbe valószínűleg jobb megoldás egy nagy forgási sebességű merevlemezt használni, mivel az író-olvasó fej adott helyre pozícionálása gyorsabban történik. A rendszer felgyorsítható több lemez egyidejű használatával vagy csíkozást (striping) használó RAID-tömbök alkalmazásával.
A lemezes gyorsítótár mérete
Egy kis gyorsítótárban kicsi a találat valószínűsége (vagyis az, hogy a kért objektum már megvan), mert a gyorsítótár könnyen betelik, így a legritkábban kért objektumok hamar újakra cserélődnek. Ha például 1 GB terület áll rendelkezésre a gyorsítótárhoz, és a felhasználók naponta csak 10 MB-ot használnak el, akkor több mint száz napig tarthat a gyorsítótár megtöltése.A szükséges gyorsítótárméret meghatározásának legegyszerűbb módja, ha számításba vesszük a kapcsolat maximális átviteli sebességét. 1 megabit/másodperces kapcsolat esetén a maximális átviteli kapacitás másodpercenként 125 kilobájt. Ha minden forgalom gyorsítótárba kerül, akkor egy óra alatt 450 MB kerülne bele. Feltételezve, hogy a forgalmat csak nyolc órán keresztül generálják, ez napi 3,6 GB-ot jelent. Mivel a kapcsolatot általában nem teljes terheléssel használják ki, tételezzük fel, hogy a gyorsítótárba kerülő teljes adatmennyiség megközelítőleg 2 GB. Emiatt a példában a Squid számára napi 2 GB lemezterület szükséges a böngészett adatok átmeneti tárolásához.
RAM
A Squid által igényelt memória mennyisége (RAM) arányos a gyorsítótárban tárolt objektumok számával. A Squid a gyorsítótár objektumhivatkozásait és a gyakran kért objektumokat a fő memóriában tárolja az adatlekérés további gyorsítása érdekében. Az írható-olvasható memória (RAM) sokkal gyorsabb, mint a merevlemez.A Squidnek más adatokat is a memóriában kell tárolnia, például a kezelt IP-címek táblázatát, egy pontos tartománynév-gyorsítótárat, a leggyakrabban kért objektumokat, a hozzáférés-vezérlési listákat, a puffereket és még sok mást.
Nagyon fontos, hogy elegendő memória álljon rendelkezésre a Squid számára, mivel a rendszerteljesítmény jelentősen romlik, ha a lemezt kell használni csereterületként. A cachemgr.cgi eszköz használható a gyorsítótár memória kezelésére. Az eszköz rövid ismertetése: cachemgr.cgi.
CPU
A Squid nem használja intenzív módon a processzort. A processzor terhelése csak a gyorsítótár tartalmának betöltésekor és ellenőrzésekor növekszik. Többprocesszoros gép használata nem növeli a rendszer teljesítményét. A hatékonyság növelése érdekében érdemesebb gyorsabb lemezeket venni vagy több memóriát használni.A Squid elindítása
A Squid előre be van állítva a SUSE LINUX rendszeren, így telepítés után azonnal elindítható. A problémamentes indulás érdekében a hálózatot úgy kell beállítani, hogy legalább egy névszerver és az internet elérhető legyen. Problémák akkor jelentkeznek, ha a rendszer betárcsázós kapcsolatotot használ dinamikus DNS-sel. Ilyen esetekben a névszervert pontosan meg kell adni, mivel a Squid nem indul el, ha nem talál DNS-szervert az /etc/resolv.conf fájlban.A Squid elindítására és leállítására szolgáló parancsok
A Squid elindításához a parancssorban root felhasználóként adja ki az rcsquid start parancsot. Az első elindításhoz meg kell adni a könyvtárstruktúrát a /var/squid/cache fájlban. Ezt az /etc/init.d/squid indítási parancsfájl automatikusan megteszi, de a művelet eltarthat néhány másodpercig vagy akár percekig is. Ha a jobboldalon zölddel megjelenik a done üzenet, akkor a Squid sikeresen betöltésre került. A Squid helyi működésének teszteléséhez a helyi rendszeren adja meg a böngészőben proxyként a localhost, portként a 3128 értéket.Ahhoz, hogy a felhasználók a Squiden keresztül érjék el az internetet, változtassa meg az /etc/squid/squid.conf konfigurációs fájl http_access deny all bejegyzését http_access allow all értékre. Ne felejtse azonban, hogy ezáltal a Squid mindenki számára teljesen elérhetővé válik. Éppen ezért ha kell, adjon meg a proxy elérését korlátozó hozzáférés-vezérlési listákat. Ezzel kapcsolatban további információ: Hozzáférés-vezérlési beállítások.Az /etc/squid/squid.conf konfigurációs fájl módosítása után a Squidnek újra be kell töltenie a konfigurációs fájlt. Ez az rcsquid reload paranccsal tehető meg. Ennek alternatívájaként az rcsquid restart paranccsal indítsa teljesen újra a Squidet.
Az rcsquid status paranccsal ellenőrizhető, hogy a proxy fut-e. Az rcsquid stop parancs leállítja a Squidet. Ez eltarthat egy ideig, mivel a Squid vár fél percig (ezt az /etc/squid/squid.conf fájlban megadott shutdown_lifetime érték szabályozza), mielőtt megszakítja a kliensekkel a kapcsolatot és az adatokat a lemezre írja.
Ha a Squid a sikeres elindítás ellenére rövid idő után megáll, akkor ellenőrizze, hogy van-e hibás névszerver-bejegyzés, vagy hogy nem hiányzik-e az /etc/resolv.conf fájl. A Squid a /var/squid/logs/cache.log fájlban naplózza az indítási hiba okát. Ha az Squidet automatikusan be kell tölteni rendszerindításkor, akkor a YaST futásiszint-szerkesztő segítségével engedélyezze a Squidet a kívánt futási szinteken. Lásd: Rendszerszolgáltatások (futási szintek)A Squid eltávolításakor nem törlődik a gyorsítótár-hierarchia, sem a naplófájlok. Ezek eltávolításához kézzel törölje a /var/cache/squid könyvtárat.Helyi DNS-szerver
Érdemes lehet még akkor is beállítani egy helyi DNS-szervert, ha nem saját maga felügyeli a saját tartományát. Ebben az esetben úgy fog működni, mint egy csak gyorsítási/átmeneti tárolási funkciót ellátó névszerver, és minden további beállítás nélkül képes lesz a DNS-kérések feloldására a root névszervereken keresztül (A BIND névszerver elindítása). A beállítás módja viszont attól függ, hogy az internet-kapcsolat beállítása során dinamikus DNS használatát választotta-e.- Dinamikus DNS
- Dinamikus DNS használata során általában a szolgáltató állítja be a DNS-szervert az internet-kapcsolat megteremtése közben, a helyi /etc/resolv.conf fájl pedig automatikusan módosításra kerül. Ez a fajta működés a MODIFY_RESOLV_CONF_DYNAMICALLY rendszerkonfigurációs változó YES értékre állításával érhető el. A YaST rendszerkonfiguráció-szerkesztő segítségével állítsa a változót NO értékre (lásd: A YaST sysconfig szerkesztője). Ezután adja meg a helyi DNS-szervert az /etc/resolv.conf fájlban a 127.0.0.1 IP-címmel a localhost számára. Ily módon a Squid indításkor mindig meg fogja találni a helyi névszervert.
- A szolgáltató névszerverének elérhetővé tétele érdekében a nevet az IP-címmel együtt meg kell adni az /etc/named.conf konfigurációs fájlban a forwarders pont alatt. Dinamikus DNS használatával ez automatikusan megvalósítható a kapcsolat létrehozása során, ha a MODIFY_NAMED_CONF_DYNAMICALLY változót a YES értékre állítja.
- Statikus DNS
- Statikus DNS esetén nincs automatikus DNS-beállítás a kapcsolatteremtéskor. Következésképp nem kell módosítani a sysconfig változókat, de az /etc/resolv.conf fájlban a fent leírt módon meg kell adni a helyi DNS-szervert. A szolgáltató statikus névszerverét és az IP-címet kézzel kell megadni az /etc/named.conf fájlban a forwarders pont alatt.
Az /etc/squid/squid.conf konfigurációs fájl
A Squid proxyszerver-beállítások az /etc/squid/squid.conf fájlban adhatók meg. A Squid első elindításakor nincs szükség a fájl módosítására, de a külső kliensek hozzáférése eleinte le van tiltva. A proxy a localhost számára elérhető. Az alapértelmezett port a 3128. Az előre telepített /etc/squid/squid.conf állomány részletes információt ad a beállításokról és számos példát is tartalmaz. Madjnem az összes bejegyzés # jellel kezdődik (megjegyzés); a lényeges információ a sor végén található. A megjegyzésben mintának megadott érték szinte mindig megegyezik az alapértelmezett értékkel, így pusztán a megjegyzéskarakterek eltávolításának a paraméterek megváltoztatása nélkül a legtöbb esetben nem sok hatása van. Ha lehetséges, akkor ne is a példát módosítsa, hanem szúrja be a beállításokat és a módosított paramétereket az alatta lévő sorba. Ily módon világosan láthatók az alapértelmezett értékek és a módosítások.Általános konfigurációs beállítások (kijelölés)
- http_port 3128
- Ez az a port, amelyen a Squid a klienskéréseket figyeli. Az alapértelmezett port a 3128, de a 8080 is gyakori. Ha kívánja, adjon meg több portszámot szóközökkel elválasztva.
- cache_peer hosztnévtípusproxy-porticp-port
- Itt adhat meg egy felsőbb szintű proxyt, ha a szolgáltató proxyját kívánja használni. Gépnévként adja meg a használanadó proxy nevét és IP-címét, a type (típus) pedig legyen parent (szülő). A proxy-port paraméterrel adja meg a portszámot, amelyet a felsőbb szintű proxy operátora is beállított a böngészőben történő használatra. Ez általában a 8080. Az icp-port értéke 7 vagy 0 legyen, ha a felsőbb szintű proxy ICP-portja nem ismert és használata a szolgáltató számára lényegtelen. Ezen felül érdemes megadni a default és a no-query beállítást is a portszámok után az ICP-protokoll használatának letiltására. A Squid ezután a szolgáltató proxyját illetően úgy működik, mint egy böngésző.
- cache_mem 8 MB
- Ez a bejegyzés adja meg, hogy mennyi memóriát használ a Squid a gyorsítótárakhoz. Az alapértelmezett érték 8 MB.
- cache_dir ufs /var/cache/squid/ 100 16 256
- A cache_dir paraméter adja meg az objektumok tárolására szolgáló könyvtárat. A végén levő számok a maximálisan felhasználható lemezterületet jelzik megabájtban, valamint az első és a második szinten található könyvtárak számát. Az ufs paramétert változatlanul kell hagyni. A rendszer alapértelmezés szerint 100 MB lemezterületet foglal a /var/cache/squid könyvtárban, és tizenhat alkönyvtárat hoz létre, amelyek mindegyike 256 további alkönyvtárat tartalmaz. A használandó lemezterület megadásakor hagyjon elegendő tartalék lemezterületet. Az ajánlott értékek: a minimum a rendelkezésre álló lemezterület ötven százaléka, a maximum pedig a nyolcvan százaléka. A könyvtárakhoz megadott utolsó két szám csak körültekintően növelhető, mivel a túl sok könyvtár szintén teljesítményproblémákhoz vezethet. Ha a gyorsítótár több lemezen oszlik meg, akkor adjon meg több cache_dir sort.
- cache_access_log /var/log/squid/access.log
- A naplóüzenetek elérési útja. [[Category:Squid], a proxyszerver]
- cache_log /var/log/squid/cache.log
- A naplóüzenetek elérési útja.
- cache_store_log /var/log/squid/store.log
- A naplóüzenetek elérési útja.
- Ez a három bejegyzés adja meg azokat az elérési utakat, ahol a Squid az összes tevékenységét naplózza. Ezen rendszerint nem célszerű változtatni. Ha a Squid nagy terhelés alatt áll, akkor érdemes több lemezre szétosztani a gyorsítótárat és a naplófájlokat.
- emulate_httpd_log off
- Ha a bejegyzés értéke on, akkor olvasható naplófájlok készülnek. Ezt azonban néhány kiértékelő program nem tudja értelmezni.
- client_netmask 255.255.255.255
- E bejegyzésnek megfelelően maszkolja el a rendszer a naplófájlokban lévő IP-címeket a kliens személyazonosságának elrejtésére. Ha a 255.255.255.0 értéket adja meg, az IP-cím utolsó számjegyét nullára állítja a rendszer.
- ftp_user Squid@
- Itt adható meg az a jelszó, amelyet a Squid az anonim FTP-bejelentkezéshez használ. Érdemes megadni egy érvényes e-mail címet jelszóként, mivel néhány FTP-szerver ellenőrzi a cím valódiságát.
- cache_mgr webmaster
- Egy e-mail cím, amelyre a Squid üzenetet küld váratlan összeomlás esetén. Az alapértelmezett érték a webmaster.
- logfile_rotate 0
- Ha az squid -k rotate parancsot használja, akkor a Squid képes rotálni a biztonságos naplófájlokat. Ez azt jelenti, hogy rendszer megszámozza a fájlokat, és egy megadott érték elérése után a legrégebbi fájl felülírásra kerül. Az alapértelmezett érték a 0, mivel a naplófájlok archiválását és törlését a SUSE LINUX végzi az /etc/logrotate/squid konfigurációs fájlban megadott cron-feladatok használatával.
- append_domain <tartomány>
- Az append_domain utasítással lehet beállítani, hogy ha nincs megadva tartomány egy címben, mivel legyen automatikusan kiegészítve. Itt általában a saját tartományt szokás beírni, vagyis ha például a böngészőbe a www értéket írjuk, az a saját webszerver elérését eredményezi.
- forwarded_for on
- Ha a bejegyzést off értékre állítja, akkor a Squid eltávolítja a kliens IP-címét és rendszernevét a HTTP-kérésekből.
- negative_ttl 5 minutes; negative_dns_ttl 5 minutes
- Ezeket az értékeket általában nem kell módosítani. Behívó kapcsolat esetén azonban elképzelhető, hogy az internet néha nem lesz elérhető. A Squid megjegyzi a sikertelen kéréseket és visszautasítja az újak kiadását annak ellenére, hogy azóta újra létrejött az internet-kapcsolat. Ezekben az esetekben a minutes értéket állítsa át seconds értékre, és töltse újra a böngészőben az oldalt. Ezután néhány másodperc múlva a betárcsázó folyamatnak újból kapcsolódnia kell.
- never_direct allow acl_név
- Annak megadkadályozására, hogy a Squid közvetlenül az internetről fogadjon kéréseket, a fenti parancs segítségével kényszerítse a kapcsolatot egy másik proxyra. Ezt már korábban meg kellett adni a cache_peer részben. Ha az all beállítás van megadva acl_névként, akkor az összes kérés közvetlenül a felsőbb szintű proxynak kerül továbbításra. Erre például akkor lehet szükség, ha egy olyan szolgáltatója van, aki szigorúan szabályozza a nála található proxyk használatát vagy tiltja a tűzfal számára az internet közvetlen elérését.
Hozzáférés-vezérlési beállítások
A Squid részletesen kidolgozott rendszert biztosít a proxy elérésének szabályozásához. A hozzáférés egyszerűen és mindenre kiterjedően beállítható a hozzáférés-vezérlési listák (ACL-ek) használatával. Ezek egymás után feldolgozott szabályokat tartalmazó listák. Az ACL-eket használat előtt meg kell adni. Létezik néhány alapértelmezett ACL, például az all és a localhost. Az ACL megadása önmagában még nem jelenti azt, hogy ténylegesen alkalmazásra is kerül. Ez csak a http_access szabályokkal együtt történik.- acl <acl_neve> <típus> <adat>
- Egy ACL-hez legalább három dolgot meg kell adni. Az <acl_neve> tetszőlegesen választható. A <típus> az /etc/squid/squid.conf fájl ACCESS CONTROLS részében található lehetőségek valamelyike kell, hogy legyen. Az <adat> rész az adott ACL-típustól függ, vagy kiolvasható egy fájlból például gépneveken, IP-címeken vagy URL-eken keresztül. Az alábbiakban néhány egyszerű példa látható:
acl mysurfers srcdomain .my-domain.com acl teachers src 192.168.1.0/255.255.255.0 acl students src 192.168.7.0-192.168.9.0/255.255.255.0 acl lunch time MTWHF 12:00-15:00
- http_access allow <acl_neve>
- A http_access megadja, hogy ki használhatja a proxyt, és ki mit érhet el az interneten. Ehhez ACL-eket kell megadni. A localhost és az all már fent meg lett adva; a deny és allow utasításokkal tiltható le vagy engedélyezhető a hozzáférés. Létrehozható egy tetszőleges számú http_access bejegyzést tartalmazó lista, amelynek feldolgozása felülről lefelé történik és attól függően, hogy melyik szabály fordul elő előbb, a megfelelő URL engedélyezésre vagy letiltásra kerül. Az utolsó bejegyzés mindig a http_access deny all kell, hogy legyen. A következő példában a localhost szabadon hozzáférhet mindenhez, míg az összes többi gép hozzáférése teljes egészében le van tiltva.
http_access allow localhost http_access deny all
- Az ezeket a szabályokat használó másik példában a teachers csoport mindig hozzáférhet az internethez. A students csoport csak hétfő és péntek között, ebédidőben férhet hozzá az internethez.
http_access deny localhost http_access allow teachers http_access allow students lunch time http_access deny all
- A http_access bejegyzésekkel rendelkező lista – az olvashatóság kedvéért – csak az /etc/squid/squid.conf fájl kijelölt helyén adható meg. Ez a következő szövegek között található:
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR # CLIENTS
- és az utolsó
http_access deny all
- redirect_program /usr/bin/squidGuard
- Ezzel a beállítással adjon meg egy átirányítóeszközt (pl.: SquidGuard), ami lehetővé teszi a nem kívánt URL-ek blokkolását. A különböző felhasználói csoportok internet-elérése egyénileg vezérelhető a proxyhitelesítés és a megfelelő ACL-ek segítségével. A SquidGuard egy különálló, telepíthető és beállítható csomag.
- auth_param basic program /usr/sbin/pam_auth
- Ha a felhasználókat hitelesíteni kell a proxyn, akkor állítson be egy megfelelő programot; ilyen például a pam_auth. A pam_auth első elérésekor a felhasználó egy bejelentkezési ablakot lát, amelyben meg kell adnia a felhasználói nevet és a jelszót. Az ACL-re továbbra is szükség van; így csak az érvényes bejelentkezési azonosítóval rendelkező kliensek használhatják az internetet:
acl password proxy_auth REQUIRED http_access allow password http_access deny all
- A proxy_auth után levő REQUIRED lecserélhető az engedélyezett felhasználói nevek listájára, vagy egy ilyen lista elérési útjára.
- ident_lookup_access allow <acl_név>
- Így lefuttatható egy ident kérés az összes ACL-lel megadott klienshez az egyes felhasználói azonosítók megkeresésére. Ha az <acl_neve> értéke az all, akkor ez az összes kliensre érvényes. Minden kliensen futnia kell egy ident démonnak is. Linux esetén erre a célra a pidentd csomagot kell telepíteni. Windows esetén az internetről letölthető szabad szoftverek állnak rendelkezésre. Annak biztosításához, hogy csak a sikeres ident keresési eredménnyel rendelkező kliensek kerüljenek engedélyezésre, adjon meg itt egy megfelelő ACL-t:
acl identhosts ident REQUIRED http_access allow identhosts http_access deny all
- Itt is cserélje le a REQUIRED értéket az engedélyezett felhasználói nevek listájára. Az ident használata egy kicsit lelassíthatja a hozzáférést, mivel az ident keresések minden kérésnél megismétlődnek.
Átlátszó proxy beállítása
A proxyszerverek általános működése a következőképpen történik: a webböngésző elküld egy kérést a proxyszerver egy adott portjára, és a proxy vagy megadja a szükséges objektumokat, vagy nem, attól függően, hogy a gyorsítótárban vannak-e Hálózatos működés esetén többféle megoldandó helyzet is előfordulhat:- Biztonsági okokból célszerű, hogy minden kliens a proxyt használja az interneten eléréséhez.
- Az összes kliensnek használnia kell proxyt, függetlenül attól, hogy tudnak-e róla.
- A hálózatban lévő proxy áthelyezésre került, de a meglévő klienseknek meg kell tartaniuk a régi konfigurációt.
Ezekben az esetekben jó megoldás egy átlátszó (láthatatlan) proxy, amely elfogja a webböngésző-kéréseket és válaszol rájuk; a webböngésző tehát megkapja a kért oldalakat, anélkül hogy tudná, pontosan honnan érkeznek. Ahogy a név is mutatja, a teljes folyamat végbemehet a felhasználó számára láthatatlan (átlátszó) módon.
Kernelkonfiguráció
Először ellenőrizze, hogy a proxyszerver kernele támogatja-e az átlátszó proxyt. A SUSE LINUX-hoz biztosított kernel már be van állítva ennek megfelelően. Ha nem, akkor adja hozzá ezeket a lehetőségeket a kernelhez és fordítsa le újra. Bővebb ismertetés: A Linux-kernel.
Az /etc/squid/squid.conf beállításai
Átlátszó proxy létrehozásához és működtetéséhez a következő beállításokat kell aktiválni az /etc/squid/squid.conf fájlban:- httpd_accel_host virtual
- httpd_accel_port 80
- Az aktuális HTTP-szerver portszáma
- httpd_accel_with_proxy on
- httpd_accel_uses_host_header on
Tűzfalbeállítás SuSEfirewall2 segítségével
Következő lépésként egy porttovábbítási szabály segítségével irányítson át minden bejövő kérést a tűzfalon keresztül a Squid porthoz. Ehhez használja a mellékelt SuSEfirewall2 eszközt. Ennek konfigurációs fájlja az /etc/sysconfig/SuSEfirewall2 könyvtárban található. A konfigurációs fájl megfelelően dokumentált bejegyzéseket tartalmaz. Még egy átlátszó proxy beállításához is meg kell adni néhány tűzfalbeállítást:- Az internetre mutató eszköz: FW_DEV_EXT="eth1"
- A hálózatra mutató eszköz: FW_DEV_INT="eth0" Adja meg a tűzfal azon portjait és szolgáltatásait (/etc/services), amelyeket a nem megbízható (külső) hálózatokról – például az internetről – is el lehet érni. Ebben a példában kifelé csak a webszolgáltatások láthatók:
FW_SERVICES_EXT_TCP="www"
Adja meg azon portokat vagy szolgáltatásokat (/etc/services) a tűzfalon, amelyek a biztonságos (belső) hálózatról TCP-n és UDP-n keresztül elérhetők:
FW_SERVICES_INT_TCP="domain www 3128" FW_SERVICES_INT_UDP="domain"
Ez lehetővé teszi a webszolgáltatások és a Squid elérését (ennek alapértelmezett portja a 3128). A »domain« szolgáltatás a DNS-t (tartománynév-kiszolgálás) jelenti. Ez egy általánosan használt szolgáltatás. Ha nincs szükség rá, akkor a fenti bejegyzések elhagyhatók és az alábbi beállítás értékét no-ra kell állítani:
FW_SERVICE_DNS="yes"
A legfontosabb beállítás a 15-ös:
Példa: Tűzfalkonfiguráció: 15-ös beállítás
# # 15.) # Which accesses to services should be redirected to a local port # on the firewall machine? # # This can be used to force all internal users to surf via your # Squid proxy, or transparently redirect incoming web traffic to # a secure web server. # # Choice: leave empty or use the following explained syntax of # redirecting rules, separated with spaces. # A redirecting rule consists of 1) source IP/net, # 2) destination IP/net, 3) original destination port and # 4) local port to redirect the traffic to, separated by a colon, # e.g. "10.0.0.0/8,0/0,80,3128 0/0,172.20.1.1,80,8080" #
# # 15.) # Mely szolgáltatás-hozzáféréseket kell átirányítani egy helyi portra # a tűzfalgépen? # # Ennek segítségével kikényszeríthető, hogy az összes belső felhasználó a # Squid proxyn keresztül böngésszen, vagy átlátszó módon át lehet irányítani a # bejövő webforgalmat egy biztonságos webszerverre. # # Lehetőségek: hagyja üresen vagy használja az átirányítási szabályok # alábbi szintaxisát, szóközökkel elválasztva. # Egy átirányítási szabály négy részből áll: 1) forrás IP/hálózat, # 2) cél IP/hálózat, 3) eredeti cél port és # 4) helyi port a forgalom átirányításához, vesszővel elválasztva, # pl.: "10.0.0.0/8,0/0,80,3128 0/0,172.20.1.1,80,8080" #
A fenti parancsokban látható az alkalmazandó szintaxis. Először adja meg a proxytűzfalat elérő belső hálózatok IP-címét és hálózati maszkját. Utána adja meg az IP-címet és hálózati maszkot, amelyhez ezek a kliensek kéréseket küldenek. Webböngészők esetén adja meg a 0/0 hálózatot – ez egy helyettesítő érték, amely azt jelenti, hogy »bárhová.« Ezután adja meg az eredeti portot, amelyhez ezek a kérések elküldésre kerültek és végül a portot, ahová a kérések átirányítódnak. Mivel a Squid több protokollt támogat, mint a HTTP, irányítsa át a kéréseket a többi portról – például az FTP- (21-es), HTTPS- vagy SSL- (443-as) portról – a proxyhoz. Ebben a példában a webszolgáltatások (80-as port) átirányításra kerülnek a proxy portra (3128-as port). Ha több hálózatot vagy szolgáltatást kíván hozzáadni, akkor ezeket szóközzel kell elválasztani a megfelelő bejegyzésben.
FW_REDIRECT_TCP="192.168.0.0/16,0/0,80,3128 192.168.0.0/16,0/0,21,3128" FW_REDIRECT_UDP="192.168.0.0/16,0/0,80,3128 192.168.0.0/16,0/0,21,3128"
A tűzfal és az új konfiguráció elindításához módosítsa az /etc/sysconfig/SuSEfirewall2 fájlban levő bejegyzést. A START_FW paramétert "yes" értékre kell állítani. Indítsa el a Squidet az alábbi részben látható módon: A Squid elindítása. Annak ellenőrzéséhez, hogy minden megfelelően mőködik-e, tekintse meg a /var/log/squid/access.log fájlban lévő Squid-naplót. Annak ellenőrzéséhez, hogy minden port megfelelően van-e beállítva, vizsgálja végig a portokat (portscanning) egy, a hálózaton kívül található számítógépről. Csak a webszolgáltatásoknak (80-as port) szabad nyitva lenniük. A portvizsgálat szintaxisa az nmap használatával: nmap -O IP_cím.
cachemgr.cgi
A gyorsítótár-kezelő (cachemgr.cgi) egy CGI-segédprogram a futó Squid-folyamat memóriahasználati statisztikáinak megjelenítéséhez. Ezenfelül kényelmesebb módot biztosít a gyorsítótár kezelésére és a statisztikák megtekintésére a szerver naplózása nélkül.Beállítás
A beállításhoz szükség van a rendszeren egy futó webszerverre. Annak ellenőrzéséhez, hogy az Apache már fut-e, root felhasználóként adja ki az rcapache status parancsot. Ha az alábbihoz hasonló üzenet jelenik meg:Checking for service httpd: OK Server uptime: 1 day 18 hours 29 minutes 39 seconds
akkor az Apache fut a gépen. Ellenkező esetben adja ki az rcapache start parancsot az Apache elindításához az alapértelmezett SUSE LINUX beállításokkal. A beállítás utolsó lépése a cachemgr.cgi fájl bemásolása a cgi-bin Apache-könyvtárba:
cp /usr/share/doc/packages/squid/scripts/cachemgr.cgi /srv/www/cgi-bin/
Gyorsítótár-kezelő ACL-ek az /etc/squid/squid.conf fájlban
Az eredeti fájlban van néhány alapértelmezett beállítás, amely szükséges a gyorsítótárkezelő használatához. Az első ACL a legfontosabb, mivel a gyorsítótárkezelő a cache_object protokollon keresztül megpróbál kommunikálni a Squiddel.acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255
Az alábbi szabályoknak is jelen kell lenniük a fájlban:
http_access allow manager localhost http_access deny manager
Az alábbi szabályok feltételezik, hogy a webszerver és a Squid nem ugyanazon a gépen fut. Ha a gyorsítótárkezelő és a Squid közötti kommunikáció egy másik gépen lévő webszervertől származik, akkor adjon meg egy külön ACL-t (Hozzáférési szabályok).
acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl webserver src 192.168.1.7/255.255.255.255 # webserver IP
Ezután adja hozzá az alábbi szabályokat (Hozzáférési szabályok).
http_access allow manager localhost http_access allow manager webserver http_access deny manager
Állítson be egy jelszót a kezelőhöz; így még több funkciót érhet el, mint például a gyorsítótár távoli bezárása vagy a gyorsítótárral kapcsolatos részletesebb információ megjelenítése. Ehhez állítsa be a cachemgr_passwd bejegyzést, benne a kezelő jelszavát, valamint a megjelenítendő lehetőségek listáját. Az /etc/squid/squid.conf fájlban ez a lista a bejegyzésekhez fűzött megjegyzések részeként jelenik meg.
A konfigurációs fájl minden módosítása után újra kell indítani a Squidet. Ehhez mindössze az rcsquid reload parancsot kell kiadni.
Statisztikák megjelenítése
A statisztikák saját URL-en (http://webserver.example.org/cgi-bin/cachemgr.cgi) érhetők el. Nyomja meg a Next gombot és tekintse meg a különböző statisztikákat. A gyorsítótárkezelő által megjelenített bejegyzések részletes leírását a http://www.squid-cache.org/Doc/FAQ/FAQ-9.html címen elérhető Squid GYIK tartalmazza.
squidGuard
Ez a rész nem törekszik a squidGuard teljes beállításának ismertetésére, csak bevezetést nyújt és néhány tanácsot ad a használathoz. A beállítások mélyrehatóbb áttekintése a SquidGuard webhelyen található, a http://www.squidguard.org címen.A squidGuard egy szabad (GPL), rugalmas és gyors, szűrést, átirányítást és hozzáférés-vezérlést végző bővítőmodul a Squidhez. Használatával többféle hozzáférési szabályt lehet megadni a Squid gyorsítótárhoz, különböző megszorításokkal a különböző felhasználói csoportok számára. A squidGuard a Squid szabványos átirányító felületét használja.
A squidGuard az alábbi funkciókat kínálja:
- Bizonyos felhasználók webhozzáférésének az engedélyezett vagy jól ismert webszerverekre vagy URL-ekre korlátozása.
- Bizonyos felhasználók számára a felsorolt vagy a feketelistán lévő webszerverek/URL-ek elérésének blokkolása.
- Bizonyos felhasználók számára a megadott reguláris kifejezések vagy szavak listájának megfelelő URL-ek elérésének blokkolása.
- A blokkolt URL-ek átirányítása egy »intelligens«, CGI alapú információs oldalra.
- A nem regisztrált felhasználók átirányítása egy regisztrációs űrlaphoz.
- A reklámsávok (hirdetési csíkok) átirányítása egy üres GIF képre.
- Különböző hozzáférési szabályok alkalmazása idő, nap, dátum stb. alapján.
- Különböző szabályok alkalmazása különböző felhasználói csoportokra.
A squidGuard és a Squid nem használható viszont az alábbiakra:
- A dokumentumok szövegének szerkesztése, szűrése vagy cenzúrázása.
- HTML-be ágyazott parancsnyelvek, például JavaScript vagy VBscript szerkesztése, szűrése vagy cenzúrázása.A használat előtt telepíteni kell a squidGuard szoftvert. Adjon meg egy minimális konfigurációs fájlt /etc/squidguard.conf néven. Konfigurációs példák a következő helyen találhatók: http://www.squidguard.org/config/.
Következőnek hozzon létre egy teszt »Hozzáférés megtagadva« oldalt, illetve egy többé-kevésbé összetett CGI-oldalt a Squid átirányításához, ha a kliens feketelistán szereplő webhelyet kér. A megoldáshoz javasolt az Apache használata.
Ezután állítsa be a Squidet a squidGuard használatára. Az /etc/squid/squid.conf fájlban használja az alábbi bejegyzést:
redirect_program /usr/bin/squidGuard
Van egy másik lehetőség is, a redirect_children. Ez beállítja a gépen futó »átirányítási« (ebben az esetben squidGuard-) folyamatok számát. A squidGuard megfelelő teljesítményt biztosít ahhoz, hogy megfelelő számú kérést kezeljen: egy 500 MHz-es Pentium gépen 5900 tartomány és 7800 URL (összesen 13 780) esetében százezer kérés 10 másodpercen belül szolgálható ki. Emiatt nem érdemes négy folyamatnál többet beállítani, mivel ezeknek a folyamatoknak túl sok memóriát kell lefoglalni.
redirect_children 4
Utolsóként az rcsquid reload parancsot kiadva töltse be a Squiddel az új konfigurációt. Ezután egy böngésző segítségével tesztelje a beállításokat.
Gyorsítótár-kimutatások készítése a Calamaris használatával
A Calamaris egy Perl parancsfájl, amely ASCII vagy HTML formátumban jelentést készít a gyorsítótár tevékenységéről. A Squid saját hozzáférési naplófájljait használja. A Calamaris honlapjának címe: http://Calamaris.Cord.de/. A program használata rendkívül egyszerű.Jelentkezzen be root felhasználóként, majd adja ki a cat access.log.files parancsot. Ha adatvezetékkel köt össze (piping) több naplófájlt, fontos, hogy a naplófájlok időrendben legyenek, a legrégebbivel kezdve. A program néhány beállítása:
- -a
- az összes rendelkezésre álló jelentést kiírja a kimenetre
- -w
- kimenet HTML formátumú jelentésként
- -l
- egy üzenetet vagy logót illeszt a jelentés fejlécébeA különféle beállításokról további információ a program kézikönyvoldalán (man calamaris) olvasható.
cat access.log.2 access.log.1 access.log | calamaris -a -w \ > /usr/local/httpd/htdocs/Squid/squidreport.html
Ez a jelentést a webszerver könyvtárába teszi. A jelentések megjelenítéséhez Apache szükséges. Egy másik nagy teljesítményű jelentéskészítő eszköz a gyorsítótárhoz az SARG (Squid Analysis Report Generator). Ezzel kapcsolatban további tájékoztatás: http://web.onda.com.br/orso/.
További információ
Tekintse meg a Squid honlapját a http://www.squid-cache.org/ címen. Itt megtalálható a »Squid felhasználói útmutató« és a Squid GYIK anyagok átfogó gyűjteménye.
A telepítés után az átlátszó proxykról egy <hogyan> (howto) található a howtoen anyagok között az /usr/share/doc/howto/en/txt/TransparentProxy.gz fájlban. Létezik számos Squid levelezési lista is. Ezek a következő címen érhetők el: squid-users@squid-cache.org. Archívumuk címe: http://www.squid-cache.org/mail-archive/squid-users/.