Squid

Da Security e-Book.

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 grazie a Guido Serassio[1]. 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.

Indice

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. Per un ulteriore lettura, si consiglia l’ottima FAQ in italiano presente sul sito http://merlino.merlinobbs.net/Squid-Book/.

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


Note

  1. Pagina di Guido Serassio

Voci correlate

Strumenti personali
Pubblicità