====== Spamassassin e ClamAV ====== Appunti per Debian Woody e Debian Sarge, con server SMTP Exim. ===== Spamassassin ===== Si desidera far girare la versione daemon di spamassassin (''**spamd**'') che resta in ascolto sulla porta 783 tcp. Exim chiamerà ''**spamc**'' (il client) per filtrare le mail locali prima di consegnarle. Per l'avvio del demone ''spamd'' si mette ''**ENABLED=1**'' in ''**/etc/default/spamassassin**''. Con Spamassassin **versione 2** è necessario anche impostare ''**OPTIONS="-F 0"**'' per rimuovere la linea ''"From "'' all'inizio della mail. Questo perché le mail filtrate verranno nuovamente passate ad Exim. In presenza del "From " Exim riscriverebbe gli header della mail considerando tutto il testo originale (header compresi) come body. Tolta invece l'opzione ''**-c**'' proposta da Debian, altrimenti ''spamd'' tenta di creare un file con le user pref nella home dell'utente. Nel nostro caso spamd viene chiamato prima del delivery come utente mail, non come utente finale e le preferenze cadrebbero tutte in ''/var/mail/''. Con Spamassassin **versione 3** si consiglia ''**OPTIONS="--max-children 5 --helper-home-dir"**'', si toglie invece l'opzione ''--create-prefs'', come per la versione 2 (vedere ''**spamd(8)**'' per le opzioni). La configurazione di spamassassin (come e cosa controllare) è in ''**/etc/spamassassin/local.cf**''. Ecco un esempio per una versione 3: # See 'perldoc Mail::SpamAssassin::Conf' for details of what can be # tweaked. # Use a more efficient, but non-NFS-safe, locking mechanism. lock_method flock # Hits required before a mail is considered spam. Default: 5 required_hits 4.5 # The subject lines of suspected spam will be tagged. rewrite_header Subject *****SPAM***** # Incoming spam is only modified by adding some "X-Spam-" # headers and no changes will be made to the body. report_safe 0 # Whitelist mail from Tripwire. header LOCAL_RCVD Received =~ /from localhost \(\[127.0.0.1\] helo=.*\)\s.*\sfor / describe LOCAL_RCVD Received from localhost score LOCAL_RCVD -5 # Blacklist messages where Sanitized found a virus. body SANITIZED /^\*\*\*\*\*ANTIVIRUS\*\*\*\*\*/ describe SANITIZED Sanitizer removed a virus from the message score SANITIZED 10 ==== File di configurazione ==== I file di configurazione vengono cercati in ''**/etc/spamassassin/**''. Per prima cosa SpamAssassin (solo la versione 3) cerca dei file con estensione ''**%%*.pre%%**'', poi vengono cercati i file con estensione ''**%%*.cf%%**''. I file vengono considerati in ordine alfabetico. Nei file di configurazione si può anche sfruttare la direttiva ''**include**''. ==== Collegamento a Exim 3 ==== In ''**/etc/exim/exim.conf**'' si definisce un director ''**spamcheck_director**'' che viene messo per primo, così ogni mail locale - se soddisfa le condizioni - viene gestita da questo director e passata allo ''**spamcheck_transport**''. spamcheck_director: # Do not use this director when verifying a local-part at SMTP-time no_verify # When to scan a message : # - it isn't already flagged as spam # - it isn't already scanned # - it didn't originate locally (as long as I don't harbor spammers :-)) # - $local_part is in /etc/exim/spam_check_mbox condition = "${if and { {!def:h_X-Spam-Flag:} {!eq {$received_protocol}{spam-scanned}} {!eq {$received_protoc driver = smartuser transport = spamcheck_transport Tra le condizioni che devono essere vere per filtrare il messaggio c'è che la ''local_part'' dell'indirizzo (a sinistra della "@") deve essere presente in ''/etc/exim/spam_check_mbox''. Lo ''spamcheck_transport'' filtra il messaggio con ''spamd'' e poi lo ripresenta ad Exim: spamcheck_transport: driver = pipe command = "/usr/sbin/exim -oMr spam-scanned -bS" bsmtp = all transport_filter = "/usr/bin/spamc -f" home_directory = "/tmp" current_directory = "/tmp" # Must use a privileged user to set $received_protocol on the way back in! user = mail group = mail log_output = true return_fail_output = true return_path_add = false prefix = suffix = L'opzione ''**-f**'' di ''spamc'' è valida per la **versione 2** di Spamassassin, indica che il messaggio deve comunque passare se per caso il demone ''spamd'' fallisce l'esecuzione. ==== Collegamento a Exim 4 ==== Ecco i file di configurazione per un Exim4 e Spamassassin 3. Anche questa configurazione consente di applicare il filtro SpamAssassin in modo selettivo alle mail in arrivo. Bisogna definire un **router** che seleziona le mail in arrivo da filtrare. Il router deve comparire prima degli altri: ### router/010_local-spamcheck ################################# # SpamAssassin router spamcheck_router: no_verify check_local_user # When to scan a message : # - it isn't already flagged as spam # - it isn't already scanned # - .spamcheck exists for this user condition = \ "${if and { {!def:h_X-Spam-Flag:} \ {!eq {$received_protocol}{spam-scanned}} \ }\ {1}{0}\ }" require_files = $home/.spamcheck driver = accept transport = spamcheck_transport Il router seleziona il messaggio e lo passa al **transport** che provvedere ad effettuare la scansione e il reinoltro ad Exim stesso per la consegna finale. Ecco la definizione del transport: ### transport/90_local-spamcheck # Transport for SpamAssassin: mail is filtered with spamc # and piped back to Exim. # spamcheck_transport: driver = pipe command = /usr/sbin/exim4 -oMr spam-scanned -bS use_bsmtp = true transport_filter = /usr/bin/spamc home_directory = "/tmp" current_directory = "/tmp" # must use a privileged user to set $received_protocol on the way user = Debian-exim group = Debian-exim log_output = true return_fail_output = true return_path_add = false message_prefix = message_suffix = Le mail vengono date nuovamente ad Exim, ma questa volta il //received_protocol// viene forzato a **spam-scanned**, in modo che non vengano controllate una seconda volta. Per fare questo bisogna che l'user che reinoltra la mail (exim gira come utente ''Debian-exim'') sia indicato come **trusted_user**. Bisogna quindi creare il file ''/etc/exim4/conf.d/main/00_local'': ### main/00_local ################################# MAIN_TRUSTED_USERS = Debian-exim ==== sa-learn ==== Con il comando ''**sa-learn**'' si possono allenare i filtri bayesiani di SpamAssassin. Lo si deve lanciare a nome dell'utente sotto cui gira SpamAssassin. Negli esempi precedenti si tratta dell'utente ''mail'' in quanto SpamAssassin è stato configurato come filtro di sistema. Il materiale imparato viene salvato in ''**%%$HOME/.spamassassn/bayes*%%**'', si tratta di un database dinamico che prevede anche un journal, conviene consolidarlo con ''--sync'' ad esempio prima di copiarlo su un'altro host. Supponiamo che ''/home/salearn/Maildir/cur'' sia una directory dove sono raccolti tutti i messaggi di spam e ''mail'' sia l'utente con cui gira SpamAssassin: su - mail sa-learn --spam /home/salearn/Maildir/cur sa-learn --sync sa-learn --backup > bayes.backup sa-learn --restore bayes.backup Gli ultimi due comandi mostrano come si fa il backup e il restore del database dei filtri bayesiani. ==== sa-update ==== Con **sa-update** si possono scaricare e tenere aggiornate le collezioni di regole che SpamAssassin utilizza per assegnare punteggio. Si possono tenere aggiornate sia le regole predefinite di SpamAssassin che delle collezioni aggiuntive scelte in base alle proprie esigenze. Si deve scegliere un //canale// da cui prelevare le nuove regole, esiste il sito **[[http://www.rulesemporium.com/|SARE]]** che contiene una buona galleria di canali. Si è provato con **[[http://saupdates.openprotect.com/|saupdates.openprotect.com]]** e **[[http://www.malware.com.br/|www.malware.com.br]]**. **ATTENZIONE a dove vengono messi i file scaricati!** Dal manuale di SpamAssassin: //The SpamAssassin rule base, text templates, and rule description text are loaded from configuration files. Default configuration data is loaded **from the first existing directory** in:// * /var/lib/spamassassin/3.001004 * /usr/share/spamassassin * /usr/share/spamassassin * /usr/local/share/spamassassin * /usr/share/spamassassin **Nota:** la man page Debian indica la directory ''/usr/share/spamassassin'' più volte! Il pacchetto Debian di spamassassin mette le regole predefinite - se non si attiva la funzione di aggiornamento automatico - in **''/usr/share/spamassassin''**, quindi è indispensabile mettere le regole aggiuntive in una directory diversa dal default di ''sa-update'' che è ''**/var/lib/spamassassin/3.001004/**'', altrimenti le regole aggiuntive oscurerebbero quelle predefinite di spamassassin. La directory si indica con il parametro ''--updatedir'': sa-update --nogpg --channel saupdates.openprotect.com --updatedir /usr/local/lib/sare Nella directory **''/usr/local/lib/sare/saupdates_openprotect_com/''** vengono piazzati due file (uno con estensione **.pre** e uno con estensione **.cf**) più una sottidirectory con la collezione delle regole. Spamassassin considera nelle directory di configurazione prima i file con estensione **.pre** e poi quelli con estensione **.cf** in ordine lessicografico, si può pertanto aggiungere in coda al file ''**/etc/spamassassin/local.cf**'' le seguenti righe: include /usr/local/lib/sare/saupdates_openprotect_com.pre include /usr/local/lib/sare/saupdates_openprotect_com.cf Prima di riavviare il demone conviene verificare la sintassi delle nuove regole: spamassassin --debug --nocreate-prefs --lint echo "rm -r /root/.spamassassin" /etc/init.d/spamassassin restart Se vogliamo scaricare automaticamente ogni giorno le nuove regole si imposta **''CRON=1''** in ''/etc/default/spamassassin'', in tal caso il cronjob ''/etc/cron.daily/spamassassin'' provvede a scaricare le nuove regole in **''/var/lib/spamassassin/3.001004''**. **ATTENZIONE**: Potrebbe capitare che le nuove regole scaricate abbiano un problema, in tal caso il demone Spamassassin potrebbe pure morire con il messaggio di errore: spamd[6433]: config: no rules were found! Do you need to run 'sa-update'? Sembra che per risolvere sia sufficiente eliminare la directory **/var/lib/spamassassin/3.004001/**. La versione dell'aggiornamento installato si ricava dalla prima riga dal file **/var/lib/spamassassin/3.004001/updates_spamassassin_org.cf**: # UPDATE version 1869319 La versione disponibile si ottiene con una interrogazione DNS. Avendo installato SpamAssassin **versione 3.4.1** si interroga: host -t TXT 1.4.3.updates.spamassassin.org 1.4.3.updates.spamassassin.org is an alias for 3.3.3.updates.spamassassin.org. 3.3.3.updates.spamassassin.org descriptive text "1869319" Per effettuare un check dell'aggiornamento, senza eseguirlo: sa-update -D -v --checkonly **ATTENZIONE**: Con Debian 10 Buster viene installato SpamAssassin 3.4.2, quindi cambia ad esempio la directory con gli aggiornamenti: **/var/lib/spamassassin/3.004002/**. ===== ClamAV ===== ==== Debian Woody ==== Una versione più recente di Clamav è disponibile come backport da [[http://www.backports.org/|www.backports.org]], conviene aggiungere queste righe a ''/etc/apt/sources.list''" deb http://www.backports.org/debian stable clamav deb-src http://www.backports.org/debian stable clamav Interessa la versione //demone// dello scanner, più performante. Anche gli aggiornamenti verranno scaricati in atuomatico da un demone (clamav-freshclam) oppure da cronjob. Si devono installare quindi i seguenti pacchetti (nota: clamav e clamav-freshclam devono essere installati con una sola esecuzione di dpkg): * libgmp3 (woody) * ucf_0.30_all.deb (sarge - testing) * libclamav1_0.67-5.1_i386.deb (backport) * clamav-base_0.67-5.1_all.deb (backport) * clamav_0.67-5.1_i386.deb (backport) * clamav-freshclam_0.67-5.1_i386.deb (backport) * clamav-daemon_0.67-5.1_i386.deb (backport) C'è un errore nel postints di clamav-daemon (corretto dalla versione 0.67-7), il file ''/etc/logrotate.d/clamav-daemon'' che viene installato ha la riga ''create'' dentro la sezione ''postrotate/endscript''. E' stato corretto mettendo il create prima della sezione. ==== Debian Sarge ==== Con Debian Sarge si installano i seguenti pacchetti: * arj * clamav * clamav-base * clamav-daemon * clamav-freshclam * libclamav1 * libgmp3 * unzoo Si vuole l'aggiornamento via cron (''/etc/cron.d/clamav-freshclam'') piuttosto che far girare freshclam come demone (eventuale configurazione in ''**/etc/clamav/freshclam.conf**''). Il database dei virus conosciuti viene memorizzato in ''/var/lib/clamav/''. Per controllare un file, una directory o una Maildir si puo' usare: clamscan /path/to/file clamscan -r /directory/ clamscan -r --mbox /home/user/Maildir/ Il codice di ritorno significa: 0 No virus found. 1 Virus(es) found. >1 Altri errori. ===== Sanitizer ===== Installato Sanitizer da Debian testing (non ci sono dipendenze!), creato un file di configurazione ad-hoc: ''**/etc/sanitizer.conf**''. Predisposta la directory ''/home/quarantine/'' per ricevere gli allegati infetti. Appartiene a mail:mail, mode 0750. Per testare sanitizer come filtro su un messaggio di posta: cat message | sanitizer /etc/sanitizer.cfg