Transparentní proxy

Z Milan Kerslager
Verze z 30. 10. 2007, 21:48, kterou vytvořil Milan.Kerslager (diskuse | příspěvky) (Konfiguarace programu Squid: typo)
Přejít na: navigace, hledání

Počítače ve vnitřní síti mohou využívat k surfování maškarádu, jak je uvedeno jinde. Nicméně pokud bude linka do Internetu pomalá, bude lepší ve vnitřní síti zřídit proxy cache, která bude často stahované dokumenty nebo obrázky ukládat na disk a při opakovaném požadavku je velmi rychle poskytne. Zřízení proxy cache spočívá ve spuštění programu Squid a jeho nastavení tak, aby byl ochoten sloužit nejen aplikacím spuštěným na stejném počítači, ale i stanicím ve vnitřní síti.

Nastavení NAT

Pokud již proxy zřizujete, je lepší ji rovnou udělat transparentní. Ušetříte si tak práci s obcházením všech stanic a nastavováním parametrů proxy do všech používaných prohlížečů. Princip je založen na použití NAT (Network Address Translation), kterému dáme pokyn, aby všechny datagramy mířící z vnitřní sítě do Internetu na port 80 (tj. k WWW serverům) přesměroval do proxy (tj. na port, kde naslouchá Squid). Přesměrování do proxy lze zajistit automaticky i pro programy spuštěné na tom samém počítači pomocí druhého pravidla (eth0 je vnější rozhraní, 10.0.0.0/24 je vnitřní síť):

iptables -t nat -A PREROUTING -p tcp -i ! eth0 -s 10.0.0.0/24 --dport 80 -j REDIRECT --to 3128
iptables -t nat -A OUTPUT -p tcp -o eth0 --dport 80 -j REDIRECT --to 3128

Všechna nastavení iptables lze uložit. Při každém startu je můžeme obnovovat tak, že povolíme start služby iptables. Uložení aktuálních pravidel a povolení jejich obnovení při startu pak zajistíme těmito dvěma příkazy:

/etc/init.d/iptables save
chkconfig iptables on

Konfigurace programu Squid

Nesmíme zapomenout na konfiguraci samotného programu Squid. Kromě povolení přístupu k jeho službám pro stanice z vnitřní sítě (pomocí definice ACL pravidla nasesit) musíme proxy říct, že bude pracovat jako transparentní. Proto přidejte na začátek jeho konfiguračního souboru /etc/squid/squid.conf následující parametry:

http_port 3128
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
httpd_accel_single_host off
cache_dir ufs /var/spool/squid 700 16 256
acl nasesit src 10.0.0.0/255.255.255.0
acl nasesit src 123.123.123.1
error_directory /usr/share/squid/errors/Czech

Prvních 6 řádků slouží k zajištění fungování transparentní proxy. Direktiva cache_dir určuje adresář, kam se budou ukládat dočasné soubory, číslo 700 je maximální velikost cache v MB. Další dvě čísla definují počet adresářů, do kterých se budou soubory ukládat a není je obvykle potřeba měnit. ACL pravidla pro nasesit definují IP adresy, ze kterých povolíme k cache přístup. První řádek definuje pomocí masky IP adresy ve vnitřní síti a další řádek zahrnuje mezi povolené IP adresy i vnější IP adresu našeho počítače (některé místní programy se mohou místo rozhraní loopback spojovat právě z této adresy, takže je lepší ji do seznamu zahrnout). Poslední řádek slouží k aktivaci chybových zpráv v českém jazyce. Pozor – adresář musí být platný, jinak Squid nemusí nastartovat (což je samozřejmě chyba).

Dále je potřeba do stejného konfiguračního souboru Squidu vložit mezi seznam pravidel povolujících HTTP přístup k cache řádek, který se odkáže na naši nadefinovanou síť nasesit. Tj. vložte za řádek, na kterém je text: INSERT YOUR OWN RULE(S) následující direktivu:

http_access allow nasesit

Program Squid spustíme a zajistíme jeho automatické spuštění při startu systému:

/etc/init.d/squid start
chkconfig squid on

Nastavení klientů

Na klientovi ve vnitřní síti (Internet Explorer, Mozilla apod.) nastavte, aby nepoužíval žádnou proxy (transparentní funguje sama). V MSIE je to menu Nástroje - Možnosti - Připojení - Nastavení místní sítě - a zde zrušit všechna tři zaškrtnutí (automatická konfigurace MSIE je rozebrána na jiném místě).

Sledování činnosti

Pokud bude transparentní proxy správně fungovat, budou se objevovat záznamy o poskytnutých stránkách v logovacím souboru. Průběžně můžete přibývající údaje sledovat např. pomocí příkazu tail (při použití parametru -f přerušíte vypisování stiskem kombinace kláves CTRL+c). Hlášení programu se ukládají do logovacího souboru /var/log/squid/cache.log.

tail -f /var/log/squid/access.log

Cache na jiném disku

Někdy je vhodné umístit prostor pro odkládání cachovaných souborů na speciální oddíl (partition). Zbytek systému souborů tak nebude zatěžován častými zápisy, nebude tlačeno na riziko vyšší fragmentace zbytku systému souborů a budeme moci nastavit parametry pro vyšší výkon. Pokud se k tomuto kroku rozhodnete, zastavte program Squid, smažte případné nacachované soubory (můžete je do nového oddílu i přesunout), vytvořte oddíl o příslušné velikosti (viz direktiva cache_dir), nastavte na něm příslušná přístupová práva (aby mohl Squid zapisovat) a pak můžete proxy znovu spustit (správný start zkontrolujte v logu):

/etc/init.d/squid stop
rm -rf /var/spool/squid/*
fdisk /dev/hda                           # vytvoření oddílu
mke2fs -b 1024 -N 200000 -m0 /dev/hda3   # vytvoření FS
tune2fs -j -c0 -i0 /dev/hda3             # ext3, bez periodických kontrol
e2label /dev/hda3 Squid                  # nastavení labelu
mount /dev/hda3 /var/spool/squid         # připojení oddílu
chown squid.squid /var/spool/squid       # nastavení práv
/etc/init.d/squid start

Ve výše uvedeném příkladu je použit oddíl, na kterém je vytvořen systém souborů ext3. Podle pozorování je vhodné snížit velikost bloku na 1024 bajtů a na každé 2GB diskového prostoru vytvořit cca 200000 inodů (normálně se jich vytváří více, avšak zbytečně zabírají datový prostor). Pro další zvýšení výkonu můžete při připojování oddílu použít volby noatime,nosuid,noexec,nodev. První vyřadí aktualizaci časů při přístupech do adresářů (zvýšení výkonu), ostatní jsou spíše bezpečnostní opatření. Záznam v souboru /etc/fstab by pak mohl vypadat třeba takto:

LABEL=Squid /var/spool/squid  ext3 noatime,nosuid,noexec,nodev 1 2

Při použití transparentní proxy se někdy můžete setkat s tím, že prohlížeč bude vytrvale zobrazovat starou stránku, i když na serveru bude již novější. V takovém případě může být chyba buď přímo v prohlížeči na stanici, který vytrvale zobrazuje stránku, kterou má uloženu ve své cache na pevném disku. Proto zkuste v prohlížeči nejprve stisknout a podržet klávesu SHIFT a pak klepnout myší na ikonu pro obnovení stránky. Tím byste měli dosáhnout toho, že si prohlížeč vyžádá stránku přímo od serveru znovu (zkuste případně podržet i klávesu CTRL). Pokud to nepomůže, vyprázdněte cache na disku (v Internet Exploreru je to menu Nástroje - Možnosti Internetu - Odstranit dočasné soubory Internetu.

Nežádoucí cachování

Někdy i přes všechnu snahu nelze získat novější verzi stránky. Příčinou může být nevhodná informace o stáří či trvanlivosti stránky, kterou Squidu poskytne server, na kterém je stránka umístěna. V takovém případě je nejvhodnější umístit neposlušné servery do pravidla, které zajistí, že se jejich dokumenty nebudou ukládat do cache, tj. přidat do souboru /etc/squid/squid.conf tyto řádky:

acl donotcache domain.cz
always_direct allow donotcache