Proxy servery

Ladislav Blicha, xblicha@fi.muni.cz


Obsah


Čo je proxy server

Proxy server je špeciálny typ servera, ktorý sa umiestňuje medzi klienta a servery, s ktorými komunikuje. Proxy server sa tvári voči klientovi ako server a voči serveru ako klient. Výhodou je, že proxy server pozná požiadavku klienta a vie mu doručiť odpoveď, aj keď klient samotný nemôže alebo nevie priamo komunikovať so vzdialeným serverom. Proxy server disponuje cache pamäťou, v ktorej si ukladá odpovede serverov na požiadavky klienta. Ak proxy server nájde požadovanú odpoveď v cache, vie odpovedať klientovi rýchlejšie, ako keby musel odpoveď opäť získať. Čo má za následok rýchlejšie získanie požadovanej informácie a taktiež zmenšenie provozu na sieti. Veľkosť cache je však obmedzená. Aby sa do cache mohli ukladať ďalšie údaje, musí sa z nej niečo odstrániť. Na to existuje niekoľko algoritmov, napr. odstránie najmenej používaných údajov.


HTTP hlavičky

HTTP hlavičky dávajú veľa možností regulovať to, ako bude cache zachádzať objektami. HTTP hlavičky sú posielané serverom pred samotnou HTML stránkou. Typická hlavička odpovede HTTP 1.1 vyzerá asi takto:

HTTP/1.1 200 OK
Date: Fri, 30 Oct 1998 13:19:41 GMT
Server: Apache/1.3.3 (Unix)
Cache-Control: max-age=3600, must-revalidate
Expires: Fri, 30 Oct 1998 14:19:41 GMT
Last-Modified: Mon, 29 Jun 1998 02:28:12 GMT
ETag: "3e86-410-3596fbbc"
Content-Length: 1040
Content-Type: text/html


Squid

Možnosti využitia proxy servera si predstavíme na populárnom a kvalitnom open-source proxy serveri pre cachovanie WWW stránok. Jeho meno je Squid (http://www.squid-cache.org). Pred inštaláciou Squida si treba uvedomiť, že prevažná časť činnosti proxy servera spočíva v uchovávaní objektov v pamäti a na disku. Čím viac budete mať pamäte, tým rýchlejší bude Váš proxy server. Ak sa údaje budú uchovávať na disku, rýchlosť diskov rapídne ovplyvní výkon proxy servera.

Inštalácia

Z adresy www.squid-cache.org si stiahneme stabilnú 2.5 verziu. Aktuálne squid-2.5STABLE9. Rozbalíme a standardne zkompilujeme

        % ./configure --prefix=/usr/local/squid
        % make all
        % make install

Konfigurácia

Ešte predtým ako sa pustíme do samotnej konfigurácie, je dobré pridať do /etc/passwd usera squid (useradd -d /usr/local/squid -s /bin/false squid), ak to za nás automaticky neurobil baličkovací nástroj. Ďalšou dôležitou vecou je, aby uživateľ squid mal prístup do adresára, kde sa nachádza cache.

Hlavným konfiguračným súborom je squid.conf, väčšinou umiestnený v adresári /etc/squid, alebo /usr/local/squid/etc. Určite oceníte veľa dobrých komentárov, ktoré však prispievajú k úctihodnej veľkosti konfiguračného súboru. Všetky voľby sú nastavené na rozumné defaultné hodnoty a zakomentované. Pri zmene netreba zabúdat riadok odkomentovať.

Po nainštalovaní Squida treba vytvoriť adresárovú štruktúru, v ktorej Squid uchováva obsah svojej cache. Niektoré distribúcie vytvoria túto štruktúru automaticky pri inštalácii alebo prvom spustení. Ak to však nie je váš prípad alebo ste Squid kompilovali zo zdrojových textov, musíte to spraviť ručne. Jedná sa o jednoduchý príkaz: /usr/local/squid/sbin/squid -z

Teraz si uvedieme ďalšie užitočné parametre:

Prejdeme teraz k samotnej konfigurácii súboru squid.conf a ukážeme si zopár základných nastavení:

Riadenie prístupu pomocou ACL

Na kontrolu prístupu slúžia v nastavení Squida zoznamy na kontrolu prístupu (ACL - Access Control Lists).

Každý ACL sa skladá najmenej zo štyroch častí:

acl meno typ hodnota
acl meno typ "súbor"

Na samotné riadenie prístupu slúžia direktívy "http_acces" v tvare:

http_access allow|deny [!]aclname

Kľúčové slovo allow alebo deny určujú, či direktíva povoľuje alebo blokuje prístup Meno ACL, ktoré určuje, čo budeme povoľovať alebo blokovať. Ak je prvým znakom "!", význam ACL sa neguje. Ak uvediete viacero ACL, vyhodnocujú sa tak, akoby medzi nimi bol operátor "AND". Na poradí direktív http_access záleží.

Autentizácia

O autentizácii sme sa už zmienili pri direktíve auth_param a teraz to trošku rozvedieme. Squid podporuje autentizáciu cez LDAP, PAM, SMB, NCSA, MSNT, SASL..., takže je len na nás, čo si vyberieme. Ďalej si musíme vytvoriť pomocou acl skupinu uživatelov, ktorá ma byť autentizovaná, alebo parametrom REQUIRED vynútime autentizáciu pre každého. Napríklad takto:

acl password proxy_auth REQUIRED
http_access allow password

Logovanie

Squid využíva prevažne tieto tri logovacie súbory:

Cesty k týmto súborom nastavíme v konfiguračnom súbore pomocou direktív cache_access_log, cache_log, cache_store_log.

Existuje celá rada nástrojov, ktoré nám sprehľadňujú tieto logovacie súbory. Príkladom je perlovský skript calamaris, ktorý slúži k vygenerovaniu tabuliek do html súboru.

Transparentné proxy

Pre používanie proxy servera je nevyhnutné si v prehliadači nastaviť adresu a port, na ktorom proxy server počúva. Môžeme tomu však zabrániť používaním transparentného proxy servera, čo v preklade znamená asi toľko, že všetky HTTP požiadavky smerujúce von zo siete budú z portu 80 presmerované na port, na ktorom beží náš proxy server.

iptables -t nat -A PREROUTING -p tcp --dport 80 -s vnitrni_sit -i ! eth0 -j REDIRECT --to-port 3128

Ak by sme chceli squid používať ako transparentný, musíme pridať(pozmeniť) nasledujúce riadky v konfiguračnom súbore.

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on


Špecializované proxy servery

Privoxy - je HTTP proxy server, ktorý spravuje cookies, kontroluje obsah webových stránok, odstraňuje z nich reklamy a rôzne bannery a potlačuje tvorbu vyskakovacích okien.

Junkbusters - ďalší z proxy serverov, ktoré blokujú v HTTP komunikácii reklamné bannery a neautorizované cookies

SOCKS5 - Socks5 je protokol na realizáciu proxy v transportnej vrstve. SOCKS proxy servery fungujú pre ľubovoľné služby za predpokladu, že aplikácia podporuje tento typ proxy servera.

Proxy servery pre iné protokoly

Existujú aj iné proxy servery, ako tie nad protokolom http. Využívajú sa pre rôzne služby, ako napriklad:


Odkazy