Tecnologie di Sicurezza in Internet APPLICAZIONI AA 2009-2010 Ingegneria Informatica e dell’Automazione Web caches
Il proxy per antonomasia Per proxy, o proxy server, intendiamo solitamente un proxy HTTP, ossia un servizio di rete che accede al web per conto e in vece dei browser Questo poi è solitamente un HTTP caching proxy, ovvero memorizza e gestisce una copia locale degli oggetti web richiamati, fornendoli alle successive richieste HTTP senza effettuare altri accessi ai server di origine Se ben dimensionato: Riduce l'occupazione di banda Riduce la latenza media di accesso al web
HTTP proxy Oltre a HTTP, i caching proxy supportano anche alcuni dei seguenti protocolli HTTPS FTP LDAP WHOIS WAIS Gopher … Wide Area Information Service, un sistema per cercare informazioni indicizzate su server remoti Gopher: proto-www, text-based information retrieval system
HTTP proxy Il browser, anziché connettersi direttamente ai server web di origine, può usare un proxy mediante Configurazione manuale Configurazione automatica Quando l'utente richiede una pagina http://www.sitoweb.com, il browser manda la richiesta al proxy che, dopo aver (opzionalmente) verificato i diritti d'accesso dell'utente al sistema e alla specifica pagina, la richiama e la rimanda in risposta all'utente
Configurazione automatica WPAD Meccanismo che permette ai client di localizzare il proxy automaticamente senza interventi manuali sulla configurazione In diversi modi il browser è portato a scaricare un file di configurazione (.pac) da un web server che è a sua volta localizzato tramite DHCP SLP well-known DNS aliases DNS SRV records "service: URLs" in DNS TXT records PAC file (Proxy Automatic Configuration): un file javascript contenente la configurazione del browser relativa al proxy settings e acceduta dal browser specificando un URL WPAD (Web Proxy Auto Discovery) protocol: DNS o DHCP based Vedere Internet Draft: draft-ietf-wrec-wpad-01.txt Ad esempio, nel meccanismo basato sui well-known DNS aliases, il browser prova a scaricare il PAC file usando alcuni URL dedotti dalla sua configurazione e dal suffisso DNS di default del resolver (riga domain in /etc/resolv.conf): http://wpad.dep.company.com/wpad.dat http://wpad.company.com/wpad.dat
HTTP basics RFC 2616 HTTP REQUEST, HTTP RESPONSE Static and dynamic content cgi-bin Embedded languages Application servers RFC 2616: HTTP 1.1, 114 pagine Message types: request, response Message Headers Message Body REQUESTS: GET, POST, CONNECT, … Es: GET URL HTTP/1.1 RESPONSE: 1xx (info), 2xx (success), 3xx (redirection), 4xx (client error), 5xx (server error) URI = Uniform Resource Identifiers, formatted strings che identificano una risorsa fisica o astratta (RFC 2396) E' di due tipi: Locator (URL) e Name (URN) // C'è spesso confusione (cfr. RFC 3303)
Fetch algorythm CLIENT REQUEST HTTP REQUEST TO ORIGIN HTTP REQUEST In cache? no yes HTTP REQUEST TO ORIGIN “if_modified_since” Expired? yes no Error? yes no Modified? no yes Cacheable? yes In cache? yes no Cfr RFC 2616 HTTP 1.1 no STORE IN CACHE RESPONSE ERROR
Fetch algorythm Un caching proxy, come Squid, cerca nella cache una copia dell'oggetto (indicizzata con l’MD5 hash dell'URL) Se esiste controlla la scadenza; se l'oggetto è considerato ancora valido (dipende dalle politiche scelte, che possono variare a seconda del tipo di oggetto) viene consegnata la copia se invece l'oggetto è scaduto viene richiesto al server originale l'oggetto, inserendo nella request un header If-Modified-Since se la risposta conferma che l'oggetto è ancora valido perché non modificato, al client viene restituito l'oggetto in cache Cfr RFC 2616 HTTP 1.1
Fetch algorythm Se l'oggetto non è in cache, è scaduto o viene invalidato richiama l'oggetto dal server origine se questo ritorna un errore HTTP 5xx ed esiste un oggetto scaduto, restituisce quest'oggetto controlla che l'oggetto sia cachable; se sì ne memorizza una copia locale in cache al termine l’oggetto viene consegnato al client
Oggetti Cacheable objects HTTP: Deve avere un tag Last-Modified: Non-cacheable objects HTTPS, WAIS HTTP: Nessun tag Last-Modified: Oggetti autenticati Cache-Control: private, no-store, no-cache URLs con '?' o 'cgi-bin' Response a POST methods L'header Cache-Control è Pragma in HTTP 1.0
Autenticazione Squid usa moduli esterni per l'autenticazione degli utenti LDAP NCSA MSNT SMB PAM getpwam, sasl, winbind National Center for Supercomputing Application (University of Illinois at Urbana-Champaign)
ACL Una forma più banale di autenticazione si può ottenere con ACL sull'indirizzo IP della richiesta, nel caso si usino indirizzi statici acl all src 0.0.0.0/0.0.0.0 acl mynetwork src 192.168.1.0/24 http_access allow mynetwork http_access deny all Esempio di ACL sulle porte acl ssl_ports port 443 555 666 acl www_ports port 80 81 acl safe_ports port 1025-65535 http_access deny HTTP !www_ports !safe_ports http_access deny CONNECT !ssl_ports
Redirectors Squid può riscrivere gli URL che gli sono richiesti, richiamando un processo esterno detto redirector Serve principalmente per funzioni di URL filtering, ossia per controllare i siti che gli utenti visitano Il redirector riceve in input l'URL richiesto, l'IP address e (se autenticato) lo user richiedente e il metodo HTTP Risponde una riga vuota se OK, oppure un nuovo URL SquidGuard E' un buon esempio di redirector Filtra su sources (IP, domain, user), time e destinations (domainlists, urllists, expressionlists) Può servire anche a collezionare statistiche o a classificare gli accessi
Configurazioni base Porte e indirizzi # http_port [ip_address:]port http port 172.20.10.1:8080 Dimensionamenti cache_dir directory size d1 d2 cache_mem maximum_object_size maximum_object_size_in_memory Processi ausiliari dns_children n redirect_children n Regole di caching refresh_pattern regex min pct max quick_abort_{min,max,pct} d1 e d2 sono le bucket directories: esempio 256 directory di primo livello (da 00 a ff) ciascuna contenente 256 directory (da 00 a ff) dove gli oggetti vengono riposti secondo una distribuzione pseudocasuale (p.es. i primi 4 bytes della hash MD5). Questa organizzazione serve a mantenere il tempo di accesso fisico al disco indipendente dal numero di oggetti in cache Cache_mem è tipicamente non esagerata: 8-16MB. Viene usata per mantenere gli oggetti piccoli e più frequentemente acceduti (solo per risparmiare il tempo di accesso al disco) e per gli oggetti in transito (quelli cioè richiesti al server origine a seguito di un MISS e che perciò hanno priorità) Maximum_object_size dichiara la dimensione massima degli oggetti cacheabili Maximum_object_in_memory la max dimensione degli oggetti che rimangono nella cache_mem Refresh_pattern -i .(pdf|gif|jpg|…)$ 0 50% 43200 min = tempo minimo (di età) perché un oggetto sia considerato "fresh" pct = percentuale sull'età di un oggetto perché sia considerato "fresh" max = tempo massimo perché un oggetto sia considerato "fresh" Quick_abort_* permettono di decidere cosa fare se il client si disconnette prima che la sua richiesta sia completata Quick_abort_min: la richiesta di abort è ignorata se al completamento del trasferimento mancano meno di min bytes Quick_abort_max: la richiesta è onorata se mancano più di max bytes Quick_abort_pct: se il trasferimento ha caricato più di pct (%) dell'oggetto la richiesta è comunque onorata
Installazioni Packet Filter Il caching proxy installato in una DMZ e protetto dal packet filter Application Level Gateway Il caching proxy è installato nell'AG stesso Ridondanze Si possono utilizzare link multipli e/o gerarchie di cache, per failover e/o balancing Esempi: 2 cache di perimetro con failover e bilanciamento via DNS-Round-Robin + WPAD 2 cache di perimetro + 1 cache interna con bilanciamento e failover via ICP Le cache di perimetro possono “uscire” su due ISP differenti
Concetti avanzati Cache peers, parents, siblings Cache digests, Cache hierachies ICP, HTCP, CARP ICMP RTT performance measurements Delay pools Transparent proxying HTTP accelerator e reverse proxies Internet Caching Protocol, HyperText Caching Protocol, Cache Array Routing Protocol Delay pools permettono di configurare classi di servizio differenziate con una sorta di traffic shaping
Concetti avanzati Si possono configurare delay pools, classi di servizio differenziate che permettono di realizzare traffic shaping e altre priorità Per far funzionare un transparent proxy occorre avere un router (configurato come default gateway) che redirige tutto il traffico uscente sulla porta 80 alla corrispondente porta del proxy. Al contrario del proxy normale questa configurazione consente di non configurare i browser, ma: il router può sovraccaricarsi sono richieste modifiche al kernel del proxy solo HTTP (no HTTPS, FTP, altri protocolli) in alcuni casi occorre riscrivere gli URL Esempio complesso di transparent proxy è la batteria di proxy di Vodafone: il browsing effettuato usando i servizi GPRS, UMTS e Wireless della rete Vodafone produce due modifiche sul contenuto web servito: tutti gli URL sono riscritti come http://10.128.254.xx/www.sitoweb.comm/path/to/document Tutte le immagini JPG vengono modificate per massimizzare la compressione
Gerarchie di cache Il percorso dal browser al server d’origine può attraversare più di una cache, che funzionano in modo indipendente o lavorano insieme tramite protocolli specifici (es. ICP) A seconda della convenienza e della sua configurazione, una cache può recuperare il contenuto direttamente dal server origine oppure può farlo tramite altre cache, usandole come parent o come sibling, in funzione per esempio del dominio di destinazione, del contenuto della gerarchia (cache digest) o delle prestazioni misurate del server di origine (ICMP RTT) Protocolli per le gerarchie di cache: Internet Caching Protocol HyperText Caching Protocol Cache Array Routing protocol Parent cache: recupera gli oggetti e li consegna a una child Sibling cache: può essere usata per distribuire il carico o come parent “occasionale” ICMP Round-Trip-Time viene utilizzato per misurare le performance degli origin server ICP lo memorizza e lo usa per "scegliere" con quale strategia recuperare un oggetto (decidendo se andare direttamente al server origine o se usare un'altra cache) Un cache digest è un sommario (compresso lossy) del contenuto di una cache. Le cache se lo possono scambiare periodicamente. Serve per eliminare la latenza introdotta dall’uso del protocollo ICP per fare le richieste alle altre cache prima che agli origin server
Gerarchie di cache INTERNET ISP B ISP A Beta Alpha Cache A Cache B FW FW Cache A Cache B Sito A Sito B Esempio: tre unità di business indipendenti collegate ad alta velocità fra loro e con due connessioni a Internet indipendenti C serve il “sito C” e usa A e/o B come parent – non ha accesso diretto a Internet A serve il “sito A” e ha accesso a Internet, ma può usare B come sibling ed eventualmente la cache Alpha del provider come parent, ad esempio per l’accesso ai domini esterni locali o sulla base di scelte dinamiche basate sulle performance misurate Simmetricamente per B Cache C Sito C
Reverse proxies Sono proxy, tipicamente cache HTTP, aventi un insieme prefissato di web server d’origine, per i quali funzionano come front-end Il caso più semplice di reverse proxy è l’HTTP accelerator, in cui le funzionalità di caching del proxy si usano per sollevare i web server da una parte del loro carico di lavoro, in particolare per il contenuto statico Costituiscono un livello di difesa addizionale, anche se le motivazioni per la loro installazione sono molteplici
Reverse proxies Frequentemente l’uso dei reverse proxy è dovuto a diverse esigenze: esporre i contenuti di web server usando nomi alternativi e riscrivendo gli URL ed eventualmente il contenuto delle response realizzare accessi HTTPS a sistemi già esistenti che non supportano SSL o per cui non è conveniente configurare SSL esporre all’esterno in modo sicuro un web server installato internamente alla rete locale
Reverse proxies applicativi Un altro uso frequente dei reverse proxy è dovuto a esigenze applicative o organizzative: aggiungere autenticazione e autorizzazioni applicative gestite a siti web interni fuori controllo e contenenti informazioni statiche integrare nel proprio sistema di autenticazione e autorizzazioni web ambienti commerciali incompatibili Introdurre queste di tecniche di sicurezza applicativa è possibile solamente in regime di Identity Management A volte nelle aziende si trovano sacche di autonomia che sviluppano procedure e altra documentazione su mini siti web autogestiti; l’accesso a queste informazioni resterebbe fuori controllo senza poterli governare con criteri gestiti. L’uso dei reverse proxy può essere un’iniziativa sufficiente a ottenere questo obiettivo, quando non sia realizzabile un’azione di più vasto respiro, come l’adozione di un gestore documentale
Riferimenti The Squid Caching Proxy Chris Wichura Squid website http://www.squid-cache.org Squid FAQ http://www.squid-cache.org/FAQ SquidGuard website http://www.squidguard.org HTTP 1.1 RFC 2616 Internet Draft draft-ietf-wrec-wpad-01.txt http://www.wrec.org/Drafts/draft-ietf-wrec-wpad-01.txt Apache HTTP Server Project http://httpd.apache.org/