Proxy server

Hana Prokešová, xprokes1@fi.muni.cz


Obsah


Co je to proxy server

Proxy server je server, který je umístěn mezi klientem a serverem a dělá prostředníka v jejich komunikaci. Proxy se tváří vůči klientovi jako server a přebírá jeho požadavek. Ten pak sám odešle serveru a také přebírá odpověď, kterou nakonec doručí klientovi. Proxy server se tady chová jako server při komunikaci s klientem a jako klient při komunikaci se serverem. Proxy server navíc může komunikaci, kterou obsluhuje měnit a zpracovávat (filtrování, cachování, statistika...). Proxy serverem je možné zabezpečovat síť (kontroluje přístup ven, lze použít místo NAT; povoluje pouze služby, které podporuje; klient nekomunikuje přímo s vnější sítí), urychlovat odezvu z vnější sítě pomocí cache, řídit přístup ke službám.

Aby klient využíval ke komunikaci proxy server je většinou potřeba jej nějak nastavit, případně upravit. Pokud všechny požadavky směřují automaticky na proxy, mluvíme o transparentním proxy serveru

Dva druhy proxy serverů:

  • Aplikační proxy servery -- pouze pro určité služby (http, ftp...). Na straně klienta se většinou stačí nastavit jen jméno serveru a port.
  • SOCKS proxy servery -- Fungují pro libovolné (TCP,UDP) služby. Musí být podporováno na straně klienta.
  • Zpět na obsah

    HTTP proxy cache

    Rozšířené použití proxy serveru je jako HTTP proxy cache. Tento typ proxy serverů disponuje pamětí (cache) pro uchování odpovědí serverů, které jsou zde k dispozici při dalším požadavku.

    Související hlavičky protokolu HTTP

    Pamatování objektu v cache paměti se řídí údaji v HTTP hlavičce Expires: a Pragma: no-cache odpovědi serveru. (Hlavička Expires: udává čas, kdy vyprší platnost dokumentu, případně může obsahovat "0", nebo "now".) Pokud je čas v hlavičce Expires: nižší než v hlavičce Date:, nesmí být obsah uložen v cache paměti.

    Při požadavku klienta se používají hlavičky If modified since: a Pragma: no-cache. Hlavička If modified since: způsobí znavunačtení dokumenty pouze pokud byl změněn. To dělá "Reload" ve většině browserů. Samotné Pragma: no-cache vynutí získání nové kopie se serveru.

    Autentizace vůči proxy

    HTTP proxy cache lze většinou nastavit i pro řízení přístupu. Autentizace vůči proxy probíhá takto: Proxy obdrží HTTP požadavek, hledá hlavičku Autorization:. Pokud není, vrátí kód 407 (Proxy Authentication Required). Většina klientů (prohlížečů) reaguje výzvou k zadání jména a hesla. Jmého a heslo je zakódováno metodou Base64 a odesláno v hlavičce Autorization:. Proxy obsah hlavičky porovná s uloženými údaji.

    Zpět na obsah

    Squid

    Squid je proxy cache server, který umí obsluhovat protokoly HTTP, FTP, gopher a další využívajíci url. Squid umožňuje řízení přístupu a autentizaci vůči proxy.

    http://www.squid-cache.org/

    Instalace:

    Squid je možné zkompilovat ze zdrojových kódů, samozřejmě pro většinu distribucí je dostupný jako binární balík.

    Po instalaci je nutné inicializovat adresářovou strukturu cache příkazem /usr/sbin/squid -z. Některé distribuce provedou tuto inicializacii automaticky po nainstalovaní balíku, nebo při prvním spuštění.

    Konfigurace

    Konfigurace je uložena v souboru squid.conf, který najdeme v /etc/ nebo v /etc/squid/. Konfigurační soubor je kvalitně okomentvaný a obsahuje základní nastavení.

    Skládá se z několika sekcí:

    NETWORK OPTIONS
    určuje porty, na kterých Squid poslouchá.
    http_port 3128 -- port na kterém přijímá požadavky od klientů
    ostatní porty určují kde probíhá komunikace s rovnocenými proxy servery. Čím méně otevřených portů tím lépe. Port zablokujeme nastavením na 0
    OPTIONS WHICH AFFECT THE CACHE SIZE
    nastavní velikosti cache paměti a objektů, které budou cachovany.
    cache_replacement_policy lru -- algoritmus pro správu položek v cache. Nastavení jiného algoritmu než lru (last recently used) vyžaduje většinou rekompilaci.
    LOGFILE PATHNAMES AND CACHE DIRECTORIES
    logovací soubory a adresář cache paměti
    cache_dir ufs /var/spool/squid 100 16 256 -- nastavení adresáře s cachovanými objekty. První parametr určuje způsob uchovávání souborů, druhý parametr určuje adresář ve kterém se nachází struktura cache paměti. Třetí parametr určuje velikost cache na disku, poslední dvě hodnoty udávají počet podadresářu v adresáři s cache. V defaultním nastavení se tedy vytvoří 16 adresářů z nichž každý má 256 podadresářů ve kterých se uchovávají cachované objekty. Po každé změně položky cache_dir je potřeba znova zinicializovat adresářovou strukturu cache příkazem squid -z.
    OPTIONS FOR TUNING THE CACHE
    umožňuje například zakázat stahování velkých souborů

    Řízení přístupu

    Na řízení přístupů slouží ACL (access control list). Každý ACL záznam se skládá nejmémě ze 4 částí

    acl jméno typ hodnota [hodnota1 hodnota2 ... ]
    nebo
    acl jméno typ "soubor"
    Na položku jméno se odvoláváme v samotných pravidlech pro řízení přístupu. Za jménem následuje typ a hodnota nebo více hodnot, případně cesta k souboru uzavřená v uvozovkách. Tento soubor pak musí obsahovat hodnoty po jedné na naždém řádku.

    Popis všech typů je zakomentován v souboru squid.conf. Ty nejužitečnější:

    src -- zdrojová adresa, více adres nebo rozsah adres, příp. doménové jméno
    dst -- cílová adresa, rozsah adres, doména
    srcdom_regex [-i]-- zdrojová adresa vyhovující regulárnímu výrazu. (-i znamená, že se ignoruje rozdíl ve velikosti písmen)
    dstdom_regex [-i]-- dtto pro cílovou adresu.
    port -- cílový port, porty nebo rozsah portů
    proto -- protokol (HTTP, FTP)
    method -- metoda pro HTTP (POST, GET)
    browser [-i] -- regulární výraz odpovídající označení prohlížeče.
    time [day] [h1:m1-h2:m2] -- čas udaný dnem v týdnu nebo časem (nebo obojím); označení dnů - MTWHFA
    proxy_auth -- autentizace uživatele vůči proxy
    Samotné řízení přístupu se provádí direktivou
    http_access allow|deny [!]jméno ...
    parametr allow (deny) povoluje (zakazuje) přístup pro (v acl záznamu) definované jméno. Pokud je před jménem uveden "!", platí negace. Pokud je za sebou uvedeno více jmen platí mezi nimi vztah AND. (Pozor pokud chceme např. uvést více časů!)

    Direktivy http_access se vyhodnocují postupně a uplatňuje se první shoda. Proto je vhodné na konec umístit direktivu s defaultní politikou (nejlépe http_access deny all)

    Autentizace

    Obecný postup autentizace vůči proxy, který byl popsán výše má jednu zásadní nevýhodu: jméno a heslo putuje od klienta k proxy pouze zakódované Base64 a tedy v nezašifrované podobě a může být odposlechnuto.

    Bezpečnější autentizace je prováděna mimo hlavní proces Squidu v relativně samostatném autentizačním procesu, který čte na standardním vstupu uživatelská jména a hesla a na standardní výstup odpovídá ERR nebo OK. Tato technika umžňuje využít různá autentizační schémata.

    Squid podporuje autentizaci přes LDAP, PAM, SMB, NCSA a další.

    Vybraný způsob autentizace se zapne v souboru squid.conf volbou authenticate_program. Jako hodnotu dáme cestu k autentizačnímu programu s parametry příkazového řádku.

    Uživatele, které chce me autentizovat určíme v acl položce.

    Programy na zpracování logů

    Zpět na obsah

    Specializované proxy servery

  • Internet Junkbuster Proxy -- blokuje bannery, cookies a pod. Šířen pod GPL
  • Guidescope -- podobný Junkbusteru (kompatibilní), jednodušší na konfiguraci
  • Privoxy -- proxy server zaměřený na ochranu soukromí (filtrování obsahu stránek, kontrola přístupu, filtruje "junk", spravuje cookies...), založený na Junkbasteru, větší možnosti konfigurace.
  • Zpět na obsah

    Proxy servery pro jiné protokoly

    Pokud potřebujeme proxy server pro jiné služby s největší pravděpodobností je najdeme v balíku TIS FWTK (Fire Wall Tool Kit). Původně komerční sada programů byla uvolně na pro volné použití a obsahuje řadu specializovaných proxy serverů:

    Pokud chcete FWTK stáhnout, je velmi vhodné přečíst si README file ;-))

    http://www.fwtk.org/
    Zpět na obsah

    SOCKS5 proxy

    SOCKSv5 protokol je standard definovaný v rfc1928 jako prototokol pro realizaci proxy v transportní vrstvě. Idea SOCKS proxy serveru je spojit obsluhování všech služeb jedním proxy serverem místo specializovaného serveru pro každou službu v aplikační vrstvě. Protokol SOCKSv5 umožňuje autentizaci, a proxy služby jak pro protokol TCP, tak UDP.

    www.socks.permeo.com/AboutSOCKS/SOCKSvF.asp -- Domovská stránka SOCKS Proxy protokolu
    http://dcfonline.sfu.ca/ying/linux/socks5/ -- Šikovné Mini-HowTo
    Zpět na obsah