Optionnel : vérification du contenu avec AMaViS - Debian 6.0 Squeeze
Rédigé par Marc GUILLAUME | Aucun commentaireVérification optionnelle du contenu des mails (virus, spam etc.).
Dans un autre chapitre nous avons déjà rencontré des restrictions appliquées pendant le dialogue SMTP. Vous avez appris à utiliser les listes noires en temps réel (RBLs) qui vous aident à bloquer la plus grande partie du spam entrant. Si vous recevez encore trop de spam et voulez filtrer encore davantage, l'analyse de contenu peut vous aider. Un vérificateur de contenu examine le contenu du mail au lieu de se contenter de simples vérifications pendant la session SMTP. Malheureusement l'analyse de contenu avec Postfix est assez compliquée à mettre en place. Le progamme de choix à utiliser pour ce faire est AMaViS (acronyme pour "A Mail Virus Scanner" c'est à dire "un analyseur de virus"). C'est un programme écrit en Perl qui utiliser d'autres programmes additionnels comme SpamAssassin (pour la détection de spams) ou ClamAV (programme de recherche anti-virus) ainsi que de nombreux autres analyseurs de virus.
- Avantages
-
- Permet de détecter le spam et le bloquer ou le marquer comme spam
- Permet de détecter les viruses et bloquer les mail infectés
- Supporte automatiquement les signatures DKIM
- Inconvénients
-
- Utilise énormément de ressources processeur (ralentit la distribution du courrier par un facteur 5 ou 10)
- Le filtrage des spams fonctionne de manière globale (un utilisateur individuel ne peut entraîner le filtre pour l'adapter à ses besoins précis)
- Utiliser le filtrage de contenu avec Postifx fonctionne, mais est source d'erreurs
Pour comprendre comment Postfix et AMaViS interagissent, jetez de nouveau un oeil sur la vue d'ensemble. Quand Postfix transmet un mail à AMaViS, il utilise SMTP sur un port non standard (par défaut le port 10024). AMaViS examine le mail et si le résultat est correct il le renvoit à Postfix sur un autre port non standard (10025 par défaut).
Installation
Installer AMaViS et ses paquets suggérés :
# aptitude install amavisd-new spamassassin clamav clamav-daemon arj zoo \ nomarch cpio lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl \ libdbi-perl libmail-dkim-perl p7zip rpm unrar-free libsnmp-perl
La configuration que nous entreprenons est complexe et peut mal fonctionner. Si vous décidez d'ajouter du filtrage de contenu à votre serveur de production je vous recommande fortement d'activer la fonctionnalité de soft_bounce dans Postfix. Si Postfix décide de rejeter ou de renvoyer un mail, cette fonctionnalité au lieu de cela gardera le mail en file d'attente pour essayer de le retraiter plus tard. Chaque fois que vous réalisez des modifications majeures sur votre serveur de mail je vous recommande de l'activer :
# postconf -e soft_bounce=yes
Comme expliqué plus haute, AMaViS acceptera les mails sur le port TCP/10024 et les renverra à Postfix sur le port TCP/10025. Par défaut Postfix n'écoute pas sur le port 10025, pas plus qu'il ne connaît l'existence d'AMaViS. La première chose à faire et d'éditer le fichier /etc/postfix/master.cf et d'ajouter ces deux services :
smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes -o max_use=20 127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o smtpd_delay_reject=no -o smtpd_client_restrictions=permit_mynetworks,reject -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions=reject_unauth_pipelining -o smtpd_end_of_data_restrictions= -o smtpd_restriction_classes= -o mynetworks=127.0.0.0/8 -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 -o smtpd_client_connection_count_limit=0 -o smtpd_client_connection_rate_limit=0 -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters -o local_header_rewrite_clients=
Remarque : toutes les lignes de chaque service, sauf la première, doivent être indentées avec des espaces
Redémarrer Postfix pour qu'il active ces deux services :
postfix reload
Il faut maintenant demander à Postfix d'utiliser le service smtp-amavis en tant que filtrage de contenu. Faire en sorte que Postfix envoit les mails à AMaViS s'obtient avec l'option content_filter. Activez également l'option receive_override_options (dont l'utilité sera expliquée un peu plus loin) avec les deux commandes suivantes :
postconf -e content_filter=smtp-amavis:[127.0.0.1]:10024 postconf -e receive_override_options=no_address_mappings
La signification de la première ligne vous semblera probablement évidente. Tous les mails sont redirigés vers le service smtp-amavis défini dans le fichier /etc/postfix/master.cf en utilisant le port 10024 sur l'adresse IP locale 127.0.0.0. (localhost)
La signification de la seconde ligne est moins évidente. Mais elle est importante car sinon vous risquez de délivrer des mails dupliqués à vos utilisateurs. La raison en est que Postfix traite deux fois chaque mail entrant. Une première fois quand il arrive depuis internet. Et la seconde fois quand il revient de l'analyse de contenu effectuée par AMaViS. Si l'on ne désactive pas la table d'adresses ici, les alias (forwardings) seront vérfiés deux fois. Bien entendu un alias est censé n'être vérifié qu'une seule fois pour éviter les envois dupliqués. C'est la raison d'être de cette ligne de configuration.
Configuration d'AMaViS
La configuration d'AMaViS se fait au moyen de différents fichiers situés dans /etc/amavis/conf.d. Vous pouvez jeter un oeil sur la configuration par défaut établie dans ce répertoire. L'important pour l'instant est de modifier le fichier 15-content_filter_mode pour activer la recherche de spam et de virus. De façon un peu trompeuse, les réglages par défaut sont :
#@bypass_virus_checks_maps = ( # \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); #@bypass_spam_checks_maps = ( # \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
Pour activers la vérification des mails pour la recherche de spam ou de virus vous devez retirer le signe « # » du début de ces quatre lignes. Au vu de l'intitulé des lignes on a l'impression que cela va éviter (bypass) la vérification alors qu'en fait cela va l'activer.
Le programme utilisé par défaut pour la recherche de virus est ClamAV qui est un programme anti-virus libre correct. Pour l'utiliser vous devez créer un groupe d'utilisateurs had hoc :
adduser clamav amavis /etc/init.d/clamav-daemon restart
Les fichiers de configuration se trouvant dans /etc/amavis/conf.d sont lus par le programme en ordre alphabétique. Une configuration figurant dans 50-user va écraser la même configuration figurant dans 01-debian. Je vous recommande donc de faire figurer vos modifications uniquement dans le fichier 50-user, vide par défaut, qui existe déjà dans le répertoire. Voici quelques configurations que vous devriez modifier :
$sa_spam_subject_tag
Si AMaViS croit qu'un mail est un spam il va modifier l'objet du mail en rajoutant au début la chaîne de caractère définie par $sa_spam_subject_tag. Par défaut cette chaîne est ***SPAM*** Ce que je trouve ennuyeux. Si vous ne voulez pas modifier l'objet du mail vous pouvez remplacer cette chaîne par une chaîne vide comme ceci :
$sa_spam_subject_tag=undef;
Les utilisateurs peuvent toujours retrouver les mails marqués par AMaViS comme spams en contrôlant la valeur de l'entête X-Spam-Status.
$sa_tag_level_deflt
Les mails avec un score de détection de spam supérieur ou égal à la valeur définie dans $sa_tag_level_deflt vont se voir ajouter un entête X-Spam-Status. A moins que vous ne soyez content de la configuraiton par défaut d'AMaViS, je vous suggère de mettre ici une valeur très basse (« undef » est la plus petite valeur possible) de manière à ce que cet entête soit toujous systématiquement ajouté :
$sa_tag_level_deflt=undef;
$sa_tag2_level_deflt
Les mails avec un score de spam supérieur ou égal à cette valeur seront marqués comme spam. Généralement la valeur par défaut (6.31) est raisonnable. Baissez-la si vous laissez passer trop de spams, augmentez-la si vous bloquez trop de mails légitimes.
$sa_kill_level_deflt
Si un mail atteint ce score alors AMaViS traitera cet mail suivant les instructions contenues dans $final_spam_destiny. La valeur de cette variable devrait être la même que celle de $sa_tag2_level_deflt.
$final_spam_destiny
Je n'aime pas le réglage par défaut de cette option qui est D_BOUNCE. La manière classique de traiter le spam est de marquer un mail comme étant du spam en ajoutant un entête au mail. Vos utilisateurs peuvent alors utiliser cet entête pour décider si ils veulent utiliser cet entête pour diriger ce mail dans un dossier spécial ou pour le refuser. Si vous le renvoyez vous aller impacter une personne innocente parceque les spams ne contiennent jamais une adresse d'expéditeur réel. Laissez simplement vos utilisateurs décider de ce qu'ils veulent faire de ce spam. Il est donc fortement recommandé d'utiliser ici la valeur D_PASS :
$final_spam_destiny=D_PASS;
Il existe encore bien d'autres options que vous pouvez utiliser pour ajuster finement AMaViS à vos propres besoins.
Simplement vérifiez bien que votre fichier 50-user se termine bien par « 1; » sinon AMaViS ne démarera pas correctement.
Redémarez AMaViS si vous avez fait des modifications dans les fichiers de configuration :
/etc/init.d/amavis restart
Assurez-vous qu'AMaViS écoute bien sur le port TCP 10024 :
netstat -nap | grep 10024
Vous devriez lire ce résultat :
tcp 0 0 127.0.0.1:10024 0.0.0.0:* LISTEN 12345/amavisd
Si vous obtenez une ligne de ce genre AMaViS est lancé et attend les entrées SMTP. Sinon vérifiez votre fichier /var/log/mail.log. Peut-être avez vous commis une erreur dans un des fichiers de configuration.
Ces informations devraient vous permettre de commencer. Pour une documentation plus détaillée, veuillez regarder le fichier README.Postfix fourni avec AMaViS.
Pourquoi filtrer les mails sortants ?
Dans les précédents guides j'ai utilisé des requêtes SQL pour déterminer si un mail était entrant ou sortant. De nombreux administrateurs système ne veulent pas que les mails sortants soient scannés à la recherche de spam car :
- Votre propre lettre d'information pourrait être envoyée à vos abonnée marquée comme spam ;
- Cela mobilise d'importantes ressources processeur.
Mais de nos jours je recommanderais plutôt de scanner tous les mails car :
- Cela permet de découvrir un PC local infesté par un virus ;
- Cela aide AMaViS à apprendre ce qui constitue des courriers légitimes (ham en anglais) et ce qui constitue des courriers illégitimes (spam).
C'est à vous en dernier ressort de décider. Différentes approches sont décrites dans la documentation d'AMaViS.
Passer à la phase de test
Maintenant que tout est configuré il faut tester le processus de scan des mails. Heureusement SpamAssassin est fourni avec deux mails, un ham (bon) et un spam (mauvais) destiné à effectuer des tests. Vous pouvez envoyer ces mails dans votre système et regarder les résultats dans le fichier /var/log/mail.log pour contrôler qu'AMaViS se comporte comme prévu.
Commençons par essayer le mail de spam :
sendmail john@example.com < /usr/share/doc/spamassassin/examples/sample-spam.txt
En plus des nombreuses lignes dans votre fichier /var/log/mail.log comporant le mot « postfix » vous devriez voir une ligne comportant le mot « amavis ». Elle ressemblera à ceci :
May 7 12:42:33 debian amavis[1834]: (01834-01) Passed SPAM, <root@...> -> <john@example.org>, quarantine: T/spam-TrRe46tTm2+r.gz, Message-ID: <GTUBE1.1010101@example.net>, mail_id: TrRe46tTm2+r, Hits: 1002.448, size: 944, queued_as: 22DC9D40, 5022 ms
La signification de cette ligne est que le mail a été accepté (passed) mais marqué comme spam (SPAM). Le score de spam est 1002.448 (Hits) ce qui est largement plus que la limite que j'avais fixée dans la variable $sa_tag2_level_deflt. De plus le mail a été copié dans le fichier /var/lib/amavis/virusmails/T/spam-TrRe46tTm2+r.gz au format GZIP. Pour savoir comment traiter les mails mis en quarantaine, voyez la documentation d'AMaViS.
C'est presque terminé
Avez-vous activé le « soft bounce » comme indiqué plus haut ? Tout fonctionne-t-il ? Si la commande mailq montre qu'il existe encore des mails dans la file d'attente (queue) qui doivent etre distribués, commencez par les réinjecter dans la file d'attente ;
postsuper -r ALL
La re-programmation des mails (re-scheduling) signifie que Postfix va reconsidérer ce qu'il doit faire de tous les mails figurant dans la file d'attente. Les informations de routage et d'analyse de contenu sont liées à chaque mail. Du coup, même si vous reconfigurez Postfix, les mails dans la file d'attente ne seront pas traités tant que vous ne les aurez pas réinjectés.
Maintenant videz la file d'attente :
postfix flush
et les courriers devraient être délivrés. Vous trouverez les informations sur ce qui s'est passé dans le fichier /var/log/mail.log.
Si tout s'est déroulé comme prévu, désactivez le mode soft bounce et vous en aurez fini :
postconf -e soft_bounce=no
Vous voulez aller plus loin ?
Si vous pensez sérieusement installer AMaViS sur un serveur de courrier en production, alors passez du temps à consulter sa documentation. C'est un programme complexe, qui peut intégrer un grand nombre de logiciels tiers comme des scanners de virus. Il peut être personnalisé en profondeur. Il peut ajouter automatiquement des signatures DKIM sur les mails sortants. Il possède un système de mise en quarantaine, ce qui vous permet de modérer les spams. Il offre quantité de fonctionnalités qui sortent de l'objectif de ce guide. Si vous pensez avoir des informations valables à ajouter à ce guide, alors, s'il vous plaît, laissez un commentaire sur cette page. Merci.
Note du traducteur : Il est bien entendu préférable de laisser un commentaire sur le site de Christoph Haas, cependant si vous n'arrivez pas à rédiger votre commentaire en anglais vous pouvez le laisser ici en français et j'essayerai de le formuler sur son site en anglais.
Encore un mot sur le scan des spams. SpamAssassin (tel qu'il est utilisé par AMaViS) emploie différentes règles pour détecter les spams, mais il peut également apprendre à distinguer les bons des mauvais mails. Pour cela il faut qu'il scanne un nombre égal de plusieurs centaines de ham et de spam avant qu'il puisse réellement être efficace. Et à ma connaissance, il n'y a pas moyen de lui enseigner à reconnaître les spams de façon différente pour chaque utilisateur. Donc tout ce que vous apprendrez à SpamAssassin, que ce soit bon ou mauvais, s'appliquera à tous vos utilisateurs.