Squid
Il proxy server più popolare in internet é Squid. Si tratta di un proxy OpenSource ad alte prestazioni che supporta FTP, gopher, HTTP e HTTPS. Inoltre é dotato di un sistema di Access Control Lists (ACL) che permette di autenticare utenti e abilitare e/o disabilitare determinate URLs. Squid é stato concepito principalmente per ambienti Unix ed é disponibile sul sito Internet http://www.squid-cache.org/, ma esiste un ottimo porting anche su ambiente Windows NT/2000/XP/.NET. In questo paragrafo si intende fornire un esempio di configurazione effettuata con sistema operativo Linux e Windows, che sono tra i più diffusi. Qualsiasi sia il sistema operativo scelto su cui eseguire Squid, si consiglia di eliminare i servizi non usati, quali ad esempio FTP e TELNET su macchine Unix o la condivizione file e stampanti sotto windows: tale processo é detto di hardening. In questi esempi, si assume che l’utente abbia familiarità con gli ambienti operativi e che il server proxy disponga di due interfaccie di rete, una da collegare alla rete interna, l’altra verso la rete wireless.
Esempio con Linux
Il programma Squid é incluso in molte distribuzioni di Linux, é comunque possibile scaricare i sorgenti dal sito Internet menzionato precedentemente per quelle distribuzioni che non ne disponessero. Nel caso la distribuzione non comprendesse Squid, é sempre possibile scaricare i sorgenti dal sito ufficiale e procedere alla sua compilazione e installazione, ad esempio con i seguenti comandi:
./configure --prefix=/usr/local/squid --enable-linux-netfilter --enable-ssl \ --enable-digest-auth-helpers=password \ --enable-external-acl-helpers=unix_group make make install
Il file di configurazione di squid é /etc/squid.conf se si tratta di un pacchetto di distribuzione o solitamente /usr/local/etc/squid.conf qualora fosse stato installato dai sorgenti con i parametri di default. Una semplice configurazione può prevedere che tutti gli utenti autenticati possano navigare liberamente, si veda il relativo squid.conf
## Porta di ascolto del proxy http_port 8080 ## Esegui Squid con le permission dell’utente “proxy” cache_effective_user proxy cache_effective_group proxy ## Non effettuare le cache dei CGI hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY ## Stabilisci una cache in RAM di 64 MB e su disco di 200 MB ## (primo parametro dopo la directory contenente la cache) cache_mem 64 MB cache_dir ufs /usr/local/squid/var/cache 200 16 256 ## Tipo di autenticazione basic auth_param basic program /usr/local/squid/libexec/ncsa_auth /usr/local/squid/etc/passwd auth_param basic children 5 auth_param basic realm Proxy Authentication Required auth_param basic credentialsttl 2 hours ## Refresh patterns refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 ## Inizio ACL di default, con autenticazione proxy richiesta acl password proxy_auth REQUIRED 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 CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow password http_access deny all http_reply_access allow all icp_access allow all ## Nome visualizzato all’utente e directory di core dumps visible_hostname proxy.azienda.it coredump_dir /usr/local/squid/var/cache
Il file di configurazione é commentato per una più facile comprensione del suo contenuto. É preferibile eseguire Squid come utente non root, attraverso il parametro di configurazione cache_effective_user e cache_effective_group: nell’esempio citato Squid viene eseguito come utente proxy, pertanto sarà necessario creare tale utenza e gruppo nel proprio sistema prima di procedere. É altrettanto importante che l’utenza proxy sia effettivamente il proprietario delle directories che conterranno la cache e i files di log, di default rispettivamente /usr/local/squid/var/cache e /usr/local/squid/var/log. Per autenticare gli utenti in ambito unix si é scelto di usare un file di password esterno, in particolare si tratta del file /usr/local/squid/etc/passwd che può essere creato e mantenuto attraverso l’utility htpasswd presente in apache (http://httpd.apache.org). Prima di eseguire Squid come proxy, é necessario inizializzare la directory di cache, eseguendo il comando squid –z. A questo punto, é possibile eseguire squid come daemon: lo script RunCache presente in /usr/local/squid/bin permette di eseguire squid in modo corretto.
È anche consigliabile attivare il firewall di Linux, iptables, per proteggersi da eventuali tentativi di intrusione alla macchina proxy. Ammettendo che la rete interna sia collegata alla interfaccia eth0 e la rete wireless a eth1, si proceda a proteggere la macchina con i seguenti comandi, che permetteranno di ricevere connessioni solo ed esclusivamente sulla porta del proxy (porta 8080/tcp):
iptables –P INPUT DROP iptables –P FORWARD DROP iptables –P OUTPUT ACCEPT iptables –A INPUT –m state –-state ESTABLISHED,RELATED –j ACCEPT iptables –A INPUT –i eth1 –p tcp –m tcp –-dport 8080 –j ACCEPT
Esistono differenti metodi per configurare Squid: quello illustrato in questo capitolo vuole fornire al lettore una idea che possa fungere da spunto per ulteriori approfondimenti.
Esempio con Windows
Grazie a Guido Serassio, é disponibile un porting di Squid in ambiente Windows, che é possibile scaricare dal suo sito Internet http://www.serassio.it. Il file si presenta in formato ZIP e contiene al suo interno l’intera distribuzione che va decompressa, ad esempio nel drive C:. Da un punto di vista della configurazione, é molto simile a quella per Linux, con il vantaggio di potersi appoggiare alla gestione degli utenti di Windows, risultando in una più semplice amministrazione. Si veda un esempio di configurazione:
## Porta di ascolto del proxy http_port 8080 ## Non effettuare le cache dei CGI hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY ## Stabilisci una cache in RAM di 64 MB e su disco di 200 MB ## (primo parametro dopo la directory contenente la cache) cache_mem 64 MB cache_dir ufs C:/squid/var/cache 200 16 256 ## Tipo di autenticazione basic auth_param basic program c:/squid/libexec/nt_auth.exe auth_param basic children 5 auth_param basic realm Proxy Authentication Required auth_param basic credentialsttl 2 hours ## Refresh patterns refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 ## Inizio ACL di default, con autenticazione proxy richiesta acl password proxy_auth REQUIRED 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 CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow password http_access deny all http_reply_access allow all icp_access allow all ## Nome visualizzato all’utente e directory di core dumps visible_hostname proxy.azienda.it coredump_dir c:/squid/var/cache
La prima differenza fondamentale é relativa alla nomenclatura di files e directories, che sono simili a quelli di Windows ma con i forward-slashes (“/”) al posto dei back-slashes (“\”). La seconda é il metodo di autenticazione, che si basa sulla gestione delle utenze di Windows, grazie al programma nt_auth.exe. Anche per la versione Windows di Squid, é necessario inizializzare la directory di cache eseguendo c:\squid\sbin\squid –z. Nella versione Windows, é possibile installare squid come servizio di Windows, invocando il comando c:\squid\sbin\squid –i. In questo modo, Squid viene eseguito come un servizio standard di Windows, pertanto basterà:
- Selezionare Control Panel
- Selezionare successivamente Administrative Tools e Services
- Selezionare SquidNT e, con il tasto destro del mouse, selezionare Start
Qualora si decidesse di implementare la soluzione di Squid installato su un sistema operativo Windows, é altamente consigliabile provvedere all’installazione di un personal firewalls, oppure di effettuare la rimozione dei servizi non necessari (hardening).