Réseau - Web - GNU/Linux

2011 12 mai

Protection contre les virus et les spams - Debian 5.0 Lenny

Rédigé par Marc GUILLAUME | Aucun commentaire
Article précédent Mail façon FAI - Debian 5.0 Lenny Article suivant

Utilisation de ClamAV pour le filtrage des spams et la protection contre les virus.

Protection contre les virus et les spams

Deux problèmes fâcheux lorsque l'on utilise des emails sont les spams et les viruses. Par chance vous pouvez combattre les deux en utilisant AMaViS (un scanner de virus pour les mails). AMaViS est une interface entre Postfix, SpamAssassin (réputé pour ses capacités de filtrage Bayesien des spams) et optionnellement un scanner de virus. AMaViS contient la partie filtrage de spam, mais ne contient pas de scanner de virus. C'est pour cet usage que vous avez installé ClamAV. Il s'agit d'un scanner de virus libre de grande qualité qui bénéficie de fréquentes mises à jour.

La configuration d'AMaViS est répartie dans plusieurs fichiers dans le répertoire /etc/amavis/conf.d. Par chance les scanner de virus ClamAV est déjà configuré par défaut, de telle manière qu'il suffit de l'activer dans le fichier /etc/amavis/conf.d/15-content_filter_mode en supprimant simplement le '#' placé au début de la ligne @bypass_... de telle manière que le filtrage de spam et de virus soit activé. (C'est un peu déroutant que l'activation d'une directive "bypass" (court-circuiter) active en fait le scannage des spams et des virus).

Je vous suggère de regarder également de près le fichier /etc/amavis/conf.d/20-debian_defaults. Ne modifiez pas ce fichier. Si vous voulez modifier des réglages faites le par l'intermédiaire du fichier /etc/amavis/conf.d/50-user.

  • $sa_spam_subject_tag : Si vous décommentez cette ligne alors tout mail suspecté par AMaViS d'être un spam verra cette chaîne de caractères ajoutée au sujet du mail. Si vous ne voulez pas modifier le sujet vous devriez déclarer $sa_spam_subject_tag=undef. Les utilisateurs pourront toujours vérifier si AMaViS a marqué le mail comme spam en vérifiant l'en-tête de mail X-Spam-Status.
  • $sa_tag_level_deflt : les spams obtenant un score supérieur ou égal à ce niveau se verront ajouter un en-tête de spam. Le déboggage est plus facile si vous ajoutez toujours cet en-tête, ainsi vous devriez utiliser un score très bas (par exemple "undef" qui est le plus bas score possible, de telle manière qu'un en-tête soit systématiquement ajouté).
  • $sa_tag2_level_deflt : Les mails avec un score de spam supérieur ou égal à ce niveau seront marqués comme spam. Généralement la valeur par défaut est raisonnable. Baissez la si trop de spam réussit à passer à travers. Augmentez la si trop de mails normaux sont marqués comme spam.
  • $sa_kill_level_deflt : cette valeur devrait être la même que celle utilisée pour $sa_tag2_level_deflt
  • $final_spam_destiny : le règlage par défaut D_BOUNCE est ici totalement stupide. L'approche classique est de marquer le mail comme spam. Mais si vous le renvoyez à l'expéditeur (signification de bounce, rebond) vous allez impacter une personne innocente, car les spams ne contiennent jamais la vrai adresse d'expéditeur. Laissez juste l'utilisateur décider de ce qu'il veut faire du spam. Il est donc fortement recommander d'utiliser la valeur D_PASS.
  • $spam_quarantine_to : indique où envoyer les mails de spam mis en quarantaine. Comme les mails sont juste marqués et ensuite acheminés, ils ne devraient pas être mis en quarantaine. Le règlage recommandé ici est undef.
  • $banned_filename_re : vérifiez soigneusement cette liste, car ces motifs indiquent à AMaViS quand il faut renvoyer un mail qui contiendrait des données que vous ne voulez par recevoir par mail.

un fichier 50-user bien configuré pourraît être :

$sa_spam_subject_tag = undef;
$spam_quarantine_to  = undef;
$sa_tag_level_deflt  = undef;
$final_spam_destiny  = D_PASS;
1;  # ensure a defined return

Redémarrez AMaViS si vous avez modifé des fichiers de configuration :

$> /etc/init.d/amavis restart

Vérifiez qu'AMaViS écoute bien sur le port TCP 10024 :

$> netstat -nap | grep 10024

Vous devriez voir cette réponse :

tcp  0   0 127.0.0.1:10024     0.0.0.0:*    LISTEN   12345/amavisd

Si cette ligne s'affiche alors AMaViS tourne et attend les sessions SMTP entrantes. Si ce n'est pas le cas vérifiez votre fichier de log /var/log/mail.log, vous avez peut-être commis une erreur dans vos fichiers de configuration.

Quelques mots sur la façon dont AMaViS communique avec Postfix. Si quelqu'un vous envoie un mail depuis Internet, celui-ci sera reçu par Postfix (le processus smtpd) sur le port TCP 25 (SMTP). Si Postfix accepte le mail il sera transmis à AMaViS sur le port 10024 (SMTP). Et si AMaViS est satisfait du contenu du mail, il le renverra à Postfix sur le port TCP 10025 (SMTP). Postfix finalement renverra le mail au destinataire. Voyez le chapitre sur la vue d'ensemble pour l'illustration.

Pour faire en sorte que Postfix renvoit les mails à AMaViS il faut renseigner le réglage content_filter. Voyez aussi le réglage receive_override_options dont on parlera un peu plus tard :

$> postconf -e content_filter=smtp-amavis:[127.0.0.1]:10024
$> postconf -e receive_override_options=no_address_mappings

Il est nécessaie de définir le service smtp-amavis en premier dans /etc/postfix/master.cf. Il faut également faire en sorte que Postfix écoute sur le port TCP 10025 pour recevoir les mails renvoyés par AMaViS. Pour cela ajoutez cette section à votre fichier /etc/postfix/master.cf :

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=

Redémarez Postfix :

$> postfix reload

Ces réglages méritent une explication. Pour commencer receive_override_options est configuré en no_address_mappings. Cela désactive toutes les tables de désignation d'adresses. Vos alias virtuels par exemple ne sont pas pris en compte en premier. Le mail est envoyé à smtp-amavis et en fin de compte retourné au service écoutant sur le socket 127.0.0.1:10025 qui définit à sont tour de nombreuses options. Une de ces options est de nouveau receive_override_options. Mais cette fois la directive no_address_mappings n'est plus activée. Lors de cette étape Postrix prend en compte vos alias virtuels. Cela vous semble bien compliqué ? Certes, mais il doit en être ainsi car sinon vos alias seraient évalués deux fois, ce qui conduirait à envoyer deux fois les mails. Les autres options sont destinées à désactiver les vérifications que Postfix a déjà effectuées lors de la première étape.

Nota : receive_override_options=no_address_mappings conduit Postfix à ne plus tenir du tout compte des aliases. Du coup si vous voulez désactiver le filtre de contenu AMaViS il vous faudra également désactiver ce paramètre !

Une autre petite remarque, l'utilisateur "clamav" doit être également membre du groupe système "amavis" pour que les deux services soient autorisés à communiquer :

$> adduser clamav amavis
$> /etc/init.d/clamav-daemon restart

Un autre détail auquel il convient de prendre garde : AMaViS essaie de savoir si un mail est entrant (envoyé depuis l'Internet vers un de vos domaines) ou sortant (envoyé de votre réseau vers Internet) en utilisant la directive @acl_local_domains. Il faut donc dire à AMaViS où il peut vérifier si un certain domaine est un de ceux que vous gérez. La raison est qu'en principe vous ne désirez pas scanner vos mails sortants. Imaginez qu'accidentellement un de vos propres mails soit marqué comme étant un spam et qu'un de vos clients le reçoive ainsi. Vous n'en avez sans doute pas envie.

Pour ce faire il faut éditer le fichier /etc/amavis/conf.d/50-user et avant le "1;" saisissez ces lignes :

@lookup_sql_dsn = (
    ['DBI:mysql:database=mailserver;host=127.0.0.1;port=3306',
     'mailuser',
     'mailuser2009']);

$sql_select_policy = 'SELECT name FROM virtual_domains WHERE CONCAT("@",name) IN (%k)';

Le paramètre @lookup_sql_dsn définit la manière pour AMaViS de pouvoir accéder à votre base de données. Et la valeur $sql_select_policy définit la requête qui est lancée lorsqu'AMaViS veut savoir si le domaine de destination du mail qu'il est en train de contrôler est un de vos domaines virtuels. le %k correspond à une liste de chaînes de caractères qu'AMaViS s'attend à trouver. La requête lancée ressemblera à ça :

SELECT name
FROM virtual_domains
WHERE CONCAT("@",name)
IN (
    'john@example.com',
    'john',
    '@example.com',
    '@.example.com',
    '@.com',
    '@.')

Cela peut sembler un peu barbare. Mais à la fin la chaine '@example.com' est recherchée. Redémarez AMaViS :

$> /etc/init.d/amavis restart

Maintenant essayez d'envoyer un mail à john@example.com. Si vous examinez les en-têtes de ce mail, vous devriez trouvers des lignes qui ont été ajoutées par AMaViS :

X-Virus-Scanned: Debian amavisd-new at mymailserver
X-Spam-Score: 0
X-Spam-Level:
X-Spam-Status: No, score=0 tagged_above=-9999 required=6.31 tests=[non

Vos utilisateurs pourront filtrer le spam en se basant sur cette information. La ligne X-Spam-Status contiendra "Yes" si le score de spam est supérieur le score requis ($sa_tag2_level_deflt). La ligne X-Spam-Level contient un nombre de "*" qui représentent le score de spam. Si votres programme de courrier recherchait un en-tête X-Spam-Level: ***** alors il bloquera les spams avec un score d'au moins cinq. Voici un exemple réel de spam bloqué :

X-Spam-Status: Yes, hits=16.0 tagged_above=-9999.0 required=6.31
    tests=BAYES_99, FORGED_MUA_OUTLOOK, MSGID_FROM_MTA_ID,
    RCVD_IN_BL_SPAMCOP_NET, UNDISC_RECIPS, URIBL_OB_SURBL, WORK_AT_HOME
X-Spam-Level: ***************
X-Spam-Flag: YES

Tous les courriers entrants devraient maintenant être testés pour détecter les virus et les spams. Essayez-ça. SpamAssassin est livré avec des exemples de spam contenant le GTUBE (Generic Test for Unsolicited Bulk Email, ou test générique pour les emails non sollicités) qui contient une signature qui est sensée exciter les filtres de spam (comme EICAR.COM pour les scanners de virus). Envoyez à John ce spam :

 $> sendmail john@example.com < /usr/share/doc/spamassassin/examples/sample-spam.txt

Parmi d'autres informations votre fichier /var/log/mail.log contiendra maintenant une ligne écrite par AMaViS :

amavis[13001]: (13001-02) Passed SPAM, <...> -> 

Ainsi l'email a été détecté et envoyé à John. C'est très bien. Pour terminer donnez les permissions adéquates aux fichiers de configuration d'AMaViS pour qu'aucun utilisateur non autorisé ne puisse lire le mot de passe de la base de données :

 $> chmod o= /etc/amavis/conf.d/50-user

Écrire un commentaire

Quelle est la dernière lettre du mot ibvpu ?

Fil RSS des commentaires de cet article

À propos

Yakati.com - Réseau - Web - GNU/Linux © 2017

Généré par PluXml en 0.053s  - Administration

Mes coordonnées

Marc Guillaume
contact[at]yakati.com
79150 ÉTUSSON

Crédits

Pour la gestion du contenu

Généré par PluXml, le Blog ou Cms sans base de données

Pour le contenu

Licence Creative Commons
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.

Pour le thème

Thème SOLID de blacktie.co adapté pour PluXml