26.3. Proxy server: Squid

Squid je na linuxových/unixových platformách nejrozšířenější proxy cache. Zde si popíšeme, jak ho konfigurovat, řekneme si, jaké má systémové požadavky a mnoho dalšího. Stranou nezůstane ani konfigurace transparentní proxy, zpracování statistik programy calamaris a cachemgr a filtrování internetových stránek pomocí squidGuard.

26.3.1. Co je to proxy cache?

Squid funguje jako burzián. Přijímá požadavky od klientů (v tomto případě internetových prohlížečů) a ty pak předává dál odpovídajícím serverům poskytovatele. Když se požadovaný objekt vrátí, nechá si pro sebe jednu kopii, kterou uloží v diskové cache a druhou doručí zpět klientovi.

Výhoda se projeví v okamžiku, kdy bude druhý uživatel požadovat stejný objekt -- v tom případě není třeba stránku stahovat znovu, ale nahraje z cache. Výsledkem je nepoměrně rychlejší vyřízení požadavku a navíc dochází k úspoře kapacity linky.

[Tip]Tip

Squid nabízí velké spektrum funkcí, např. hierarchické dělení proxy serveru, které rozkládá zátěž systému, vytváření pravidel pro přístup klientů, správu přístupových práv k jednotlivým stránkám a také statistiky nejčastěji používaných internetových stránek, chování uživatelů při surfování apod.

Squid není žádnou generickou proxy. Standardně pouze zprostředkovává HTTP spojení. Kromě toho podporuje protokoly FTP, Gopher, SSL a WAIS, ale žádné internetové protokoly typu Real Audio, News nebo videokonference. UDP protokol používá pouze pro podporu komunikace mezi různými cache. Z tohoto důvodu nejsou podporovány ani žádné další programy postavené na tomto protokolu.

26.3.2. Informace o proxy-cache

26.3.2.1. Squid a bezpečnost

Můžete provozovat Squid spolu s firewallem, který bude chránit vnitřní síť před útokem zvenku. Kromě toho můžete nastavit tzv. transparentní proxy, kdy jsou všechna spojení směrována na squida. Bližší informace o konfiguraci transparentní proxy naleznete v 26.3.6 – „Konfigurace transparentní proxy“.

26.3.2.2. Vícenásobná cache

Můžete konfigurovat více cache, mezi které je rozkládána zátěž systému a také zvyšujete možnost nalezení objektu již v lokální síti. Můžete také vytvořit hierarchicky uspořádané cache, takže je cache schopná předat požadavek na objekt jiné cache na stejné úrovni nebo ho předá nadřazené -- která pak vyřídí požadavek prostřednictvím jiné cache nebo stáhne objekt z Internetu.

Volba správné topologie je velice důležitá, protože by nemělo dojít ke zvýšení celkového síťového provozu. U velké sítě je možné nakonfigurovat proxy server pro každou podsíť a tu pak spojit s nadřazenou cache, která je opět napojena na proxy ISP (poskytovatele).

Kompletní komunikace je řízena prostřednictvím ICP (Internet Cache Protocol), který je vystavěn nad UDP. Výměna dat mezi jednotlivými cache se provádí prostřednictvím HTTP (Hyper Text Transmission Protocol) založeném na TCP.

Aby byl nalezen nejlepší server pro požadované objekty, posílá cache všem proxy stejné hierarchie tzv ICP dotaz. Ostatní proxy pak odpoví prostřednictvím ICP buď HIT v případě, že objekt našli nebo MISS v případě, že ho nenašli. V případě nálezu více HITů se proxy rozhodne, ze které cache bude stahovat. Toto rozhodování se provádí na základě rychlosti odpovědi. Když všechny cache ohlásí MISS, pak bude dotaz předán nadřazené cache.

[Tip]Tip

Abyste zabránili vícenásobnému ukládání objektů v různých cache lokální sítě -- používají se jiné ICP protokoly, jako je např. CARP Cache Array Routing Protocol nebo HTCP Hyper-Text Cache Protocol.

26.3.2.3. Přechovávání objektů z Internetu

Ne všechny objekty v síti jsou statické. Existuje velké množství dynamicky generovaných CGI stránek, počítadel a SSL dokumentů, které nejsou ukládány v cache, protože jsou měněny při každém přístupu.

A u všech ostatních objektů je třeba zvážit, jak dlouho by měly zůstat v cache. Kvůli tomu mají objekty v cache přiřazeny různé stavy.

V hlavičkách pak obsahují informace jako Last modified nebo Expires, které informují proxy/internetový server o stavu objektu. Objekty v cache jsou odstraňovány převážně kvůli nedostatku místa, kde se používají algoritmy jako je LRU Last Recently Used, který byl vyvinut pro nahrazování objektů v cache. Jeho základní princip spočívá v nalezení nejméně používaných stránek.

26.3.3. Systémové požadavky

Nejdříve by měla být určena zátěž systému. Je třeba věnovat zvláštní pozornost špičkám, které mohou být i 4x vyšší, než je denní průměr. Pokud si nejste jisti, pak je lepší nadhodnotit systémové požadavky, protože nevhodný hw pro Squid může vést k výraznému poklesu výkonu.

V následujícím seznamu jsou jednotlivé části seřazeny podle důležitosti:

26.3.3.1. Pevný disk

Při ukládání do meziskladu (cache) hraje rychlost zápisu velkou roli. Proto byste měli tomuto faktoru věnovat velkou pozornost. U pevných disků je nejdůležitější doba přístupu (náhodného), která je udávána v milisekundách.

26.3.3.2. Velikost diskové cache

Pokud máte malou cache, pak je pravděpodobnost HITu velmi nízká, protože cache se velice rychle zaplní a pak jsou starší objekty přepisovány novějšími. Pokud ale máte 1 GB pro cache a uživatel potřebuje každý den pouze 10 MB, pak máte minimálně sto dní, než se vám cache zaplní.

Nejjednodušší je určit velikost cache podle rychlosti připojení. Pokud máte 1 Mb/s linku, pak bude maximální přenosová rychlost 128 KB/s. Za předpokladu, že veškerý datový přenos skončí v cache, pak máte za jednu hodinu uloženo více než 460 MB. Pokud bychom pokračovali a řekli bychom, že pracovní den má 8 hodin a pořád by byla linka plně využita, pak je to za jeden den naspoříte 3,6 GB. Protože však nebývá linka vytížená na 100\% -- bude stačit pro cache zhruba 2 GB.

Pokud to tedy shrneme, pak squid potřebuje spíš disk, který má kratší dobu přístupu pro čtení a zápis.

26.3.3.3. RAM

Velikost potřebné paměti pro squid je závislá na počtu objektů, které se nachází v cache. Squid ukládá cachovací odkazy a často používané stránky v paměti tak, aby mohly být požadavky rychleji vyřizovány. Protože paměť je zhruba 1 000 000x rychlejší než pevný disk.

Squid má v paměti také další data, např. tabulku se všemi použitými IP adresami, s nejčastěji používanými zásobníky, objekty a pak také seznamy s informacemi o přístupu a mnoho dalšího.

Proto je důležité, aby měl Squid také dostatek operační paměti. Pokud by musel začít swapovat, tj. odkládat méně často používané části operační paměti do vyhrazeného diskového oddílu. Pro správu cache v paměti můžete využít cachemgr.cgi, který je popsán v 26.3.7 – „cachemgr.cgi“.

26.3.3.4. CPU

Proxy nepotřebuje příliš výkonný procesor. Pouze při startu a během kontroly obsahů cache se zvyšuje zatížení procesoru. Pokud byste chtěli použít víceprocesorové stroje, pak nedosáhnete zvýšení výkonu Squidu. Lepší je přidat disky a operační paměť. Příklady konfigurace systému naleznete na http://wwwcache.ja.net/servers/squids.html.

26.3.4. Spuštění squida

Program Squid má SUSE LINUX již předkonfigurovaný, takže ho můžete spustit hned po instalaci. Předpokladem bezproblémového startu je správně nastavená síť -- tj. aby byl nastaven alespoň nameserver a bylo možné pingnout. Problémy se mohou objevit v okamžiku, kdy používáte dynamickou DNS konfiguraci. V tom případě by alespoň nameserver měl mít platný zápis, protože pokud Squid nenajde v /etc/resolv.conf DNS server -- tak se vůbec nespustí.

26.3.4.1. Příkazy pro spuštění squida

Pro spuštění se přihlaste jako uživatel root

rcsquid start

Při prvním spuštění se vytvoří adresářová struktura v /var/squid/cache -- což provádí automaticky spouštěcí skript /etc/init.d/squid a může to trvat řádově několik vteřin až minut. Pokud se pak zobrazí zelené done, byla proxy spuštěna. Na lokálním systému můžete funkčnost squidu ihned otestovat tak, že nastavíte v prohlížeči proxy na localhost a port na 3128. Abyste zpřístupnili squid i ostatním, bude potřeba upravit konfigurační soubor, který se nachází v /etc/squid/squid.conf a to tak, že upravíte položku http_access deny all na http_access allow all. Mějte ale na mysli, že tím otevřete proxy všem, proto byste měli nastavit ACL. Bližší informace naleznete v 26.3.5.2 – „Volby pro kontrolu přístupu“.

Pokud provedete změny v konfiguračním souboru /etc/squid/squid.conf, je potřeba nové nastavení znovu načíst. To provedete příkazem:

rcsquid reload

Případně můžete Squid rovnou restartovat:

rcsquid restart

Důležitý je také následující příkaz

rcsquid status

který zjistíte, zda proxy běží. Pokud byste ji potřebovali zastavit, použijte příkaz

rcsquid stop

Poslední z uvedených příkazů může chvíli trvat, protože squid čeká půl minuty (volba shutdown_lifetime v /etc/squid/squid.conf) než bude přerušeno spojení s klienty a kromě toho musí zapsat data na disk.

[Warning]Varování

Pokud ukončíte squida tak, že ho zabijete příkazem kill nebo killall -- může dojít k poškození cache, kterou je potřeba smazat, aby bylo možné squida znovu spustit.

Při odinstalování proxy se neodstraní ani cache, ani protokolové soubory. Je potřeba ručně smazat adresář /var/cache/squid.

26.3.4.2. Lokální DNS server

Lokální DNS server, např. BIND-8nebo BIND-9, je velice výhodný a to i v případ, že nespravuje žádnou doménu. Stačí, když funguje pouze jako caching-only DNS a umí bez zvláštní konfigurace zpracovat DNS dotazy, resp. je předat root nameserveru. Když ho nastavíte na 127.0.0.1 (tj. localhost) a zapíšete ho do /etc/resolv.conf, pak bude mít squid při svém startu vždy platný nameserver. Pro rozchození nameserveru stačí pouze nainstalovat BIND a spustit ho. Nameserver poskytovatele byste měli pak uvést v konfiguračním souboru /etc/named.conf mezi forwardersspolu s jeho IP adresu. Když máte běžící firewall, pak je potřeba se podívat, zda DNS dotazy projdou.

26.3.5. Konfigurační soubor /etc/squid/squid.conf

26.3.5.1. Základní nastavení

http_port 3128

Toto je port, na kterém poslouchá squid požadavky klientů. Přednastaven je na 3128 a použitelný je také port 8080. Další porty můžete přidat a oddělujte je mezerou.

cache_peer hostname type proxy-port icp-port

Zde uveďte nadřazenou proxy jako parent, např. když musíte využívat proxy poskytovatele. Jako hostname uveďte název, resp. IP adresu používané proxy a jako type dopište parent. Jako číslo portu poskytovatele se nejčastěji používá 8080. icp-port můžete nastavit na 7 nebo 0 v případě, že neznáte ICP port nadřazené proxy a její používání není dohodnuto s poskytovatelem.

cache_mem 8 MB

Tato položka stanoví, kolik operační paměti bude squid potřebovat pro svůj běh. Přednastaveno je 8 MB.

cache_dir ufs /var/cache/squid 100 16 256

Položka cache_dir určuje adresář, do kterého budou na disku ukládány jednotlivé objekty. Čísla za cestou k adresáři znamenají -- maximální velikost cache v MB, pak počet podadresářů a počet podadresářů podadresářů. Parametr ufs by měl zůstat beze změny. Přednastavenými hodnotami pro velikost cache jsou 100 MB diskového prostoru v adresáři /var/cache/squid, kde bude vytvořeno 16 adresářů a každý z nich bude mít 256 podadresářů. Při vyčleňování místa na disku byste si měli nechat dostatek rezerv, rozumné je vytvářet cache o velikosti 50 až 80 procent místa. Kromě toho byste měli poslední dvě čísla (počty adresářů) zvětšovat velice opatrně, protože režie adresářových struktur může zase snížit výkon systému. Pokud máte více disků, kde chcete cache vytvořit, pak můžete vytvořit odpovídající množství řádků s definicí cache_dir.

cache_access_log /var/log/squid/access.log

Cesta k protokolovému souboru.

cache_log /var/log/squid/cache.log

Cesta k protokolovému souboru.

cache_store_log /var/log/squid/store.log

Cesta k protokolovému souboru. Tyto tři volby definují cesty k protokolovým souborům a není třeba je měnit. Pouze v případě, že je cache velice často dotazována -- může se hodit přesunout protokolové soubory na jiný disk.

emulate_httpd_log off

Změnou na on získáte čitelné protokolové soubory, se kterými si ale neporadí některé programy, které mají na starosti vyhodnocování.

client_netmask 255.255.255.255

Touto položkou můžete maskovat IP adresy zapisované do logů a skrýt tak identitu klientů. Pokud zde napíšete např. 255.255.255.0, tak bude poslední pozice IP adresy vynulována.

ftp_user Squid@

Zde nastavte heslo, které bude squid vyžadovat pro anonymní FTP login. Může mít také smysl zde uvést platnou emailovou adresu ve své doméně, protože některé FTP servery její platnost kontrolují.

cache_mgr webmaster

Tato volba slouží pro uvedení e-mailové adresy, na kterou se pošle zpráva v případě neočekávaného pádu. Přednastaveno je webmaster.

logfile_rotate 0

Squid umí také rotovat uložené protokolové soubory, pokud ho spustíte s volbou squid -k rotate a podle uvedené hodnoty bude nejstarší soubor opět přepsán. Tato hodnota je standardně nastavena na 0, protože pro archivaci a mazání protokolových souborů SUSE LINUX používá cronjob, jehož konfiguraci naleznete v /etc/logrotate/squid.

append_domain domain

Volbou append_domain můžete určit, které domény budou automaticky připojeny v případě, že není žádná uvedena. Nejčastěji se zde uvádí vlastní doména -- takže stačí v prohlížeči uvést www a dostanete se na vlastní webserver.

forwarded_for on

Když nastavíte na off, odstraní squid IP adresu, resp. název počítače klienta z HTTP dotazu.

negative_ttl 5 minutes; negative_dns_ttl 5 minutes

Ve standardním případě není třeba toto nastavení upravovat. Pokud ale máte vytáčenou linku, pak se může stát, že Internet nebude po nějakou dobu přístupný.To je tím, že squid si poznamenává neúspěšné dotazy a brání se znovu dotazovat, i když je již spojení s Internetem obnoveno. V tom případě změňte minutes na seconds a nechte znovu načíst stránku v prohlížeči.

never_direct allow acl_name

Pokud chcete zabránit tomu, aby squid vyřizoval požadavky přímo, pak použijte tuto volbu. V tom případě je ale potřeba, aby existovala ještě další proxy, které bude squid své požadavky zasílat. To je třeba nastavit ve volbě cache_peer. Pokud zadáte jako acl_name all, pak zajistíte, že všechny požadavky budou předány parent proxy. To je třeba např. tehdy, když poskytovatel striktně trvá na využívání jeho proxy nebo když máte firewall nastaven tak, že nepovoluje přímý přístup k Internetu.

26.3.5.2. Volby pro kontrolu přístupu

Squid obsahuje velice sofistikovaný systém pro řízení přístupu k proxy. Pomocí ACL je velice dobře a jednoduše konfigurovatelný. V zásadě se jedná o seznam pravidel, která jsou jedno po druhém zpracovávány. ACL je třeba nejdříve definovat předtím, než budou použita. Některá jsou již definována, jako je all a localhost. Ale vytvořením ACL ještě nic neprovedete. Teprve, když ho použijete např. spolu s http_access -- tak se změny projeví.

acl acl_name type data

ACL potřebuje pro svou definici minimálně tři parametry. Název acl_name může být libovolný. U type můžete zvolit z celé řady různých možností, které jsou uvedeny v odstavci ACCESS CONTROLS souboru /etc/squid/squid.conf. Jaká data uvést, to záleží na typu ACL a může se také jednat o soubor, kde jsou třeba názvy počítačů, IP adresy nebo URL. Následují krátké příklady.

acl muj_net srcdomain .ma_domena.cz
acl ucitele src 192.168.1.0/255.255.255.0
acl studenti src 192.168.7.0-192.168.9.0/255.255.255.0
acl odpoledne time MTWHF 12:00-15:00
http_access allow acl_name

Volbou http_access určíte, kdo může proxy používat a k čemu může na Internetu přistupovat. Zde využijete výše definovaná ACL nebo použijete ta předdefinovaná, tj. localhost a all, která mohou nabývat hodnot deny nebo allow. Můžete zde vytvořit celý seznam položek s http_access, které budou zpracovávány odshora dolů a podle toho, co se načte jako první bude přístup povolen nebo zakázán. Jako poslední položka by měl být vždy http_access deny all. V následujícím příkladu povolíte přístup všem uživatelům počítače localhost, tj. místním uživatelům volný přístup, zatímco všem ostatním ho zakážeme.

http_access allow localhost
http_access deny all

A ještě jeden příklad, kde využijeme vlastních ACL. Chceme, aby skupina ucitele měla kdykoliv přístup k Internetu, zatímco studenti budou moci surfovat pouze od pondělí do pátku a to vždy odpoledne.

http_access deny localhost
http_access allow ucitele 
http_access allow studenti odpoledne
http_access deny all

Volby http_access byste měli psát pouze na jedno, předem určené, místo v /etc/squid/squid.conf -- a to z důvodu přehlednosti.

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR 
# CLIENTS

a všechny položky ukončete

http_access deny all
redirect_program /usr/bin/squidGuard

Tato volba slouží pro tzv. přesměrování, kdy jsou dotazy předávány externímu programu, v našem případě squidGuard, který dokáže zakázat přístup k určeným URL. Spolu s proxy autentizací a vhodnými ACL tak můžete velice precizně řídit přístup k Internetu pro různé skupiny. squidGuard je v separátním balíku a musí se tedy nainstalovat zvlášť.

authenticate_program /usr/sbin/pam_auth

Pokud je třeba autentizovat uživatele při přístupu k proxy, můžete použít program pam_auth. Při prvním přihlášení uživatele se spustí přihlašovací dialog, kde musí uživatel vložit uživatelské jméno a heslo.

acl password proxy_auth REQUIRED

http_access allow password
http_access deny all

Klíčové slovo REQUIRED za proxy_auth můžete také nahradit seznamem povolených jmen uživatelů nebo cestou k takovému seznamu.

ident_lookup_access allow acl_name

Tato volba zajistí, že za všechny klienty definované v ACL je proveden identifikační dotaz, který prověří identitu uživatele. Když nastavíte acl_name all, bude se provádět dotazování pro všechny klienty. Na klientech však musí běžet identifikační démon. V Linuxu můžete nainstalovat program pidentd, pro Windowsexistuje volně dostupný software, který si můžete stáhnout z Internetu. Aby byli připuštěni pouze klienti s úspěšným identifikačním dotazem ident lookup , je potřeba opět definovat vhodnou ACL.

acl identhosts ident REQUIRED

http_access allow identhosts
http_access deny all

Také zde je možné nahradit REQUIRED seznamem povolených jmen uživatelů. Používání Ident může přístup výrazně zpomalit, protože kontrola se provádí při každém dotazu.

26.3.6. Konfigurace transparentní proxy

Standardně posílá prohlížeč na určitý port proxy serveru dotazy a proxy mu poskytne odpovídající objekty k dispozici, ať už se v cache nacházejí nebo ne. V praxi pak mohou nastat různé situace:

  • Z bezpečnostních důvodů je lepší, když klient pro surfování na Internetu používá proxy.

  • Je třeba, aby uživatelé používali proxy i bez toho, aby cokoliv konfigurovali v prohlížečích.

  • Proxy se v síti přesunula, ale klienti by si měli i nadále zachovat svou starou konfiguraci.

V každém z těchto případů je vhodné nasadit transparentní proxy. Princip je přitom velice jednoduchý. Internetový prohlížeč pošle svůj požadavek -- na cestě sedí proxy, která tento požadavek zpracuje a odpověď odešle zpět prohlížeči -- který vůbec netuší, že komunikuje s proxy a ne přímo se zdrojem.

26.3.6.1. Možnosti konfigurace v /etc/squid/squid.conf

The options to activate in the /etc/squid/squid.conf file to get the transparent proxy up and running are:

  • httpd_accel_host virtual

  • httpd_accel_port 80 # the port number where the actual HTTP server is located

  • httpd_accel_with_proxy on

  • httpd_accel_uses_host_header on

26.3.6.2. Nastavení jádra

Ujistěte se, že jádro v části proxy serveru podporuje transparentní proxy. Pokud ne, vložte požadované volby do konfigurace jádra a překompulujte je. Více informací o konfiguraci a kompilaci jádra najdete v kapitole 8 – „Linuxové jádro.

26.3.6.3. Volby konfiguračního souboru /etc/squid/squid.conf

Volby konfiguračního souboru /etc/squid/squid.conf jsou následující:

  • httpd_accel_host virtual

  • httpd_accel_port 80 # číslo běžícího HTTP serveru

  • httpd_accel_with_proxy on

  • httpd_accel_uses_host_header on

26.3.6.4. Konfigurace firewallu pomocí SuSEfirewallu2

Všechny příchozí dotazy pro squid musí být pomocí tunelu přesměrovány na port squida. K tomu můžete použít konfigurační soubor, který naleznete v souboru /etc/sysconfig/SuSEfirewall2. I když chcete nastavit pouze transparentní proxy, je potřeba provést určitá nastavení ve firewallu. Např.:

  • Rozhraní pro přístup k Internetu: FW_DEV_EXT=<eth1>

  • Rozhraní pro přístup k vnitřní síti: FW_DEV_INT=<eth0>

Když jste definovali rozhraní pro přístup k jednotlivým sítím, je potřeba povolit služby, které budou přístupné z vnější a vnitřní sítě. Zadávat je můžete buď pomocí názvu služby nebo obvyklého portu, kde určitá služba běží. Bližší informace viz /etc/services.

Nyní tedy povolíme přístup zvenku k webovým službám:

FW_SERVICES_EXTERNAL_TCP="www"

Pak povolíme přístup ven pro TCP i UDP:

FW_SERVICES_INT_TCP="domain www 3128"
FW_SERVICES_INT_UDP="domain"

Povolili jsme webové služby a squida, který běží standardně na portu 3128. Navíc jsme povolili také DNS Domain Name Server, který se stará o překlad názvů počítačů na IP adresy a obráceně. Pokud nechcete povolit DNS, pak domainodstraňte a nastavte:

FW_SERVICE_DNS="no"

Pro nás je nejdůležitější volbou:


#
# 15.)
# Which accesses to services should be redirected to a localport on the
# firewall machine?
#
# This can be used to force all internal users to surf via
# your squid proxy, or transparently redirect incoming webtraffic
# to a secure webserver.
# 
# Choice: leave empty or use the following explained syntax of
# redirecting rules, seperated by a space.
# A redirecting rule consists of 1) source IP/net,
# 2) destination IP/net,
# 3) protocol (tcp or udp) 4) original destination port and
# 5) local port to redirect the traffic to, seperated by
# a colon. e.g.: "10.0.0.0/8,0/0,tcp,80,3128 0/0,172.20.1.1,tcp,80,8080"
# Please note that as 2) destination, you may add '!' in front
# of the IP/net to specify everything EXCEPT this IP/net.
#
FW_REDIRECT=""

Ve výše uvedené nápovědě je popsána syntaxe. Nejdřív se vezme IP adresa a síťová maska počítačů, kterých se to bude týkat a pak cílová IP a síťová maska, tj. kam jsou požadavky klientů posílány. V případě webového prohlížeče zvolte síť 0/0(znamená: platí pro všechny počítače). Pak následuje protokol, kde zvolíte TCP UDP protokol. Jako další parametr je port, na který byl původně dotaz zaslán a jako poslední je port, na který bude přesměrován.

Protože squid podporuje nejen HTTP, můžete na proxy směrovat i jiné porty, jako je FTP (port 21), HTTPS nebo SSL (port 443).

V našem příkladu budeme přesměrovávat webové služby z portu 80 na port proxy serveru, což je 3128. Jednotlivé položky se zde oddělují mezerou.

FW_REDIRECT="192.168.0.0/16,0/0,TCP UDP,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"

Firewall s novou konfigurací spustíte při startu nastavením proměnné START_FW v souboru /etc/sysconfig/SuSEfirewall2 na hodnotu "yes".

Pak spusťte Squid tak, jak je uvedeno v 26.3.4 – „Spuštění squida“. Zda vše funguje správně se můžete přesvědčit v protokolovém souboru /var/log/squid/access.log.

Zda jsou všechny porty nastaveny dobře zjistíte tak, že použijete z libovolného místa mimo vaši síť portscan, tj. ze se pokusíte zjistit, které porty jsou otevřené. V našem případě by měl být otevřen pouze port 80. Ke skenování použijte např. program nmap (syntaxe nmap -O IP_address).

26.3.7. cachemgr.cgi

Cache manager je CGI program pro vypracovávání statistik o tom, kolik místa potřebuje squid pro svůj běh.

26.3.7.1. Nastavení

Nejdříve je třeba mít v systému běžící webový server. Zda server běží můžete zjistit jako uživatel root příkazem rcapache status. Samozřejmě je třeba mít Apache nainstalovaného.

Když se zobrazí následující hlášení:

Checking for service httpd: OK 
Server uptime: 1 day 18 hours 29 minutes 39 seconds   

tak Apache na tomto počítači běží. V opačném případě je třeba webový server spustit příkazem rcapache start. I Apache je předkonfigurován tak, aby ho bylo možné ihned spustit.

Jako poslední krok je třeba zkopírovat cachemgr.cgi do adresáře cgi-bin Apache příkazem:

cp /usr/share/doc/packages/squid/scripts/cachemgr.cgi 
   /srv/www/cgi-bin/

26.3.7.2. ACL cache manageru v /etc/squid/squid.conf

V konfiguračním souboru proxy serveru je třeba pro cache manager provést následující úpravy

acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255  

A pak nastavit následující pravidla:

http_access allow manager localhost
http_access deny manager     

První ACL je nejdůležitější, protože zde se pokouší squid komunikovat přes cach_object protokol. Následující pravidla pak předpokládají, že web server a squid běží na tom samém počítači. Komunikace mezi cache managerem a squidem vychází ze strany web serveru, ne prohlížeče. Když se tedy nachází web server na jiném počítači, pak je třeba přidat další ACL tak, jak je uvedeno v následujícím příkladu:

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 # IP Webserver 

Pak jsou ještě třeba pravidla:

http_access allow manager localhost
http_access allow manager webserver
http_access deny manager  

Je také možné nastavit pro správce cache heslo, když se používá více voleb, např. vzdálené zamykání cache nebo zobrazování podrobných informací o cache. V tom případě je třeba konfigurovat položku cachemgr_passwda seznam voleb, které budou zobrazeny po uvedení hesla. Tento seznam je uveden v /etc/squid/squid.conf.

Pokaždé, když se změní konfigurace squidu, je potřeba ho restartovat příkazem rcsquid reload .

26.3.7.3. Prohlížení cache

Podívejte se na http://váš_server/cgi-bin/cachemgr.cgi. Stiskněte continue a nechte si zobrazit různé statistiky. Bližší informace o jednotlivých volbách naleznete v často kladených dotazech k programu squid na http://www.squid-cache.org/Doc/FAQ/FAQ-9.html

26.3.7.4. squidGuard

Tato kapitola by měla být úvodem do konfigurace squidGuard a měla by vám představit možnosti jeho použití. Pro podrobné popisy jemných nuancí však zde nebude dostatek místa. Hlubší informace naleznete na internetových stránkách -- které naleznete na http://www.squidguard.org.

squidGuard je volně šiřitelný, flexibilní a velice rychlý filtr pro squida. Podporuje definování množství pravidel pro přístup s různými omezeními pro různé skupiny. Pro přesměrování používá squidGuard standardní rozhraní squidu.

squidGuard můžete použít např. k následujícím úkolům:

  • Omezení přístupu určitých uživatelů pouze k definovaným serverům anebo URL

  • Zamezení přístupu určitých uživatelů k definovaným serverům nebo URL

  • Zamezení přístupu určitých uživatelů na základě regulárních výrazů nebo slov

  • Přesměrování ze zakázané URL na inteligentní CGI stránku

  • Přesměruje nepřihlášeného uživatele na registrační formulář

  • Odstínění bannerů a místo toho je prohlížeč přesměrován na prázdný GIF

  • Rozdílná pravidla přístupu v závislosti na čase, dni v týdnu a datu

  • Rozdílná pravidla pro jednotlivé skupiny uživatelů

Ani squidGuard nebo squid neumí:

  • Filtrovat, cenzurovat nebo upravovat text v dokumentech

  • Filtrovat, cenzurovat nebo upravovat skriptovací jazyky (např. JavaScript nebo VBscript), které jsou součástí HTML

26.3.7.5. Používání programu squidGuard

Instalujte balík squidGuard a pak upravte konfigurační soubor /etc/squidguard.conf. Pokud hledáte příkladové konfigurace, podívejte se na http://www.squidguard.org/config/. Později pak můžete experimentovat se složitějšími konfiguracemi.

V následujícím kroku vytvoříte dummy stránku Přístup odmítnut nebo CGI stránku, na kterou bude klient přesměrován v případě, že přistoupí na zakázanou stránku. I zde doporučujeme používat Apache.

Nyní musíme squidu říct, že bude použit program squidGuard. Stačí změnit v /etc/squid/squid.conf:

redirect_program /usr/bin/squidGuard

Další volbou je redirect_children, která spustí dostatek vláken tak, aby byl program, v našem případě squidGuard, dostatečně rychlý. Standardně dokáže zpracovat 100 000 dotazů za 10 vteřin na 500MHz Pentiu s 5900 doménami a 7880 URL.

Proto není třeba pouštět více než 4 vlákna, protože pak tyto procesy zabírají pouze místo v paměti.

Nakonec necháte squida znovu načíst konfiguraci

rcsquid reload

Nyní můžete nastavení otestovat v prohlížeči.

26.3.8. Vytvoření protokolů programem Calamaris

Calamaris je perlový skript, který vytváří hlášení o aktivitě cache. Tyto reporty jsou dostupné buď v ASCII nebo HTML. Calamaris využívá při sestavování protokolových souborů squidu. Domovskou stránku projektu naleznete na http://Calamaris.Cord.de/.

Program se používá velice jednoduše. Přihlaste se jako uživatel root a použijte následující příkaz:

cat access.log.2 access.log.1 access.log | calamaris -a -w \ 
> /usr/local/httpd/htdocs/Squid/squidreport.html

Při řetězení více protokolových souborů je důležité dbát na chronologické zřetězení jednotlivých souborů tak, aby byly starší soubory uváděny nejdříve.

Můžete použít následující volby:

-a

výstupem budou všechna dostupná hlášení

-w

výstupem je protokol ve formátu HTML

-l

nadpis nebo logo v záhlaví

Další informace o různých volbách obsahuje manálové stránka calamaris.

Klasickým příkladem použití je:

cat access.log.2 access.log.1 access.log | calamaris -a -w \
    >/usr/local/httpd/htdocs/Squid/squidreport.html

V našem příkladu jsme přesměrovali soubor do adresáře /usr/local/httpd/htdocs/Squid/squidreport.html. U vás můžete mít soubory pro Apache uloženy jinde.

Dalším nástrojem, který můžete použít pro generování hlášení o stavu cache je SARG (Squid Analysis Report Generator). Další informace naleznete na odpovídajících internetových stránkách: http://web.onda.com.br/orso/

26.3.9. Další informace o squidu

Podívejte se na domovskou stánku http://www.squid-cache.org/. Zde naleznete uživatelskou příručku a rozsáhlý seznam často kladených dotazů (FAQ). Navíc máte k dispozici HOWTO, které naleznete po nainstalování balíčku howtoen v /usr/share/doc/howto/en/mini/TransparentProxy.gz. Využít můžete i konferenci squid-users@squid-cache.org nebo její archiv na http://www.squid-cache.org/mail-archive/squid-users/


SUSE LINUX 9.2