Transparentní proxy
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.
Obsah
Konfigurace programu Squid
Program Squid má konfiguraci uloženu v souboru /etc/squid/squid.conf
. Obvykle obsahuje nápovědu (komentovaná nastavení). Chcete-li nastavení změnit, ujistěte se, že volba není v konfiguračním programu již použita. Pokud je, musíte příslušný řádek upravit do žádané podoby.
Direktiva cache_dir
určuje adresář, kam se budou ukládat dočasné soubory, číslo 100 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. Níže uvedený řádek je implicitní konfigurace, pokud chcete velikost cache větší nebo ji umístit jinam, můžete upravený řádek použít:
cache_dir ufs /var/spool/squid 100 16 256
Následující řádek slouží k aktivaci chybových zpráv v českém jazyce (adresář upravte, zprávy mohou být ve vašem počítači jinde). Pozor – adresář musí být platný, jinak Squid nemusí nastartovat (což je samozřejmě chyba):
error_directory /usr/share/squid/errors/Czech
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 připojovat právě z této adresy, takže je lepší ji do seznamu zahrnout).
acl nasesit src 10.0.0.0/255.255.255.0 acl nasesit src 123.123.123.1
Dále vložte za řádek, na kterém je text: INSERT YOUR OWN RULE(S) následující direktivu:
http_access allow nasesit
Další konfigurace je rozdílná pro Squid do verze 2.6 a pro verze 2.6 a novější:
Squid do verze 2.6
Na začátek konfiguračního souboru /etc/squid/squid.conf
přidejte následující parametry, které slouží k nastavení Squidu jako transparentní proxy:
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
Prvních 6 řádků slouží k zajištění fungování transparentní proxy.
Squid verze 2.6 a novější
Konfigurace je jednodušší. Nalezněte a upravte řádek:
http_port 3128 transparent
Dále je potřeba za definici ACL pravidel ještě přidat (nejlépe k volbě always_direct
):
always_direct allow all
Spuštění programu Squid
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í 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). Zařízení eth0 je vnější rozhraní, 10.0.0.0/24 je vnitřní síť:
iptables -t nat -A PREROUTING -i ! eth0 -p tcp -s 10.0.0.0/24 --dport 80 -j REDIRECT --to 3128
Přesměrování do proxy lze zajistit automaticky i pro programy, které jsou spuštěné na tom samém počítači, pomocí následujících dvou pravidel. První pravidlo stanovuje výjimku pro samotnou proxy (zde je spuštěna pod uživatelem squid (viz volba cache_effective_user
v konfiguračním souboru), protože jinak by došlo k zacyklení:
iptables -t nat -A OUTPUT -o eth0 -p tcp --dport 80 -m owner --uid-owner squid -j ACCEPT iptables -t nat -A OUTPUT -o eth0 -p tcp --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
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 /var/log/squid/cache.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. V prohlížeči Firefox stiskněte a podržte klávesu SHIFT a pak klepněte 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 (v Microsoft Internet Exploreru podržte 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