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).