Jak nejspíš víte, Squid je proxy cache server. Má mnoho
využití - k zrychlení přístupu na webové servery nakešováním opakovaných
žádostí, k zamezení přístupu na stránky s nevhodným nebo pornografickým
obsahem, ... Squid je velmi robustně naprogramován a je vyvíjen pod GPL.
23.6.2004 08:00 | Petr Houštěk | read 27465×
DISCUSSION
Kešování je způsob, jak ukládat vyžádané objekty z Internetu na server blíže
klientovi. Lokální cache pak může ušetřit jak přístupovou dobu, tak kapacitu
linky. Squid také poskytuje určitou úroveň bezpečnosti a anonymity.
Díky své licenci můžete Squid provozovat na téměř všech unix-like operačních
systémech. Předpokládejme, že používáte linux :-) Instalace je vcelku snadná -
pro detaily se podívejte sem.
Samozřejmě můžete použít předkompilovaný balíček z vaší oblíbené distribuce.
Když máme nyní Squid nainstalovaný, stačí ho pouze zkonfigurovat. Konfigurační
soubory jsou implicitně uloženy v adresáři /usr/local/squid/etc, ale ve vaší
distribuci to může být jinde (např. v Debianu je squid.conf v /etc, další
soubory jsou v /usr/lib/squid, ...). Squid používá množství implicitních
nastavení, takže ho lze pustit i téměř prázdným konfiguračním souborem, což
ovšem není příliš užitečné, protože pak Squid odmítá přístup veškerým
klientům.
Základní konfigurace
První volba v konfiguračním souboru squid.conf, která by nás mohla zajímat je
http_port. Ta nastavuje port, na kterém bude Squid poslouchat - může zde být
více než jedno číslo (například 3128 a 8080).
Dále potřebujeme nastavit umístění naší cache pomocí volby cache_dir. První
parametr udává kde se má ukládat, pak její velikost v megabajtech, počet
podadresářů v první a druhé úrovni (je doporučováno tyto dvě hodnoty neměnit a
ponechat původní).
Další z důležitých konfiguračních nastavení je cache_mem, která udává množství
paměti, kterou může Squid alokovat během své činnosti (konkrétně pro
in-transit, hot a negative objects).
Nyní zbývá povolit uživatelům používat proxy. Použijeme toto dočasné řešení k
oprávnění všech uživatelů - detaily budou rozebrány v následující sekci o acl.
acl all src 0.0.0.0/0.0.0.0
http_access allow all
Nyní máme základní konfiguraci hotovou a můžeme spustit poprvé Squid. Můžete
tedy zkusit nastavit svůj prohlížeč, aby ho použil.
Access control list – ACL
Další velmi důležitou věcí jsou ACL. Základní forma autentizace by totiž
měla být vždy použita. Primárním cílem ACL je zastavit neoprávněné uživatele
používat vaši proxy.
Jsou zde dva elementy acl - třídy (classes) a operátory (oprators). Třída
určuje množinu konexí, se kterými se má pracovat. Tato množina může být určena
pomocí ip, typu http žádosti, přípon souborů, autorizace uživatelů, ... Třídy
jsou pak zpracovávány operátory (již jsme se setkali s operátorem
http_access), které můžou povolit přístup, přesměrovat žádost, ...
ACL třídy
Základní syntax je
acl jméno typ string1 string2 ...
Squid pracuje s těmito typy tříd - zdrojová a cílová ip adresa, zdrojová a
cílová doména, regulární výraz odpovídající vyžádané doméně, URL, ..., slova v
URL, slova v cílové nebo zdrojové doméně, aktuální čas, cílový port, protokol
(HTTP, FTP), metoda spojení, typ prohlížeče, jméno/heslo, SNMP komunita, ...
Určující řetězec (string1, ...) se používá k přiřazení spojení k danému acl.
Squid nejdříve ověří typ a podle type rozhodne, jak použít určující řetězec.
Ten může být ip adresa počítače, sítě, regulární výraz, ... Podívejme se nyní
na základní třídy.
Zdrojová/cílová ip adresa
Nejprve si ukážeme příklad,
acl myNet src 192.168.0.0/255.255.0.0
http_access allow myNet
K tomuto acl jsou přiřazeny všechny adresy od 192.168.0.0 do 192.168.255.255 a
je jim povolen přístup do cache. Všechny ostatní konexe budou odmítnuty. Squid
totiž přidává na konec další acl operátor - http_access deny all, pokud
poslední řádka přístup povoluje, nebo http_access allow all, pokud poslední
řádka přístup zamítá. Například pokud máte tuto sadu acl
acl myIP src 192.168.5.13
acl badNet src 192.168.5.0/255.255.255.0
http_access allow myIP
http_access deny badNet
Squid zamezí veškeré spojení ze sítě 192.168.5.0/255.255.255.0 (kromě adresy
192.168.5.13). Pokud se ale připojíte z jiné sítě (řekněme z adresy
192.168.1.13), Squid toto spojení akceptuje.
K přiřazení spojení do acl vzhledem k cílové ip adrese Squid používá typ dst -
použití je podobné.
Zdrojová/cílová doména
Tato třída přiřazuje žádosti podle zdrojové nebo cílové domény. Tyto typy jsou
srcdomain a dstdomain. Není moc doporučované používat acl přiřazení podle
zdrojové domény, protože útočník, který kontroluje reverzní DNS záznamy pro
svůj počítač, je schopen změnit tyto záznamy a obejít srcdomain acl.
Dstdomain přiřazuje spojení podle cílové domény. Toto lze použít například k
blokaci určitých domén s pornografickým obsahem, ... Vyplatí se také blokovat
ip adresu cíle, protože jinak by byl přístup možný při dotazu na číselnou
ip adresu těchto stránek. Zde je příklad, jak zablokovat doménu
www.example.com, která má ip adresu 10.11.12.13. Vstup pak je
acl badDomain dstdomain example.com
acl badIP dst 10.11.12.13
acl myNet src 192.168.0.0/255.255.0.0
acl all src 0.0.0.0/0.0.0.0
http_access deny badDomain
http_access deny badIP
http_access allow myNet
http_access deny all
Regulární výrazy
Pomocí zatím popsaných tříd můžete pouze filtrovat www stránky podle cílových
domén. Značení založené na regulárních výrazech vám umožňuje použít daleko
preciznější filtrování. Regulární výrazy ve Squidu jsou implicitně
case-sensitive, opačného chování lze dosáhnout pomocí prefixu -i. Regulární
výrazy použité Squidem jsou velmi podobné regulárním výrazům např. v Perlu.
Pokud chcete např. zakázat přístup všem požadavkům, které obsahují slovo sex
(nebo SEX, SEx, atd.), použijte např. toto
acl badUrl url_regex -i sex
K označení všech souborů s video obsahem (bráno podle přípony)
acl badUrl url_regex -i \.avi
je možné také použít kombinace
acl badUrl url_regex -i sex.\*\.avi
Regulární výrazy lze také použít ke kontrole zdrojových a cílových domén -
příslušné třídy jsou srcdom_regex a dstdom_regex.
Aktuální čas
Tato třída přiřazuje požadavky vzhledem k aktuálnímu systémovému času. Častým
využitím je filtrovat nevhodné stránky během pracovní doby. Toho lze docílit
vhodnou kombinací s třídou dstdomain (nebo dstdom_regex). Syntax je
následující
acl jméno čas [seznam_dní] [počátek-hodina:minuta-konec-hodina:minuta]
Dny jsou zde reprezentovány jedním znakem - S - neděle, M - pondělí, T -
úterý, W - středa, H - čtvrtek, F - pátek, A - sobota. Pro víkendy tedy můžeme
použít
acl weekends time SA
Cílový port
Pro http komunikaci je určen port 80, který se také nejvíce používá (na tomto
portu téměř každý webový server poslouchá). Některé servery ale poslouchají i
na jiných portech, jako např. 8080. SSL spojení používají port 443. Implicitně
je v squid.conf definován seznam Safe_ports (bezpečných portů):
acl Safe_ports port 80 21 443 563 70 210 1025-65535
což znamená, že spojení na cílové porty 80, 21, 443, 563, 70, 210, 1025, 1026,
..., 65534, 65535 budou zahrnuty v acl Safe_ports. K zamezení přístupu na
ostatní porty můžeme např. použít
http_access deny !Safe_ports
Metoda spojení
Http podporuje několik metod spojení - get, post a connect. Get se používá pro
download, post pro zasílání informací a connect hlavně pro ssl spojení.
Typickým příkladem použití je blokovat metodu connect pro jiná než ssl
spojení. Tato metoda totiž umožňuje posílat data v obou směrech v libovolném
čase, takže pokud máte nesprávně zkonfigurovanou proxy, může být zneužita ke
spojení např. na vzdálený telnet server z proxy serveru a tím obejít paketové
filtry. Můžete použít tento příklad
acl connect_method method CONNECT
acl SSL_PORTS port 443 563
http_access deny connect_method !SSL_PORTS
To by bylo asi vše o acl třídách, v příštím díle budu pokračovat s acl operátory.