Filtrage du courrier éléctronique

L'un des plus gros problèmes avec le courrier électronique à l'heure actuelle sont les courriers électroniques non sollicités envoyés en masse (ou UBE en anglais). Également connus sous le nom de SPAM, ces messages peuvent également transmettre des virus et d'autres formes de logiciels malveillants. Selon certains rapports, ces messages constituent l'essentiel de l'ensemble du trafic e-mail sur Internet.

This section will cover integrating Amavisd-new, Spamassassin, and ClamAV with the Postfix Mail Transport Agent (MTA). Postfix can also check email validity by passing it through external content filters. These filters can sometimes determine if a message is spam without needing to process it with more resource intensive applications. Two common filters are opendkim and python-policyd-spf.

  • Amavisd-new est un programme enveloppe qui peut appeler différents programmes de filtrage de contenu pour la détection de courrier indésirable (spam), anti-virus, etc.

  • Spamassassin utilise divers mécanismes pour filtrer les courriers en se basant sur leur contenu.

  • ClamAV est anti-virus libre.

  • opendkim implements a Sendmail Mail Filter (Milter) for the DomainKeys Identified Mail (DKIM) standard.

  • python-policyd-spf active la vérification Sender Policy Framework (SPF) avec Postfix.

Voici comment ces applications collaborent :

  • Un courriel est accepté par Postfix.

  • Dans ce cas, le message passe via les filtres externes opendkim et python-policyd-spf.

  • Amavisd-new traite ensuite le message.

  • ClamAV est utilisé pour nalyser le message. Si le message contient un virus alors Postfix le rejettera.

  • Les messages propres seront ensuite analysés par Spamassassin pour savoir si le courrier est indésirable (spam). Spamassassin ajoutera alors des lignes X-Header permettant à Amavisd-new de manipuler le message par la suite.

Par exemple, si un message a un score Spam de plus de cinquante le message pourrait être automatiquement sorti de la file sans que le destinataire ne soit jamais embêté. Un autre moyen de traiter les messages signalés est de les remettre au client de messagerie électronique (MUA) autorisant l'utilisateur à gérer le message comme il le souhaite.

Installation

Consultez Postfix pour les instructions d'installation et de configuration de Postfix.

Pour installer le reste des applications saisissez ce qui suit dans un terminal :

sudo apt-get install amavisd-new spamassassin clamav-daemon
sudo apt-get install opendkim postfix-policyd-spf-python

Il existe des paquets facultatifs qui s'intègrent avec Spamassassin pour une meilleure détection des spams :

sudo apt-get install pyzor razor

Avec les principales applications de filtrage, des utilitaires de compression sont nécessaires pour traiter certaines pièces jointes :

sudo apt-get install arj cabextract cpio lha nomarch pax rar unrar unzip zip

Si certains paquets sont introuvables, vérifiez que le dépôt multiverse est activé dans /etc/apt/sources.list

Si vous modifiez le fichier, assurez-vous d'exécuter la commande sudo apt-get update avant d'essayer de le réinstaller.

Configuration

Configurez maintenant cela pour que tou fonctionne ensemble et flitre les courriers.

ClamAV

L'installation par défaut de ClamAV nous conviendra. Regardez son fichier de configuration dans /etc/clamav pour avoir accès à plus d'options.

Ajoutez l'utilisateur clamav au groupe amavis de manière à ce que Amavisd-new ait les droits suffisants pour lire les fichiers :

sudo adduser clamav amavis
sudo adduser amavis clamav

Spamassassin

Spamassassin détecte automatiquement les composants supplémentaires et les utilisera s'ils sont présents. Ceci veut donc dire qu'il n'est pas nécessaire de configurer pyzor et razor.

Modifiez /etc/default/spamassassin pour activer le démon Spamassassin. Changez ENABLED=0 par :

ENABLED=1

Lancez maintenant le démon :

sudo service spamassassin start

Amavisd-new

D'abord, activez la détection de spam et de virus dans Amavisd-new en éditant /etc/amavis/conf.d/15-content_filter_mode :

use strict;

# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.

#
# Default antivirus checking mode
# Uncomment the two lines below to enable it
#

@bypass_virus_checks_maps = (
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);


#
# Default SPAM checking mode
# Uncomment the two lines below to enable it
#

@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

1;  # insure a defined return

Le renvoi d'un spam à l'expéditeur peut être une mauvaise idée étant donné que l'adresse de retour est souvent fausse. Vous devriez modifier /etc/amavis/conf.d/20-debian_defaults pour configurer $final_spam_destinysur D_DISCARD plutôt que D_BOUNCE, comme suit :

$final_spam_destiny       = D_DISCARD;

De plus, vous devriez peut-être ajuster les options suivantes afin d'étiqueter plus de messages comme indésirables :

$sa_tag_level_deflt = -999; # ajoute les entêtes d'informations de courrier indésirable si supérieur ou égal à ce niveau
$sa_tag2_level_deflt = 6.0; # ajoute l'entête 'courrier indésirable détecté' à ce niveau
$sa_kill_level_deflt = 21.0; # déclenche les actions d'évitement de de courrier indésirable
$sa_dsn_cutoff_level = 4; # le niveau de courrier indésirable en dessous duquel un DSN n'est pas envoyé

Si le nom d'hôte (hostname) du serveur est différent de l'enregistrement MX du domaine vous devrez fixer vous-même l'option $myhostname. De même, si le serveur sert de multiples domaines, l'option @local_domains_acl devra être personnalisée. Modifiez le fichier /etc/amavis/conf.d/50-user :

$myhostname = 'mail.example.com';
@local_domains_acl = ( "example.com", "example.org" );

Si vous voulez couvrir plusieurs domaines, vous pouvez utiliser ce qui suit dans le fichier /etc/amavis/conf.d/50-user

@local_domains_acl = qw(.);

Après sa configuration, Amavisd-new doit être redémarré :

sudo service amavis restart

Liste blanche DKIM

Amavisd-new peut être configuré pour mettre automatiquement les adresses des domaines ayant des clés correctes en liste blanche. Des domaines pré configurés se trouvent dans /etc/amavis/conf.d/40-policy_banks.

Il existent plusieurs manières de configurer la liste blanche d'un domaine :

  • 'example.com' => 'WHITELIST', : ajoute toutes les adresses du domaine « example.com » à la liste blanche .

  • '.example.com' => 'WHITELIST', : ajoute n'importe quelle adresse de n'importe quel sous-domaine de « example.com » s'ils ont une signature valable.

  • '.example.com/@example.com' => 'WHITELIST', : ajoute les sous-domaines de « example.com » qui utilisent la signature du domaine parent example.com.

  • './@example.com' => 'WHITELIST',: adds addresses that have a valid signature from "example.com". This is usually used for discussion groups that sign their messages.

Un domaine peut aussi avoir plusieurs configurations de liste blanche. Après avoir modifié le fichier, redémarrez amavisd-new :

sudo service amavis restart

Dans ce contexte, une fois qu'un domaine a été ajouté à la liste blanche, le message ne sera pas filtré par un anti-virus quelconque ou un anti-spam. Ceci peut ne pas vous convenir.

Postfix

Pour l'intégration dans Postfix, saisissez la commande suivant dans un terminal :

sudo postconf -e 'content_filter = smtp-amavis:[127.0.0.1]:10024'

Ouvrez ensuite le fichier /etc/postfix/master.cf et ajoutez ce qui suit tout à la fin :

smtp-amavis     unix    -       -       -       -       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,no_milters

Ajoutez aussi les deux lignes suivantes immédiatement en dessous du service de transport "pickup"

         -o content_filter=
         -o receive_override_options=no_header_body_checks

Ceci empêchera la classification en tant que pourriel des messages de rapport de pourriels.

Maintenant, redémarrez Postfix :

sudo service postfix restart

Le filtrage anti-spam et anti-virus est maintenant activé.

Amavisd-new et Spamassassin

When integrating Amavisd-new with Spamassassin, if you choose to disable the bayes filtering by editing /etc/spamassassin/local.cf and use cron to update the nightly rules, the result can cause a situation where a large amount of error messages are sent to the amavis user via the amavisd-new cron job.

Il y a plusieurs façons de traiter cette situation :

  • Configurez votre MDA (agent de distribution de courriel) pour filtrer les messages que vous ne souhaitez pas voir.

  • Change /usr/sbin/amavisd-new-cronjob to check for use_bayes 0. For example, edit /usr/sbin/amavisd-new-cronjob and add the following to the top before the test statements:

    egrep -q "^[ \t]*use_bayes[ \t]*0" /etc/spamassassin/local.cf && exit 0
    

Tests

D'abord, testez que l'application Amavisd-new écoute bien sur le port 10024 :

telnet localhost 10024
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
^]

Dans l'en-tête des messages qui passent par le filtre de contenu, vous devriez lire :

X-Spam-Level: 
X-Virus-Scanned: Debian amavisd-new at example.com
X-Spam-Status: No, hits=-2.3 tagged_above=-1000.0 required=5.0 tests=AWL, BAYES_00
X-Spam-Level: 

Votre sortie variera, mais l'important c'est qu'il existe des entrées X-Virus-Scanned et X-Spam-Status.

Dépannage

La meilleure façon de savoir pourquoi quelque chose ne fonctionne pas est vérifier les fichiers journaux.

  • Pour les instructions sur la journalisation dans Postfix, voyez la section Dépannage.

  • Amavisd-new utilise Syslog pour envoyer des messages dans /var/log/mail.log. Le niveau de détails peut être augmenté en ajoutant l'option $log_level dans /etc/amavis/conf.d/50-user, et en réglant la valeur de 1 à 5.

    $log_level = 2;
    

    Lorsque le niveau de journalisation de Amavisd-new est augmenté, celui de Spamassassin l'est aussi.

  • La quantité d'informations enregistrée dans le journal de ClamAV peut être augmentée en modifiant /etc/clamav/clamd.conf et en réglant l'option suivante :

    LogVerbose true
    

    Par défaut, ClamAV enverra les messages de journalisation (logs) dans /var/log/clamav/clamav.log.

Après avoir modifié les paramètres de journal d'une application, n'oubliez pas de redémarrer le service pour que les changements soient pris en compte. De plus, une fois le problème résolu, il est judicieux de revenir aux paramètres initiaux.

Références

Pour plus d'informations sur le filtrage des emails, voyez les liens suivants:

De plus, n'hésitez pas à poser vos questions (en anglais) sur le canal IRC #ubuntu-server du réseau freenode.