English version
Voir aussi mon cours
d'administration réseaux au format pdf.
Filtrer le mail avec
spamass-milter combiné à spamassassin et postfix
spamass-milter est un milter qui permet d'éliminer certains
mails qui sont des spams.
spamassassin est un antispam qui attribue un score aux mails suivant
leurs
chances d'être des spams. Plus le score est élevé,
plus le mail a de chances
d'être un spam.
On peut mettre spamass-milter en sortie de spamassassin pour rejeter les
mails qui ont un score élevé dans spamassassin. Il vaut
mieux mettre un
seuil élevé (>15 par exemple) pour éviter tout
faux positifs
(il n'est pas trop grave d'accepter un faux négatif :
l'utilisateur reçoit un
spam, mais c'est très génant de rejeter un faux positifs
:
un vrai mail
ne parvient pas au client)
Voici la recette pour faire marcher spamass-milter avec postfix.
Précisions que j'ai testé sous debian etch mais ça
a l'air de marcher à peu près pareil sous d'autres
distributions.
Je n'explique pas comment configurer postfix et spamassassin,
on peut trouver un bon nombre de tutorials sur le web.
J'explique comment configurer spamass-milter pour fonctionner come
milter smtpd (à priori plus puissant). Voir le postfix milters README
pour la différence entre smtpd et non smtpd milters.
1) Configuration
2) Liste des erreurs et pistes de solutions
1)
Configuration
a) main.cf
Dans le fichier de configuration de postfix /etc/postfix/main.cf ,
ajoutez les lignes :
# spamass-milter
configuration
# l'option accept est plus sûre pour ne pas perdre de mails
milter_default_action =
accept
smtpd_milters =
unix:/var/run/spamass.sock
# change to this for use as a non_smtpd_milter :
#non_smtpd_milters =
unix:/var/run/spamass.sock
Les données sont transmises du démon de spamassassin
(appelé spamd)
à spamass-milter via une socket. Cette socket est transmise
suivant
le protocole unix (sur la machine locale) via un fichier physique de
type socket
ici
nommé spamass.sock.
b) /etc/default/spamass-milter
Voici le fichier /etc/default/spamass-milter
# spamass-milt startup
defaults
# OPTIONS are passed directly to
spamass-milter.
# man spamass-milter for details
# Default, use the nobody user as
the default user, ignore messages
# from localhost
# this one is the right one for
use a smtpd_milters
# Reject emails with
spamassassin
scores > 15 : option -r 15
# Do not modify Subject:,
Content-Type: or body option -m
OPTIONS="-u
nobody -m
-r 15 -i 127.0.0.1 -f -p /var/spool/postfix/var/run/spamass.sock"
SOCKET="/var/spool/postfix/var/run/spamass.sock"
SOCKETOWNER="postfix:postfix"
SOCKETMODE="0660"
c)
Création de la socket
Il faut créer une première fois les sockets dans le
système
de fichiers (car la socket n'est pas créée
lors de l'appel automatique de spamas-milter par postfix).
mkdir /var/spool/postfix/var
mkdir /var/spool/postfix/var/run
puis créer les sockets :
# spamass-milter -m -u
nobody -f
-p /var/run/spamass.sock
# chown postfix.users
/var/run/spamass.sock
# spamass-milter -m -u nobody -f
-p /var/spool/postfix/var/run/spamass.sock
# chown postfix.users
/var/spool/postfix/var/run/spamass.sock
(si j'ai bien compris, postfix tourne en chrooté et pas
spamass-milter
et il faut créer les deux sockets à deux endroits
différents pour qu'il
y ait communication entre les deux sockets. feedback wellcome)
Comme il faut faire ces quatres dernières commandes
à chaque reboot,
on peut les mettre dans un script (par exemple) appelé /etc/init.d/initspamass
et faire lancer ce script au démarage
# chown +x
/etc/init.d/initspamass
# update-rc.d initspamass
defaults 99
Il faut mettre 99 pour être sûr que ce script est
exécuté après le
démon /etc/init.d/spamass-milter au démarage.
d)
Vérification dans les logs
# grep
Milter
/var/log/mail.log
# grep milter /var/log/mail.log
May 27 08:36:46 laic spamass-milter[29641]: spamass-milter 0.3.1
starting
#
Voici ci-dessous un résumé des erreurs que
j'ai eues et
qui
m'ont conduit à faire tout ça.
2) Liste des
erreurs et pistes de solution
J'avais ce type d'erreur dans /var/log/mail.log
:
(faire grep Milter
ou grep milter sur ce fichier)
1) J'ai eu l'ereur suivante :
No such file or
directory
May 25 10:52:24 laic
postfix/smtpd[22561]: warning: connect to Milter
service
unix:/var/run/spamass.sock: No such file or directory
May 25 10:52:24 laic
postfix/smtpd[22561]: warning: connect to Milter
service
unix:/var/run/spamass.sock: No such file or directory
Solution :
Mettre les sockets
/var/run/spamass.sock
/var/spool/postfix/var/run/spamass.sock
2) J'ai eu l'ereur suivante :
read error
May 25 10:43:11 laic
spamass-milter[27170]: SpamAssassin:
st_optionneg[-1230103632]: 0x3d
does not fulfill action requirements 0x13
May 25 10:43:11 laic
postfix/smtpd[22145]: warning: milter
unix:/var/run/spamass.sock: can't
read SMFIC_OPTNEG reply packet header:
Success
May 25 10:43:11 laic
postfix/smtpd[22145]: warning: milter
unix:/var/run/spamass.sock: read
error in initial handshake
Solution :
Utilisation de l'option -m
lors de la première
création
de la socket,
car postfix ne gère pas les milters
qui modifient les messages.
pour la socket smtpd (smtpd_milters)
spamass-milter -m -u nobody
-f -p
/var/run/spamass.sock
3) J'ai eu l'erreur suivante :
Permission denied
May 25 10:46:11 laic
postfix/smtpd[22145]: warning: connect to Milter
service
unix:/var/run/spamass.sock: Permission denied
Solution :
Mettre l'utilisateur postfix
comme propriétaire le la socket
pour le smtpd
# chown postfix.users
/var/run/spamass.sock
# chown
postfix.users
/var/spool/postfix/var/run/spamass.sock
Ne pas oublier l'option -u
nobody lors de la création initiale
de la
socket
pour la socket
spamass-milter -m -u nobody
-f -p
/var/run/spamass.sock
4) J'ai eu
l'erreur suivante :
Connection refused
May 25 11:00:43 laic postfix/smtpd[22525]: warning: connect to
Milter
service
unix:/var/run/spamass.sock: Connection refused
Solution :
Rajouter ces
lignes dans /etc/default/spamass-milter
:
SOCKET="/var/spool/postfix/var/run/spamass.sock"
SOCKETOWNER="postfix:postfix"
SOCKETMODE="0660"