Howto Qmail avec spamassassin

Par Sylvestre Ledru June 2003
Version anglaise
Retourner à la page linux

(02/04/2002), petit bug corrigé :
Je viens de corriger un petit bug pour certains OS qui enleve le +x sur le fichier qmail-queue (la méthode avec qmail-scanner n'est pas concernée).
(01/11/2003), Qmail-scanner :
J'ai ajouté une autre manière d'appeller le client spamassassin utilisant qmail-scanner.
(23/07/2003), Preferences :
Matthew Francis m'a envoye un bon howto expliquant comment mettre en place des preferences pour les utilistaures avec spamassassin. C'est disponible ici (desole, seulement en anglais pour le moment) : here.
(08/06/2003), Localisation :
Si vous voulez changer la langue dans laquelle apparait le rapport de spam (c'est-a-dire pourquoi l'email a été considéré comme spam), changez juste les locales pour la langue voulue (par exemple fr_FR pour le francais) avec la commande dpkg-reconfigure locales sous debian) et installez gettext si c'est pas déjà fait (apt-get install gettext) et vous aurez la bonne version (francais for example)...
(11/03/2005), Mise à jour :
Après presque deux ans sans mise à jour, mon autre howto sur qmail étant bien plus complet et mis à jour, je nettoye celui ci :
- première méthode déconseillée
- nouvelle version de spamassassin 3.0.X
- utilisation de netqmail au lieu de qmail
- nouvelle version de qmail-scanner avec le patch q-s-st (activation de Spamassassin juste sur un domaine)




Si vous voulez plus d'informations propos de l'installation de qmail , j'ai ecris un long howto (en Anglais) sur ce sujet.
J'ai écris cet howto parce qu'il y a un manque de documentation concernant l'utilisation de qmail avec Spamassassin.

Ce howto a été écris pour etre utilisé avec qmail/vpopmail mais ça devrait marcher sans de grosses modifications avec quelque chose d'autre que vpopmail.

Spamassassin est un programme très puissant qui vérifie si les emails reçus sont un spam ou non. L'analyse est basée sur une suite de notes. Si la somme de toutes les notes dépasse un nombre spécifié (par exemple 5), le sujet de l'email va etre taggé avec un ****SPAM****.
Avec ceci, il est très facile de créer une règle qui va déplacer tous les emails dans un dossier spécifique (par exemple, la corbeille).

Si vous voulez linker qmail avec spamassassin, c'est assez facile :
Premierement, installez spamassassin et razor ou pyzor si vous les voulez.

Avec debian :

apt-get install spamassassin Vous devriez utiliser la version testing ou unstable de spamassassin sous debian qui, la plus part du temps, trouve plus de Spam.


Avec un autre systeme (Redhat, Suse, Solaris ...) :
La dernière version de Spamassassin à cette date est la version 3.0.2. La procédure d'installation est à peu près la même. Quelques directives ont par contre changées.

wget http://useast.spamassassin.org/released/Mail-SpamAssassin-2.55.tar.gz
tar -zxvf Mail-SpamAssassin-2.55.tar.gz
cd Mail-SpamAssassin-2.55
perl Makefile.PL
make
make install
cp spamd/debian-rc-script.sh /etc/init.d/spamassassin

Vous pouvez remplacer debian par redhat, solaris, netbsd, suse ...

chmod +x /etc/init.d/spamassassin


Puis, modifiez /etc/spamassassin/local.cf
Version 2.5X :

required_hits 6.0
rewrite_subject 1
report_header 1
use_terse_report 1
defang_mime 1
dns_available yes
dcc_add_header 1
use_pyzor 1 (Seulement si vous avez installé pyzor)
use_razor2 (Seulement si vous avez installé razor2)
use_dcc 1

Version 3 :

#Nombre de points pour le mail soit taggé spam required_hits 5.0 # Ajouter le résultat dans les headers always_add_headers 1 # Changer le sujet rewrite_subject 1 report_safe 1 use_terse_report 1 # utiliser le filtre bayse # Verifications dns => attention, probleme de lenteur potentielle dns_available yes dcc_add_header 0 # Don't skip the relay black list skip_rbl_checks 0 use_dcc 1 dcc_timeout 10 # Verification tier use_pyzor 1 pyzor_timeout 10 pyzor_add_header 1 # Learn from the previous results auto_learn 1 # utiliser le filtre bayse use_bayes 1 # Ou spamassasin doit conserver ses fichiers bayes_path /var/qmail/spamassassin/ # Ou spamassassin conserve les resultats des verifications auto_whitelist_path /var/qmail/spamassassin/auto_whitelist

Si vous voulez avoir des informations détaillées sur le traitement de spamassassin, ajoutez la ligne dans le fichier local.cf : timelog_path /var/log/spamassassin, lancez le daemon avec l'option -D (donc à spécifier dans le fichier /etc/default/spamassassin sous debian), créez ce répertoire avec les droits adéquats (ça devrait etre vpopmail). Dans ce répertoire, vous devriez avoir pour chaque email un fichier contenant ces informations (c'est une option de debug !).

Perso, j'utilise ces régles. Changez comme vous l'entendez ! La documentation est disponible ici : perldoc Mail::SpamAssassin::Conf

Dans /etc/default/spamassassin (si ce fichier n'existe pas, cree le)
Changez ENABLED pour 1, puis ajoutez ces options : - "-m 10 -v --auto-whitelist" pour la version 2.5X.
- "-v -m 10 -u vpopmail --nouser-config" pour la version 3
Avec ces trucs, vous pouvez lancer spamd qui est un daemon ce qui permet d'augmenter sensiblement les performances.
-m 10 => 10 process fils
-v => Configuration vpopmail
--auto-whitelist => Utilise la whitelist (liste amie) - par defaut dans la version 2.3
Au lieu de spamassassin, utilisez spamc pour vérifier les emails.
Il y a quelques options "-c -u vpopmail" qui activent l'utilisation de préférences pour un domaine ou pour un utilisateur mais malheureusement, ca ne marche pas très bien pour moi.
/etc/init.d/spamassassin start


Ensuite, la modification de qmail dans le but de vérifier les emails :
En fait, il existe 2 types de configuration pour qmail :
- la manière plus facile/rapide est de changer qmail-queue dans le but d'introdure la vérification de spamassassin. Deconseillée
- la méthode la plus propre est d'utiliser qmail-scanner.

Changer le programme qmail-queue

cp /var/qmail/bin/qmail-queue /var/qmail/bin/qmail-queue.orig
chown qmailq:qmail qmail-queue
chown qmailq:qmail qmail-queue.orig
chmod u+s qmail-queue.orig
chmod o+r,+x qmail-queue.orig qmail-queue Pas fondamental mais des fois, necessaire pour certains systemes ...

mkdir /home/vpopmail/.spamassassin
cd /home/vpopmail
chmod 777 /home/vpopmail/.spamassassin

chown -R qmailq:qmail .spamassassin
chmod u=rwx,g=rx,o= /home/vpopmail/.spamassassin

Maintenant, supprimez le contenu de l'exécutable qui gére la queue.

echo -n > /var/qmail/bin/qmail-queue

Puis, éditez le fichier qmail-queue et ajoutez dedans :

#!/bin/sh
/usr/bin/spamc | /var/qmail/bin/qmail-queue.orig

Je suis d'accord que cette solution est dégueulasse. Elle engendre des problèmes dans l'inejction des bounces (retour) dans la queue. (Qmail-queue n'étant pas prévu pour ce genre d'opération).

Avec qmail-scanner - Visitez http://sylvestre.ledru.info/howt\o/howto_qmail_vpopmail.php pour plus d'informations

Premièrement, vous devez patcher qmail avec qmailqueue-patch ou utiliser netqmail qui intègre directement ce patch.
Avec qmail et le patch :

wget http://qmail.agarik.com/qmail-1.03.tar.gz
tar -zxvf qmail-1.03.tar.gz
cd qmail-1.03
wget http://qmail.mirrored.ca/moni.csi.hu/pub/glibc-2.3.1/qmail-1.03.errno.patch
wget http://sylvestre.ledru.info/howto/qmail/qmailqueue-patch
patch -p1 < qmail-1.03.errno.patch
patch -p1 < qmailqueue-patch

Avec netqmail :

wget http://qmail.agarik.com/netqmail-1.05.tar.gz
tar -zxvf netqmail-1.05.tar.gz
cd netqmail-1.05/
./collate.sh
cd netqmail-1.05

Ajouter le paramètre QMAILQUEUE au fichier /etc/tcp.smtp :

127.0.0.1:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
198.168.1.:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
:allow,QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"

Reloader tcpserver :

/usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
chmod 644 /etc/tcp.smtp.cdb

Et ensuite, installer qmail-scanner avec qmail-scanner-st :
qmail-scanner-st est une version patchée de qmail-scanner qui permet de founir des supers fonctionnalitées comme l'auto suppression/rejecct/quarantaine de spam au dessus d'un score donné, mais aussi de choisir quel scanners seront utilisé pour un domaine et/ou même pour un utilisateur. Il est donc possible d'activer spamassassin juste pour un domaine.

wget http://unc.dl.sourceforge.net/sourceforge/qmail-scanner/qmail-scanner-1.25.tgz wget http://xoomer.virgilio.it/j.toribio/qmail-scanner/download/q-s-1.25st-20050207.patch.gz
gunzip q-s-1.25st-20050207.patch.gz
tar -zxvf qmail-scanner-1.25.tgz
cd qmail-scanner-1.25/
patch -p1 < ../q-s-1.25st-20050207.patch
groupadd qscand
useradd -c "Qmail-Scanner Account" -g qscand -s /bin/false qscand
./configure --qs-user qscand --qs-group qscand --spooldir /var/spool/qmailscan --qmaildir /var/qmail --bindir /var/qmail/bin --qmail-queue-binary /var/qmail/bin/qmail-queue --admin-fromname "Mail admin" --admin postmaster --domain vladimir.avence.info --notify sender,admin,recips --local-domains `cat /var/qmail/control/rcpthosts | tr "\n" " "` --silent-viruses auto --unzip 1 --add-dscr-hdrs 1 --archive 0 --redundant yes --log-crypto 0 --scanners "fast_spamassassin" --scanners-per-domain yes --sa-subject "*****SPAM*****" --sa-delete 5 --install 1

Après l'installation, si vous voulez changer vos préférences, vous devez modifier le ficher /var/qmail/bin/qmail-scanner-queue.pl. Dans ce fichier, vous pouvez aussi ajouter des options au client spamassassin.
Si vous voulez activer/desactiver certains scanners, editez le fichier /var/spool/qmailscan/scanners_per_domain.txt
Pour lancer la prise en compte de ce fichier : /var/qmail/bin/qmail-scanner-queue.pl -p
Pour rehash la liste des fichiers en quarantaine : /var/qmail/bin/qmail-scanner-queue.pl -g

trunks.ecranbleu.org:sa,ps,clamdscan_scanner

# sa = spamassassin
# ps = perl scanner

Ceci devrait etre suffisant pour utiliser spamassassin sur le système entier.
Todo : Trouver comment lier vpopmail avec spamasssin pour pouvoir créer et gérer les préférences par domaine ou par utilisateur (si quelqu'un connait la solution : sylvestre@ecranbleu.org

Problème :
- lien avec vpopmail
Ce howto est inspire et corrigé de :
http://www.euronet.nl/users/erhnam/linux/qmail/qmail.htm.