Gentoo Logo

Guida al filtraggio della posta elettronica con Gentoo

Indice:

1.  Introduzione

Questa guida descrive passo passo come installare un gateway per il filtraggio della posta dai virus e dallo spam. Questa soluzione è abbastanza semplice da applicare ad singolo server.

Una visione dall'alto

Questo documento descrive come impostare un gateway per il filtraggio dello spam che supporti multipli domini di posta. Questo server è progettato per essere posto a monte dei server di posta che dovrebbero effettivamente memorizzare i messaggi di posta (ad esempio, Microsoft Exchange o Lotus Notes).

Per questa configurazione sono state scelte delle applicazioni note per il buon livello di sicurezza che offrono e per la facilità con la quale possono essere modificati i propri file di configurazione. L'MTA (dall'inglese mail transport agent, in altre parole un programma che si occupi dello smistamento da un computer a un altro della posta elettronica) scelto è postfix, che appunto è abbastanza sicuro ed relativamente facile da configurare. Come impostazione predefinita, postfix si mette in ascolto sulla porta 25 per la posta in ingresso. Quando arriva un nuovo messaggio di posta, il server lo inoltra ad amavisd-new sulla porta 10024. Amavisd-new, successivamente, controlla il messaggio attraverso vari filtri e lo restituisce a postfix sulla porta 10025; infine, il messaggio viene consegnato al server di posta successivo.

Amavisd-new è un framework per il filtraggio di contenuti che utilizza applicazioni di supporto per il riconoscimento di virus e spam. In questa configurazione si utilizzeranno due applicazioni: ClamAV per il filtraggio dei virus e Spamassassin per quello dello spam. Spamassassin, a sua volta, può poggiarsi su applicazioni di livello inferiore, come ad esempio Vipul's Razor e DCC.

Rispetto ad altre tecnologie di controllo dello spam (come gli RBL, dall'inglese Real-time Blackhole List, termine con il quale si indicano impropriamente le tecnologie DNSBL, o di DNS blacklist, che consistono nella pubblicazione, da parte di un sito Internet, di una lista di indirizzi IP che, per varie ragioni, ma principalmente spam, dovrebbero essere bloccati), Spamassassin non valida un dato messaggio email in base ad un singolo test. Questo programma, invece, esegue una lista di controlli, sia interni, sia usando delle applicazioni esterne, per calcolare un punteggio da assegnare ad ogni messaggio di posta. Questo punteggio è determinato in base a:

  • Filtro Bayesiano
  • Regole statiche basate su espressioni regolari
  • Reti distribuite e collaborative:
    • RBL
    • Razor2
    • Pyzor
    • DCC

La prima parte della guida (capitoli dall'1 al 4) descriverà l'impostazione base del gateway che farà da filtro. I capitoli seguenti possono essere implementati in maniera indipendente, senza alcuna dipendenza reciproca. Questi capitoli descriveranno come:

  • impostare delle cartelle IMAP specifiche per l'apprendimento del filtro Bayesiano e per la consegna dei falsi positivi
  • impostare il greylisting con Postfix
  • impostare Amavisd-new per usare MySQL come backend per le preferenze dell'utente
  • impostare Spamassassin per usare MySQL come backend per i dati di AWL e del filtro Bayesiano

Nota: Le cartelle IMAP useranno il formato maildir. Avere ogni messaggio email in un file separato rende la loro gestione molto più semplice. Se è già in uso mbox, si consiglia di provare il formato maildir. Se non si è installato maildir, installare i pacchetti necessari usando emerge courier-imap.

Una quinta parte della guida, in via di scrittura, conterrà diversi suggerimenti sulle prestazioni ed altre informazioni utili (come far girare il server in chroot, le restrizioni di postfix, ecc...).

Nota: Delegare responsabilità a terze parti non è esente da rischi. È necessario conoscere ed assegnare fiducia a queste terze parti. In questa configurazione, la sola decisione di mettere in quarantena i messaggi con virus è presa da una singola terza parte. Usare il sistema di punteggi di Spamassassin permette di distribuire su diverse tecnologie la decisione di fermare le email di spam, tranne che per le regole statiche interne a Spamassassin.

Avvertenza: Quando si identificano e rifiutano le email di spam a livello MTA, bisogna prestare molta attenzione a quale RBL si usa. Ad esempio, SpamCop è un cattivo RBL da usare a livello MTA, in quanto genera un apprezzabile numero di falsi positivi, a causa dell'eccessiva aggressività del suo elenco. Ulteriori informazioni possono essere trovate qui: Perchè gli RBL sono inaffidabili e Il problema dello spam: oltre gli RBL

Preparativi

Prima di iniziare, accertarsi di avere una installazione funzionante di Postfix, verificando la possibilità di inviare e ricevere messaggi di posta dal server di backend. Se non si ha esperienza con l'impostazione di Postfix, potrebbe essere troppo complicato impostare tutto assieme. Se si ha bisogno di aiuto, si può trovare assistenza nell'eccellente Guida al Sistema di Mailhosting Virtuale con Postfix nella documentazione Gentoo.

2.  Installare i programmi necessari

Iniziare installando i programmi più importanti: Amavisd-new, Spamassassin e ClamAV.

Codice 2.1: Installare Amavis, Spamassassin e Clamav

# emerge amavisd-new spamassassin clamav 

Nota: Come menzionato in precedenza, si dovrebbe già avere una istanza di postfix attiva sulla macchina. Normalmente questo non si spinge oltre il lanciare emerge postfix e comprendere le basi del funzionamento di Postfix.

Impostare il DNS

Nota: Se non si sta impostando un server gateway, ma le caselle di posta sono sullo stesso server, basta anche solo impostare il record MX del DNS.

Mentre i programmi sono in via di installazione, avviare una nuova shell e creare i record DNS necessari.

Iniziare creando un record MX per il gateway di posta ed un record A per la destinazione successiva.

Codice 2.2: Impostare il DNS

(Creare un record MX per il server gateway)
                MX      10      mailgateway.mydomain.tld.
(Creare un record A per il server gateway)
mailgateway     A       aggiungi.qui.ip.mailgateway
(Creare un record A per il prossimo server di posta)
mail            A       aggiungi.qui.ip.mailserver

Nota: Alcuni fornitori di ADSL potrebbero bloccare la porta 25 e forzare il relay della posta attraverso uno dei loro server. In questo caso, basta creare un record MX secondario del tipo MX 20 backup-mx.some-isp.tld

Aprire il firewall

In aggiunta al normale traffico di posta, si dovrebbero permettere ad alcuni servizi aggiuntivi di passare attraverso il firewall, in modo da consentire alcuni controlli di rete per la comunicazione con i server.

Applicazione Protocollo Porta
DCC UDP 6277
Razor(ping in uscita) TCP 7
Razor TCP 2703

Razor usa il ping per determinare quali server siano più vicini.

Configurare Postfix

Prima di tutto si deve impostare postfix in modo da ascoltare sulla porta 10025, rimuovendo la maggior parte delle restrizioni in quanto esse sono già state applicate all'istanza di postfix che ascolta sulla porta 25. Inoltre ci si deve assicurare che l'istanza sulla porta 10025 accetti solo connessioni locali. Per permettere questo comportamento, si devono aggiungere le seguenti linee alla fine di /etc/postfix/master.cf

Codice 2.3: Modifiche al file master.cf

smtp-amavis     unix -        -       n     -       2  smtp
  -o smtp_data_done_timeout=1200
  -o smtp_send_xforward_command=yes
#In maniera equivalente, usando lmtp:
#lmtp-amavis    unix -        -       n     -       2  lmtp
#   -o lmtp_data_done_timeout=1200
#   -o lmtp_send_xforward_command=yes

127.0.0.1:10025 inet n        -       n     -       -  smtpd
  -o content_filter=
  -o local_recipient_maps=
  -o relay_recipient_maps=
  -o smtpd_restriction_classes=
  -o smtpd_client_restrictions=
  -o smtpd_helo_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o mynetworks=127.0.0.0/8
  -o strict_rfc821_envelopes=yes
  -o smtpd_error_sleep_time=0
  -o smtpd_soft_error_limit=1001
  -o smtpd_hard_error_limit=1000

#Se si vuole usare il filtraggio via proxy
#smtp            inet n         -       n      -       8 smtpd
# -o smtpd_proxy_filter=127.0.0.1:10024
# -o smtpd_client_connection_count_limit=4
#Usare le seguenti righe per non controllare la posta in uscita
#10.0.0.2:smtp   inet n         -       n       -      - smtpd
#-o content_filter=

Nota: La riga relativa ad smtp-amavis specifica che un massimo di due processi di tale programma possono essere in esecuzione contemporaneamente. Se si ha bisogno di un maggior grado di concorrenza, modificare quel valore secondo necessità. Ricordarsi inoltre di impostare lo stesso valore per $max_servers in amavisd.conf. È bene tenere a mente che amavisd-new è abbastanza avido di memoria ed aumentare troppo il numero di processi concorrenti potrebbe portare ad una diminuzione consistente della memoria disponibile, così come ad un intenso uso dello swap.

Nota: Se si vuole eliminare lo spam ad un livello precedente, si può utilizzare il metodo Before-Queue (proxy) in luogo del metodo che usa il filtro. Rimuovendo i segni di commento dalle tre righe appropriate, è necessario poi aggiungere la variabile content_filter= in main.cf. Questa soluzione non è raccomandata per server ad alto traffico, in quanto il numero di connessioni concorrenti è limitato dal numero massimo di istanze di amavisd.

Avvertenza: Il metodo Before-Queue (proxy) non è stato ancora testato approfonditamente.

Nota: Se, per qualsiasi motivo, si volesse inviare una email dalla stessa macchina, senza sottoporla a scansione, aggiungere una nuova istanza di postfix togliendo il simbolo di commento dalle ultime due linee e sostituendo il corretto indirizzo IP.

Il file master.cf indica a postfix in che modo lanciare ogni singolo processo. Per ulteriori informazioni, vedere man 8 master.

Successivamente, si deve avere l'istanza principale di postfix in ascolto sulla porta 25, che filtri i messaggi di posta attraverso amavisd-new, in ascolto sulla porta 10024.

Si deve anche impostare il nodo successivo di destinazione per la posta. Impostare Postfix in modo da filtrare tutta la posta attraverso un filtro di contenuti esterno ed abilitare il routing esplicito in modo che Postfix conosca esattamente dove inoltrare la posta.

Codice 2.4: Modificare /etc/postfix/main.cf

biff = no
empty_address_recipient = MAILER-DAEMON
queue_minfree = 120000000

content_filter = smtp-amavis:[127.0.0.1]:10024
# In modo equivalente, con lmtp:
#content_filter = lmtp-amavis:[127.0.0.1]:10024

# TRANSPORT MAP
#
# Inserire il testo da sample-transport.cf per il routing esplicito
transport_maps = hash:/etc/postfix/transport

relay_domains = $transport_maps

Postfix ha numerose opzioni configurabili in main.cf. Per ulteriori spiegazioni sul contenuto del file vedere man 5 postconf, oppure, online, i Parametri di configurazione di Postfix.

Il formato del file transport è quello di un file Postfix di hash. La posta indirizzata ad un dominio elencato sul lato sinistro è inoltrata alla destinazione indicata sul lato destro del file.

Codice 2.5: /etc/postfix/transport

mydomain.tld                          smtp:mail.mydomain.tld

Dopo aver modificato il file, bisogna lanciare il comando postmap. Postfix, in realtà, non legge il file /etc/postfix/transport, perciò è necessario convertirlo con il comando postmap /etc/postfix/transport. Questo crea il file /etc/postfix/transport.db. Non è necessario ricaricare Postfix, in quanto esso rileverà automaticamente le modifiche.

Nota: Se il mail server successivo non dovesse essere in ascolto sulla porta standard per l'SMTP, cioè la 25, configurare postfix con una voce simile a smtp:mail.mydomain.tld:25000.

Se il primo tentativo di invio di una e-mail si conclude con i messaggi che rimbalzano indietro sul server, molto probabilmente è stato commesso un errore di configurazione. Provare ad abilitare temporaneamente soft_bounce mentre si corregge la configurazione. Questo espediente impedisce a postfix di fare il bouncing delle e-mail in caso di errori di spedizione, trattandole come errori temporanei. Il programma manterrà i messaggi nella coda di spedizione finchè soft_bounce non viene disabilitato o rimosso.

Codice 2.6: Abilitare soft_bounce

# postconf -e "soft_bounce = yes"
# /etc/init.d/postfix reload

Una volta trovata la configurazione funzionante, disabilitare o rimuovere soft_bounce e ricaricare postfix.

Configurare Amavisd-new

Amavisd-new è usato per gestire l'intero processo di filtraggio e permette di unire insieme diverse tecnologie in maniera semplice. Quando riceve un nuovo messaggio, Amavisd-new lo filtra attraverso diversi filtri personalizzati, gestisce il blacklisting e whitelisting, invoca diversi antivirus ed infine lo filtra usando SpamAssassin.

Amavisd-new possiede le seguenti caratteristiche:

  • identifica allegati di posta potenzialmente pericolosi e li gestisce autonomamente
  • ha delle politiche a livello utente, dominio o di intero sistema per:
    • le whitelist
    • le blacklist
    • le soglie di guardia per i punteggi di spam
    • virus e spam

A parte postfix e freshclam, tutte le applicazioni gireranno con i privilegi dell'utente amavis.

Modificare le seguenti linee in /etc/amavisd.conf

Codice 2.7: Come modificare /etc/amavisd.conf

(Inserire i domini da controllare)
$mydomain = 'example.com';
(Per fare il binding sulla sola interfaccia di loopback)
$inet_socket_bind = '127.0.0.1';
(Per inoltrare a Postfix sulla porta 10025)
$forward_method = 'smtp:127.0.0.1:10025';
$notify_method = $forward_method;
(Definire l'account al quale inviare gli avvertimenti sui virus)
$virus_admin = "virusalert\@$mydomain";
(Per aggiungere sempre gli header per lo spam)
$sa_tag_level_deflt  = -100;
(Per aggiungere sempre gli header come X-Spam-Status: Yes)
$sa_tag2_level_deflt = 5;
(Per attivare le azioni evasive ad un dato livello di spam)
$sa_kill_level_deflt = $sa_tag2_level_deflt;
(Per non inviare al mittente le notifiche di stato di consegna. Questo)
(non modifica la consegna dello spam al destinatario, vedere kill_level)
$sa_dsn_cutoff_level = 10;
(Per mettere in quarantena tutti i messaggi problematici)
$final_virus_destiny      = D_DISCARD;  # (default: D_DISCARD)
$final_banned_destiny     = D_DISCARD;  # (default: D_BOUNCE)
$final_spam_destiny       = D_DISCARD;  # (default: D_BOUNCE)

Nota: Con la linea $sa_tag2_level_deflt = 5; si imposta a 5 il punteggio di spam per Spamassassin. Questa impostazione potrebbe essere bassa; il valore p redefinito per Amavisd-new, infatti, è 6.3. Usando 5 si rischia di generare dei falsi positivi, ma con 6.3 qualche messaggio di spam potrebbe passare attraverso i filtri.

Creare una directory di quarantena per i messaggi con virus, in modo che gli stessi non vengano inviati agli utenti.

Codice 2.8: Creare una directory di quarantena per i messaggi con virus

# mkdir /var/amavis/virusmails
# chown amavis:amavis /var/amavis/virusmails
# chmod 750 /var/amavis/virusmails

Nota: Amavisd-new offre un controllo più raffinato attraverso l'utilizzo dei policy banks.

Configurare ClamAV

Per difendersi dai virus si userà ClamAV, in quanto esso ha un buon tasso di riconoscimento comparato con le soluzioni commerciali, è molto veloce ed è software Open Source. I file di log sono estremamente utili, perciò si imposterà il logging di clamd attraverso syslog al suo livello prolisso. Inoltre, assicurarsi di non far girare clamd come root. Modificare /etc/clamd.conf

Codice 2.9: Modificare /etc/clamd.conf

(Log prolisso con syslog)
LogSyslog
LogVerbose
LogFacility LOG_MAIL
(Per modificare il percorso del file pid)
PidFile /var/run/amavis/clamd.pid
(Impostazione del socket di clamav)
LocalSocket /var/amavis/clamd
(Per chiudere la connessione quando viene raggiunto questo limite)
StreamMaxLength 10M
(Per eseguire clamd con privilegi limitati)
User amavis
(Le nuove versioni richiedono che le seguenti linee non siano commentate)
ScanMail
ScanArchive

Nota: Infine fare attenzione a rimuovere la direttiva Example per far funzionare ClamAV.

ClamAV viene distribuito assieme al demone freshclam, dedicato ai controlli periodici per l'aggiornamento delle firme dei virus. Invece di aggiornare le firme dei virus due volte al giorno, si imposterà freshclam im modo che le aggiorni autonomamente ogni due ore.

Codice 2.10: Modificare /etc/freshclam.conf

(Log su syslog)
LogSyslog
(Logging prolisso)
LogVerbose
(Per rilasciare esplicitamente i privilegi di root)
DatabaseOwner clamav
(Per controllare gli aggiornamenti ogni due ore. Questa è la raccomandazione ufficiale)
Checks 12
(Per usare il mirror più vicino. Sostituire XY con il codice del proprio paese)
DatabaseMirror db.XY.clamav.net

Lanciare clamd con freshclam usando gli script di init modificando /etc/conf.d/clamd.

Codice 2.11: Modificare /etc/conf.d/clamd

START_CLAMD=yes
FRESHCLAM_OPTS="-d"

Infine modificare amavisd.conf con il nuovo percorso del socket.

Codice 2.12: Modificare /etc/amavisd.conf

(Decommentare lo scanner clamav e modificare il percorso del socket)
['ClamAV-clamd',
\&ask_daemon, ["CONTSCAN {}\n", "/var/amavis/clamd"],
  qr/\bOK$/, qr/\bFOUND$/,
  qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

Avvertenza: Non modificare $unix_socketname tranne se si sa con certezza cosa si sta facendo.

Configurare Vipul's Razor

Razor2 è una rete collaborativa e distribuita per l'intercettazione dello spam. Per installarlo, digitare emerge razor e creare i necessari file di configurazione. Eseguire la creazione con l'utente amavis, eseguendo su - amavis seguito da razor-admin -create.

Codice 2.13: Creazione dei file di configurazione necessari

# emerge razor

(Impostare temporaneamente la shell dell'utente amavis a bash)
# usermod -s /bin/bash amavis
# su - amavis
$ razor-admin -create
$ exit

(Reimpostare la shell a /bin/false)
# usermod -s /bin/false amavis

Configurare Distributed Checksum Clearinghouse (dcc)

Come Razor2, dcc è una rete collaborativa e distribuita per l'intercettazione dello spam. La sua filosofia è quella di contare il numero di destinatari di una data email, identificando ogni mail con un checksum fuzzy.

Codice 2.14: Installare DCC

# emerge dcc

Configurare Spamassassin

Amavis usa direttamente le librerie in Perl di Spamassassin, quindi non è necessario avviare direttamente il servizio. Questa situazione crea un po' di confusione in quanto alcune impostazioni di Spamassassin vanno configurate in /etc/mail/spamassassin/local.cf, e sono superate da quelle presenti in /etc/amavisd.conf.

Codice 2.15: Creare /etc/mail/spamassassin/local.cf

# Abilitare il sistema di Bayes
use_bayes               1

# Abilitare tutti i controlli di rete
skip_rbl_checks         0

# I messaggi di posta che usano le lingue di questi paesi non saranno
# considerati spam a causa della lingua straniera.
# - danese inglese norvegese svedese
ok_languages            da en no sv

# I messaggi di posta con dei locale usati in questi paesi non saranno
# considerati spam a causa della lingua straniera.
ok_locales              en

# Configurazione del percorso del filtro di Bayes
bayes_path              /var/amavis/.spamassassin/bayes

Nota: Con Spamassassin versione 3.1 bisogna abilitare DCC e Razor2 togliendo il simbolo di commento dalle apposite linee in v310.pre.

Nota: È possibile provare alcuni esempi per il file local.cf con il Generatore di Configurazione per SpamAssassin.

Nota: È consigliabile modificare le variabili ok_languages e ok_locales.

3.  Ogni regola ha le sue eccezioni

Una volta configurato il sistema potrebbe essere necessario modificare ulteriormente la configurazione. Alcuni clienti potrebbero voler ricevere alcuni tipi di email che altri clienti invece non gradiscono. Per questo è possibile separare la configurazioni tra diversi siti con la seguente linea in amavisd.conf.

Codice 3.1: Modificare amavisd.conf per abilitare il punteggio sito per sito

read_hash("/var/amavis/sender_scores_sitewide"),

Nel file sender_scores_sitewide si possono impostare indirizzi email completi (oppure anche solo la parte di dominio) e dare loro un modificatore positivo o negativo al punteggio di spam.

Codice 3.2: Esempio per whitelist_sender

(Mette nella whitelist tutte le email per questo indirizzo email)
postmaster@example.net                -3.0
(Mette nella whitelist tutte le email da example.net escludendo i sottodomini)
.example.net                          1.0

Nota: Vedere /etc/amavisd.conf per ulteriori esempi.

Nota: Inserire questi indirizzi all'esterno di amavisd.conf è una soluzione più pulita e sicura.

Nota: In alternativa, la configurazione può essere attivata nel file di Spamassassin /etc/mail/spamassassin/local.cf, ma probabilmente inserirla in /etc/amavisd.conf è più corretto.

Nota: In un capitolo successivo verrà illustrato come implementare politiche utente per utente utilizzando MySQL.

In attesa della possibilità di usare metodi migliori, è possibile aggiungere le seguenti linee in amavisd.conf in modo da superare i controlli per lo spam per postmaster e abuse.

Codice 3.3: Superare i filtri per lo spam per le mail per postmaster e abuse

map { $bypass_spam_checks{lc($_)}=1 } (qw(
        postmaster@
        abuse@
));

Importante: Non si dovrebbero mai scartare automaticamente le mail per gli account postmaster e abuse. Vedere RFC 2142 MAILBOX NAMES FOR COMMON SERVICES, ROLES AND FUNCTIONS. Altrimenti il dominio potrebbe finire nelle liste di rfc-ignorant.org.

4.  Aggiungere ulteriori regole

Volendo utilizzare ulteriori regole fornite dai SARE Ninjas dello SpamAssassin Rules Emporium, si può facilmente aggiungerle ed aggiornarle usando il meccanismo sa-update incluso in Spamassassin.

Una breve guida su come usare il set di regole SARE con sa-update è disponibile a questo indirizzo.

5.  Test e conclusione

Test della configurazione

Prima di lanciare freshclam è possibile verificare manualmente che funzioni correttamente.

Codice 5.1: Testare freshclam

# freshclam
ClamAV update process started at Sun May  2 09:13:41 2004
Reading CVD header (main.cvd): OK
Downloading main.cvd [*]
main.cvd updated (version: 22, sigs: 20229, f-level: 1, builder: tkojm)
Reading CVD header (daily.cvd): OK
Downloading daily.cvd [*]
daily.cvd updated (version: 298, sigs: 1141, f-level: 2, builder: diego)
Database updated (21370 signatures) from database.clamav.net (193.1.219.100).

Adesso le definizioni dei virus sono aggiornate e contemporaneamente è stata verificata la correttezza della sintassi del file freshclam.conf.

Per testare freshclam e amavisd da linea di comando, lanciare clamd e amavis con i seguenti comandi:

Codice 5.2: Lanciare amavisd e clamd e ricaricare la configurazione di postfix

# /etc/init.d/clamd start
# /etc/init.d/amavisd start
# /etc/init.d/postfix reload

Se tutto è andato bene, postfix dovrebbe adesso essere in ascolto per le email in ingresso sulla porta 25 e per quelle reiniettate sulla porta 10024. Per verificare questo, controllare il proprio file di log.

Codice 5.3: Controllare i file di log

# tail -f /var/log/mail.log

Nota: A seconda delle impostazioni, il percorso corretto per il file di log potrebbe essere /var/log/messages.

Se nessuno strano messaggio compare nei file di log, è tempo di eseguire degli ulteriori test.

Usare netcat per connettersi manualmente ad amavisd sulla porta 10024 ed a postfix sulla porta 10025.

Nota: Netcat può essere utilizzato come un avanzato rimpiazzo di telnet. Installarlo con emerge netcat.

Nota: Per qualche motivo ignoto non è possibile eseguire una iniezione manuale in amavisd usando netcat. Utilizzare telnet invece.

Codice 5.4: Controllare manualmente che amavisd e postfix ascoltino sulle nuove porte

# nc localhost 10024
(Amavis funziona)
220 [127.0.0.1] ESMTP amavisd-new service ready
nc localhost 10025
(La reiniezione in Postfix funziona)
220 example.com ESMTP Postfix

Nota: Se si vuole vedere l'output completo di amavisd-new, lanciare amavisd debug-sa dall'utente amavis ed inviare una email. Per eseguire questo test potrebbe essere necessario modificare la shell predefinita in /etc/passwd.

Aggiungere amavisd e clamd al runlevel default.

Codice 5.5: Agguingere amavisd e clamd al runlevel di default

# rc-update add clamd default
# rc-update add amavisd default

Nota: Non è necessario aggiungere spamd al runlevel di default in quanto amavisd usa le librerie Perl di Spamassassin direttamente.

Nota: Nei log potrebbero comparire delle linee simili a Net::Server: Couldn't POSIX::setuid to ... []. Secondo il file di README per amavis chroot, se l'UID del processo rimane a 0 (root), il programma viene terminato, altrimenti è possibile considerare il messaggio come informativo. Questo accade in quanto POSIX::setuid() restituisce una stringa pari a 0 per indicare true.

Importante: Se è stato abilitato il login per amavis, ricordarsi di reimpostarlo a /bin/false in /etc/passwd.

6.  Apprendimento automatico e sidelining delle email

Creare l'utente spamtrap

Creare l'utente spamtrap e relative directory.

Codice 6.1: Creare l'account spamtrap

# useradd -m spamtrap
# maildirmake /home/spamtrap/.maildir
# chown -R spamtrap:spamtrap /home/spamtrap/.maildir
(Impostare una password non banale)
# passwd spamtrap

Se si vogliono controllare alcune delle email per assicurarsi che non si siano falsi positivi, è possibile configurare procmail in modo da fare il sideline dello spam tra diverse cartelle di posta.

Creare .procmailrc

Codice 6.2: Creare /home/spamtrap/.procmailrc

#Impostare alcune variabili predefinite
MAILDIR=$HOME/.maildir

SPAM_FOLDER=$MAILDIR/.spam-found/

LIKELY_SPAM_FOLDER=$MAILDIR/.likely-spam-found/

#Spostare le mail con un punteggio di spam di 7 punti o più
#nella spamfolder
:0:
* ^X-Spam-Status: Yes
* ^X-Spam-Level: \*\*\*\*\*\*\*
$SPAM_FOLDER

#Spostare le mail con un punteggio di spam tra 5 e 7 nella cartella
#dei messaggi sospetti
:0:
* ^X-Spam-Status: Yes
$LIKELY_SPAM_FOLDER

#Spostare tutte le altre mail nella inbox
:0
*
./

Avvertenza: Se è previsto che il mailserver riceva una grande quantità di posta, non si dovrebbe usare la configurazione appena vista. Invece, sarebbe meglio impostare $sa_tag2_level_deflt abbastanza alto da evitare i falsi positivi e filtrarli direttamente in $SPAM_FOLDER.

Nota: Se procmail non è ancora installato, digitare emerge procmail.

Assicurarsi che Postfix usi procmail per spedire la posta.

Codice 6.3: Modificare /etc/postfix/main.cf

mailbox_command = /usr/bin/procmail -a "DOMAIN"

Creare le cartelle per la posta

A breve verranno create le cartelle condivise per la posta, che sarà divisa tra spam ed ham: quest'ultimo termine è usato per indicare la posta legittima, in contrapposizione al significato originale del sostantivo spam.

Codice 6.4: Creare le necessarie cartelle per la posta

# maildirmake /var/amavis/.maildir
# maildirmake -S /var/amavis/.maildir/Bayes
# maildirmake -s write -f spam /var/amavis/.maildir/Bayes
# maildirmake -s write -f ham /var/amavis/.maildir/Bayes
# maildirmake -s write -f redeliver /var/amavis/.maildir/Bayes

Amavisd-new deve poter leggere questi file, così come tutti gli utenti di posta. Per tale motivo aggiungere tutti gli utenti del caso al gruppo mailuser, assieme all'utente amavis.

Codice 6.5: Impostare i permessi appropriati

# groupadd mailusers
# usermod -G mailusers spamtrap
# chown -R amavis:mailusers /var/amavis/.maildir/
# chown amavis:mailusers /var/amavis/
# chmod -R 1733 /var/amavis/.maildir/Bayes/
# chmod g+rx /var/amavis/.maildir/
# chmod g+rx /var/amavis/.maildir/Bayes/

Avvertenza: Questi comandi permettono ad i membri del gruppo mailusers di accedere alla posta di amavis.

Questa impostazione rende le directory per spam e posta legittima scrivibili ma non leggibili. In questo modo, gli utenti possono sottomettere la propria posta legittima senza che nessun altro sia in grado di leggerla.

Eseguire questo comando come utente spamtrap:

Codice 6.6: Aggiungere le cartelle condivise a quelle degli utenti

$ maildirmake --add Bayes=/var/amavis/.maildir/Bayes $HOME/.maildir

Nota: Bisogna dare al gruppo i permessi di lettura sulla cartella Bayes in modo che il client di posta veda le sottodirectory usate da IMAP.

Aggiungere operazioni con cron

Eseguire crontab -u amavis -e per modificare il crontab per amavis in modo da abilitare l'apprendimento automatico del filtro di Bayes ogni ora.

Codice 6.7: crontab per amavis

#Apprendimento automatico
0 * * * *          /usr/bin/sa-learn --spam /var/amavis/.maildir/Bayes/.spam/{cur,new} \
                    > /dev/null 2>&1
0 * * * *          /usr/bin/sa-learn --ham /var/amavis/.maildir/Bayes/.ham/{cur,new} > \
                   /dev/null 2>&1

Nota: amavis deve far parte del gruppo cron per poter eseguire i cron.

Nota: Sembra che le cartelle di posta condivise facciano esaminare a sa-learn tutti i messaggi di posta due volte: non dovrebbe essere un problema. L'output mostrerà inoltre che il numero di messaggi dai quali è stato appreso qualcosa è circa la metà del reale numero di messaggi esaminati.

Modificare amavisd.conf

Modificare amavis per redirigere tutte le email di spam verso l'account spamtrap e per conservare gli header dei messaggi che segnalano lo spam.

Codice 6.8: Modificare /etc/amavisd.conf

(Definire l'account al quale inviare le email di spam e con virus)
$spam_quarantine_to = "spamtrap\@$myhostname";

Fare pulizia

Poichè non è desiderabile mantenere i messaggi di posta per sempre, usare tmpwatch per fare pulizia regolarmente. Installarlo con emerge tmpwatch. Solo root ha i permessi per eseguire tmpwatch, perciò è necessario modificare il crontab di root.

Codice 6.9: Modificare il crontab di root

# Fare pulizia
# Mantenere i messaggi con virus per una settimana (24*7 ore)
15 0 * * *      /usr/sbin/tmpwatch -c -f -d --quiet 168 /var/amavis/virusmails/
# Cancellare spam e posta legittima appresi dopo una settimana
15 0 * * *      /usr/sbin/tmpwatch -c -f -d --quiet 168 /var/amavis/.maildir/Bayes/

7.  Greylisting

Introduzione

Il greylisting è una delle armi più moderne disponibili nell'arsenale per la lotta contro lo spam. Come suggerisce il nome, è simile al blacklisting ed al whitelisting. Ogni volta che un mailserver sconosciuto prova ad inviare un messaggio di posta, questo è scartato con un messaggio che invita a provare più tardi. Questo implica che l'invio del messaggio viene ritardato, ma anche che i bot che non implementano il protocollo secondo l'RFC desisteranno dall'invio e non proveranno nuovamente. Col tempo, probabilmente, i bot verranno migliorati, ma questo darà più tempo ad altre tecnologie per identificare lo spam.

Nota: Se il proprio ISP blocca tutto il traffico in ingresso sulla porta 25 ed invia la posta attraverso il proprio mailserver, allora il greylisting non funzionerà.

Postfix 2.1 viene fornito con un server di politiche di greylisting, scritto in Perl, che implementa questo comportamento. Esso, comunque, è soggetto a risultati imprevedibili quando la partizione che contiene il database di greylisting esaurisce lo spazio a disposizione. Per questo motivo esiste una versione migliorata che non soffre di questo problema. Come prima cosa verrà descritta la procedura di attivazione del greylisting inserito direttamente in Postfix, mentre successivamente verrà descritto come configurare il rimpiazzo più robusto.

Nota: Esistono altri server di greylisting per Postfix (come Gld, presente in Portage, e SQLgrey). Alcuni di essi supportano anche i database come backend, il whitelisting automatico ed altre funzioni interessanti.

Semplice greylisting

Nota: Se si vuole usare il greylisting migliorato, è possibile saltare questa sezione.

È necessario utilizzare il file greylist.pl, ma sfortunatamente l'ebuild non lo installa in modo predefinito.

Codice 7.1: Ottenere greylist.pl

# cp /usr/portage/distfiles/postfix-versione.tar.gz /root/
# tar xzf postfix-versione.tar.gz
# cp postfix-2.1.0/examples/smtpd-policy/greylist.pl /usr/bin/

Adesso che il file è al suo posto, è necessario creare la directory che conterrà il database di greylisting:

Codice 7.2: Creare la directory per il database di greylisting

# mkdir /var/mta
# chown nobody /var/mta

Avvertenza: Non creare la directory per il database di greylisting in una partizione che potrebbe esaurire lo spazio a disposizione. Mentre postfix può evitare problemi alla coda delle e-mail ed alle mail box quando lo spazio si esaurisce, il database di greylisting non è capace di farlo. Se il file diviene corrotto, non sarà più possibile ricevere alcuna e-mail fino a quando il file non viene cancellato manualmente.

Configurare il greylisting

Adesso che tutto è pronto, bisogna aggiungere alcune informazioni alla configurazione di postfix. Prima di tutto è necessario modificare master.cf:

Codice 7.3: Modicare master.cf per usare il greylisting

policy-greylist  unix  -       n       n       -       -       spawn
   user=nobody argv=/usr/bin/perl /usr/bin/greylist.pl

Il demone di spawn di postfix normalmente uccide i propri processi figli dopo 1000 secondi, ma questo limite è troppo breve per il processo di greylisting. È pertanto necessario aumentare questo valore in main.cf:

Codice 7.4: Modificare main.cf per usare il greylisting

policy-greylist_time_limit = 3600
(Sotto smtpd_recipient_restrictions aggiungere:)
check_sender_access hash:/etc/postfix/sender_access
(Successivamente aggiungere:)
restriction_classes = greylist
greylist = check_policy_service unix:private/policy-greylist

Avvertenza: Specificare check_sender_access DOPO reject_unauth_destination altrimenti il sistema potrebbe diventare un relay di posta aperto a chiunque.

Nota: Il database di greylisting si riempie velocemente con indirizzi fasulli. Proteggere le ricerche di greylist con altre restrizioni (che rifiutano mittenti o destinatari sconosciuti) aiuta in questa situazione.

Non si vuole usare il greylisting per tutti i domini, ma solo per quelli più comunemente usati dagli spammer. Dopo tutto, il greylisting ritarda la consegna dei messaggi di posta, pertanto è desiderabile non rallentare l'arrivo di e-mail da domini che non siano comunemente sfruttati. Una lista dei domini più comunemente usati dagli spammer come indirizzo del mittente può essere trovata online. Aggiungere i domini dai quali si riceve spam a /etc/postfix/sender_access:

Codice 7.5: Formato di sender_access

aol.com     greylist
hotmail.com greylist
bigfoot.com greylist

Per una lista più estesa:

Codice 7.6: Aggiungere tutti i domini a sender_access

# wget http://www.monkeys.com/anti-spam/filtering/sender-domain-validate.in

# sort sender-domain-validate.in | awk {'print $1 "\t\t greylist"'} > /etc/postfix/sender_access

Adesso è necessario inizializzare il database di sender_access:

Codice 7.7: Inizializzare sender_access

# postmap /etc/postfix/sender_access

La configurazione della versione semplice del greylisting è completa.

Avvertenza: Questa procedura è stata testata su una macchina che gestiva migliaia di e-mail al giorno ed il risultato è stato un disastro completo. Dopo quattro giorni la macchina era sovraccaricata da centinaia di vecchi processi greylist.pl.

Configurare il greylisting migliorato con postgrey

Installare il server di greylisting con un semplice emerge:

Codice 7.8: Installare postgrey

# emerge postgrey

Dopo aver installato postgrey bisogna modificare main.cf. Le modifiche sono molto simili a quelle eseguite in occasione del precedente metodo di greylisting.

Codice 7.9: Modificare main.cf per usare greylisting

(Sotto smtpd_recipient_restrictions aggiungere:)
check_sender_access hash:/etc/postfix/sender_access
(Successivamente aggiungere:)
smtpd_restriction_classes = greylist
greylist = check_policy_service inet:127.0.0.1:10030

Nota: Il SMTPD_POLICY_README di Postfix utilizza solo restriction_classes, ma questo non sembra funzionare.

Nota: Se si vuole fare il greylisting di tutta la posta, aggiungere invece check_policy_service inet:127.0.0.1:10030.

Infine, lanciare il server e aggiungerlo al runlevel adatto.

Codice 7.10: Lanciare postgrey

# /etc/init.d/postgrey start
# rc-update add postgrey default

Nota: Alcune persone vogliono che i messaggi di posta siano inviati velocemente ed in questo caso il greylisting peggiora le prestazioni. In ogni caso, se si utilizza un mail server di backup è possibile impostare il greylisting su di esso con relativa sicurezza. La limitata esperienza dell'autore di questa guida suggerisce che in questo modo è possibile fermare circa un terzo dello spam.

8.  SPF (Sender Policy Framework)

Introduzione

Un SPF (che in inglese significa approssimativamente Framework di Politiche di Invio) permette ai proprietari di un dominio di dichiarare nei propri record DNS quali indirizzi IP sono autorizzati a mandare messaggi di posta dal dominio stesso. Questo impedisce agli spammer di falsificare il Return-Path.

Nota: Se il proprio ISP blocca tutto il traffico in ingresso sulla porta 25 e reindirizza tutti i messaggi attraverso il proprio mail server, l'SPF non funzionerà.

Come prima cosa, i proprietari del dominio devono creare uno speciale record DNS, chiamato TXT. Un MTA con SPF abilitato può allora leggerlo e se una e-mail è stata originata da un server che non è descritto nel record, il messaggio può essere scartato. Ecco un esempio:

Codice 8.1: Record SPF di esempio

example.com.  IN TXT  "v=spf1 a mx ptr -all"

Il parametro -all suggerisce di rifiutare in modo predefinito tutta la posta, ad eccetto di quella ricevuta dai record DNS A(a), MX(mx) e PTR(ptr). Per ulteriori informazioni consultare le risorse elencate in basso.

Nota: Se è necessario inoltrare le mail in uscita attraverso il proprio ISP, aggiungere: include:proprioisp.com.

Spamassassin 3.0 ha il supporto per SPF, ma non è abilitato in modo predefinito; il nuovo demone delle politiche di Postfix, invece, supporta SPF, pertanto la guida seguirà l'installazione di quest'ultimo.

Nota: Se si vuole usare SPF con Spamassassin eseguire semplicemente emerge dev-perl/Mail-SPF-Query e riavviare Amavisd-new.

Preparativi

Prima di tutto bisogna installare Postfix 2.1 come descritto in precedenza. Dopo aver ottenuto i sorgenti, installare spf.pl con:

Codice 8.2: Installare spf.pl

# cp postfix-<version>/examples/smtpd-policy/spf.pl /usr/local/bin/

Nota: Il file spf.pl distribuito con Postfix soffre di qualche bug sporadico, pertanto trovare al suo interno e decommentare la linea: push @HANDLERS, "sender_permitted_from"; use Mail::SPF::Query;. Inoltre, intorno alla linea 199 sostituire comemnt con comment. In alternativa è possibile scaricare una versione di sviluppo.

Questo script in Perl necessita di alcune librerie che sono in Portage, quindi semplici da ottenere:

Codice 8.3: Installare le librerie Perl richieste

# emerge Mail-SPF-Query Net-CIDR-Lite Sys-Hostname-Long

Adesso che tutto è al suo posto, è necessario configurare Postfix per utilizzare questa nuova politica.

Codice 8.4: Modificare master.cf per usare SPF

policy-spf  unix  -       n       n       -       -       spawn
   user=nobody argv=/usr/bin/perl /usr/local/bin/spf.pl

Aggiungere il controllo per SPF in main.cf. Se correttamente configurato, l'SPF non dovrebbe fare danni, pertanto è preferibile abilitarlo per tutti i domini:

Codice 8.5: Modificare main.cf per utilizzare SPF

(Sotto smtpd_recipient_restrictions aggiungere:)
check_policy_service unix:private/policy-spf

Nota: Se si verificano problemi con SPF, ad esempio durante l'uso di fetchmail, potrebbe essere necessario abilitare l'SPF soltanto per alcuni domini.

9.  Configurare amavisd-new per l'uso di MySQL

Configurare MySQL

Nota: Questa procedura non è stata testata per versioni di amavisd-new superiori alla 2.2. Ogni commento è ben accetto :)

Per domini di grandi dimensioni i valori predefinit configurabili in amavisd.conf potrebbero non essere adatti a tutti gli utenti. Configurando amavisd-new con supporto MySQL si possono configurare impostazioni individuali per utenti o gruppi di utenti.

Codice 9.1: Creare database ed utente MySQL

# mysql -u root -p mysql
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 78 to server version: 4.0.18-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database maildb;
mysql> GRANT INSERT,UPDATE,DELETE,SELECT ON maildb.* TO 'mail'@'localhost' IDENTIFIED BY 'password_segretissima';
mysql> use maildb;

Adesso che il database è stato creato è necessario creare le tabelle. Copiare e incollare i seguenti comandi nel prompt di mysql:

Codice 9.2: Layout delle tabelle di MySQL

CREATE TABLE users (
    id         int unsigned NOT NULL auto_increment,
    priority   int          NOT NULL DEFAULT '7',  -- 0 è bassa priorità
    policy_id  int unsigned NOT NULL DEFAULT '1',
    email      varchar(255) NOT NULL,
    fullname   varchar(255) DEFAULT NULL,    -- non usato da amavisd-new
    local      char(1),     -- Y/N  (campo opzionale, vedere note)
    PRIMARY KEY (id),
    KEY email (email)
    );
CREATE UNIQUE INDEX users_idx_email ON users(email);

(-- ogni indirizzo e-mail, esterno o locale, usato come mittente in 'wblist')
CREATE TABLE mailaddr (
   id         int unsigned NOT NULL auto_increment,
   priority   int          NOT NULL DEFAULT '7',  -- 0 è bassa priorità
   email      varchar(255) NOT NULL,
   PRIMARY KEY (id),
   KEY email (email)
   );
CREATE UNIQUE INDEX mailaddr_idx_email ON mailaddr(email);

(-- whitelist per destinatario e/o blacklist,
-- mette in relazione mittente e destinatario, 'wb')
(white or blacklisted sender)
CREATE TABLE wblist (
   rid        int unsigned NOT NULL,     -- destinatario: users.id
   sid        int unsigned NOT NULL,     -- mittente:    mailaddr.id
   wb         char(1) NOT NULL, -- W or Y / B or N / space=neutral
   PRIMARY KEY (rid,sid)
   );

CREATE TABLE policy (
   id               int unsigned NOT NULL auto_increment,
   policy_name      varchar(32),     -- non usato da amavisd-new
   virus_lover          char(1),     -- Y/N
   spam_lover           char(1),     -- Y/N  (campo opzionale)
   banned_files_lover   char(1),     -- Y/N  (campo opzionale)
   bad_header_lover     char(1),     -- Y/N  (campo opzionale)
   bypass_virus_checks  char(1),     -- Y/N
   bypass_spam_checks   char(1),     -- Y/N
   bypass_banned_checks char(1),     -- Y/N  (campo opzionale)
   bypass_header_checks char(1),     -- Y/N  (campo opzionale)
   spam_modifies_subj   char(1),     -- Y/N  (campo opzionale)
   spam_quarantine_to   varchar(64) DEFAULT NULL, -- (campo opzionale)
   spam_tag_level  float,  -- un punteggio alto inserisce le intestazioni spam
   spam_tag2_level float DEFAULT NULL,  -- un punteggio alto inserisce le
               -- intestazioni di 'spam dichiarato'
   spam_kill_level float,  -- un punteggio alto attiva le azioni evasive:
               -- rifiuto/scarto, quarantena, ...
               -- (soggetto all'impostazione di final_spam_destiny)
   PRIMARY KEY (id)
  );

Nota: Se ci sono dei problemi di copia/incolla, copiare il testo altrove e cancellare i caratteri non necessari.

Nota: Le ricerche mirate a trovare un indirizzo e-mail sono eseguite sugli indirizzi grezzi (rfc2821-unquoted e senza parentesi), ad esempio: John "Funny" Smith@example.com

Nota: Le ricerche sono eseguite seguendo quest'ordine: SQL, LDAP, hash, ACL, regexp, constant. Il primo risultato utile (non undef/NULL) interrompe la ricerca.

Se si vuole usare whitelisting o blacklisting bisogna inserire gli indirizzi di mittente e destinatario in mailaddr; in seguito bisogna impostare una relazione tra i due in wblist e specificare se si tratta di whitelisting (W) o blacklisting (B).

Adesso che sono state create le tabelle, inserire un utente ed una politica di prova:

Codice 9.3: Creare utente e politica di prova

INSERT INTO users
   SET
      id         =1,
      priority   =9,
      policy_id  =1,
      email      ="johndoe@example.com",
      fullname   ="John Doe",
      local      ="Y";

INSERT INTO policy
   SET
      id                     =1,
      policy_name            ="Test policy 1",
      virus_lover            ="N",
      spam_lover             ="N",
      banned_files_lover     ="N",
      bad_header_lover       ="N",
      bypass_virus_checks    ="N",
      bypass_spam_checks     ="N",
      bypass_banned_checks   ="N",
      bypass_header_checks   ="N",
      spam_modifies_subj     ="N",
      spam_quarantine_to     =NULL,
      spam_tag_level         =-50.0,
      spam_tag2_level        =7.0,
      spam_kill_level        =10.0;

Nota: Modificare le impostazioni di esempio a seconda del proprio ambiente di funzionamento.

Nota: local dovrebbe essere impostato ad Y, altrimenti la mail non verrà sottoposta a controllo per spam.

Queste istruzioni inseriscono un utente ed una politica di prova. Modificare questi esempi per soddisfare le proprie necessità. Una spiegazione più approfondita della configurazione può essere reperita in amavisd.conf.

Configurare amavisd per usare MySQL

Adesso che MySQL è pronto, è necessario dire ad amavis di usarlo:

Codice 9.4: Modificare amavisd.conf

@lookup_sql_dsn =
   ( ['DBI:mysql:maildb:host1', 'mail', 'password_segretissima']  );

(Per chiarezza deommentare l'impostazione predefinita)
$sql_select_policy = 'SELECT *,users.id FROM users,policy'.
   ' WHERE (users.policy_id=policy.id) AND (users.email IN (%k))'.
   ' ORDER BY users.priority DESC';

(Per ottenere white/blacklisting in base al mittente)
   $sql_select_white_black_list = 'SELECT wb FROM wblist,mailaddr'.
     ' WHERE (wblist.rid=?) AND (wblist.sid=mailaddr.id)'.
     '   AND (mailaddr.email IN (%k))'.
     ' ORDER BY mailaddr.priority DESC';

10.  Configurare Spamassassin per usare MySQL

A partire da Spamassassin 3.0 è possibile conservare le informazioni per Bayes e l'AWL in un database MySQL. Verrà utilizzato proprio MySQL come backend in quanto esso è in genere più performante degli altri database. Inoltre, usare MySQL per tutti i dati rende la manutenzione del sistema molto più semplice.

Come prima cosa, creare il nuovo utente MySQL e le tabelle necessarie.

Codice 10.1: Creare utente e database MySQL

# mysql -u root -p mysql
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 78 to server version: 4.0.18-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database dbname;
mysql> GRANT INSERT,UPDATE,DELETE,SELECT ON dbname.* TO 'dbuser'@'localhost' IDENTIFIED BY 'altra_password_segretissima';
mysql> use dbname;

Adesso che il database è stato creato, verranno aggiunte le tabelle necessarie. Copiare e incollare questo testo nel prompt di mysql:

Codice 10.2: Layout delle tabelle MySQL

      CREATE TABLE bayes_expire (
          id                    int(11)         NOT NULL default '0',
          runtime               int(11)         NOT NULL default '0',
          KEY bayes_expire_idx1 (id)
          ) TYPE=MyISAM;

      CREATE TABLE bayes_global_vars (
          variable              varchar(30)     NOT NULL default '',
          value                 varchar(200)    NOT NULL default '',
          PRIMARY KEY           (variable)
          ) TYPE=MyISAM;

      INSERT INTO bayes_global_vars VALUES ('VERSION','3');

      CREATE TABLE bayes_seen (
          id                    int(11)         NOT NULL default '0',
          msgid                 varchar(200) binary NOT NULL default '',
          flag                  char(1)         NOT NULL default '',
          PRIMARY KEY           (id,msgid)
          ) TYPE=MyISAM;

      CREATE TABLE bayes_token (
          id                    int(11)         NOT NULL default '0',
          token                 char(5)         NOT NULL default '',
          spam_count            int(11)         NOT NULL default '0',
          ham_count             int(11)         NOT NULL default '0',
          atime                 int(11)         NOT NULL default '0',
          PRIMARY KEY           (id, token),
          INDEX                 (id, atime)
          ) TYPE=MyISAM;

      CREATE TABLE bayes_vars (
          id                    int(11)         NOT NULL AUTO_INCREMENT,
          username              varchar(200)    NOT NULL default '',
          spam_count            int(11)         NOT NULL default '0',
          ham_count             int(11)         NOT NULL default '0',
          token_count           int(11)         NOT NULL default '0',
          last_expire           int(11)         NOT NULL default '0',
          last_atime_delta      int(11)         NOT NULL default '0',
          last_expire_reduce    int(11)         NOT NULL default '0',
          oldest_token_age      int(11)         NOT NULL default '2147483647',
          newest_token_age      int(11)         NOT NULL default '0',
          PRIMARY KEY           (id),
          UNIQUE bayes_vars_idx1 (username)
          ) TYPE=MyISAM;

      CREATE TABLE awl (
          username              varchar(100)    NOT NULL default '',
          email                 varchar(200)    NOT NULL default '',
          ip                    varchar(10)     NOT NULL default '',
          count                 int(11)         default '0',
          totscore              float           default '0',
          PRIMARY KEY           (username,email,ip)
          ) TYPE=MyISAM;

Importante: La query con INSERT è necessaria per il corretto funzionamento di Spamassassin.

Nota: Questi script sono disponibili anche nell'archivio dei file sorgente, con i nomi awl_mysql.sql e bayes_mysql.sql.

Configurare Spamassassin per l'uso del backend MySQL

Se si ha un vecchio database Bayesiano e si vuole conservarlo, seguire queste istruzioni:

Codice 10.3: Convertire i dati Bayes da un database DBM

su - amavis
sa-learn --sync
sa-learn --backup > backup.txt
sa-learn --restore backup.txt

Nota: Attenzione che l'ultimo passo dovrebbe essere eseguito solo DOPO l'aggiornamento del database MySQL e del file secrets.cf.

Dare a Spamassassin le informazioni richieste:

Codice 10.4: Modificare /etc/mail/spamassassin/secrets.cf

(Dice a Spamassassin di usare MySQL per il filtro bayesiano)
bayes_store_module              Mail::SpamAssassin::BayesStore::SQL
bayes_sql_dsn                   DBI:mysql:sa_bayes:localhost:3306
bayes_sql_username              dbname
bayes_sql_password              altra_password_segretissima

(Dice a Spamassassin di usare MySQL per i dati AWL)
auto_whitelist_factory          Mail::SpamAssassin::SQLBasedAddrList
user_awl_dsn                    DBI:mysql:sa_bayes:localhost:3306
user_awl_sql_username           dbname
user_awl_sql_password           altra_password_segretissima

Cambiare i permessi al file per garantire la sicurezza necessaria:

Codice 10.5: Cambiare i permessi

# chmod 400 /etc/mail/spamassassin/secrets.cf

Nota: Per creare una password molto resistente ad attacchi, usare emerge app-admin/makepasswd e makepasswd -chars=8

Adesso basta semplicemente eseguire /etc/init.d/amavisd restart.

11.  Risoluzione dei problemi

Amavisd-new

Per risolvere i problemi relativi a Amavisd-new bisogna innanzitutto fermarlo con /etc/init.d/amavisd stop e poi eseguirlo manualmente in primo piano con amavisd debug; analizzare eventuali anomalie nell'output.

Spamassassin

Per risolvere i problemi con Spamassassin, è possibile filtrare una e-mail con spamassassin -D < mail. Per assicurarsi che le intestazioni siano intatte, è possibile spostarla su di un'altra macchina usando IMAP.

Nota: Per eseguire queste operazioni è necessario abilitare il login per l'utente amavis, cambiando la shell di login corrente in /etc/passwd al valore /bin/bash.

È possibile ottenere le stesse informazioni, in aggiunta ad altri dati, usando amavisd debug-sa.

Ripetere compiti dopo l'installazione

Alcune delle attività menzionate in questa guida devono essere ripetute dopo gli aggiornamenti. Ad esempio, chown -R amavis:mailusers nella sezione Apprendimento automatico e sidelining delle email deve essere ripetuto dopo ogni aggiornamento di amavisd-new.

Per fortuna, Gentoo fornisce i mezzi per effettuare queste operazioni automaticamente. Nel manuale Gentoo, nella parte Inserirsi nel proceso di Emerge, spiega come eseguire compiti dopo l'installazione di un particolare pacchetto, tipo:

Codice 11.1: Esempio di bashrc per il chown menzionato

if [ "${PN}" == "amavisd-new" ] &&
   [ "${EBUILD_PHASE}" == "postinst" ]; 
then
  chown -R amavis:mailusers /var/amavis/.maildir
fi

Come ottenere aiuto

Un buon punto di partenza per ottenere aiuto è la mailing list amavis-user. Prima di lasciare un messaggio come una domanda, è raccomandabile cercare nell'archivio della lista. Se non si trova la risposta alla propria domanda, è possibile iscriversi alla mailing list da qui.

Se il problema è specifico per SpamAssassin, DCC, Razor, o Postfix, fare riferimento alle rispettive pagine elencate in basso.

12.  Risorse (in lingua inglese)

Per ulteriori informazioni

Risorse generiche

Altre guide



Stampa

Aggiornato il 29 aprile 2012

La versione originale di questo documento non è più mantenuta

Oggetto: Questa guida descrive passo passo le istruzioni necessarie per installare le tecnologie di lotta allo spam per Postfix. Tra queste, Amavis-new con supporto per Spamassassin e ClamAV, greylisting e l'SPF (Sender Policy Framework).

Sune Kloppenborg Jeppesen
Autore

Jens Hilligsøe
Contributi

Joshua Saddler
Redazione

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.