Osez installer Qmail
mis à jour le 27/04/2007
 ©  Christian Caleca   

Filtrage des mails

Accueil ] Daemontools et ucspi-tcp ] Qmail & co. ] Vpopmail ] Essais divers ] courier-imap ] POP3 ] outils admin ] Ezmlm-idx ] qmailadmin ] [ Filtrage des mails ] Livraison locale ] Conclusions ]


Discussion sur les stratégies de filtrage

Virus et vers

Un antivirus comme Clamav génère à priori très peu de "faux positifs" (erreur d'appréciation qui consiste à penser qu'un message est viral, alors qu'il ne l'est pas). Autrement dit, un message considéré comme viral le sera très probablement. Il est donc pertinent de rejeter d'entrée de tels messages. Notez toutefois que que ce type de traitement génèrera par défaut un message de notification de refus qui, la plupart du temps, ne sera d'aucune utilité, l'adresse de l'émetteur étant généralement falsifiée. Nous verrons qu'il est possible d'éviter cette notification.

Spam

Le spam, en revanche est un cas un peu particulier. Spamassassin utilise un certain nombre d'indices pour attribuer un score à un message filtré. Si ce score dépasse une certaine valeur, le message sera considéré comme du spam.

Clairement, un antispam génèrera des faux positifs, des message supposés indésirables alors que ce n'est pas le cas. De même, des messages non désirés pourront passer quand même.

Enfin, un message non désiré par un utilisateur peut être acceptable pour un autre.

Au final, il est plus qu'hasardeux de choisir de rejeter un message estampillé comme non souhaité par spamassassin, sans l'accord du destinataire.

Où vaut-il mieux filtrer ?

Il est possible de filtrer à deux niveaux :

Nous allons filtrer à l'entrée, en rejetant les messages viraux, mais en laissant passer les spams, après les avoir estampillés comme tels. L'utilisateur pourra lui-même décider de l'avenir de ces messages.

Clamav

Antivirus sous licence GPL, existe en paquetage binaire sur toute bonne distribution. Debian en est une, donc :

# apt-get install clamav clamav-daemon
....
Les paquets supplémentaires suivants seront installés :
clamav-base clamav-freshclam libclamav1 clamav-daemon
Paquets suggérés :
unrar lha clamav-docs
Paquets recommandés :
arj unzoo
Les NOUVEAUX paquets suivants seront installés :
clamav clamav-base clamav-freshclam libclamav1 clamav-daemon
...

L'installation vous demandera la méthode à choisir pour mettre à jour la base de virus. Personnellement, j'utilise le "daemon".

Choisissez ensuite le miroir le plus proche

Enfin, installez les paquets suggérés et recommandés, si ce n'est déjà fait :

# apt-get install arj unzoo unrar lha clamav-docs

Avec les dépendances, nous devrions avoir les paquetages suivants :

L'installation a créé l'utilisateur clamav :

# cat /etc/passwd | grep clamav
clamav:x:110:110::/var/lib/clamav:/bin/false

Entrer ici dans le détail du fonctionnement de clamav nous mènerait trop loin. Pour aller très vite, vous trouverez après installation, deux services :

# ps -aef | grep clam
clamav    3941     1  0 08:39 ?        00:00:01 /usr/sbin/clamd
clamav    3992     1  0 08:39 ?        00:00:00 /usr/bin/freshclam -p /var/run/clamav/freshclam.pid -d --quiet

Bien entendu, ces services sont démarrés classiquement par des scripts dans /etc/init.d. Rien n'interdit, bien au contraire, de les faire démarrer plutôt par les daemontools.

Spamassassin

Antispam sous licence GPL, existe en paquetage binaire sur toute bonne distribution. Debian en est une, donc :

# apt-get install spamassassin spamc
...
Les paquets supplémentaires suivants seront installés :
libdigest-hmac-perl libdigest-sha1-perl libnet-dns-perl libnet-ip-perl libsocket6-perl
Paquets suggérés :
razor libnet-ident-perl libio-socket-ssl-perl dcc-client pyzor
Paquets recommandés :
libmail-spf-query-perl
Les NOUVEAUX paquets suivants seront installés :
libdigest-hmac-perl libdigest-sha1-perl libnet-dns-perl libnet-ip-perl libsocket6-perl spamassassin spamc
...

A vous de décider des paquets suggérés à ajouter.

Là encore, entrer ici dans le détail du fonctionnement de spamassassin nous mènerait trop loin. Il y a tout de même quelques petites choses à dire.

Debian, par défaut, inhibe le démarrage de spamassassin. Le paquetage fourni pilote spamd (le service), par un script "classique" dans /etc/init.d. Toujours par défaut, si spamd démarrait, il le ferait sous root, ce qui est potentiellement dangereux, voire inutilisable avec Vpopmail.

Ici, nous allons autoriser le démarrage de spamd sous l'identité de Vpopmail en modifiant comme suit le fichier /etc/default/spamassassin :

# /etc/default/spamassassin
# Duncan Findlay

# WARNING: please read README.spamd before using.
# There may be security risks.

# Change to one to enable spamd
ENABLED=1

# Options
# See man spamd for possible options. The -d option is automatically added.

# SpamAssassin uses a preforking model, so be careful! You need to
# make sure --max-children is not set to anything higher than 5,
# unless you know what you're doing.

#OPTIONS="--create-prefs --max-children 5 --helper-home-dir"
OPTIONS="-d -x -u vpopmail -m 5 -H"

# Pid file
# Where should spamd write its PID to file? If you use the -u or
# --username option above, this needs to be writable by that user.
# Otherwise, the init script will not be able to shut spamd down.
PIDFILE="/var/run/spamd.pid"

# Set nice level of spamd
#NICE="--nicelevel 15"

Ceci est fait au cas où le filtrage des spams serait finalement décidé au niveau de Vpopmail. Si le filtrage est fait par un appel de simscan, ce qui sera le cas ici, le choix de l'utilisateur peut être différent.

Nous démarrons le service par :

# /etc/init.d/spamassassin start

Et vérifions que spamd est bien démarré :

# ps -aef | grep spam
root 5836 1 0 17:29 ? 00:00:03 /usr/sbin/spamd -d -c -u vpopmail -m 5 -H -d --pidfile=/var/run/spamd.pid
vpopmail 5838 5836 0 17:30 ? 00:00:00 spamd child
vpopmail 5839 5836 0 17:30 ? 00:00:00 spamd child

Par la suite, ce sera sans doute une très bonne idée de piloter plutôt spamd via les daemontools.

Ripmime

Il s'agit d'un outil capable d'extraire les pièces attachées. Il est nécessaire si vous voulez pouvoir bloquer les messages contenant certaines extensions, comme .exe, .doc, .xls (à vous de voir ce qui vous paraît dangereux à priori). Autant l'installer :

cd /usr/local/src/tar/
wget http://www.pldaniels.com/ripmime/ripmime-1.4.0.5.tar.gz
cd ..
tar xzf tar/ripmime-1.4.0.5.tar.gz
cd ripmime-1.4.0.5/
make
make install

Il vous faudra par la suite créer un fichier "/var/qmail/control/ssattach" qui contiendra une extension à proscrire par ligne. Voici un exemple :

cat /var/qmail/control/ssattach
 .com
 .exe
 .scr
 .bat

Simscan

En utilisant notre version patchée de qmail, il est possible d'exploiter simscan, au niveau de qmail-queue pour filtrer les messages entrants dans notre SMTP.

Simscan va permettre de se raccorder à un antivirus (Clamav, par exemple) et (ou) à un antispam (spamassassin). Travaillant au niveau de l'entrée des messages, il sera possible pour Qmail de rejeter des messages considérés comme indésirables. Simscan supporte d'autres antivirus, si vous préférez.

Dans la mesure où nous avons décidé de transmettre les spams, en se contentant de les marquer comme tels, nous pouvons aussi bien filtrer au niveau de qmail-queue avec simscan, qu'au niveau de la distribution locale (vdlivermail), en utilisant les services de procmail ou de maildrop. Nous faisons ici le choix de filtrer les virus et les spams au niveau de qmail-queue.

Simscan peut adopter des comportements divers suivant le résultat du filtrage antivirus et (ou) antispam, et il convient de bien réfléchir au problème, parce que ce comportement se décide en grande partie dans les options de compilation.

Il est donc utile de passer le temps nécessaire à une bonne compréhension de la documentation fournie.

D'une première lecture de ce document, il ressort que :

A l'heure où ces  lignes sont écrites, il existe une version 1.2 de simscan en test, sur le site d'inter7. Nous allons cependant installer la version 1.1. Il nous faudra la télécharger.

cd /usr/local/src/tar
wget http://www.inter7.com/simscan/simscan-1.1.tar.gz
cd ../
tar -xzf tar/simscan-1.1.tar.gz
cd simscan-1.1

Adoptons une configuration de ce type (attention, les chemins sont prévus pour une distribution Debian).

Note : Lors de la configuration, le script "configure" va chercher, si clamav est activé, la présence des fichiers daily.cvd et main.cvd dans /var/lib/clamav. Il se trouve que ces fichiers ne sont présents que lors du premier chargement de la base de données des virus. Il peut donc arriver, si vous avez installé clamav "un certain temps" avant de construire simscan, que des problèmes apparaissent. Dans ce cas, détruisez dans /var/lib/clamav tous les fichiers et répertoires à l'exception de mirrors.dat, relancez manuellement freshclam et sitôt la mise à jour finie, configurez simscan.

./configure \
--enable-user=clamav \
--enable-clamav=y \
--enable-clamdscan=/usr/bin/clamdscan \
--enable-spam=y \
--enable-spam-passthru=y \
--enable-spamc=/usr/bin/spamc \
--enable-qmail-queue=/var/qmail/bin/qmail-queue \
--enable-dropmsg=y \
--enable-per-domain=y \
--enable-received=y \
--enable-spamassassin-path=/usr/bin/spamassassin \
--enable-sigtool-path=/usr/bin/sigtool \
--enable-attach=y \
--enable-ripmime=/usr/local/bin/ripmime \
--enable-clamavdb-path=/var/lib/clamav

La fin de la configuration donne le résumé suivant :

 Current settings
---------------------------------------
user = clamav
qmail directory = /var/qmail
work directory = /var/qmail/simscan
control directory = /var/qmail/control
qmail queue program = /var/qmail/bin/qmail-queue
clamdscan program = /usr/bin/clamdscan
clamav scan = ON
trophie scanning = OFF
attachement scan = ON
ripmime program = /usr/local/bin/ripmime
custom smtp reject = OFF
drop message = ON
regex scanner = OFF
quarantine processing = OFF
domain based checking = ON
add received header = ON
spam scanning = ON
spamc program = /usr/bin/spamc
spamc arguments =
spamc user = OFF
spam passthru = ON

Compilation et installation :

make
make install-strip

Le répertoire de travail a bien été créé, avec "clamav" comme propriétaire :

cd /var/qmail 
ls -l
total 12
drwxr-sr-x  2 alias  qmail   75 2005-12-29 18:48 alias
drwxr-xr-x  2 root   qmail 4096 2006-01-05 16:06 bin
drwxr-xr-x  2 root   qmail  137 2005-12-28 18:14 boot
lrwxrwxrwx  1 root   root    10 2005-12-28 17:37 control -> /etc/qmail
drwxr-xr-x  3 root   root    20 2006-01-01 18:18 control.origin
drwxr-xr-x  2 root   qmail 4096 2005-12-28 18:14 doc
drwxr-xr-x 10 root   qmail   94 2005-12-28 18:14 man
drwxr-x--- 11 qmailq qmail  109 2005-12-28 18:14 queue
-rwxr-xr-x  1 root   root   284 2005-12-30 14:20 rc
drwxr-x---  2 clamav root     6 2006-01-05 16:06 simscan
drwxr-xr-x  5 root   root    59 2006-01-02 13:55 supervise
drwxr-xr-x  2 root   qmail   47 2006-01-01 18:19 users

Quant à simscan, il a été installé dans /var/qmail/bin :

ls -l bin | grep simscan
-rws--x--x 1 clamav root  12524 2006-01-05 16:06 simscan
-rwxr-xr-x 1 root   root   9396 2006-01-05 16:06 simscanmk

Et le propriétaire en est bien "clamav".

Bon. Et comment tout cela va fonctionner ?

Par l'entremise d'une variable d'environnement, "QMAILQUEUE", que l'on passera à Qmail par le tcpserver. Il nous faut modifier /home/vpopmail/etc/tcp.smtp (et remettre à jour tcp.smtp.cdb).

qmailctl stop

Stopping qmail...
  qmail-smtpd
  qmail-send
# nano /etc/tcp/smtp

Par exemple, en y mettant ceci :

127.0.0.1:allow,RELAYCLIENT=""
192.168.0.:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/simscan"
:allow,QMAILQUEUE="/var/qmail/bin/simscan"

N'oublions pas de mettre à jour la base .cdb :

qmailctl cdb

Comme nous avons choisi l'option "per-domain" (probablement inutile, mais qui permet tout de même plus de souplesse de configuration, le cas échéant), nous devons aussi créer une règle par défaut dans /var/qmail/control :

echo ":clam=yes,spam=yes,spam_passthru=yes" > /var/qmail/control/simcontrol

Et créer la fichier .cdb correspondant :

/var/qmail/bin/simscanmk

Comme nous avons choisi de marquer dans les en-têtes les versions des "scanners", nous devons créer la base simversions.cdb :

/var/qmail/bin/simscanmk -g

Bien entendu, pour que les informations restent à jour, il faut relancer cette commande à chaque mise à jour d'un élément des scanners. Le moyen le plus simple (et pas forcément le plus propre), est de relancer, par exemple toutes les demi-heures, cette commande par crond.

Nous pouvons redémarrer Qmail :

qmailctl start

Contrôles

Au moyen d'un hôte du réseau, par exemple avec Thunderbird, nous envoyons un message à postmaster@maison.mrs. Un message tout simple, juste pour voir si l'on retrouve les marques de spamassassin et de clamav dans l'en-tête.

Return-Path: <prof@maison.mrs>
Delivered-To: postmaster@maison.mrs
Received: (qmail 7850 invoked by uid 89); 23 Mar 2006 16:33:00 -0000
Received: by simscan 1.1.0 ppid: 7843, pid: 7845, t: 5.3135s
scanners: clamav: 0.88/m:36/d:1353 spam: 3.1.0
X-Spam-Checker-Version: SpamAssassin 3.1.0 (2005-09-13) on janus.maison.mrs
X-Spam-Level:
X-Spam-Status: No, score=-1.4 required=5.0 tests=ALL_TRUSTED autolearn=failed
version=3.1.0
Received: from unknown (HELO ?192.168.0.15?) (postmaster@maison.mrs@192.168.0.15)
by 0 with ESMTPA; 23 Mar 2006 16:32:55 -0000
Message-ID: <4422CDB7.9010702@maison.mrs>
Date: Thu, 23 Mar 2006 17:32:55 +0100
From: christian Caleca <prof@maison.mrs>
User-Agent: Mozilla Thunderbird 1.0.7 (X11/20051013)
X-Accept-Language: fr, en
MIME-Version: 1.0
To: postmaster <postmaster@maison.mrs>
Subject: test simscan
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Ca marche !

Le message est bien filtré par clamav et spamassassin.

Envoyons maintenant un message notoirement vérolé, pour vérifier le fonctionnement de clamav.

L'installation de clamav sur Debian place les logs dans /var/log/clamav/clamav.log

Un forward d'un message compromis par un ver à la mode, fait apparaître dans ces logs :

Thu Mar 23 17:46:58 2006 -> SelfCheck: Database status OK.
Thu Mar 23 17:46:58 2006 -> /var/qmail/simscan/1143132418.79839.8977/msg.1143132418.79839.8977: 
                             Exploit.HTML.IFrame FOUND

Et le message n'arrive jamais à destination, sans notification, comme c'était prévu.


Précédente ] Accueil ] Suivante ]

Osez installer Qmail
mis à jour le 27/04/2007
 ©  Christian Caleca