Lutter contre les spams à la réception : spamassassin
On ne présente plus spamassassin, un filtre antispam à la réception. Avec spamd, il est utilisé par OpenBSD sur leurs listes de diffusion. Voyons comment le faire communiquer avec smtpd. On va détailler ici une méthode utilisant des étiquettes pour bien comprendre comment les choses fonctionnent, mais sachez qu'il existe un filtre opensmtpd-filter-spamassassin que vous trouverez sans doute plus pratique à utiliser (installez le paquet du même nom puis lisez le contenu de "/usr/local/share/doc/pkg-readmes/opensmtpd-filter-spamassassin").
C'est parti, on commence par installer les paquets utiles :
# pkg_add p5-Mail-SpamAssassin spampd
Pour que spampd puisse faire le lien entre le serveur smtpd et spamassassin qui vérifie les messages, il doit tourner en arrière-plan. On active donc ce service :
# rcctl enable spampd
Vous pouvez préciser certaines options pour spampd afin d'être sûr qu'il fonctionne comme prévu :
# rcctl set spampd flags "--relayhost=127.0.0.1:10026"
Ensuite, on démarre le service :
# rcctl start spampd
Il en va de même pour spamassassin qui doit être actif :
# rcctl enable spamassassin # rcctl start spamassassin
Nous allons maintenant faire passer tous les messages entrants par spamassassin qui va les vérifier. Pour cela, il faut les envoyer sur le port 10025. S'il ne s'agit pas de spam, alors spampd se charge de les renvoyer sur le port 10026. Tous les messages arrivant ainsi recevront l'étiquette "SPAMASSASSIN", pour que l'on sache qu'il faut les distribuer car ils ont déjà été traités.
Voici donc les lignes à ajouter au fichier "/etc/mail/smtpd.conf" :
... # Messages verifies par spamassassin listen on lo0 port 10026 tag SPAMASSASSIN ... action spamassassin relay host smtp://127.0.0.1:10025 ... # Message venant du système accept from local for local alias <aliases> deliver to maildir "~/Maildir" # Message SPAMASSASSIN match tag SPAMASSASSIN from any for domain "chezmoi.tld" action virtual_maildir ### Messages a faire verifier par spamassassin match from any for domain "chezmoi.tld" action spamassassin ...
Actuellement, spamassassin modifie le sujet des mails spams en indiquant clairement leur nature.
Spamassassin ajoute un entête "X-spam" aux messages indésirables. On va modifier l'action de distribution pour ajouter le mot-clé "junk" afin que ces messages soient automatiquement classés dans le dossier des spams lorsqu'ils seront livrés :
# Dans /etc/mail/smtpd.conf action virtual_maildir maildir "/var/vmail/%{dest.domain:lowercase}/%{dest.user:lowercase}/Maildir" junk virtual <virtuals>