Squid – část I

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 | přečteno 26912×

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.

Online verze článku: http://www.linuxsoft.cz/article.php?id_article=221