Introduzione

Lo scopo della guida è configurare la scansione antivirus dei dati passanti per il proxy web. Gli strumenti saranno il proxy Squid, il redirector SquidGuard e l'antivirus Clamav. Ad essi si aggiunge Apache2, a cui si appoggia lo script in Perl Viralator, che permette tutto il giochetto. Infine useremo una semplice regola di iptables.

Installazione degli strumenti necessari

Con Debian i pacchetti da installare sono: clamav-base clamav squid squidguard apache2.

Configurazione

Apache2

Apache deve gestire la scansione dei files da parte di Clamav attraverso lo script di Viralator. L'unica modifica che ho apportato nel file di configurazione di default è stata il cambiamento del path degli script cgi a /var/www/cgi-bin in cui metterò poi lo script di Viralator.

Clamav

Clamav non necessita di alcuna configurazione post-installazione. Potete provare la sua funzionalità con:
truelite-server:~# clamscan /*
LibClamAV Warning: ********************************************************
LibClamAV Warning: ***  This version of the ClamAV engine is outdated.  ***
LibClamAV Warning: *** DON'T PANIC! Read http://www.clamav.net/faq.html ***
LibClamAV Warning: ********************************************************
LibClamAV Warning: ********************************************************
LibClamAV Warning: ***  This version of the ClamAV engine is outdated.  ***
LibClamAV Warning: *** DON'T PANIC! Read http://www.clamav.net/faq.html ***
LibClamAV Warning: ********************************************************
/bin/bash: OK
/bin/cat: OK
/bin/chgrp: OK
/bin/chmod: OK
/bin/chown: OK
[...]
Non preoccupatevi dei messaggi minatori, vi avvertono solo che non avete l'ultima versione del programma (se, come me, usate Debian Sarge...) Una cosa molto utile è impostare l'auto aggiornamento del database antivirus. Il metodo che ho ritenuto più giusto in fase di installazione è "a mano", altrimenti potete usare il demone, che però girerà di continuo sul pc (utile per i server). Per aggiornare a mano l'antivirus il comando è semplicemente:
macondo:~# freshclam
ClamAV update process started at Wed Nov  2 16:09:56 2005
WARNING: Your ClamAV installation is OUTDATED!
WARNING: Local version: 0.84 Recommended version: 0.87
DON'T PANIC! Read http://www.clamav.net/faq.html
main.cvd is up to date (version: 34, sigs: 39625, f-level: 5, builder: tkojm)
WARNING: Your ClamAV installation is OUTDATED!
WARNING: Current functionality level = 4, recommended = 5
DON'T PANIC! Read http://www.clamav.net/faq.html
daily.cvd is up to date (version: 1158, sigs: 1300, f-level: 6, builder: diego)
WARNING: Your ClamAV installation is OUTDATED!
WARNING: Current functionality level = 4, recommended = 6
DON'T PANIC! Read http://www.clamav.net/faq.html
Anche qui niente panico, gli WARNING sono dovuti alla versione un po' obsoleta del pacchetto.

SquidGuard

Il file di configurazione di SquidGuard è /etc/squid/squidGuard.conf. La configurazione che vi propongo fa sì che la scansione avvenga solo su alcuni tipi di file. Ecco come:
macondo:~# mkdir -p /etc/squid/squidGuard/db/deny
macondo:~# vi /etc/squid/squidGuard/db/deny/files
Ecco il contenuto del file files:
(\.exe$|\.com$|\.bat$|\.zip$|\.tgz$|\.gz$|\.bz2$)
Aggiungete tutte le estensioni di cui volete effettuare la scansione. A questo punto modificate il file /etc/squid/squidGuard.conf:
dbhome /etc/squid/squidGuard/db
logdir /var/log/squid

dest files {
        expressionlist deny/files
}

acl {
        default {
                pass !files all
                redirect
                http://[PROXY]/cgi-bin/viralator.cgi?url=%u
        }
}
Al posto di [PROXY] dovete mettere l'IP o l'hostname del proxy che provvederà a lanciare lo script viralator.cgi

Squid

Il file di configurazione di Squid è /etc/squid/squid.conf, il contenuto è questo:
#
# Redirect verso SquidGuard
#

redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
redirect_children 10

#
# Proxy trasparente
#

httpd_accel_port 80
httpd_accel_host virtual
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
httpd_accel_single_host off

#
# Resto della configurazione
#

hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 256 MB
maximum_object_size 204800 KB
maximum_object_size_in_memory 32 KB
cache_dir ufs /var/spool/squid  1000 16 256
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 Safe_ports port 80          # http
acl Safe_ports port 20          # ftp
acl Safe_ports port 21          # ftp
acl Safe_ports port 22          # ssh
acl Safe_ports port 443 563     # https, snews
acl Safe_ports port 70          # gopher
acl Safe_ports port 110         # pop3
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 Safe_ports port 631         # cups
acl Safe_ports port 873         # rsync
acl Safe_ports port 901         # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

#
# ATTENZIONE: Modificare con l'ip della propria rete
#

acl our_networks src 192.168.10.0/255.255.255.0
http_access allow our_networks
http_access allow localhost
http_access deny all
http_reply_access allow all
icp_access allow all
coredump_dir /var/spool/squid
extension_methods REPORT MERGE MKACTIVITY CHECKOUT

Viralator

A questo punto potete scaricare il pacchetto di Viralator da http://viralator.sourceforge.net/ e scompattarlo. Ai file scaricati sostituite questi file che ho modificato per correggere alcuni errori (i file derivano dalla versione 0.9.4). Quindi copiate il file viralator.cgi in /var/www/cgi-bin (o comunque nel path per gli script cgi che avete impostato in Apache 2) e la cartella etc/viralator in /etc/viralator.
default_language -> italian.txt
servername -> [nome del server]
antivirus -> CLAMAV
virusscanner -> clamscan
scannerpath -> /usr/bin
viruscmd -> --verbose --stdout
alert -> FOUND
scannersummary -> true
downloads -> /var/www/downloads
downloadsdir -> /downloads
popupfast -> false
popupback -> true
popupwidth -> 600
popupheight -> 400
filechmod -> 644
secret -> [psw]
BAR -> img/bar.png
PROGRESS -> img/progress.png
Da notare la cartella /var/www/downloads per il download temporaneo. Create questa cartella e datele i giusti permessi affinchè Viralator (quindi Apache) possa scriverci:
macondo:~# mkdir /var/www/downloads
macondo:~# chown www-data.www-data /var/www/downloads
macondo:~# chmod 775 /var/www/downloads
Tale cartella dovrà essere raggiungibile via browser col path /downloads. Controllate anche che i percorsi dei file di Clamav siano corretti e modificate anche [nome del server] e [psw]. Infine copiate i file bar.png e progress.png dalla cartella in cui avete scompattato Viralator ad una posizione raggiungibile dal browser.

IpTables

Eccoci alla fine, come preannunciato abbiamo bisogno solo di una semplice regola di IpTables. Il suo scopo è quello di creare un cosiddetto Proxy trasparente. Ovvero le richieste degli utenti saranno automaticamente girate verso la porta 3128 (Squid) senza che essi debbano configurare l'uso del proxy nel loro pc o browser. La regola è la seguente:
macondo:~# iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.0/24 -d ! 192.168.1.0/24 --dport 80 -j REDIRECT --to-port 3128
In questo esempio la rete è 192.168.1.0/24, il proxy sarà in ascolto sull'interfaccia eth0 e la redirezione avverrà solo sui pacchetti la cui provenienza sia la rete e la loro destinazione invece non lo sia.

Riavvio e Test

Riavviate Apache e Squid, quindi potete provare la funzionalità del marchingegno tentando di scaricare qualche file la cui estensione sia tra quelle che abbiamo impostato in /etc/squid/squidGuard/db/deny/files. Come potrete vedere sarà effettuata la scansione sul file e solo dopo vi sarà permesso di salvarlo sul vostro pc. Sul sito di Viralator è anche possibile scaricare un falso virus come test, provate anche questo.

Errori comuni

Il file viene scaricato anche se infetto

Se Viralator non trova l'antivirus Clamav si comporta in maniera un po' particolare, ovvero permette il download senza effettuare la scansione. Fate quindi attenzione che nel file /etc/viralator/viralator.conf sia il path che il nome dell'eseguibile siano corretti. Ad esempio nel file di configurazione originale viene cercato l'eseguibile clamdscan in /usr/local/bin. in Debian il file è clamscan e si trova il /usr/bin.

"You cannot download from this site! The given url is not valid. Please contact your system administrator for details."

Le pagine indirizzate al vostro server proxy non devono essere girate dalla porta 80 alla 3128, state quindi attenti che nel comando di iptables l'opzione -d ! 192.168.1.0/24 sia corretta e l'ip della rete sia quello corretto.

FAQ

Per qualunque altra domanda guardate le FAQ nel sito di Viralator http://viralator.sourceforge.net/

Un'alternativa: SCAVR

Un analogo risultato dovrebbe essere ottenuto con SCAVR (Squid ClamAV Redirector, un progetto che non sembra essere molto maturo). Gli strumenti necessari sono: Python, PyClamav, Clamav, Squid e SCAVR.

Python e PyClamav

In Debian dovreste aver già installato Python, altrimenti potete installalo insieme agli strumenti necessari alla compilazione dei nuovi moduli con:
macondo:~# apt-get install python2.3-setuptools
Serve anche il pacchetto di sviluppo di Clamav:
macondo:~# apt-get install libclamav-dev
A questo punto scaricare PyClamav e scompattatelo (il pacchetto Debian in testing e unstable non funziona sulla versione stabile per alcune dipendenze mancate). Entrate quindi nella cartella, compilate e installate il modulo pyclamav:
macondo:~# python setup.py build
running build
running build_ext
building 'pyclamav' extension
creating build
creating build/temp.linux-i686-2.3
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/include -I/usr/include/python2.3 -c pyclamav.c -o build/temp.linux-i686-2.3/pyclamav.o
creating build/lib.linux-i686-2.3
gcc -pthread -shared build/temp.linux-i686-2.3/pyclamav.o -lclamav -o build/lib.linux-i686-2.3/pyclamav.so

macondo:~# python setup.py install
running install
running build
running build_ext
running install_lib
copying build/lib.linux-i686-2.3/pyclamav.so -> /usr/lib/python2.3/site-packages
A questo punto scaricate il pacchetto di SCAVR e sscompattatelo. Quindi spostate il file di configurazione nella cartella /etc/squid e lo script in una cartella di binari (es. /usr/local/bin). Assicuratevi che lo script abbia i giusti permessi:
macondo:~# chmod +x /usr/local/bin/SquidClamAV_Redirector.py
Bene, bisogna modificare il file di configurazione /etc/squid/SquidClamAV_Redirector.conf secondo le proprie esigenze. Adesso si può provare il funzionamento provando a lanciare lo sript:
macondo:~# /usr/local/bin/SquidClamAV_Redirector.py -c /etc/squid/SquidClamAV_Redirector.conf
LibClamAV Warning: ********************************************************
LibClamAV Warning: ***  This version of the ClamAV engine is outdated.  ***
LibClamAV Warning: *** DON'T PANIC! Read http://www.clamav.net/faq.html ***
LibClamAV Warning: ********************************************************
LibClamAV Warning: ********************************************************
LibClamAV Warning: ***  This version of the ClamAV engine is outdated.  ***
LibClamAV Warning: *** DON'T PANIC! Read http://www.clamav.net/faq.html ***
LibClamAV Warning: ********************************************************
[Ctrl-D per uscire]
Se non ricevete errori lo script sta funzionando. Per finire non resta che configurare /etc/squid/squid.conf per la redirezione verso SCAVR, aggiungendo le righe seguenti:
redirect_program /usr/local/bin/SquidClamAV_Redirector.py -c /etc/squid/SquidClamAV_Redirector.conf
redirect_children 5
Finora non sono riuscito a farelo funzionare correttamente: lo script analizza effettivamente solo i file specificati ma, anche se contengono virus, vengono poi fatti scaricare sul client.

Risorse

Viralator Clamav Squid SquidGuard PyClamav SCAVR Apache

blog comments powered by Disqus