Ora che abbiamo preparato i filtri antispam dobbiamo addestrare il nostro sistema bayesiano e inviare i report a Razor
, Pyzor
e Spamcop
.
La cosa più ovvia che può venirci in mente di fare a questo punto è forse quella di lanciare sa_learn
e spamassassin --report
uno dopo l'altro al click sul bottone "Marca come Spam" della webmail Roundcube
(vedere i driver cmd_learn
e multi_driver
del plugin markasjunk), ma questa scelta ha alcuni svantaggi importanti:
- il processo di addestramento, la conseguente sincronizzazione del journal e la connessione ai vari network per il reporting può richiedere anche una decina di secondi, un tempo che i nostri utenti non sono disposti ad attendere.
- cosa anche più grave, quando essi cliccano sul bottone "Marca come Spam" non è sempre detto che si tratti di un vero messaggo di posta indesiderata. Prendiamo ad esempio il classico caso delle newsletter a cui si sono regolarmente iscritti e che non vogliono più leggere, e che decidono di eliminare etichettandole come spamming anzichè inoltrare una regolare richiesta di cancellazione.
E' qundi più corretto eseguire questi due compiti durante la notte per mezzo di un cronjob (primo problema risolto), processando i soli messaggi di vero spam/ham che l'utente ha consapevolmente copiato in una cartella apposita (secondo problema).
Creare le "Teach" mailbox
Quando abbiamo configurato dovecot
abbiamo preparato il codice per la creazione automatica delle mailbox TeachSpam e TeachNotSpam come figlie di Junk. Se questa è una nuova installazione o se si è configurato dovecot
un po' di tempo fa controllare che si sia effettivamente configurato il file 15-mailboxes.conf
di dovecot
come segue:
mailbox "Junk.TeachSpam" { auto = subscribe autoexpunge = 5d } mailbox "Junk.TeachNotSpam" { auto = subscribe autoexpunge = 30d }
Impostare il cronjob
Ora scaricare il mio script
wget -O /usr/local/bin/sa_cron.sh https://notes.sagredo.eu/files/qmail/sa_cron.sh chmod +x /usr/local/bin/sa_cron.sh
e creare un cronjob che parta tutte le notti, per esempio
45 2 * * * /usr/local/bin/sa_cron.sh >> /var/log/cron
Se si lancia lo script senza passargli degli argomenti, esso eseguirà il lavoro per tutti gli utenti che hanno le mailbox .Junk.TeachSpam e .Junk.TeachNotSpam nelle loro Maildir.
Se invece si vuole testarlo per un singolo utente sarà sufficiente lanciarlo in questo modo:
sa_cron.sh username@domain.net
Modificare lo script settando DELETE_TEACH_DATA=1
se si vogliono cancellare i messaggi dopo che essi sono stati processati. Ho commentato la linea che cancella i messaggi della mailbox TeachNotSpam perchè non sono sicuro che sia una buona idea cancellare i messaggi che non sono spam.
Settare DEBUG=1
per lanciare sa_learn
e spamassassin
in modalità debug, di modo che i log mostrino ogni cosa.
Logrotate
Settare il logrotate dei file di log:
cat > /etc/logrotate.d/spam_reports << __EOF__ /var/log/spamassassin/spamassassin.log /var/log/spamassassin/sa_learn.log { su root apache rotate 5 daily missingok notifempty delaycompress create 664 root apache sharedscripts } __EOF__