Installer spamassassin sur Postfix
Par Chojin, mardi 22 avril 2008 à 09:10 :: [Dédiés] Mail :: #215 :: rss
Vous utilisez postfix, vous souhaitez installer un antispam sans forcément passer par clamav ? Cette solution est pour vous. En effet, ce tutoriel va vous montrer comment mettre en place rapidement un antispam quelque soit votre configuration de Postfix (utilisateurs UNIX, MySQL, ...)
Pour se faire il faut tout d'abord installer spamassassin:
apt-get install spamassassin
Ensuite, partons éditer /etc/postfix/master.cf:
smtp inet n - - - - smtpd
Vous devrez ajouter le filtre à ce niveau. Ceci aura pour conséquence d'indiquer au serveur smtp de passer tout mail entrant par un filtre. Cela donnera donc:
smtp inet n - - - - smtpd -o content_filter=spamchk
En fin de fichier, ajoutez la directive suivante:
spamchk unix - n n - 10 pipe
flags=Rq user=nobody argv=/usr/local/bin/spamchk -f ${sender} -- ${recipient}
Postfix est donc prêt à gérer le filtre.
Nous allons donc ensuite configurer le script qui va gérer ce filtre. Pour cela, il faut créer un fichier /usr/local/bin/spamchk:
#!/bin/sh #- # File: spamchk # # Purpose: SPAMASSASIN shell-based filter # # Location: /usr/local/bin # # Usage: Call this script from master.cf (Postfix) # # Certified: GENTOO Linux, Spamassassin 3.0, Postfix #- # Variables SENDMAIL="/usr/sbin/sendmail -i" EGREP=/bin/egrep # Exit codes from <sysexits.h> EX_UNAVAILABLE=69 # Number of *'s in X-Spam-level header needed to sideline message: # (Eg. Score of 5.5 = "*****" ) SPAMLIMIT=5 # Clean up when done or when aborting. trap "rm -f /tmp/out.$$" 0 1 2 3 15 # Pipe message to spamc cat | /usr/bin/spamc -u nobody > /tmp/out.$$ # Are there more than $SPAMLIMIT stars in X-Spam-Level header? : if $EGREP -q "^X-Spam-Level: \*{$SPAMLIMIT,}" < /tmp/out.$$ then # Option 1: Move high scoring messages to sideline dir so # a human can look at them later: # mv out.[1] # Option 2: Divert to an alternate e-mail address: # $SENDMAIL xyz@xxxx.xx < /tmp/out.$$ # Option 3: Delete the message # rm -f /tmp/out.$$ else $SENDMAIL "$@" < /tmp/out.$$ fi # Postfix returns the exit status of the Postfix sendmail command. exit $?
Dans cette configuration, tout mail considéré comme spam avec un niveau égal ou supérieur à 5 sera supprimé.
Ne pas oublier de rendre exécutable ce script:
chmod +x /usr/local/bin/spamchk
Il faut maintenant éditer le fichier /etc/default/spamassassin pour mettre les options suivantes:
OPTIONS="--nouser-config --max-children 5 --helper-home-dir"
Rafraîchir la configuration postfix:
postfix reload
Le tour est joué. Exemple de logs (piochés dans /var/log/mail.info indiquant que c'est fonctionnel):
- Avec spam (donc suppression du mail)
Jul 17 18:46:50 sdxxx postfix/smtpd27083: connect from smtp.sivit.org194.146.224.121 Jul 17 18:46:50 sdxxx postfix/smtpd27083: C7A96142FD: client=smtp.sivit.org194.146.224.121 Jul 17 18:46:50 sdxxx postfix/cleanup27089: C7A96142FD: message-id=<469CF27A.1030107@sivit.fr> Jul 17 18:46:50 sdxxx postfix/qmgr15184: C7A96142FD: from=<xxx@sivit.fr>, size=831, nrcpt=1 (queue active) Jul 17 18:46:50 sdxxx postfix/smtpd27083: disconnect from smtp.sivit.org194.146.224.121 Jul 17 18:46:51 sdxxx spamd20281: connection from localhost 127.0.0.1 at port 1436 Jul 17 18:46:51 sdxxx spamd20281: info: setuid to nobody succeeded Jul 17 18:46:52 sdxxx spamd20281: processing message <469CF27A.1030107@sivit.fr> for nobody:65534. Jul 17 18:46:53 sdxxx spamd20281: identified spam (1001.1/5.0) for nobody:65534 in 2.8 seconds, 842 bytes. Jul 17 18:46:53 sdxxx spamd20281: result: Y 1001 - BLANK_LINES_70_80,GTUBE scantime=2.8,size=842,mid=<469CF27A.1030107@sivit.fr>,autolearn=no Jul 17 18:46:53 sdxxx postfix/pipe27091: C7A96142FD: to=<destinataire@domaine.com>, relay=spamchk, delay=3, status=sent (sdxxx.sivit.org) Jul 17 18:46:53 sdxxx postfix/qmgr15184: C7A96142FD: removed
- Sans spam (livraison du mail au destinataire)
Jul 17 18:45:25 sdxxx postfix/smtpd27083: connect from smtp.sivit.org194.146.224.121 Jul 17 18:45:25 sdxxx postfix/smtpd27083: 7E7C6142FD: client=smtp.sivit.org194.146.224.121 Jul 17 18:45:25 sdxxx postfix/cleanup27089: 7E7C6142FD: message-id=<469CF224.6010806@sivit.fr> Jul 17 18:45:25 sdxxx postfix/qmgr15184: 7E7C6142FD: from=<xxx@sivit.fr>, size=761, nrcpt=1 (queue active) Jul 17 18:45:25 sdxxx postfix/smtpd27083: disconnect from smtp.sivit.org194.146.224.121 Jul 17 18:45:28 sdxxx spamd25290: connection from localhost 127.0.0.1 at port 4374 Jul 17 18:45:28 sdxxx spamd25290: info: setuid to nobody succeeded Jul 17 18:45:32 sdxxx spamd25290: processing message <469CF224.6010806@sivit.fr> for nobody:65534. Jul 17 18:45:37 sdxxx spamd25290: clean message (0.0/5.0) for nobody:65534 in 10.9 seconds, 775 bytes. Jul 17 18:45:37 sdxxx spamd25290: result: . 0 - scantime=10.9,size=775,mid=<469CF224.6010806@sivit.fr>,autolearn=failed Jul 17 18:45:38 sdxxx postfix/pipe27091: 7E7C6142FD: to=<destinataire@domaine.com>, relay=spamchk, delay=13, status=sent (sdxxx.sivit.org) Jul 17 18:45:38 sdxxx postfix/qmgr15184: 7E7C6142FD: removed Jul 17 18:45:38 sdxxx postfix/pickup27045: AE40014317: uid=65534 from=<xxx@sivit.fr> Jul 17 18:45:38 sdxxx postfix/cleanup27089: AE40014317: message-id=<469CF224.6010806@sivit.fr> Jul 17 18:45:38 sdxxx postfix/qmgr15184: AE40014317: from=<xxx@sivit.fr>, size=1058, nrcpt=1 (queue active) Jul 17 18:45:39 sdxxx postfix/virtual27099: AE40014317: to=<destinataire@domaine.com>, relay=virtual, delay=1, status=sent (delivered to maildir) Jul 17 18:45:39 sdxxx postfix/qmgr15184: AE40014317: removed
Vous noterez la différence entre les 2 logs, l'un le mail est 'delivered to maildir' (non spam), tandis que l'autre est tout simplement 'removed'
Notes
[1] $SIDELINE_DIR/`date +%Y-%m-%d_%R`-
Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire