SQUID Proxy server

Installazione e configurazione del proxy server Squid

Installazione Squid tramite rpm

Il proxy server è uno strumento che permette di condividere tra più client un singolo accesso ad Internet, gestendo una cache delle informazioni precedentemente scaricate che consente di risparmiare banda e velocizzare la navigazione.
SQUID è un software che ci permette di implementare un proxy server sulla nostra rete interna senza grandi difficoltà e con ottimi risultati.

SQUID supporta oltre al protocollo HTTP anche FTP, Gopher, SSL e altri protocolli Internet.

L’installazione più semplice avviene tramite RPM, addirittura in molti casi l’installazione avviene direttamente dall’installazione della nostra distribuzione Linux. Per sapere se Squid è già installato sul nostro sistema è possibile verificarlo con il classico comando:
rpm -q squid
Se squid è già installato procedere con lo scaricamento dell’ultima release stabile per la propria distribuzione linux ed eseguire:
rpm -U squid-2.x.x-xx.i386.rpm
Nel caso non sia già installato eseguire invece il comando:
rpm -iv squid-2.x.x-xx.i386.rpm

A questo punto SQUID sarà installato nel nostro sistema ed avviabile tramite il comando /etc/init.d/squid start. Il primo avvio potrebbe impiegare un pò di tempo in quanto dovrà settare la cache in /var/spool/squid. Con il file di configurazione di default il servizio dovrebbe risultare da subito avviabile senza particolari interventi sulla configurazione e restare in ascolto sulla porta di default 3128.
E’ probabile che a questo punto sia comunque necessario configurare squid per permettere di essere utilizzato dai client abilitati. Intervenire su
/etc/squid/squid.conf (sempre ben commentato) per il tuning della configurazione.

Autenticazione degli utenti di Squid

I parametri da inserire nel file di configurazione di squid per abilitare l’autenticazione base degli utenti non sono molti e i commenti all’interno del file sono molto chiari e specifici.

Se ci si avvale di un’installazione di default di squid non occorre compilare programmi aggiuntivi come consigliato nello squid.conf. Bisogna operare sulla direttiva auth_param. Di norma i valori di default saranno sufficienti e occorrerà in caso si desideri abilitare l’autenticazione base scommentare la riga che riguarda questo tipo.
La riga dovrebbe apparire come segue
#auth_param basic program < uncomment and complete this line >

Quello che occorre è specificare il percorso del programma esterno che si occupa di autenticare gli utenti e il percorso del file delle password.
Per un’autenticazione base il programma che occorre si chiama ncsa_auth e si trova su RedHat9.0 in /usr/lib/squid/
Per il file delle password il percorso è arbitrario e va creato con il comando di Apache htpasswd.
La sua sintassi è la seguente
htpasswd -c [nome del file] [nome dell'utente]

Se non ci si trova nella directory scelta per questo file occorrerà specificare l’intero percorso oltre al nome del file.
Una volta effettuata questa operazione la riga del file squid.conf deve essere modificata come segue:
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/squidpasswd

Ora non resta che specificare una acl che abiliti l’autenticazione con l’istruzione proxy_auth.
acl nomeacl proxy_auth REQUIRED
e di seguito permettere l’accesso a questa acl
http_access allow nomeacl

In questo modo all’accesso di un browser al proxy si dovrebbe aprire una finestra che chiede di inserire utente e password.
Questa forma di autenticazione, come detto, è base e i parametri utente e password sono inviati in chiaro; per approfondire e implementare un’altro tipo di autenticazione leggere la documentazione ufficiale di squid. Da notare che si possono specificare più metodi in comune e verranno considerati dal client in ordine di sicurezza dalla più alta a quella base.

squid.conf

Il file di configurazione principale di Squid è squid.conf, il prefix cambia a seconda del package utilizzato per l’installazione, esempio il prefix del file di configurazione dei sorgenti è /usr/local/etc mentre per l’rpm di redhat è /etc/squid.
Il file di configurazione base risulta essere molto verboso e ostico per il numero di parametri configurabili, ma teoricamente si potrebbe commentare tutte le voci e il demone partirebbe con i valori settati a quelli di default.

Di seguito sono riportati le principali opzioni settabili nel file di configurazione con relativa  spiegazione:

http_port
Specifica la porta ove squid si metterà in ascolto, come nell’esempio è possibile specificare più porte, La porta di default è 3128
Esempio:
http_port 7575 8080

cache_dir
Specifica la directory ove risiede la cache gestita da squid; i valori a seguire risulatano essere, la dimensione della cache in mega (512) e il numero delle sottodirectory  di primo livello (16) e secondo (256). Come nel caso di http_port è possibile specificare più entry per lo stesso operatore.
I valori di default sono: 100 16 256.
Esempio:
cache_dir /var/cache/ 512 16 256

cache_effective_user , cache_effective_group
Parametro per specificare l’owner dei processi di squid.
Per motivi di sicurezza è bene evitare di utilizzare l’owner di root ma di un utente creato ad hoc.
Di default, se le opzioni sono commentate, l’owner del processo corrisponde a quello dell’utente che ha lanciato il demone.
Esempio:

cache_effective_user squid
cache_effective_group squid

cache_peer
Abilitata questa opzione, squid ha la possibilità di comunicare con altri squid nella stessa network, con una specificata gerarchia, per gestire in modo più funzionale la cache distribuita nei vari nodi.
Esempio:
cache_peer proxy.openskills.info parent 3128 3130 default
Il primo campo specifica l’hostname dell’affiliato ovvero l’host con il quale comunicherà per l’interrogazione della cache. Il secondo campo specifica un vero e proprio grado di parentela fra i due host. Il terzo campo specifica la porta http del server destinatario, mentre il quarto valore specifica la porta ICP (UDP) query port, ovvero la porta utilizzata per l’interrogazione della cache remota, l’ultimo e quinto valore specifica le opzioni.

cache_mem
Specifica  l’ammontare della shm (shared memory) in mega da dedicare alla cache. Da ricordare che squid di fatto acquisisce tre volte tanto il valore specificato

cache_mgr
Parametro per configurare l’email del “cache manager”, visualizzato anche nelle pagine di errore.

acl, http_access, icp_access
L’uso delle acl permette usufruire di uno strumento molto flessibile per il controllo degli accessi alle risorse del proxy. Tipicamente viene utilizzata la regola generale di negare a tutti quanti e di limitare l’accesso ai  soli host appartenenti alle proprie network ma è possibile limitare l’accesso per altre discriminanti come l’ora locale e il dominio di destinazione, per il tipo di browser o addirittura per la comunity SNMP.
Per definire le acl occorre differenziare due elementi:

classi : Identificano le regole che gestiscono l’accesso per un gruppo di client con una determinata descriminante. Per esempio per ip o per dominio.
operatori : Gestiscono le regole o le stessi classi per uno specifico protocollo. Esempio: http_access, icp_access and snmp_access
Esempio di classe:acl all src 0.0.0.0/0.0.0.0
Creazione di una acl chiamata “all” che identifica tutti i client (src 0.0.0.0/0.0.0.0)
Esempio di operatore:
http_access deny all
Uso dell’operatore http_access per negare l’accesso in modo indiscriminato.

Sintassi acl
acl name type (string|”filename”) [string2] [string3] [“filename2”]
La sintassi minima prevede come primo argomento un nome univoco per determinare la acl stessa(name), il tipo della acl come secondo argomento (type) e come terzo argomento la descriminante (string)

Sintassi operatore
operatore allow|deny [!]aclname [& [!]aclname2 … ]
il primo argomento specifica l’azione ovvero permette (allow) o nega (deny) l’acl che segue. L’acl deve essere specificata con il suo nome e possono essere specificate + acl sulla stessa linea di configurazione.

Squid – Autenticazione utenti su dominio Active directory o NT4

E’ possibile configurare Squid per autenticare gli utenti che possono usare il proxy usando le credenziali di un dominio Active Directory o di tipo NT4.

L’autenticazione si basa su winbind, il demone fornito con Samba che permette l’autenticazione degli utenti locali di una macchina Linux su un domain controller di un dominio di tipo Active Directory o NT4.

Il servizio winbind deve essere in esecuzione (anche non configurato) e la macchina su cui gira Squid deve aver joinato il dominio.

In /etc/squid/squid.conf devono essere presenti le seguenti configurazioni:

Settaggi relativi al sistema di autenticazione:
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic

Alternativa che negozia automaticamente la password dell’utente loggato sul dominio
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol= squid-2.5-ntlmssp

Se si vuole permettere accesso solo a utenti del gruppo “navigatori” del dominio “DOMINIO” usare invece questa alternativa:
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of="DOMINIO+navigatori"
Notare che è necessario avere “
winbind separator = +” in smb.conf (il file di configurazione di Samba) se si lascia il separator normale \ non funziona!

Le seguenti righe devono essere invece sempre presenti:
auth_param ntlm children 5
auth_param ntlm max_challenge_reuses 0
auth_param ntlm max_challenge_lifetime 2 minutes
auth_param ntlm use_ntlm_negotiate on

E’ poi necessario configurare le acl di Squid per forzare la richiesta di autenticazione (cambiare gli ip della local_network secondo le proprie esigenze):
acl password proxy_auth REQUIRED
acl local_network src
192.168.171.0/24
http_access allow local_network password

Web virus filtering con Squid e ClamAV

E’ possibile configurare Squid per filtrare tutte le richieste web che vengono eseguite dagli utenti con l’antivirus engine ClamAV.
Uno dei metodi utilizzabili prevede la configurazione di SquidClamAVredirector.

Scaricare SquidClamAVredirector dal sito ufficiale.
Prerequisiti sono Squid, ClamAV, Python e le librerie Python per interfacciarsi con ClamAV: pyclamav disponibili all’indirizzo: http://xael.org/norman/python/pyclamav/ .

Installazione pyclamav (Usare l’ultima versione disponibile)
Scaricare PyClamav dal sito ufficiale
tar -zxvf pyclamav-0.3.2.tar.gz
cd pyclamav-0.3.2
python setup.py build
python setup.py install

Installazione SquidCLamAV Redirector (SCAVR):
Scaricare SCAVR dal sito ufficiale.
tar -zxvf SCAVR.tar.gz
cp SquidClamAV_Redirector.py /usr/local/bin/
chmod +x /usr/local/bin/SquidClamAV_Redirector.py
cp SquidClamAV_Redirector.conf /usr/local/squid/etc/
chown squid /usr/local/squid/etc/SquidClamAV_Redirector.conf
vi /usr/local/squid/etc/SquidClamAV_Redirector.conf

Esempio di SquidClamAV_Redirector.conf
[SquidClamAV]
# restricted = http://virus.jackal-net.at/infected.php?virus=restricted
virusurl = http://10.0.0.178/infected.php
#virusurl = http://virus.jackal-net.at/infected.php
cleancache = 300
ForceProtocol = http or https
MaxRedirection = 99
MaxRequestsize = 2Mb
log_priority = LOG_INFO
log_facility = LOG_LOCAL6
acceptredirects = 300 301 302 303
MIMETypes = all image/bmp image/gif image/jpeg image/png image/tiff text/html
Timeout = 60.0

[Debug]
Infected = true
Clean = true
Error = true
Ignored = true

[Extensions]
pattern = all .jpg .exe .zip .rar .ar .com .bzip .gz

## [Proxy]
### http = http://localhost:3128

[Whitelist]
http://www.jackal-net.at       = 0

Configurazione Squid
In squid.conf inserire le seguente righe, utilizzando ovviamente i path corretti relativi a dove si è copiato lo script SquidClamAV_Redirector.py (deve essere eseguibile) sul proprio sistema:
redirect_program /usr/local/bin/SquidClamAV_Redirector.py -c /usr/local/etc/squid/SquidClamAV_Redirector.conf
redirect_children 5
redirector_access deny localhost
http_reply_access allow all

NOTA: La direttiva “redirector_access deny localhost” va messa dopo “acl localhost src 127.0.0.1/255.255.255.255” (che già esiste).

Esempio di configurazione di Squid con controllo degli accessi

Segue un esempio di configurazione di Squid, in cui viene impostato il controllo degli accessi rispetto ad indirizzi IP sorgenti e autenticazione degli utenti.
Viene inoltre indicato come integrare Squidguard (software separato) per filtrare l’accesso a determinati siti con contenuto “non consono” (warez, porno ecc.).

Esempio di SQUID.CONF
# La configurazione di Squid prevede numerose impostazione per il tuning della cache, la gestione di una struttura di caching distribuita e la modifica di innumerevoli parametri di funzionamento del programma. In questo esempio si è mantenuta il più possibile la configurazione di default, rimuovendo i settaggi che generalmente sono commentati (perchè già impostati di default) e lasciando inalterate le impostazioni presenti nel file di default (su una Fedora 2).
# Le parti dove sono state introdotte delle customizzazioni sono spiegate contestualmente

acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
# Di default la dimensione massima della cache su hard disk è 100 Mb, ha senso aumentarla secondo le proprie disponibilà. Qui si è messo 2000 Mb
cache_dir ufs /var/spool/squid
2000 16 256
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hour
# Squid può autenticare i suoi utenti in molti modi (tramite ldap, smb, pam, dominio NT…). Qui si decide di usare un file di password creato con il sistema di autenticazione di base di apache (“htpasswd -c /etc/squid/utenti).
auth_param basic program /usr/lib/squid/ncsa_auth
/etc/squid/utenti
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320
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
acl Safe_ports port 21
acl Safe_ports port 443 563
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

# Definiamo alcune access list adatte al nostro scopo:
# – la rete dei client che possono usare il proxy (“retelocale”)
# – l’uso del meccanismo di autenticazione sopra definito, definendo un gruppo che che include le login “paolo” e “carlo” (“utenti”)
# – Un indirizzo della rete locale che non può usare il proxy (“hostnegato”)
acl
retelocale src 10.42.42.0/255.255.255.0
acl
utenti proxy_auth carlo paolo REQUIRED
acl
hostnegato src 10.42.42.10

# Le acl sopra definite vengono ora applicate. E’ molto importante l’ordine con cui sono indicate. In questo caso, prima viene impedito l’accesso web a “hostnegato” e poi viene permesso agli utenti autenticati che fanno parte della rete locale. Notare l’uso di entrambe le acl sulla stessa riga, entrambe vanno rispettate
http_access deny
hostnegato
http_access allow
utenti retelocale

# Seguono le impostazioni preimpostate in /etc/squid.conf, notare che di default c’è un “http_access deny all” alla fine. Se questo fosse prima, impedirebbe gli accessi eventualmente definiti successivamente
http_access allow localhost
http_access deny all

http_reply_access allow all
icp_access allow all

# La seguente riga è da aggiungere (scommentandola) se si vuole usare SquidGuard per gestire l’accesso anche sulla base dei contenuti dei siti in cui si naviga. SquidGuard è un programma separato che va installato a parte
# redirect_program /usr/bin/squidGuard

Esempio di SQUIDGUARD.CONF
logdir /var/log/squidguard
dbhome /var/lib/squidguard

dest adult {
domainlist      adult/domains
urllist         adult/urls
expressionlist  adult/expressions
}

acl {
default {
pass     !adult all
redirect http://www.google.com
}
}

Restrizioni ai download con Squid

La gestione delle ACL sotto Squid basate su regexp permette di affiancare, alle classiche restrizioni di accesso sui siti web, limiti sui download.

Il concetto, anzichè applicato sulla ricerca di sottostringhe all’interno dell’intero url, sarà concentrato nella parte finale, dove viene esplicitata l’estensione del file.

Si procede con la crezione di un file, per comodità nella stessa directory che contiene gli altri filtri di squid:

# cd squidblock/
# ls
files   games   mp3     pirated porn
#

Il file files contiene l’elenco delle estensioni che si vogliono escludere dalla possibilità di download:

# cat files
# blocco file
\.(afx|asf|asx|au|avi|divx|m3u|mov|mp2|mp3|mpeg|mpg|qt|ra|ram|rm|viv|vivo|vob|vqf|wav|wma|wmv|vbs|shs|pif)($|\?)
#

Si aggiungono infine gli appositi riferimenti nel file squid.conf:


# definisco l’acl “files”
acl files url_regex “/etc/squid/squidblock/files”


# applico l’acl negandola con deny
http_access deny files

Un’altra simpatica direttiva utile contro i selvaggi download da parte degli utenti è la reply_body_max_size, che specifica la dimensione massima di una risposta a una richiesta HTTP.

Transparent Proxy con Squid

Già discussi e ridiscussi sono i benefici di un proxy all’interno nella infrastruttura di rete, primo fra tutti la gestione centralizzata delle restrizioni ai siti consentiti alla navigazione. La personalizzazione in questo contesto può essere mirata nel dettaglio, inutile dire che la presenza di numerose macchine sotto proxy aumenta proporzionalmente le difficoltà di gestione, favorendo ad esempio la possibilità di abusi da parte di utenti legittimi.

La funzione del Transparent Proxy è quella di intercettare ogni richiesta di un particolare servizio (in questo caso richiesta HTTP) per poi redirigerla a un proxy (Squid) affinchè svolga tutte le funzioni del caso (semplice content filtering piuttosto che caching). Nel dettaglio la funzionalità di intercettare traffico appartiene ai vari packet filtering, Squid assolve eslusivamente i compiti di proxy.

I benefici portati da una implementazione simile sono notevoli: la forzatura a utilizzare il proxy lato client è trasparente per l’utente; l’amministratore è relativamente certo di controllare il traffico HTTP per tutte le workstation che gestisce.

L’analisi viene effettuata su un’unica macchina che assolve entrambi i compiti di packet filtering e proxyserver (opzione sicuramente discutibile).

Si considera la config di Squid:

# Forzo il binding di Squid su localhost
http_port 127.0.0.1:3128

# Direttive minime per le funzionalità di proxy
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

L’opportuna gestione delle ACL di Squid terminerà la config del proxy, implementando politiche di navigazione per indirizzi ip / subnet ip che daranno origine alla richiesta.
Lato packet filtering si considera la configurazione per pf (OpenBSD):
#/etc/pf.conf
...
rdr on $int_if inet proto tcp from any to any port www -> 127.0.0.1 port 3128
...
e iptables (Linux):
#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
in entrambi i casi si redirige il traffico HTTP sullo Squid locale.

Osservazioni
Come già accennato risulta sicuramente discutibile la scelta di integrare packet filter e proxy sulla stessa macchina, da valutare in base al contesto di utilizzo della soluzione.

Inoltre, l’attuale configurazione redirige OGNI richiesta HTTP, incurante della sorgente e delle destinazione del traffico (da rivalutare con l’eventualità di webserver all’interno della rete).

Infine, una centralizzazione di questo tipo porta a un “single point of failure” rappresentato dal proxy; anche in questo caso risulta doverosa l’analisi sulla eventuale implementazione di una soluzione ridondata.

Gestione dei log di Squid

Questo piccolo “HoW-To” vi permetterà di inserire i log all’interno di un database e con l’utilizzo di un’interfaccia grafica scritta in php di avere report abbastanza dettagliati e personalizzabili


Sul sito ufficiale di squid potete trovare numerosi tool per l’analisi dei log

http://www.squid-cache.org/Scripts/

—————————-
Requisiti
—————————-

-Perl (i moduli richiesti sono elencati sotto)
-Mysql
-Apache+php
-access.log di squid

http://texilee.altervista.org/doc/apps/PHP_SQUID.rar

PHP_SQUID contiene la dir

sql         ->  struttura della tabella / qualche record di esempio

—————————-
Inserimento dei log su DB
—————————-

I log NON DEVONO essere in formato common. Qualora li aveste in quel formato

potete usare ‘apacheconv’ una utility che si trova nel pacchetto squid-graph per la conversione al formato nativo

http://squid-graph.securlogic.com/

Ecco un esempio di log in formato squid nativo

1083837773.713    411 192.168.20.168 TCP_MISS/200 437 GET http://www.texilee.altervista.org/SITO2/inc/img/counter/miniportail_2/cnt4.gif tex DIRECT/207.44.136.44 image/gif

1083837773.713                                     –> time
411
192.168.20.168                                     –> remotehost
TCP_MISS/200                                       –> status
437                                                –> bytes
GET
http://www.texilee.altervista.org/SITO2/inc/img/counter/miniportail_2/cnt4.gif  –&gt; request
tex                                                –> rfc931
DIRECT/207.44.136.44
image/gif

Per informazioni riguardo i log di squid vi riporto qui.

—————————-
Creazione della Tabella
—————————-

CREATE TABLE logfile (
id int(11) NOT NULL auto_increment,
remotehost varchar(255) default NULL,
rfc931 varchar(64) default NULL,
request text,
status int(11) default NULL,
bytes int(11) default NULL,
time float(10,3) default NULL,
PRIMARY KEY  (id),
KEY user_time (rfc931,time),
KEY time_index (time),
KEY user_status (rfc931,status)
) TYPE=MyISAM;

—————————-
Requisiti inserimento dei log : squidparse.pl
—————————-

Lo script per l’inserimento dei log è scritto in perl.

Fa parte del tool squidalyser, potete ovviamente sempre avvalervi dello script originale se trovate difficoltà con quello

modificato da me 🙂

http://squidalyser.sourceforge.net/

Per poter essere utilizzato bisogna installare i seguenti moduli (www.cpan.org)

DBD-mysql
DBI
Time

—————————-
Inserimento dei log : squidparse.conf e crontab
—————————-

Modificate i parametri di configurazione in squidparse.conf

Prestate attenzione al parametro

-> expire 4_w

Ogni volta che lo script entrerà in funzione tutti i record più vecchi di 4 settimane verranno eliminati dal DB.
Se volete conservare lo storico aumentatene il valore… se avete problemi di spazio o avete necessità di “controllare”

solamente i log recenti abbassate il valore anche a 1_d (un giorno)

#crontab -e

55 */4 * * * /usr/local/PHP_SQUID/squidparse.pl

Inserite una riga simile a questa nel crontab e ogni 4 ore verrà aggiornato il DB

—————————-
Report con PHP_SQUID
—————————-

PHP_SUID necessita di un web server che supporti php. Apache fa al caso nostro. Estratto il pacchetto tar.gz ad esempio su

/usr/local/PHP_SQUID spostate la dir php_squid all’interno del vostro web server (es. /www/htdocs/php_squid ).

Potete vedere lo script all’opera all’url

http://bud.altervista.org/squid_php/index.php

Gestione logging di Squid

Tra i molteplici vantaggi di SQUID c’è da considerare il logging delle navigazioni effettuate tramite proxy da parte dei client che lo utilizzano.
Vediamo alcune configurazioni che si possono fare in squid.conf per customizzare il logging in base alle proprie esigenze.

ATTIVAZIONE LOGGING CON LO STILE DI QUELLO DEI WEB SERVER
emulate_httpd_log off/on
Di default SQUID logga con una sua propria modalità e quindi il default di questo parametro di configurazione è impostato ad OFF.
Esempio di logging secondo il formato nativo di Squid:
1084289766.082    410 blasco.intranet TCP_MISS/200 28491 GET http://openskills.info/ – DIRECT/213.198.151.253 text/html
Impostando ad ON il suddetto parametro Squid inizierà a loggare nel seguente modo:
blasco.intranet – – [11/May/2004:17:29:33 +0200] “GET http://openskills.info/modify/modify.php? HTTP/1.0” 200 16486 TCP_MISS:DIRECT
Indubbiamente l’emulazione del logging stile web server rende l’analisi dei log di più facile lettura e risulta utilizzabile da un maggior numero di programmi di analisi e statistiche di traffico.

ATTIVAZIONE LOGGING CON DNS LOOKUP
log_fqdn off/on
Anche per questa configurazione di SQUID il default è OFF e non abilita un reverse lookup per ottenere il come completo di ogni IP che si collega al proxy.
E’ sempre consigliabile lasciare il default in quanto la risoluzione dell’hostname da parte di SQUID può introdurre delle latenze e rallentare il proxy, ovviamente in alcuni casi però può essere utile attivare questa opzione.

Ovviamente per ottenere effetto sulle proprie modifiche occorre riavviare il servizio squid.

Reverse Proxy con Squid

Le ragioni che portano all’utilizzo di un proxy sono molteplici, considerate le numerose funzioni che tale apparato è in grado di soddisfare. Nel dettaglio, il reverse proxy risulta indicato nel caso in cui sia necessario eseguire relay di un client esterno verso  un server interno. I vantaggi di una simile implementazione spaziano da motivi prestazionali (riducendo il carico del server) fino a considerazioni che riguardano la security, sia dell’applicazione che del server che la ospita.

La configurazione di esempio sotto riportata simula l’implementazione di un reverse proxy per un server web installato su una diversa macchina.

# Forzo l’ascolto di Squid sulla porta 80
http_port 80

# Definisco una ACL…
acl allowed_hosts src 0.0.0.0/0.0.0.0

# … e ne autorizzo il traffico sopra definito
http_access allow allowed_hosts

# Definisco l’indirizzo IP del server web interno
httpd_accel_host 192.168.51.67

# Definisco la relativa porta sul quale è in ascolto il server interno
httpd_accel_port 9900

# Le richieste non presenti in cache vengono dirottate sul server interno
httpd_accel_single_host on

# Attivo funzioni di application proxy e caching
httpd_accel_with_proxy on

# Da abilitare nel caso in cui il server interno utilizzi VirtualHost
httpd_accel_uses_host_header off

Anonymizing Proxy con Squid

Squid contiene funzionalità di proxy “anonimizzante”, permettendo di nascondere al sito visitato l’IP dal quale ha origine la richiesta HTTP client.

Le istruzioni da aggiungere al file di configurazione squid.conf:
# Disabilito il sistema di cache logging
cache_access_log /dev/null
cache_store_log none
cache_log /dev/null

# Eventuali ip loggati vengono forzati a 0.0.0.0
client_netmask 0.0.0.0

# Tutti possono accedere al proxy
http_access allow all

# Forzo il client a non fornire alcuna identità al server richiedente
forwarded_for off

# Disabilito le statistiche sui client che si connettono
client_db off

Le istruzioni sopra riportate permettono la non tracciabilità da parte del server verso il client autore della richiesta HTTP, ma non riguardano la cifratura del traffico tra il client e il server proxy; con uno sniffer potrebbe essere possibile analizzare il traffico, poichè non criptato.
Una comunicazione sicura in questo senso può essere implementata con:
– Squid in modalità SSL (su HTTPS), con cifratura appunto SSL del traffico tra client e proxy server;
– tunnel SSL (con stunnel) tra client e server.

Squid e protocollo WPAD

Il Web Proxy Autodiscovery Protocol è un protocollo di livello 7 elaborato da un gruppo di produttori software (Microsoft, RealNetworks, Sun Microsystem ed InkTomi…..) che consente all’utente finale di configurare il proprio browser web in maniera trasparente, ovvero senza fare ricorso ad alcuna configurazione manuale.

Il protocollo WPAD permette ad alcuni browser (quali ad esempio Microsoft Internet Explorer) di autoconfigurare il proxy server tramite un semplice javascript che viene cercato automaticamente all’indirizzo (se esiste) http://wpad%5B.dominio.it%5D//wpad.dat
Alcuni grossi Internet Provider (tin.it per esempio) preferiscono indicare agli utenti il percorso del file di autoconfigurazione. Ma in piccole realtà aziendali è preferibile far fare tutto al browser.
Fondamentale è configurare regolarmente il proxy server Squid e poi:
– Modificare il file
/etc/mime.types per specificare il MIME TYPE dei file .dat
– Creare nella document root di APACHE il file
wpad.dat
– Creare un alias di tipo “wpad.dominio.it” sul server web su cui abbiamo creato il file wpad.dat
Ma procediamo con ordine.
Innanzitutto apriamo con un editor di testo il file
mime.types presente in /etc ed aggiungiamo la riga:
application/x-ns-proxy-autoconfig pac dat

Creiamo nella document root del server web configurato per rispondere a wpad.dominio.it (generalmente /var/www/html) il file wpad.dat con un semplice javascript tipo:
function FindProxyForURL( url, host )
{
if( isPlainHostName( host ) ||          // se nessun dominio viene specificato
dnsDomainIs( host, "
intranet.palermo" ) || // se viene richiesto un url del dominio locale indicato
shExpMatch( url, "https*" ) ||      // se si usano protocolli sicuri
shExpMatch( url, "snews*" ) )
return "DIRECT";||                    // Non si usa alcun proxy
else
return "PROXY
192.168.1.1:3128; " +                     // Altrimenti usare il proxy indicato
"DIRECT";
}

Dove:
192.168.1.1 -> indirizzo ip del proxy server
3128 -> posta di default di ascolto del server proxy SQUID
intranet.palermo -> dominio (in questo caso non esistente nella realtà) locale per il quale non usare il proxy

Editiamo il file relativo agli indirizzi dns per la zona dominio.it inserendo (nel caso di utilizzo di una distribuzione Fedora Core 1 sotto /var/named/chroot) la riga che fa riusolvere wpad.dominio.it con lìIP del server web dove è stato inserito il file wpad.dat:
wpad    IN      A       192.168.1.10

Rifacciamo partire SQUID, NAMED e HTTPD.
Selezioniamoo in Microsoft Internet Explorer Strumenti -> Opzioni Internet -> Connessioni -> Impostazioni LAN -> Configurazione automatica (rileva impostazioni automaticamente).
In questo modo il browser utilizzerà il proxy in modo trasparente all’utente.

Restrizioni di accesso a siti Web con Squid

All’interno di un’azienda la navigazione spesso viene gestita dal Proxy per svariati motivi:
– Autorizzazione alla navigazione tramite autenticazione degli utenti
– Gestione Access List che permettono di autorizzare/negare la navigazione alle macchine ad esempio in base agli indirizzi IP
– Logging di tutte le richieste fatte dai singoli client che navigano sulla linea internet aziendale
– Risparmio di banda grazie alla gestione da parte del proxy da parte del proxy server
– Possibilità di blocco di diversi indirizzi web.
La scelta del proxy server ricade quasi esclusivamente su Squid per le sue performance, affidabilità e per il fatto che è Open Source e quindi nella visione (distorta) di questo fenomeno da parte dei dirigenti aziendali, gratuito.

Squid può essere configurato per limitare l’accesso o meno a determinati siti web, per fare ciò bisogna utilizzare il TAG url_regex con cui è possibile indicare i file contenenti la lista delle parole chiave selezionate che non possono essere presenti negli URL richiesti dal client.

Esempio:
acl badlanguage url_regex "/etc/squid/squidblock/badlanguage.txt"
acl entertainment url_regex "/etc/squid/squidblock/entertainment.txt"
acl games url_regex "/etc/squid/squidblock/games.txt"
acl mp3 url_regex "/etc/squid/squidblock/mp3.txt"
acl pirates url_regex "/etc/squid/squidblock/pirates.txt"
acl porno url_regex "/etc/squid/squidblock/porno.txt"

A questo punto basta applicare le ACL che abbiamo appena definito tramite il TAG http_access come nell’esempio:
http_access deny badlanguage
http_access deny entertainment
http_access deny games
http_access deny mp3
http_access deny pirates
http_access deny porno

Per poter avere una lista aggiornata di siti web da bloccare si segnalano un paio di siti che forniscono e aggiornano i files contenenti i vari domini negati:
http://www.squidblock.com
http://www.squidguard.org
In particolare quest’ultimo permette tramite un semplice script sul server di scaricare gli aggiornamenti che sono
veramente molto frequenti.

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

 
%d blogger hanno fatto clic su Mi Piace per questo: