spamassassin est un logiciel libre qui permet de détecter les mails de spam sur une plateforme SMTP.
Ce dernier peut donc être installé avec postfix pour filtrer les emails de spam.
Le principe étant de noter le mail selon différentes filtres personnalisables. Si la note attribuée au mail dépasse un seuil, le mail est considéré comme SPAM.
A partir de là, on peut marquer le sujet et ajouter une note SPAM ou rejeter directement le mail.
Voici comment installer et configurer spamassassin sur Debian avec le MTA Postfix.
Table des matières
Installer et configurer spamassassin
Dans un premier temps, il faut installer postfix et spamassassin à l’aide d’apt :
apt-get install postfix spamassassin
Ensuite on ajotue les utilisateurs spamassassin avec lequel le programme va tourner :
adduser spamassassin addgroupe spamassassin
Il faut ensuite éditer la configuration du daemon /etc/default/spamassassin comme ci-dessous :
ENABLED=1 OPTIONS="--username spamassassin --nouser-config --max-children 2 --helper-home-dir ${SAHOME} --socketowner=spamassassin --socketgroup=spamassassin --socketmode=0660" PIDFILE="/var/run/spamassassin/spamd.pid" CRON=1
et enfin le fichier de configuration de spamassassin avec pyzor et dcc activés :
dns_available yes
# Activation du systeme Bayes
use_bayes 1
bayes_auto_learn 1
bayes_learn_to_journal 1
bayes_journal_max_size 0
bayes_path /var/spool/spamassassin/bayes
# Activation de l'auto whitelist
use_auto_whitelist 1
auto_whitelist_path /var/spool/spamassassin/auto-whitelist
auto_whitelist_file_mode 0666
# Activation de DCC
use_dcc 1
dcc_timeout 8
dcc_home /var/spool/spamassassin/dcc
dcc_path /usr/local/bin/dccproc
dcc_dccifd_path /usr/local/bin/dccifd
# Activation de Pyzor
use_pyzor 1
# Activatin de Razor
use_razor2 1
razor_timeout 8
# Optimisation des scores
score DCC_CHECK 4.500
score SPF_FAIL 10.000
score SPF_HELO_FAIL 10.000
score RAZOR2_CHECK 2.500
score RAZOR2_CF_RANGE_51_100 3.500
score BAYES_99 5.300
score BAYES_95 4.500
score BAYES_80 3.500
score BAYES_60 2.500
score BAYES_50 2.000
# Langages
ok_languages fr
ok_locales fr
required_hits 5
#add_header all Report _REPORT_
header Subject *** SPAM ***
report_safe
endif # Mail::spamassassin::Plugin::Shortcircuit
- header Subject : définit la réécriture du sujet lorsque le mail est détecté comme étant un spam
- required_hits est la note au delà de laquelle le mail est considré comme spam. 5 est la note par défaut.
- ok_languages permet de définir les langues par défaut des mails reçus.
- Le système bayesien peut reconnaître les mails à partir de probabilité basés sur les mails reçus précédemment.
Plugins spamassassin DCC, RBL, Pyzor et Razor2
Les plugins de spamassassin peuvent être activés depuis le fichier /etc/mail/spamassassin/v310.pre avec par défaut :
root@www:~# cat /etc/mail/spamassassin/v310.pre |egrep ^load
loadplugin Mail::spamassassin::Plugin::DCC
loadplugin Mail::spamassassin::Plugin::Pyzor
loadplugin Mail::spamassassin::Plugin::Razor2
loadplugin Mail::spamassassin::Plugin::SpamCop
loadplugin Mail::spamassassin::Plugin::AutoLearnThreshold
loadplugin Mail::spamassassin::Plugin::TextCat
loadplugin Mail::spamassassin::Plugin::WhiteListSubject
loadplugin Mail::spamassassin::Plugin::MIMEHeader
loadplugin Mail::spamassassin::Plugin::ReplaceTags
La liste des plugins à ajouter est disponible depuis ce lien : https://spamassassin.apache.org/full/3.2.x/doc/
Les RBL
Par exemple la Real BlackList (RBL) SpamCop est activé par défaut.
Les RBL peuvent être désactivées en ajoutant la direction skip_rbl_checks 1 dans le fichier local.cf de spamassassin.
Notez que par défaut, les score de ces RBL peut-être de 0 car ces RBL peuvent être payantes.
Vous pouvez corriger cela depuis le fichier /var/lib/spamassassin/3.004002/updates_spamassassin_org/50_scores.cf
# MAPS
# MAPS is a commercial service. If you pay for these, assign a score
# so they will be checked.
score RCVD_IN_MAPS_RBL 2
score RCVD_IN_MAPS_DUL 2
score RCVD_IN_MAPS_RSS 2
score RCVD_IN_MAPS_OPS 2
score RCVD_IN_MAPS_NML 2
De plus, il faut que les requêtes DNS de votre hébergeur autorisent ce type de requêtes.
Sinon spamassassin peut retourner le message : The query to URIBL was blocked.
DCC, Pyzor et Razor2
On voit aussi que les plugins DCC, Pyzor et Razor2 sont aussi activés.
Distributed Checksum Clearinghouses (DCC) et Razor sont des plugins pour spamassassin qui compare la somme de contrôle des mails reçus à une base de données.
Il permet donc d’améliorer la détection de SPAM et peut-être ajouté dans spamassassin.
Cela se fait dans le fichier de configuration de spamassassin avec les commandes dcc
La commande suivante permet de vérifier et tester la connexion aux serveurs DCC qui se fait en UDP :
cdcc info
Installer spamassassin dans postfix
Editez le fichier de configuration /etc/postfix/master.cf
Remplacez la ligne smtp par :
smtp inet n - - - - smtpd -o content_filter=spamassassin
A la fin du fichier, ajoutez la ligne :
spamassassin unix - n n - - pipe
user=spamassassin argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
Relancez le daemon spamassassin et postfix:
systemctl restart spamassassin
systemctl restart postfix
Tester le tout en envoyant un mail depuis un compte externe.
Si vous désirez tester la détection de spam, envoyez un mail avec le contenu suivant, il sera considéré comme un pourriel :
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
On obtient ce mail ci-dessous avec l’en-tête de spamassassin et les notes avec les règles.
Les notes attribués aux mails sont lisibles dans l’en-tête, en effet, le serveur SMTP et spamassassin réécrive ce dernier.
Par exemple, dans le mail ci-dessous, les parties spamassassin débute par X-SPAM :
X-Spam-Checker-Version: spamassassin 3.4.2 (2018-09-13) on www.malekal.com
X-Spam-Level: ***
X-Spam-Status: No, score=3.9 required=5.0 tests=BAYES_50,DCC_CHECK,
HTML_IMAGE_RATIO_06,HTML_MESSAGE,LOTS_OF_MONEY,MIME_HTML_MOSTLY,
MPART_ALT_DIFF,RDNS_NONE,SURBL_BLOCKED,URIBL_BLOCKED autolearn=no
autolearn_force=no version=3.4.2
La note du mail est donc de 3.9 (score=) ce qui est en dessous de 5 (required=) et donc le mail n’est pas considéré comme étant un mail de SPAM.
Enfin les logs du serveur mail /var/log/mail.log donnent les éléments spamassassin suivants lors de la réception d’un mail :
Dec 9 18:57:19 www spamd[25816]: spamd: clean message (4.7/5.0) for spamassassin:1004 in 0.3 seconds, 5590 bytes.
Dec 9 18:57:19 www spamd[25816]: spamd: result: . 4 - BAYES_50,DCC_CHECK,HTML_IMAGE_RATIO_02,HTML_MESSAGE,MIME_HTML_ONLY,MIME_HTML_ONLY_MULTI,MPART_ALT_DIFF,RDNS_NONE,T_REMOTE_IMAGE,T_SPF_HELO_TEMPERROR scantime=0.3,size=5590,user=spamassassin,uid=1004,required_score=5.0,rhost=::1,raddr=::1,rport=41834,mid=<[email protected]>,bayes=0.499616,autolearn=no autolearn_force=no
Personnaliser spamassassin
spamassassin est très facilement personnalisble.
En effet, vous pouvez créer vos propres fichiers de règles (fichiers cf).
L’ajout de règles de spamassassin nécessite la maitrise les regex.
Sur le forum, il existe un topic avec des règles spécifiques (un peu ancienne) : [réseau] Europharmacie et spamassassin
Le principe était d’ajotuer des règles :
- Header : qui vise l’en-tête du mail – champs from, subjet
- Body : le corps du mail, en général, le texte du mail.
- rawbody permet de viser des urls contenus dans le mail.
Il faut ensuite un champs score qui donne la note à ajouter au mail si la règle est positive.
Par exemple, la règle ci-dessous vise le corps du mail et si les combinaisons de mots medications, pills, meds, drugs s’y trouvent alors la note du mail prend +2.
body MISC_BODY_CanadaPharmacy3 /(medication\b|pills|meds|drugs\b|health) (price\b|order|buy|brought|instant) (receive|delivery|need)/
score MISC_BODY_CanadaPharmacy3 2.0
describe MISC_BODY_CanadaPharmacy3 pub medicament Canada Pharmacy
La commande sa-compile permet de recompiler les règles. Cela permet aussi de détecter des erreurs de syntaxe.
Liste blanche
Dans les fichiers de configuration de spamassassin, vous pouvez ajouter des liste blanche.
- trusted_networks permet d’ajouter des réseaux qui seront considérés comme sûr. Certains testes ne seront pas effectués et notamment les RBL.
- whitelist_from permet d’ajouter un domaine ou une adresse email en liste blanche. Une note de -100 sera alors appliquée. Exemple de syntaxe :
- whitelist_from *@malekal.com
- whitelist_from [email protected]
- blacklist_from liste noire et donc effet inverse de whitelist_from
Exemple d’ajout de RBL
Il existe de nombreuses RBL sur le net qui peuvent être très facilement greffer à spamassassin dans un fichier .cf
Voici la syntaxe générique à utiliser pour ajouter une nouvel RBL dans spamassassin :
header NOMRBL rbleval:check_rbl('rblnom', 'urlRBL')
describe NOMRBL mm added
tflags NOMRBL net
score NOMRBL 5.0
exemple :
header EASYNET rbleval:check_rbl('easynet', 'blackholes.easynet.nl.')
describe EASYNET mm added
tflags EASYNET net
score EASYNET 5.0
ou encore pour ajouter la RBL Barracuda :
header IN_BCUDA_RBL rbleval:check_rbl('bcuda', 'b.barracudacentral.org')
describe IN_BCUDA_RBL Received via a relay listed by Barracuda BRBL
tflags IN_BCUDA_RBL net
header RCVD_IN_BCUDA_RELAY rbleval:check_rbl_results_for('bcuda', '127.0.0.2')
describe RCVD_IN_BCUDA_RELAY BCUDA: relay ip is convicted spammer
tflags RCVD_IN_BCUDA_RELAY net
score RCVD_IN_BCUDA_RBL 1.00
score RCVD_IN_BCUDA_RELAY 1.00
Tester un mail en ligne de commandes
Vous pouvez tester un mail en ligne de commandes avec spamassassin pour vérifier le comportement des règles.
La syntaxe est la suivant :
cat /tmp/mail.txt|spamassassin -t -D
Commandes et fichiers spamassassin
En résumé et pour vous y retrouver plus facilement, voici quelques commandes utiles de spamassassin :
- sa-compile : recompile les fichiers de règles
- sa-update : mets à jour les règles de spamassassin. Un cron peut le faire pour vous si activé dans la configuration de daemon
Les chemins des fichiers de configuration :
- /etc/spamassassin/local.cf : fichier de configuration de spamassassin
- /etc/default/spamassassin : fichier de configuration du daemon spamassassin
- /var/lib/spamassassin/3.004002/updates_spamassassin_org/ : le dossier des règles spamassassin. Le dossier diffère selon la version.