Proxy servery

Radek Šimčík, xsimcik@fi.muni.cz


Obsah


Co je proxy server

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.

Hlavičky HTTP

Pro podporu funkcionality cache serveru byly do protokolu HTTP/1.0 (RFC1945) a HTTP/1.1 (RFC2616) zařazeny hlavičky: 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

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

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: 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