Mail:Configuration spamass clamav
Un article de Free-4ever.
Sommaire |
Introduction
Ce document va expliquer l'intégration de Amavisd avec ClamAV et SpamAssassin dans Postfix. Cela marche aussi bien sur un serveur de boite qu'un serveur qui sert de relais.
Postfix étant notre daemon mail avec ClamAV qui est l'anti-virus, SpamAssassin l'anti-spam et enfin Amavisd qui fait l'interconnexion entre tout ce petit monde.
Cela s'applique aussi bien à une distribution Linux, testé sur Debian Sarge & Etch, que sur FreeBSD, testé en 6.2.
Dans ce document, les extraits de fichiers de configuration seront ceux de Debian.
Prérequis
Une fois n'est pas coutume, il n'y a pas de prérequis pour ce document. Cette partie est strictement indépendante des autres !
Configuration de Postfix
Du côté de Postfix', il n'y que peu de choses à faire, nous allons lui indiquer comment parler à notre système d'analyse de contenu et aussi comment Amavisd lui répond.
Pour cela, on édite le fichier main.cf et on ajoute la ligne suivante:
content_filter = amavis:[127.0.0.1]:10024
Postfix sait où envoyer les mails à tester.
Puis éditer le fichier master.cf pour ajouter les lignes suivantes:
amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
Amavisd sait comment répondre à Postfix
Configuration de ClamAV
Il y a deux daemons pour ClamAV:
- clamav-daemon qui analyse les mails
- clamav-freshclam qui vérifie sur différents sites web si il y a des nouvelles bases de données de virus et éventuellement il notifie clamav-daemon des mises à jour
Configuration de clamav-freshclan
Le fichier de configuration s'appelle freshclam.conf.
Voici un exemple de configuration:
# L'utilisateur qui possède la base DatabaseOwner clamav # Le fichier de log des updates UpdateLogFile /var/log/clamav/freshclam.log # La taille maximum de ce fichier LogFileMaxSize 0 # Le nombre d'essai maximum avant de considérer que la mise à jour a échouée MaxAttempts 5 # On vérifie les mises à jour 24 fois par jour # Toutes les heures donc ! Checks 24 # Les différents serveurs où l'on peut aller chercher les mises à jour DatabaseMirror db.local.clamav.net DatabaseMirror database.clamav.net DatabaseMirror db.fr.clamav.net # Le répertoire où se trouve la base de données DatabaseDirectory /var/lib/clamav/ # On notifie le daemon clamd pour qu'il charge la nouvelle base en cas de mise à jour NotifyClamd # Active la vérification de la version de la base de données grâce à un enregistrement DNS TXT DNSDatabaseInfo current.cvd.clamav.net
Configuration de clamav-daemon
Le fichier de configuration s'appelle clamd.conf.
Voici un exemple de configuration:
# Le socket local d'écoute du daemon LocalSocket /var/run/clamav/clamd.ctl # On efface un socket qui serait resté après un redémarrage sale du daemon FixStaleSocket # L'utilisateur qui exécute le daemon User clamav # Autorise d'autres groupes à accéder au daemon # L'utilité de ce paramètre n'est pas très clair ! AllowSupplementaryGroups # On active l'analyse des mails ScanMail # On scanne les archives dans les mails ScanArchive # On descend autant de niveau d'archive qu'il y en a ArchiveMaxRecursion 0 # On ne limite pas la taille des fichiers à scanner dans les archives ArchiveMaxFiles 0 # On ne scanne pas les archives de plus de 20M # De toutes facons, on aura interdit avec Postfix les mails aussi gros ArchiveMaxFileSize 20M # On ne limite pas le scan sur le % de compression des archives ArchiveMaxCompressionRatio 0 # On interdit les archives encryptées ArchiveBlockEncrypted # On scanne aussi les archives de type rar ScanRAR # Timeout à 3 minutes pour la réception des mails à scanner ReadTimeout 180 # Le nombre maximum de threads MaxThreads 12 # Le nombre maximum de mail dans la queue # En attente d'analyse ou d'un thread ? MaxConnectionQueueLength 15 # Le fichier de log LogFile /var/log/clamav/clamav.log # On log l'heure pour tous les messages LogTime # Pas de taille maximum pour le fichier de log LogFileMaxSize 0 # Le fichier pid du daemon PidFile /var/run/clamav/clamd.pid # Le répertoire qui contient la base de données des virus DatabaseDirectory /var/lib/clamav # Le daemon vérifie toutes les heures qu'il est vivant SelfCheck 3600 # On recherche les macros dans les documents Office ScanOLE2 # On scanne les éxécutables windows ScanPE # On cherche à détecter les éxécutables cassés DetectBrokenExecutables # On analyse et on normalise le HTML ScanHTML # On block les archives quand on dépasse certains seuils avec celle-ci ArchiveBlockMax
Configuration de SpamAssassin
Au niveau de SpamAssassin, je n'ai pas fait de modification. Les réglages les plus importants se font dans Amavisd. SpamAssassin est appelé avec ses options par défaut et ensuite, c'est Amavisd qui en fonction de ses seuils fait les choix sur ce qui va arriver au mail.
Configuration de Amavisd
C'est Amavisd qui va nous permettre de définir les domaines, les seuils, etc pour l'analyse de nos mails.
Voici des extraits intéressants du fichier de configuration de Amavisd. Sur Debian, ils ont coupé le fichier en plusieurs morceaux qui sont dans un répertoire conf.d:
[...]
# Fichier 05-domain_id
#
# Le domain pour lequel on traite les mails
chomp($mydomain = `head -n 1 /etc/mailname`);
@local_domains_acl = ( ".$mydomain", 'lohez.eu', 'libre-ajamais.net' );
# Sur FreeBSD, le domain est spécifié en direct:
# $mydomain = 'centile.com';
[...]
# Fichier 15-av_scanners
#
# On laisse uniquement cela décommenté dans la section sur les antivirus
# Seul ClamAV est utilisé
['ClamAV-clamd',
\&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.ctl"],
qr/\bOK$/, qr/\bFOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
[...]
# Fichier 20-debian_defaults
#
# Le répertoire où les mails sont mis en quarantaine
$QUARANTINEDIR = "$MYHOME/virusmails";
# Le tag que l'on insert dans le sujet pour les mails à petit score
$sa_spam_subject_tag = '***SPAM*** ';
[...]
# On choisit les actions en fonction de ce qu'on détecte dans les mails
# On jete les mails avec des virus
$final_virus_destiny = D_DISCARD;
# Amavis génère un message de rejet
$final_banned_destiny = D_BOUNCE;
# Amavis génère un message de rejet
$final_spam_destiny = D_BOUNCE;
# Ces mails passent
$final_bad_header_destiny = D_PASS;
# Les notifications en cas de virus sont envoyées à cette addresse
$virus_admin = "silencer\@$mydomain";
Application des modifications
Il ne nous reste plus qu'à redémarrer nos services.
On commence par ClamAV:
/etc/init.d/clamav-freshclam
pour lancer la récuperation automatique des mises à jour, puis:
/etc/init.d/clamav-daemon
pour lancer le daemon qui scanne les mails
Ensuite on démarre Amavisd qui peut maintenant parler à ClamAV:
/etc/init.d/amavisd restart
Puis on termine par Postfix qui peut maintenant parler à Amavisd:
/etc/init.d/postfix restart
Il n'y a pas de daemon pour SpamAssassin car il est lancé de façon interactive par Amavisd.
Tester l'analyse de contenu
Pour tester l'analyse de virus, on peut utiliser le fichier eicar qui se trouve sur différents sites web. Il existe dans différents formats y compris des archives avec pas mal de niveau à l'intérieur.
Pour l'analyse des spams, SpamAssassin est fournit avec des fichiers d'exemple qui produisent différents scores pour être:
- en dessous du premier niveau de marquage, on doit juste voir dans les headers que l'on a anaylsé le mail
- au dessus du premier niveau donc le sujet du mail doit être marqué avec ***SPAM***
- enfin un score suffisant pour que le mail soit placé directement en quarantaine.
Apprentissage de 'SpamAssassin
Le plus simple pour apprendre à SpamAssassin est d'utiliser la commande sa-learn. Pour cela, sauvegardez un mail de spam non détecté dans un fichier texte puis lancez la commande suivante:
su amavis -c sa-learn --spam mon_mail_de_spam.txt
Sinon, un autre façon assez propre, si vous travaillez avec un serveur IMAP, est de placer les mails non détectés dans le répertoire junk de la inbox. Puis côté serveur, mettre une commande en crontab qui va analyser le contenu de ce sous-répertoire de la inbox avec une ligne de la forme:
26 5 * * * amavis /usr/bin/sa-learn --spam /path_to_maildir/Maildir/.Junk/cur/*
Si vous avez un faux positif, on utilise la commande sa-learn --ham.
Mot de la fin
Vous avez maintenant une analyse de contenu sur votre serveur de mail. Mais il y a encore un grand nombre de modules Perl pour SpamAssassin.
Le principal avec SpamAssassin est qu'il faut lui apprendre ce qui est du spam et ce qui ne l'est pas. Enfin surtout ce qui est du spam !
Si vous avez peur des faux positifs, dans un premier temps, vous pouvez aller regarder les mails qui ont été mis en quarantaine.
Dernière modification: Silencer 9 février 2007 à 18:28 (CET)

