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.
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.
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.
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.
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.
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
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
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.