Filtrer virus et spam sur son serveur mail avec amavis et spamassassin
Configurer son serveur mail sous Ubuntu serveur 12.04 pour que les emails soient vérifiés pour la recherche de virus et de spam.
Ce tutoriel est la suite des posts :
- sur l’installation d’un serveur mail sur Ubuntu serveur 10.04 ;
- sur l’installation de postfixadmin pour gérer celui-ci ;
- sur la mise à jour du serveur mail sur Ubuntu serveur 12.04 ;
- sur l’installation de sieve pour créer des règles de filtrage pour les messages entrants.
Il présente comment utiliser amavis, un logiciel de filtrage de contenu des e-mails, clamav, un logiciel de détection des virus, et spamassassin, un logiciel de détection des spams. Ce tutoriel est largement inspiré de l’excellent tutoriel de Christoph Hass que vous pouvez consulter ici pour des détails techniques plus poussés, ainsi que de ce lien pour la configuration de spamassassin.
Installer les packages suivants :
sudo apt-get install amavisd-new spamassassin clamav-daemon lha arj unrar-free zoo
nomarch cpio lzop cabextract p7zip rpm
La configuration de amavis est effectuée en éditant les fichiers du répertoire /etc/amavis/conf.d/
. En particulier, commencez par éditer le fichier 50-user
et à ajouter ou modifier les lignes suivantes :
$sa_spam_subject_tag="[MY-SPAM] ";
$sa_tag_level_deflt=3.0;
$sa_tag2_level_deflt=3.0;
$final_spam_destiny=D_PASS;
$spam_quarantine_to=undef;
La première ligne sert à définir le tag qui sera ajouté aux e-mails lorsque ceux-ci seront détectés comme SPAM : il suffira alors de créer une règle spécifique avec sieve pour les rediriger vers un répertoire adéquat. La deuxième et la troisième lignes servent à définir le niveau (score spamassassin) à partir duquel amavis taguera les e-mail comme étant des spams, soit uniquement dans l’en-tête, soit dans le sujet. La quatrième ligne indique que les messages détectés comme spam sont quand même envoyé à leurs destinataires mais avec un tag supplémentaire ajouté (d’autres politiques peuvent être choisies, qui ne délivrent pas l’e-mail aux destinataires). Enfin, la dernière ligne sert à définir le répertoire vers lequel les messages marqués SPAM doivent être dirigés ; la valeur “undef” laisse le destinataire configurer seul ses règles de gestion des e-mails et n’envoie les spams vers aucun répertoire particulier.
On redémarre et on vérifie ensuite le fonctionnement de amavis avec :
/etc/init.d/amavis restart
netstat -nap | grep 10024
qui doit répondre :
tcp 0 0 127.0.0.1:10024 0.0.0.0:* LISTEN 28222/amavisd
Communication entre amavis et postfix
L’étape suivante consiste à faire communiquer amavis et postfix ; on commence par définir amavis comme filtre de contenu
postconf -e content_filter=smtp-amavis:[127.0.0.1]:10024
postconf -e receive_override_options=no_address_mappings
Ces options seront ajoutées au fichier /etc/postfix/main.cf
; la deuxième ligne sert à indiquer que le logiciel de gestion de contenu doit voir les adresses originales de l’e-mail et pas les résultats résultats des redirections, de la gestion des hôtes virtuels, etc. Il faut ensuite éditer le fichier /etc/postfix/master.cf
pour y ajouter :
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 - - - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-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 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
-o local_header_rewrite_clients=
puis redémarrer postfix :
sudo service postfix reload
FIX IT! Comment configurer amavis pour qu’il ne scanne pas le contenu des messages sortants ?
Communication entre amavis et clamav
Pour permettre à amavis d’utiliser clamav pour filtrer les virus, il faut ajouter amavis au groupe des utilisateurs clamav :
adduser clamav amavis
/etc/init.d/clamav-daemon restart
Configurer Spamassassin
amavis utilise spamassassin via l’appel direct du module perl de spamassassin. Si vous disposez déjà d’une base d’apprentissage d’e-mails personnels spam et non spam (de plusieurs milliers d’e-mails de préférence), il est recommandé d’utiliser cette base pour entraîner spamassassin. Pour lancer spamassassin, éditez le fichier etc/default/spamassassin
pour y modifier la ligne suivante :
ENABLED = 1
Mes e-mails sont contenus dans le répertoire Maildir de mon dossier IMAP : les spams dans un répertoire .Junk
et les autres dans des répertoires .INBOX.XXX
; l’apprentissage de spamassassin se fait alors avec :
sa-learn --spam /home/mail/domain-name.org/tuxette/Maildir/.Junk
sa-learn --ham /home/mail/domain-name.org/tuxette/Maildir/.INBOX.*
Pour finir…
Relancer tout :
/etc/init.d/amavis restart
/etc/init.d/clamav-daemon restart
/etc/init.d/spamassassin restart
/etc/init.d/postfix restart
La configuration est bien prise en compte si le fichier /etc/log/mail.log
contient les informations suivantes :
Aug 5 07:59:01 hostname amavis[27182]: ANTI-VIRUS code loaded Aug 5 07:59:01 hostname amavis[27182]: ANTI-SPAM code loaded Aug 5 07:59:01 hostname amavis[27182]: ANTI-SPAM-SA code loaded
La configuration peut être testée par l’envoi d’un fichier exemple fourni par spamassassin :
sendmail tuxette@domain-name.org < /usr/share/doc/spamassassin/examples/sample-spam.txt
L’e-mail reçu est tagué par [MY-SPAM] dans l’objet et contient des informations de ce type dans les en-têtes :
X-Virus-Scanned: Debian amavisd-new at domain-name.org X-Spam-Flag: YES X-Spam-Score: 7.019 X-Spam-Level: ******* X-Spam-Status: Yes, score=7.019 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_IMAGE_RATIO_04=0.61, HTML_MESSAGE=0.001, MIME_HTML_ONLY=1.105, SPF_PASS=-0.001, TVD_RCVD_SPACE_BRACKET=0.001, T_SURBL_MULTI1=0.01, T_URIBL_BLACK_OVERLAP=0.01, UNPARSEABLE_RELAY=0.001, URIBL_BLACK=1.775, URIBL_JP_SURBL=1.948, URIBL_WS_SURBL=1.659] autolearn=no