Table des matières
Postfix et SpamAssassin
Mise en place d'un marqueur de SPAM bien connu: SpamAssassin
.
Ça ne va pas faire disparaitre les SPAM
, mais juste les marquer pour pouvoir ensuite les envoyer a la poubelle ou dans un dossier particulier de son client de mail.
~~READMORE~~
Install
# aptitude install spamassassin
Ce qui installe aussi “spamc
” en passant.
spamc
spamc
permet de traiter les messages a la volé en s'intégrant dans Postfix
, comme un filtre.
spamc
devra etre executé en un équivalent de nobody
, et avec une home
.
UPDATE : Debian Wheezy créé déjà un utilisateur debian-spamd . Voir ici |
On va donc créé un modeste utilisateur spamc-nobody
:
# adduser spamc-nobody --system --ingroup nogroup --disabled-login
Verifions:
# id spamc-nobody uid=104(spamc-nobody) gid=65534(nogroup) groupes=65534(nogroup)
Le répertoire /home/spamc-nobody/
sera utilisé par la suite.
On peut modifier la conf de spamc
en modifiant le fichier: /etc/spamassassin/spamc.conf
Pour ma part, j'ai ajouté dedans:
# TJ --------------------- -s 1024000 # ------------------------
… car dans les logs, plus tard, j'ai eu des avertissements comme cela:
Mar 12 00:13:10 mx1 spamc[8725]: skipped message, greater than max message size (512000 bytes)
… et j'ai donc augmenté cette limite.
daemon spamassassin
Activer le daemon dans /etc/default/spamassassin
:
# Change to one to enable spamd # TJ ----------- #ENABLED=0 ENABLED=1 # -------------- ... # TJ ----------- #OPTIONS="--create-prefs --max-children 5 --helper-home-dir" OPTIONS="--create-prefs --max-children 5 --helper-home-dir --ipv4only" # -------------- ... # TJ --------- #CRON=0 CRON=1 # ------------
(Bonus: je désactive ipv6
, c'est mon kiff )
Et puis:
# /etc/init.d/spamassassin restart
Le répertoire /home/spamc-nobody/.spamassassin/ devrait se peupler au fur et a mesure des traitements antispam… |
A propos de “CRON=1
” , cela va vérifier quotidiennement, et si nécessaire, mettre à jour, les règles anti-spam en peuplant le répertoire /var/lib/spamassassin/
.
Pour forcer immédiatement une mise à jour:
# sa-update && /etc/init.d/spamassassin reload
Postfix
Enfin, on va intégrer le filtre “spamassassin
” dans Postfix
.
Modifier le fichier /etc/postfix/master.cf
pour avoir:
# TJ ------------ spamassassin unix - n n - - pipe flags=Rq user=spamc-nobody argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient} smtp inet n - - - - smtpd -o content_filter=spamassassin -o smtpd_client_connection_count_limit=60 -o smtpd_authorized_xforward_hosts=127.0.0.0/8 # --------------- # TJ ---------- #smtp inet n - - - - smtpd # -------------
… sans oublier de mettre en commentaire la ligne ci-dessus.
Faire de même pour les entrées submission
(port 587) et ssmtp
(port 465) , si elles existent dans votre configuration.
Ne pas oublier: Source: http://wiki.apache.org/spamassassin/IntegratedSpamdInPostfix |
Dans main.cf
ajouter une ligne comme cela:
spamassassin_destination_recipient_limit = 1
Sinon, lorsque spamc
doit traiter beaucoup de destinataire, il va caler avec ce message:
... local configuration error. Command output: Exceeded max number of arguments (24) in /etc/spamassassin/spamc.conf
La limite de “24” est en dur dans le source… et doit être vraisemblablement respecté.
# postfix reload
Dans les logs (entre autres choses):
Mar 16 22:16:07 mx1 spamd[9717]: spamd: connection from localhost [127.0.0.1] at port 60667 Mar 16 22:16:07 mx1 spamd[9717]: spamd: setuid to spamc-nobody succeeded Mar 16 22:16:07 mx1 spamd[9717]: spamd: creating default_prefs: /home/spamc-nobody/.spamassassin/user_prefs Mar 16 22:16:07 mx1 spamd[9717]: config: created user preferences file: /home/spamc-nobody/.spamassassin/user_prefs Mar 16 22:16:07 mx1 spamd[9717]: spamd: processing message <51521011.9050608@free.fr> for spamc-nobody:104 Mar 16 22:16:08 mx1 spamd[9717]: spamd: clean message (0.0/5.0) for spamc-nobody:104 in 1.8 seconds, 847 bytes. Mar 16 22:16:08 mx1 spamd[9717]: spamd: result: . 0 - FREEMAIL_FROM,RCVD_IN_DNSWL_NONE scantime=1.8,size=847,user=spamc-nobody,uid=104,required_score=5.0,rhost=localhost,raddr=127.0.0.1,rport=60667,mid=<51521011.9050608@free.fr>,autolearn=ham
spamassassin configuration
général
Personnaliser a minima:
Dans /etc/spamassassin/local.cf
:
rewrite_header Subject [SPAM] report_safe 1 trusted_networks <VOTRE_RESEAU> # Exemple: trusted_networks 192.168.0. required_score 5.0 ok_languages fr ok_locales all add_header all Checker-Version SpamAssassin _VERSION_ (_SUBVERSION_) sur _HOSTNAME_
Dans /etc/spamassassin/v310.pre
:
loadplugin Mail::SpamAssassin::Plugin::TextCat
# /etc/init.d/spamassassin reload
bayes
Deja actif par defaut, voir dans /home/spamc-nobody/.spamassassin/
et aussi dans les entêtes des mails.
J'ai quand même ça dans local.cf
:
use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status
construire bayes
Ce n'est pas indispensable car la base se construit toute seule…
Source: http://wiki.apache.org/spamassassin/SiteWideBayesSetup
Trouver une source de “SPAM” et de “HAM” (“pas SPAM”).
Et puis , devenir spamc-nobody
:
# su -s /bin/bash spamc-nobody $ cd ~
Puis faire apprendre le HAM
et SPAM
:
Le HAM
:
$ sa-learn --ham --showdots /<REPERTOIRE_DE_HAM>/ ............................... Learned tokens from 6560 message(s) (6631 message(s) examined)
Le SPAM
:
$ sa-learn --spam --showdots /<REPERTOIRE_DE_SPAM>/ ........................................................................... Learned tokens from 40627 message(s) (41956 message(s) examined)
(C'est long: presque 2 heures d'éxécution)
Pour ma part, il s'agit simplement de répertoire “Maildir” assez bien fournit.
Parce que les messages de SPAM
avaient déjà été traité , et tagués, par SpamAssassin
, j'ai préalablement nettoyé les messages en ne gardant que la pièce jointe
du SPAM
original…
pyzor
Lien: http://wiki.apache.org/spamassassin/UsingPyzor
# aptitude install pyzor
On va installer pyzor dans l'environnement “spamc-nobody”
# su -s "/bin/bash" spamc-nobody $ pyzor discover /usr/lib/pymodules/python2.6/pyzor/__init__.py:11: DeprecationWarning: the sha module is deprecated; use the hashlib module instead import sha /usr/lib/pymodules/python2.6/pyzor/client.py:12: DeprecationWarning: the multifile module has been deprecated since Python 2.5 import multifile downloading servers from http://pyzor.sourceforge.net/cgi-bin/inform-servers-0-3-x
Warnings??
Il n’empêche pas “pyzor” de fonctionner, mais si toutefois vous vouliez faire disparaitre ces warnings, il suffit d’éditer le fichier /usr/bin/pyzor
, et de changer la 1er ligne en :
#!/usr/bin/python -Wignore::DeprecationWarning
Bref. Un repertoire “.pyzor” est créé dans /home/spamc-nobody/
Dans /etc/spamassassin/local.cf
:
use_pyzor 1
Verifier aussi le chargement du module dans v310.pre
…
Et enfin:
# /etc/init.d/spamassassin reload
Ca fonctionne , et ca ne laisse une trace dans les entetes que lorsque “pyzor” a trouvé quelque chose |
Exemple:
1.4 PYZOR_CHECK Message listé par Pyzor, voir http://pyzor.sf.net/
razor
Lien: http://wiki.apache.org/spamassassin/InstallingRazor?highlight=%28%28UsingRazor%29%29
# aptitude install razor
Lien: http://www.raygibson.net/kb/amavis/
# su -s "/bin/bash" spamc-nobody $ razor-admin -d -create -home=/home/spamc-nobody/.razor $ razor-admin -d -register
Dans local.cf
, j'ai :
... # Razor use_razor2 1 score RAZOR2_CHECK 2.500
Verifier aussi le chargement du module dans v310.pre
…
Et enfin:
# /etc/init.d/spamassassin reload
LOG
Soit: traiter les logs
Ajouter le traitement de la rotation des log de /home/spamc-nobody/.razor/razor-agent.log
… par exemple dans /etc/logrotate.d/razor
:
/var/log/razor-agent.log /home/spamc-nobody/.razor/razor-agent.log { weekly rotate 3 compress nomail notifempty missingok }
Soit: desactiver les logs
Sinon, modifier le fichier /home/spamc-nobody/.razor/razor-agent.conf
en mettant:
debuglevel = 0
dcc
N'est pas “opensource” , donc n'est pas installé par defaut !
Il faut installer des trucs !
Pré-requis (squeeze?):
# aptitude install libmilter-dev
$ cd /usr/local/src/ $ wget http://www.rhyolite.com/anti-spam/dcc/source/dcc.tar.Z $ tar xvzf dcc.tar.Z $ cd dcc-1.3.144 $ ./configure --disable-dccm $ make $ su # make install
(Sans –disable-dccm
, le make
echoue)
Le binaire cdcc
se retrouve la: /usr/local/bin/cdcc
Ainsi que: /usr/local/bin/dccproc
Mais ca ne suffit pas ! Dans /etc/spamassassin/local.cf
bien ajouter:
use_dcc 1 add_header all DCC _DCCB_: _DCCR_
S'il n'y a pas “add_header”, alors bien que le test soit fait, il n'est pas enregistré dans les entêtes.
En fait, ca ne semble pas fonctionner ! avec “spamd” il faut préciser le chemin vers “dccproc” :
# which dccproc /usr/local/bin/dccproc
et ajouter dans local.cf
dcc_path /usr/local/bin/dccproc
Source: http://wiki.apache.org/spamassassin/UsingDcc
Ne pas oublier d'avoir dans v310.pre
:
loadplugin Mail::SpamAssassin::Plugin::DCC
# /etc/init.d/spamassassin reload
un petit test montre dans les entête mails:
X-Spam-DCC: dcc1.aftenposten.no: mail 1215; Body=1 Fuz1=1 Fuz2=1
Ca marche !
LOG
Si vous avez un serveur mail fortement sollicité, vous aurez sans doute le repertoire /var/dcc/log
remplit de log (et autres?).
Il faut executer chaque jour le script: /var/dcc/libexec/cron-dccd
Ainsi, dans le cron, ajouter par exemple:
15 2 * * * /var/dcc/libexec/cron-dccd
language
Un peu trop sévere pour les langues etrangeres…
Donc editer le fichier “local.cf” et mettre:
# TextCat score UNWANTED_LANGUAGE_BODY 0.500
DKIM Perl
Source: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=689414
spamassassin
interprete mal les mails signées avec DKIM
Exemple en recevant un mail de “gmail.com” , on voit dans les entêtes:
X-Spam-Status: ... T_DKIM_INVALID
Pour corriger ce problème, il faut installer le package “libmail-dkim-perl” :
# aptitude install libmail-dkim-perl
Et puis bien sur:
# /etc/init.d/spamassassin reload
Un nouvel essai nous montre que ça marche mieux:
X-Span-Status: ... DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU