Proxy servery
Obsah
Proxy server je program, který dělá prostředníka při komunikaci HTTP klienta se servery na Internetu.
Při požadavku klienta o danou www stránku proxy server zkontroluje, zda ji již nemá u sebe v cache a
buď klientovi pošle svou lokální kopii, nebo aktuální stránku z Internetu.
Proxy servery se nepoužívají jen ke cachovaní
stránek pro případné další použití (tzv. cache proxy server), ale i k odfiltrováváni reklamních
banneru, zakazání přístupu na "nepovolene" servery či různé statistiky přístupu.
Pro podporu funkcionality cache serveru byly do protokolu HTTP/1.0 (RFC1945) a HTTP/1.1 (RFC2616) zařazeny hlavičky:
- Pragma: no-cache
- Dokument nelze brát z cache. Vzdy se požaduje orginál ze serveru.
- Expires: HTTP-date
- Datum a cas vypršení platnosti dokumentu.
Po tomto datu se musi dokument znovu
stáhnout z cíloveho serveru. Je-li datum 0,
znamena to, že platnost vyprší okamžitě. Je-li čas
v Expires starší než Date, nesmí být stránka
uložena do cache.
- Cache-control: no-cache | max-age | public | ...
- Protokolem HTTP/1.1 definovane rozšíření údajů pro cache server.
- Last-Modified, If-Modified-Since
- V hlavičce Last-Modified je definovaný datum poslední úpravy dokumentu.
Je možné poslat serveru dotaz If-Modified-Since. Nezměnil-li se dokument, je
odpovědí pouze 304 Not modified bez těla dokumentu. Proxy server pak clientovi pošle
nacachovanou stránku.
- Etag, If-None-Match, If-Match
- Server kazdemu dokumentu vytvoří jednoznačnou značku Etag, která se při modifikaci mění. Při dotazu If-None-Match zjistí, zda ETag existuje, nebo se už změnil. Podle toho určí zda poslat originál, či lok. kopii.
Proxy server čte jenom hlavičky dokumentu, nedívá se dovnitř dokumentu, takže
vnořené tagy <meta http-equiv=Pragma ...> nemají na cachování vliv.
Squid je jedním z nejpoužívanějěích proxy serverů. Dokáže si poradit i s FTP, Gopher a
SSL. Umí cachovat DNS dotazy. Běží na většině Unix-like systemů (pod Windows v prostředí Cygwin).
Instalace
Z adresy www.squid-cache.org stáhneme stabilni 2.5 nebo vývojovou 3.0 verzi. Rozbalíme a standardne zkompilujeme
% ./configure --prefix=/usr/local/squid
% make all
% make install
Konfigurace
Veškerá konfigurace se nachází v souboru /etc/squid/squid.conf. Nejdůležitější volby jsou
- cache_effective_user, cache_effective_group - práva pod kterými daemon běží
- cache_dir - adresář, do kterého se budou ukládat dokumenty
- cache_mem - velikost cache v paměti
- http_port - číslo portu, na kterém daemon posloucha
- cache_peer - nastaveni "rodičovského" cachovacího serveru.
- redirect_program - nastaví program, kterému přichází na vstup klientem požadované URL, výstupem je pak modifikované URL pro SQUIDa.
Nejznámějším je např s regulárními výrazy pracující SQUIRM.
- auth_param - nastaví externí program, kterým chceme ověřovat identitu uživatele (lze použít LDAP, SMB, PAM, SOCKS5, MYSQL, ... )
Nastavení přístupu
K nastavení kdo může a nemůže SQUID využívat slouží sofistikovaný systém Access Control List.
Řádky začínající acl jsou definicemi skupin, které využijeme pri povolování či zakazování přístupu.
acl <jmeno> <typ> <string1> <string2> ...
jmeno dává jednoznačnou identifikaci skupiny
typ muze byt zdrojová či cílova adresa (src/dst), protokol, regulární výraz, port, čas, atd ...
string je hodnota parametru pro typ
Příklady:
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl all src 0.0.0.0/0.0.0.0
acl allowed_hosts src 10.0.10.0/255.255.255.0
Třída manager jsou požadavky, které používají speciální SQUIDův protokol jen pro administrativní účely.
Třída localhost jsou požadavky přicházejicí z loopbacku a třída all je třídou
vsech moznych adres.
Operátor http_access povoluje/zakazuje skupinám přístup k proxy. V konfiguračním souboru záleží na pořadí
a vyhodnocuje se tak, ze SQUID zkouší požadavek namatchovat odshora na jednotlivé řádky. Při prvním úspěchu vyhodnocování
ukončí.
http_access allow|deny [!]jmeno_acl
Příklad:
http_access deny manager all
http_access allow allowed_hosts
Mezi acl na řádku je logické AND, takže
první řádek říká, že se mají zakázat všechny administrativní požadavky (třída manager) jdoucí z libovolné adresy (třída all).
Druhý řádek povoluje přístup pro hosty ze síte 10.0.10.x
Pokud dotaz nenamatchuje na žádný řádek, bere se jako úspěšný. Proto je třeba na konci zakázat přístup odevšad.
http_access deny all
Autentizace
V acl nadefinujeme skupinu uživatelů, kteří se musí pro přístup k proxy přihlásit. Parametrem REQUIRED vynutíme autentizaci pro všechny platná uživatelská jména.
acl prihlaseni proxy_auth user
acl prihlaseni proxy_auth REQUIRED
http_access allow prihlaseni
Spuštění a logování
Příkazy
$ squid -z
$ squid
se vytvoři adresařová hierarchie v adresáři s cache pro snadnější přísup k záznamům. Poté daemona squid spustíme.
Pokud všechna nastavení byla v pořádku a squid se spustil, můžeme si jej hned vyzkoušet.
$ squidclient -h cache.domena.cz -p 3128 http://www.squid-cache.com/
A po nekolikerém stažení zadané stránky se podívat do logu /var/log/squid/access.log
1068644954.337 959 127.0.0.1 TCP_MISS/200 550 GET http://www.is.co.za/ - DIRECT/196.35.72.14 text/html
1068644964.878 1 127.0.0.1 TCP_HIT/200 559 GET http://www.is.co.za/ - NONE/- text/html
Jednotlivé položky představují:
time elapsed remotehost code/status bytes method URL rfc931 peerstatus/peerhost type
Pro zprehlednění údajů můžeme použít skript calamaris.pl, který získané data
převede do tabulek a přidá procentualni statistiku.
Transparentni proxy
Squid může běžet jako server poslouchající na libovolnem portu a všichi klienti, kteří chtějí SQUID využívat si musí v prohlížeči nastavit
proxy server port a nebo lze SQUID nakonfigurovat jako tzv. transparentní proxy.
Musime router nastat tak, aby se veškerý provoz ze sítě směřující na port 80 přesměroval na port SQUIDa
iptables -t nat -A PREROUTING -p tcp --dport 80 -s vnitrni_sit -i ! vnejsi_interfejs -j REDIRECT --to-port squiduv_port
a do souboru squid.conf přidáme:
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
Specializované proxy servery
Privoxy
Proxy server s vylepšeným filtrováním obsahu zaměřený především na bezpečnost. Umí zpracovavat cookies, odstraňovat reklamní bannery, zabránit otvírání PopUp oken, atd.
Novinkama jsou:
- Vylepšená podpora cookies (session)
- "Odanimovávání" GIFu
- Podpora PERLovskych regulárních výrazů
Je založen na projektu Junkbuster. Má webové řídící rozhraní na config.privoxy.org, které navazuje spojení s localhostem na portu 8118.
Aktuální stabilní verzi 3.0.2 lze stahovat z www.privoxy.org.
Junkbuster
Proxy server napsaný v C pod licenci GNU. Běží pod Win95-XP a Unixových systémech. Má řídící webove rozhraní, nemodifikuje obsah stránek.
Aktualni verzi lze stahnout z internet.junkbuster.com.
Socks5
Socks5 je protokol nad transportní vrstvou popsaný v RFC1928. Dělá proxy
aplikacim postavenym nad UDP.
Více viz www.socks.permeo.com.
FWTK
The FireWall ToolKit je sada proxy serveru pro firewallove zabezpečení sítě.
součástí balíku jsou např telnet-gw, http-gw, tn-gw, x-gw a další.
Více viz www.fwtk.org
Odkazy