Scansione antivirus on-the-fly attraverso il proxy
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
