Amavisd è un demone scritto in Perl che permette di chiamare programmi esterni in grado di scomprimere, decodificare e classificare il contenuto dei messaggi e degli allegati di posta.
Accetta le mail dall'MTA usato, chiama moduli Perl esterni e programmi che controllano il messaggio di posta e infine li riinoltra all'MTA per la consegna, il rifiuto o la quarantena del messaggio.
Per usare amavisd-new bisogna assicurarsi che si stia utilizzando una versione di Postfix abbastanza recente e che supporti il parametro content_filter = valore
Innanzi tutto occorre creare un utente e un gruppo per usare questo demone.
Di norma si usa amavis come utente e sweep come gruppo. Per motivi di sicurezza non usare assolutamente utenti di sistema come nobody o altri relativi al sistema di posta come maildrop.
Il file una volta scompattato non occorre di compilazioni, all'interno del pacchetto si trovano l'eseguibile amavisd
e il suo file di configurazione amavis.conf
più uno script di init da inserire nella directory relativa ai file di init del sistema. Questi file vanno copiati nelle loro giuste directory prestando attenzione ai permessi e agli utenti che ne hanno la proprietà. Come home directory per l'utente si può definire /var/amavis/
o /var/lib/amavis/
#cp ./amavisd /usr/sbin/
#chown root /usr/sbin/amavisd
#chmod 755 /usr/sbin/amavisd
e di conseguenza il file di configurazione
#cp ./amavisd.conf /etc/
#chown root /etc/amavisd.conf
#chmod 644 /etc/amavisd.conf
Può essere utile creare una directory che serva da destinazione per i messaggi in quarantena.
#mkdir /var/quarantena
chown amavis.amavis /var/quarantena/
chmod 750 /var/quarantena/
A questo punto sarà necessario editare il file di configurazione amavisd.conf e di conseguenza anche i file di configurazione di Postfix.
Nel amavisd.conf
sarà importante fare attenzione ad alcuni parametri in particolare anche se è consigliabile leggerlo tutto perchè le opzioni possibili sono numerose.
Innanzi tutto si settano i parametri $daemon_user
e $daemon_group
specificando l'utente e il gruppo scelto per far girare il demone. In questo modo al momento del lancio, come root, di amavisd, automaticamente parte come se lanciato dall'utente specificato.
Le opzioni
$HOME
per definire la home directory dell'utente amavis.
$TEMPBASE
dove si definisce la directory in cui vengono temporaneamente posti i messaggi in elaborazione.
$QUARANTINEDIR
la directory di quarantena in cui i messaggi sospetti o certamente infetti vengono riposti per un eventuale controllo e pulizia.
E' possibile anche non creare nessuna directory di quarantena e fare in modo che tutta la mail destinata a questa "coda" sia inviata ad un account di posta preposto per questo.
Si crea una voce relativa nel file /etc/aliases
o a seconda dell'installazione /etc/postfix/aliases
infected = /var/spool/mail/infected
e a seconda che si desideri o meno un mailbox-style aggiungere uno slash finale. Lanciare il comando newaliases
o postalias /etc/postfix/aliases
per aggiornare il database.
Infine specificare nel file amavisd.conf la direttiva
$virus_quarantine_to = 'infected@';
in modo da inviare tutta la posta in quarantena all'indirizzo infected.
Sarà necessario poi prestare attenzione agli altri parametri presenti nella 'Section I', $mydomain
e @local_domains_acl = valore
, e per finire agire sui valori di specifica del software antivirus usato nella 'Section VII'. A questo punto amavisd può essere lanciato e se dovessero mancare alcuni prerequisiti, come qualche modulo Perl, uscirà con un errore mostrando una lista di cosa è venuto a mancare.
Configurato amavisd sarà necessario lavorare sui file di configurazione di Postfix main.cf e master.cf.
Nel master.cf dovranno essere aggiunte le seguenti voci
smtp-amavis unix - - y/n - 2 smtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes
127.0.0.1:10025 inet n - y/n - - smtpd
-o content_filter=
Dove y/n corrispondono al campo "chroot" e serve ad indicare se si è o meno in un ambiente di lavoro chroot.
Infine con il comando
#postconf -e 'content_filter = smtp-amavis:[127.0.0.1]:10024'
si modifica il main.cf e si fa in modo che Postfix inizi a inviare tutta la posta che riceve ad amavisd.
Effettuare un relaod della configurazione con il comando
#postfix reload
Controllare i file di log di Postfix e di amavisd per verificare che tutto funzioni. Volendo all'interno della directory del pacchetto Amavis è presente una sotto-directory test-messages
contenente alcuni file utili per testare il funzionamento del nuovo sistema di filtraggio della posta.
Molti fra i maggiori produttori di antivirus forniscono soluzioni per sistemi Linux, in particolare orientati a mail server, dove maggiore può essere l'utilizzo di un Antivirus con funzioni di protezione della posta anche per client Windows.
L'offerta di F-Prot per sistemi Linux si compone di:
F-Prot for Linux Workstation - Orientata a singoli utenti e al momento poco utile, vista la scarsa diffusione di virus per Linux;
F-Prot for Linux Mail Servers - La soluzione ideale per ISP e aziende che hanno un server di posta basato su Linux (Sendmail, Postfix, Qmail..)
F-Prot for Linux File Servers - Utile su file e ftp server di una rete locale aziendale.
L'engine di virus scanning e il database dei virus sono gli stessi delle rispettive versioni per Windows e vengono costantemente aggiornati. La versione per Mail Servers ha le seguenti componenti:
- F-Prot Antivirus Command-Line Scanner ( f-prot [options] [file or directory]
)
- F-Prot Antivirus Daemon Scanner ( f-protd /path/to/data/directory/
)
- F-Prot Antivirus Updater ( check-updates.pl [options]
)
- F-Prot Antivirus Mail Scanner ( scan-mail.pl [-backup]
)
- F-Prot Antivirus Preloadable Library Call Wrapper ( f-prot.so
)
L'installazione è piuttosto semplice, può essere eseguita direttamente tramite pacchetto RPM o DEP o scompattando un tar.gz e seguendo le relative istruzioni. Tutti i file vengono scritti nella directory /usr/local/f-prot
e a questi si aggiungono dei link simbolici per i comandi di basi in PATH tipici (bin, sbin), gli script di gestione del servizio f-protd in /etc/init.d/f-protd
e i relativi link SysV nelle directory rc#.
Alcuni comandi di F-Prot si basano su Perl 5 e richiedono i seguenti moduli:
scan-mail.pl: MIME::Base64, MIME::QuotedPrint
check-updates.pl: NET::FTP, IO::File, HTTP::Request, HTTP::Response, LWP::UserAgent
I signature files, contenenti le definizioni dei virus sono /usr/local/f-prot/MACRO.DEF
, SIGN.DEF
, SIGN2.DEF
, questi possono venir aggiornati tramite il comando check-updates.pl che va, ovviamente, inserito nel crontab (ad esempio con: 30 4,16 * * * /usr/local/f-prot/tools/check-updates.pl -cron
).
FileSystem Scan
Lo scan di virus sul filesystem può avvenire tramite il comando f-prot che ha varie funzioni e opzioni come:
f-prot /var -dumb -disinf -list
- Esegue uno scan sulla directory /var (e sottodirectory) senza considerare il tipo di file (-dumb), provando a disinfettare i file infetti (-disinf) e visualizzando tutti i file controllati (-list).
f-prot -virlist
- Visualizza l'elenco dei virus che possono venir riconosciuti.
Mail Delivery Scan
F-Prot può facilmente interfacciarsi con qualsiasi sistema di posta che si appoggia a Procmail per il delivery locale dei messaggi (o altri che permettano di passare e far filtrare da un programma esterno la mail prima di salvarla sulla casella postale del destinatario).
Per integrare F-Prot con Procmail basta editare /etc/procmailrc
oppure ~/.procmailrc
(per configurazioni relative a singoli utenti) ed aggiungere un testo tipo:
:0 fw
| /usr/local/f-prot/tools/scan-mail.pl
Allo script scan-mail.pl possono essre aggiunte opzioni come -backup
per eseguire una copia di tutte le mail e -quarantine
per copiare tutti i messaggi originali poi modificati perchè contenenti un virus. Le copie vengono messe nella directory /usr/local/f-prot/backup/
.
E' opportuno considerare che questo metodo controlla i virus solo sulle mail in entrata (nel momento in cui stanno per essere consegnata ad una casella postale locale) e non quelle in uscita. Per un controllo su tutte le mail che vengono gestite dal server esiste la possibilità di fare un:
Mail In-Transit Scan
Questo metodo utilizza il plugin libmilter per Sendmail, per cui non viene ufficialmente supportato su altri SMTP server. La configurazione è semplice, invece di intervenire su .fetchmail.rc si deve editare /tec/mail/sendmail.mc
ed aggiungere righe come:
INPUT_MAIL_FILTER(`f-prot-milter', `S=/var/run/f-prot.sock, F=T, T=E:5m')
Dopo va ricreato il file di configurazione definivo di Sendmail (m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
) e riavviato il servizio. Lo script scan-mail.pl va quindi avviato con l'opzione -milter
(lo si può fare editando direttamente le variabili definite nel codice Perl).
ClamAV è uno dei più interessanti progetti OpenSource per lo scanning di virus.
Rilasciato sotto GPL, è Posix compliant e quindi disponibile per varie piattaforme *nix (Linux, *BSD, Solaris, MacOs X, lo stesso CygWin... ) e, rispetto ad altri progetti simili, ha il fondamentale pregio di mantenere un database in costante aggiornamento.
La versione analizzata, 0.70, identifica più di 20000 virus, è in grado di scompattare file compressi e di analizzare documenti di Office per Macro virus. NON corregge i file infetti, ma, nella sua applicazione più comune (antivirus correlato ad un sistema di posta) questa mancanza è assolutamente ininfluente.
INSTALLAZIONE
E' possibile scaricare sorgenti e binari precompilati per diverse distribuzioni dal sito ufficiale www.clamav.net.
Per compilare ClamAv è necessario avere i seguenti pacchetti: zlib, zlib-devel, oltre ovviamente alla suite gcc. Sono inoltre consigliati bzip2, bzip2-devel, gmp.
Per usarlo è necessario avere un utente non privilegiato con cui farlo eseguire:
groupadd clamav
useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav
Si può quindi procedere alla scompattazione del tar.gz scaricato:
tar -zxvf clamav-x.yz.tar.gz
cd clamav-x.yz
E alla compilazione (qui viene specificato di mettere il file di configuazione sotto /etc ):
./configure --sysconfdir=/etc
make
su -c "make install"
Binari e librerie vengono copiati in /usr/local, il file di configurazione, vista l'opzione --sysconfdir sopra specificata, diventa /etc/clamd.conf
.
Una volta eseguita l'installazione è possibile testate l'engine su dei file d'esempio forniti con il tar.gz:
clamscan -r -l scan.txt clamav-x.yz
CONFIGURAZIONE
Il file di configurazione /etc/clamav.conf
(o /usr/local/etc/clamav.conf
se si sono compilati direttamente i sorgenti senza aver impostato specifici parametri) contiene le varie voci che determinano il funzionamento di ClamAV. I parametri impostati di default sono generalmente adeguati e non è necessario modificarli per poter iniziare ad usarlo, bisogna solo provvedere a commentare la riga Example
(il che, quantomeno, obbliga l'utente a dare un'occhiata al file di configurazione ed avere barlumi di consapevolezza sulla sua logica).
Si segnalano comunque impostazioni quali:
LogFile /tmp/clamd.log
, LogFileMaxSize 2M
, LogVerbose
, LogSyslog
determinano posizione, dimensioni, verbosità ed eventuale utilizzo di Syslog per il file di log.
DatabaseDirectory /var/lib/clamav
la directory in cui viene scritto il database con le signature dei virus riconosciuti
TCPSocket 3310
, TCPAddr 127.0.0.1
la porta e l'indirizzo a cui si mette in ascolto clamd (di default si binda ad ogni indirizzo disponibile)
MaxConnectionQueueLength 15
, MaxThreads 5
il numero massimo di connessioni contemporanee e di thread su clamd (aumentare su sistemi con grossi carichi)
StreamMaxLength 10M
VirusEvent /usr/local/bin/send_sms 123456789 "VIRUS ALERT: %f: %v"
quale comando eseguire nel caso venga intercettato un virus
User clamav
L'utente con cui viene eseguivo clam. Di default "clamav", va creato in fase di installazione e deve avere permessi di lettura e scrittura sui log e il database dei virus.
ScanOLE2
, ScanMail
, ScanArchive
definiscono se eseguire scan su file Microsoft Office, su caselle postale e su file compressi. Notare che lo scan di mailbox è disabilitato di default.
ArchiveMaxFileSize 10M
, ArchiveMaxFiles 1000
[...] parametri vari che determinano dimensioni degli archivi su cui eseguire gli scan.
CONFIGURAZIONE AUTO AGGIORNAMENTO: FRESHCLAM
Freshclam è lo strumento migliore per tenere aggiornato il database di virus su cui lavora l'engine di ClamAV.
Può essere eseguito via command line e schedulato per un aggiornamento automatico, oppure essere lanciato come demone in costante esecuzione. Il suo file di configurazione è /etc/freshclam.conf
dove vengono definite informazioni quali:
DatabaseDirectory /var/lib/clamav
- La directory dove Clam trova il database dei virus, deve essere uguale a quanto definito in clamav.conf
UpdateLogFile /var/log/clamav/freshclam.log
- Il file dove vengono loggate le operazioni di freshclam, deve appartenere all'utente clamav e può avere permessi 0600
NotifyClamd /etc/clamav.conf
- Notifica clamd (va indicato il path corretto del suo file di conf) ogni volta che vengono aggiunti virus al database, in modo da riavviarlo per ricaricare il database aggiornato.
DatabaseMirror database.clamav.net
L'indirizzo da cui scaricare gli aggiornamenti. Il valore preimpostato è l'ideale perchè punta ad un pool, gestito con un round-robin DNS, di mirror ufficiali
Esistono altre opzioni che permettono di usare un proxy http, di eseguire comandi custom ad ogni aggiornamento o errore, di gestire la frequenza degli aggiornamenti (in modalità demone) o il numero di tentativi, ecc.
Per eseguire freshclam in daemon mode basta lanciare:
/usr/local/bin/freshclam -d
per lanciare una esecuzione schedulata, aggiungere a /etc/crontab
una riga tipo:
N * * * * /usr/local/bin/freshclam --quiet
dove N è un numero da 00 a 59 che indica il minuto in cui eseguire l'aggiornamento (ogni ora).
USARE CLAMAV
Clamav, in se, si "limita" ad analizzare il contenuto di un file o di un flusso di dati e ad individuare eventuali virus sulla base del database di firme che viene tenuto aggiornato con freshclam.
La sua natura aperta, comunque, gli permette di essere integrato ed interagire con altri programmi per poter essere utilizzato come antivirus su un server di posta o un file server o per eseguire un check direttamente su dei file specificati.
La modalità di funzionamento è duplice: esiste la possibilità di utilizzare l'engine tramite il comando clamscan
oppure di usufruire del demone clamd
.
clamscan se lanciato senza argomenti fornisce alcune informazioni e statistiche sul numero di virus riconosciuti, se viene seguito dal nome di una directory del file sistem, esegue un check di tutti i file ivi contenuti. Fra le opzioni e gli utilizzi più utili:
clamscan -r /home
Esegue lo scan ricursivo (-r
) di tutto il contentuto della directory /home
clamscan -r /home -l /var/log/antivirus.log
Salva il report dello scan di /home sul file antivirus.log (a video, in standard error, vengono visualizzati tutti i file contollati
clamscan -r /home -i
Stampa a video solo i nomi dei file infetti (oltre al report finale) e quindi risulta decisamente meno verboso.
Il demone clamd può stare in ascolto su una socket Unix (opzione di default: LocalSocket /tmp/clamd
nel file di conf) o, in alternativa, su una porta TCP (opzione TCPSocket 3310
).
Per eseguirlo basta lanciare il comando clamd
. Se si vuole usare un file di configurazione diverso da quello di default si puà usare l'argomento --config-file
, se si vuole abilitare il debug mode usare --debug
Il demone si presta ad integrarsi ed essere usato come filtro da parte di vari programmi esterni ed ha, comunque, un suo client chiamato clamdscan
che ha sostanzialmente le stesse opzioni di clamscan.
Se si ha clamd in esecuzione basta digitare clamdscan /home
, per esempio, per eseguire il controllo dei file in /home.
Notare che quando si usa clamdscan, si accede ai file da controllare tramite clamd per cui l'utente con cui il demone gira (di default clamav) deve averne almeno accesso in lettura.
MODALITA' D'USO
Essendo ClamAV fondamentalmente un filtro, che riceve un file in input e lo rilascia in output dopo aver verificato se contiene virus, i suoi ambiti di utilizzo sono svariati e si integrano con software e soluzioni diversi.
Sendmail Milter
Sendmail ha la possibilità con il supporto milter, di integrarsi con dei filtri che analizzano la mail mentre sta per essere ricevuta (e quindi prima del delivery completo).
Se si compila ClamAv con l'opzione (sono necessarie le librerie di development libmilter):
./configure --enable-milter
dopo la compilazione ci si ritroverà il file /usr/local/sbin/clamav-milter
(se si installa ClamAV tramite un pacchetto, il supporto milter con file clama-milter dovrebbero essere già presenti).
VA quindi configurato sendmail per usare il milter clamav, in /etc/mail/sendmail.mc
aggiungere:
INPUT_MAIL_FILTER(`clmilter',`S=local:/var/run/clmilter.sock,F=, T=S:4m;R:4m')dnl
define(`confINPUT_MAIL_FILTERS', `clmilter')
In clamav.conf
definire:
LocalSocket /var/run/clamd.sock
ScanMail
StreamSaveToDisk
A questo punto, oltre ad riavviare i servizi Sendmail e ClamAv si deve avviare il servizio clamav-milter:
/usr/local/sbin/clamav-milter -lo /var/run/clmilter.sock
Se si è fatta una installazione tramite rpm si avranno i seguenti file chiave:
/etc/rc.d/init.d/clamav-milter Script di gestione del servizio
/etc/sysconfig/clamav-milter File di configurazione con gli argomenti da passare al programma
/usr/sbin/clamav-milter Il binario di clamav-milter
Utilizzo di procmail
A differenza della precedente, in questa modalità il filtro viene fatto sulle mail quando sono state già ricevute dal server SMTP e prima di essere "consegnate", tipicamente tramite procmail, ad una casella postale locale.
Il vantaggio è che procmail di fatto può essere integrato con qualsiasi server SMTP.
Di fatto esistono diverse soluzioni e script che tramite procmail e clamav filtrano la posta. Ne citiamo alcuni:
clamassassin - Ha una logica simile a Spamassassin: la mail viene passata ad uno script perl che usando clam aggiunge un header specifico alle mail infette, le quali vengono poi redirezionate o cancellate, da una seconda regola di procmail.
trashcan - Incluso nel pacchetot ufficiale, si presta in particolare per singole postazioni, non su server di posta.
clamscan-procfilter - Semplcie script perl con una logica simile a quella di Clamassassin
Integrazione con Amavisd-NG
Amavis-Ng è una riscrittura di amavis (http://sourceforge.net/projects/amavis) dopo l'installazione basta scommentare in amavis.conf
la riga:
virus-scanner = CLAM
e eventualmente cambiare il path di clamscan:
[CLAM]
clamscan = /usr/local/bin/clamscan
Altri
Per un elenco completo dei plugin e delle possibilità di interazione di ClamAv con software vari (non soltanto in riferimento alla posta, è possibile anche integrarlo con Samba o con Apache) con relative istruzioni, fare riferrimento alla documentazione HTML ufficiale, nella parte relativa al "Third Party Software"
Un sistema molto semplice e comunque abbastanza efficace per filtrare una buona quantità di Virus, seppur in modo grossolano, è quello di implementare direttamente a livello di Procmail, senza l'uso di filtri esterni, un meccanismo di controllo per tutte le mail che hanno allegati sospetti.
Ecco come può apparire un /etc/procmailrc
o un $HOME/.procmailrc
:
:0
Si sposta la mail nella casella postale virus (che potrà essere controllata dall'utente POP£ virus
* ^X-Attachments:.*name=".*\.(pif|scr|bat|vbs|vba|lnk|com)" Si controlla il nome dell'attachment e se termina con una delle estensioni riportate (tutte tipiche di alcuni virus e difficilmente usate per scopi legittimi)....
/var/spool/mail/virus