Proxy servery

Branislav Náter, brano@email.cz


Obsah


Čo je to proxy server?

Proxy server samotný slúži vačšinou ako relatívne bezpečné spojenie sietí, ktoré medzi nimi umožňuje len presne definovanú komunikáciu. Je možné povoliť napr. HTTP prístup len pre určitú skupinu používateľov alebo počítačov k definovanej skupine zdrojov.

Klienti sa nepripájajú priamo k požadovanému zdroju (napr. www stránke) ale spoja sa s proxy serverom a ten získa požadovanú informáciu z originálneho zdroja. Proxy server je možné použiť ak chceme pripojiť k Internetu sieť v ktorej sa používajú privátne adresy.

S proxy-cache serverom je naviac možné znížiť čas odozvy ako aj premávku, ktorá medzi sieťami vzniká pri opakovanom prístupe na rovnaký zdroj.

Činnosť proxy-cache servera možno opísať v niekoľkých bodoch:

  1. klient sa spojí s proxy serverom namiesto toho, aby kontaktoval vzdialený server
  2. proxy server prevezme požiadavku klienta, ktorá obsahuje adresu vzdialeného servera, s ktorým chce klient komunikovať
  3. proxy server sa stane klientom, spojí sa so vzdialeným serverom a odovzdá mu požiadavku od svojho klienta
  4. vzdialený server odpovie
  5. proxy server prevezme odpoveď od vzdialeného servera a doručí ju svojmu klientovi

Cachovanie, riadenie pomocou hlavičiek protokolu HTTP

Problém pri cachovaní www je možná strata aktuálnosti dát. Proxy server môže mať uloženú staršiu verziu dokumentu ako má pôvodný server. Je teda potrebné nájsť kompromis medzi aktuálnosťou dát a úsporou dátovej premávky.

HTTP hlavičky poskytujú určité možnosti ako ovplyvniť chovanie proxy-cache serveru k HTTP objektom. Niesú vidieť v HTML a zvyčajne sú automaticky generovné webovým serverom.

Príklad HTTP hlavičky:

HTTP/1.1 200 OK
Date: Sun, 20 Nov 2005 12:28:39 GMT
Server: Apache/1.3.26 (Unix)
Content-Length: 2238
Expires: Sun, 20 Nov 2005 12:28:39 GMT
Cache-Control: max-age=3600, must-revalidate
Pargma: no-cache
Last-Modified: Thu, 03 Nov 2005 13:22:55 GMT
ETag: "3ef73-bb6-436a0f2f"-2
Content-Type: text/html

SQUID

SQUID je veľmi vykonný Web proxy cache server. Typicky sa využíva k pripojeniu vlastnej siete k Internetu. Squid umožňuje klientom pracovať napr. s protokolmi HTTP, HTTPS, FTP. Domovská stránka projektu sa nachádza na adrese http://www.squid-cache.org odkiaľ je možné stiahnuť binárne balíčky či zdrojové kódy v stabilnej verzii 2.5.


Konfigurácia

Hlavný konfiguračný súbor, squid.conf, je väčšinou umiestnený v adresari /etc/squid/. Súbor je veľmi dobre komentovaný a všetko je pre názornosť nastavené na viacmenej rozumné implicitné hodnoty. Ak nezmeníte implicitné hodnoty, ponechajte daný riadok zakomentovaný.

Popis niektorých volieb v squid.conf:

NETWORK OPTIONS
---------------
# http_port 3128 #port na ktorom server ocakava poziadavky

# icp_port 3130 #port prostrednictvom ktoreho komunikuje so susednými proxy serverami.

OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM
-----------------------------------------------------
cache_peer parent.foo.net       parent    3128  3130
cache_peer sib1.foo.net         sibling   3128  3130

OPTIONS WHICH AFFECT THE CACHE SIZE
-----------------------------------
# cache_mem 8 MB

# maximum_object_size 4096 KB
# minimum_object_size 0 KB

# maximum_object_size_in_memory 8 KB

LOGFILE PATHNAMES AND CACHE DIRECTORIES
---------------------------------------

# cache_dir ufs /var/cache/squid 100 16 256

# cache_access_log /var/log/squid/access.log
# cache_log /var/log/squid/cache.log
# cache_store_log /var/log/squid/store.log

OPTIONS FOR EXTERNAL SUPPORT PROGRAMS
-------------------------------------

redirect_program <cesta_k_programu>

OPTIONS FOR TUNING THE CACHE
----------------------------

refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern .		0	20%	4320

TIMEOUTS
--------

ACCESS CONTROLS
---------------
vid. nižšie

ADMINISTRATIVE PARAMETERS
-------------------------

# cache_mgr root

# cache_effective_user squid #musi mat dostatocne prava k adresari vedenom v cache_dir
# cache_effective_group squid

Prístupové práva

ACL (Access Control List) slúži na obmedzenie prítupu k proxy (Internetu). ACL triedy sa definujú riadkom začínajúcim acl a je možné použiť atribúty ako IP, port, čas, cieľová IP, URL, autentizácia atď. ACL operátor potom určí na základe tried ako sa následne požiadavka spracuje.

Všeobecný popis ACL triedy:

acl meno_triedy acl_typ string1 ...

acl meno_triedy acl_typ "súbor" (s jednou položkou na riadku)

acl_typ môže byť napr.: src (ip/maska), dst, proto, arp (xx:xx:xx...), time [deň] [h1:m1-h2:m2] a veľa ďaľších, ktoré sú popísané v konfiguračnom súbore.

Príklady konkrétnych tried:

acl all src 0.0.0.0/0.0.0.0
acl ms dstdomain .microsoft.com
acl nasa_siet src 10.0.0.0/255.255.255.0

Fragment súboru squid.conf s definovanými triedami:

#Recommended minimum configuration:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443 563     # https, snews
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl Safe_ports port 901         # SWAT
acl purge method PURGE
acl CONNECT method CONNECT

Prístup k HTTP proxy pomocou ACL operátoru http_access.

Implicitne je v konfiguračnom súbore nastavený prístup iba z localhostu. Ak chceme umožniť prístup z "našej siete" je potrebné pridať odpovedajúcu triedu (vid. nasa_siet) a pridať pravidlo:

http_access allow nasa_siet

#Recommended minimum configuration:
#
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager
# Only allow purge requests from localhost
http_access allow purge localhost
http_access deny purge
# Deny requests to unknown ports
http_access deny !Safe_ports
# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

# Example rule allowing access from your local networks. Adapt
# to list your (internal) IP networks from where browsing should
# be allowed
#acl our_networks src 192.168.1.0/24 192.168.2.0/24
#http_access allow our_networks

# Allow the localhost to have access by default
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all

Autentizácia

Pre účely autentizácie sa používa typ ACL tiedy proxy_auth.

Browser posiela používateľove autentizačná údaje v autorizačnej hlavičke. Ak SQUID dostane požiadavku a v pravidle http_access je uvedená trieda typu proxy_auth, hľadá autorizačnú hlavičku. Ak ju nájde, dekóduje ju a zistí username a password. Ak hlavička chýba, generuje sa chyba 407 (Proxy Authentication required) a browser požiada používateľa o zadanie username a password, ktoré sa prekóduje (base64) a pošle v autorizačnej hlavičke proxy serveru.

Autentizačné schémy: LDAP, NCSA, MSNT, PAM, SMB...

Pre použitie určitého typu autentizácie je potrebné zkompilovať a nainštalovať požadovaný modul z /helpers/basic_auth/

Voľbou auth_param určíme program, ktorý na autentizáciu použijeme prípadne voľby programu.

Príklad:

auth_param basic program /usr/local/squid/bin/ncsa_auth /usr/local/squid/etc/passwd

Inicializácia cache a štart SQUIDu

/usr/sbin/squid -z
/usr/sbin/squid

Transparentné proxy

Je výhodné, ak je proces nastavenia klienta pre prácu s proxy serverom pokiaľ možno jednoduchý (v praxi sa nastavuje typ proxy servera, jeho adresa a port, na ktorom pracuje). Existuje dokonca riešenie, pri ktorom sa na strane klienta nenastavuje vôbec nič a všetky požiadavky idú automaticky cez proxy server. Takéto riešenie sa volá "transparentný proxy server". Na smerovači je potrebné nastaviť presmerovanie premávky prebiehajúcej na porte 80 na port, na ktorom očakáva spojenie náš proxy server.

Nastavenie v squid.conf:

HTTPD-ACCELERATOR OPTIONS
-------------------------
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Calamaris - spracovanie logov

Calamaris je perlový skript určený k parsovaniu logov rôznych proxy serverov (Squid, NetCache, Inktomi Traffic Server, Oops! proxy server...). Generuje rôzne štatistiky (domain-report, peak-report, performance-report...), ktoré može zaslať na e-mail alebo vystaviť na web.

Odosielanie e-mailu so štatistikami rootovi:

cat /var/log/squid/access.log | nice -39 calamaris -amH 'daily worf' | mail root

Ukážka denného reportu.


Zdroje