Guide de configuration d'une passerelle de filtrage de courrier
électronique sous Gentoo
1.
Introduction
Nous allons décrire dans ce guide les étapes d'installation d'une passerelle de
filtrage de spam (N.D.T : courrier indésirable) et de virus. Vous pourrez
l'adapter facilement pour mettre en place une solution mettant en œuvre un
serveur seul.
Présentation des acteurs
Ce document indique comment mettre en place une passerelle de filtrage du
courrier électronique multi-domaines. Ce serveur devra se situer en amont des
serveurs de courrier électronique qui disposent des comptes de messagerie, comme
par exemple Microsoft Exchange ou Lotus Notes.
Nous avons choisi pour notre configuration des applications ayant des fichiers
de configuration lisibles et une bonne réputation au niveau de la sécurité.
L'agent de transport de courrier (MTA) choisi est postfix, parce qu'il répond
de manière convenable aux deux critères présentés. Postfix écoutera par défaut
le port 25 pour le courrier entrant. Après réception, il transmettra le courrier
à Amavisd-new sur le port 10024. Amavisd-new filtrera le courrier avec plusieurs
méthodes, avant de le rendre à postfix sur le port 10025. Enfin, Postfix se
chargera de transmettre le courrier au prochain serveur de courrier
électronique.
Amavisd-new est une plate-forme de filtrage de contenu qui, avec l'aide d'autres
applications, permet de filtrer le courrier contre les virus et le spam. Dans
notre configuration, nous utiliserons deux applications. ClamAV s'occupera de
filtrer les virus et Spamassassin le spam. Spamassassin peut à son tour
fonctionner comme une plate-forme de filtrage de contenu et utilisera les
applications DCC et Razor2 de Vipul.
Contrairement à d'autres technologies contre le spam, comme par exemple les RBL,
Spamassassin n'accepte ou ne rejette pas un courrier à partir d'un seul et
unique test, mais il utilise de nombreux tests internes et des applications
externes pour calculer un score de spam pour chaque courrier analysé.
Ce score est basé sur les tests suivants :
- Filtrage bayésien ;
- Règles statiques basées sur des expressions rationnelles ;
- Réseaux distribués collaboratifs :
La première partie de ce guide (du chapitre 1 au 4) décrit la mise en place
d'une passerelle de filtrage de courrier électronique de base. Les chapitres
suivants peuvent être suivis individuellement, il n'y a aucune dépendance
entre les différents chapitres. Ils indiquent comment :
-
Mettre en place des répertoires IMAP spéciaux pour l'apprentissage
bayésien et pour soumettre les faux positifs et négatifs.
- Mettre en place un service de liste grise à l'aide de Postfix.
-
Configurer Amavisd-new pour conserver les préférences des utilisateurs dans
une base MySQL.
-
Configurer Spamassassin pour utiliser MySQL pour AWL et les données
bayésiennes.
Note :
Les répertoires IMAP utiliseront le format maildir. Ne placer qu'un seul
courrier par fichier permet de les manier plus facilement. Si vous utilisez le
format mbox, je vous suggère de tester tout de même le format maildir. Si vous
ne l'utilisez pas déjà, il faudra que vous installiez les outils nécessaires
avec la commande emerge courier-imap.
|
Une cinquième partie est prévue, qui contiendra divers trucs et astuces
concernant les performances et quelques points utiles (comme l'utilisation
d'environnements
chrootés, l'application
de restrictions sur postfix, etc.).
Note :
Déléguer un certain nombre de tâches à une tierce partie n'est pas sans risque.
Vous devez connaître et avoir confiance en celle-ci. Dans notre configuration,
la seule décision qui sera laissée à un tiers unique est la mise en quarantaine
des courriers électroniques contenant des virus. En utilisant le système de
scores de Spamassassin, la décision d'arrêter un courrier indésirable n'est pas
basée sur une seule autorité, sauf peut-être les règles statiques propres à
Spamassassin.
|
Attention :
Lorsque vous rejetez du spam au niveau du MTA, vous devez faire attention lors
de la sélection de la RBL que vous souhaitez utiliser. Par exemple, SpamCop est
une mauvaise liste RBL pour un MTA comme le nôtre, car il en résultera de
nombreux faux positifs. En effet, la liste est parfois tout simplement trop
agressive. Voici une explication sur pourquoi
les listes RBL sont mauvaises et que
penser des RBL pour le spam.
|
Préparation
Avant de commencer, vous devez disposer d'une installation fonctionnelle de
Postfix qui vous permet déjà d'envoyer et de recevoir du courrier électronique.
Si vous n'avez aucune expérience de la configuration de postfix, les choses
risquent de se compliquer très rapidement dans le cas où vous vouliez tout
configurer rapidement. Si vous avez besoin d'aide, vous pouvez en trouver dans
l'excellent guide « Mise en place d'un
système de messagerie multidomaine avec Postfix » de la documentation Gentoo.
2.
Installer les programmes nécessaires
Commençons par installer les programmes les plus importants : Amavisd-new,
Spamassassin et ClamAV.
Exemple de code 2.1 : Installer Amavis, Spamassassin et Clamav |
# emerge amavisd-new spamassassin clamav
|
Note :
Comme indiqué précédemment, vous devez déjà disposer d'un serveur postfix
en état de marche sur votre machine. En gros, cela n'est pas bien plus compliqué
que emerge postfix et une connaissance générale du fonctionnement
global de Postfix.
|
Mise en place des noms de domaine
Note :
Si vous ne souhaitez pas mettre en place de serveur passerelle, c'est-à-dire que
vous voulez un unique serveur central avec l'ensemble des dispositifs sur la
même machine, vous n'avez qu'à créer un enregistrement DNS MX.
|
Pendant l'installation des programmes, ouvrez un nouveau terminal et créez les
champs MX nécessaires comme indiqué ci-dessous.
Commençons par créer un champ MX pour la passerelle de courrier et un
champ A pour la prochaine destination.
Exemple de code 2.2 : Mise en place des DNS |
MX 10 passerellemail.mondomaine.tld.
passerellemail A ip.de.la.passerelle
mail A ip.du.prochain.serveurMail
|
Note :
Certains fournisseurs d'accès de type ADSL bloquent le port 25 et vous obligent
à relayer le courrier via l'un de leurs serveurs. Vous devez alors créer un
champ MX secondaire comme MX 20 sauvegarde-mx.un-FAI.tld.
|
Ouvrir les flux sur votre pare-feu
En plus d'accepter le trafic usuel de courrier, certaines applications
nécessitent une autorisation d'accès au réseau que vous devez mettre en place
au niveau de votre pare-feu pour qu'elles puissent communiquer avec les
serveurs.
| Application |
Protocole |
Port |
| DCC |
UDP |
6277 |
| Razor (ping sortant) |
TCP |
7 |
| Razor |
TCP |
2703 |
Razor utilise les pings pour trouver quels serveurs sont les plus proches.
Configurer Postfix
Nous allons tout d'abord indiquer à postfix d'écouter sur le port 10025,
ensuite nous supprimerons la plupart des restrictions, dans la mesure où
elles ont déjà été appliquées par l'instance de postfix qui tourne sur le
port 25. Enfin, nous nous assurerons que le port 10025 ne sera ouvert que sur
l'interface locale. Pour appliquer tout cela, vous devez ajouter les lignes
suivantes à la fin de votre fichier /etc/postfix/master.cf :
Exemple de code 2.3 : Modifier le fichier master.cf |
smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=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
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
|
Note :
La première ligne avec smtp-amavis indique qu'au maximum deux processus
pourront être exécutés en même temps. Vous pouvez modifier cette valeur pour
l'adapter à vos besoins. Faites seulement bien attention de reporter cette
modification dans la variable $max_servers du fichier
amavisd.conf. Soyez conscient qu'amavisd-new est vraiment
consommateur de mémoire et que trop augmenter le nombre d'instances
d'amavisd-new peut facilement saturer la mémoire et donc provoquer un
usage intensif de la mémoire virtuelle, ce qui réduira considérablement les
performances.
|
Note :
Si vous voulez rejeter le spam le plus rapidement possible, vous pouvez utiliser
la méthode « Before-Queue » (proxy) à la place de la méthode
« filter ». Si vous décommentez les trois lignes correspondantes, vous
devrez mettre content_filter= dans votre fichier main.cf.
Cela n'est pas recommandé pour les serveurs à fort trafic, car le nombre de
connexions concurrentes est limité au nombre d'instances d'amavisd.
|
Attention :
La méthode « Before-Queue » (proxy) n'a pas été convenablement testée.
|
Note :
Si vous souhaitez pour une raison ou pour une autre envoyer un courrier depuis
cette machine et que vous ne souhaitez pas qu'il soit vérifié, ajoutez une
autre instance de postfix en enlevant les commentaires des deux dernières lignes
et modifiez la direction IP pour utiliser la vôtre.
|
Le fichier master.cf indique au programme principal de postfix
comment exécuter chacun des processus de postfix. Pour plus d'information, vous
pouvez faire un man 8 master.
Ensuite, vous devez indiquer à l'instance principale de postfix, qui
tourne sur le port 25, qu'elle doit filtrer le courrier en utilisant
amavisd-new qui, lui, tourne sur le port 10024.
De plus, vous devez indiquer le nom du serveur de courrier destinataire.
Indiquez à Postfix de filtrer tout le courrier grâce à un filtre de contenu
externe, puis mettez en place un routage explicite pour lui permettre de savoir
à qui renvoyer le courrier.
Exemple de code 2.4 : Modifier /etc/postfix/main.cf |
biff = no
empty_address_recipient = MAILER-DAEMON
queue_minfree = 120000000
content_filter = smtp-amavis:[127.0.0.1]:10024
transport_maps = hash:/etc/postfix/transport
relay_domains = $transport_maps
|
Postfix dispose d'un grand nombre d'options que vous pouvez configurer dans
main.cf. Pour plus d'explications sur ce fichier, veuillez vous
référer à la page de manuel man 5 postconf ou à la page web sur les
paramètres de configuration
de Postfix.
Le format de ce fichier transport est le même que celui des
fichiers de hachage de Postfix. Les messages en destination du domaine inscrit
sur la gauche seront envoyés au serveur inscrit sur la droite.
Exemple de code 2.5 : /etc/postfix/transport |
mondomaine.tld smtp:mail.mondomaine.tld
|
Après avoir édité ce fichier, vous devez lancer la commande postmap.
Postfix ne lit en fait pas directement ce fichier, il faut donc que vous le
convertissiez dans un format convenable, en faisant postmap
/etc/postfix/transport. Cela crée le fichier
/etc/postfix/transport.db. Il n'y a pas besoin de recharger postfix
dans la mesure où il prendra automatiquement en charge les modifications.
Note :
Si le prochain serveur de courrier contacté n'écoute pas le port 25, standard
pour le protocole SMTP, vous pouvez préciser le numéro du port, par
exemple smtp:mail.mondomaine.tld:25000.
|
Si vos premières tentatives d'envoi de courrier donnent lieu à des retours de
messages, vous avez probablement fait une erreur de configuration quelque
part. Vous pouvez essayer d'activer provisoirement soft_bounce, le
temps de régler vos problèmes de configuration. Cela empêche postfix d'envoyer
des retours concernant les messages non délivrés en les traitant en tant
qu'erreurs temporaires. Les messages sont conservés dans la file d'attente
jusqu'à ce que soft_bounce soit désactivé ou retiré.
Exemple de code 2.6 : Activation de soft_bounce |
# postconf -e "soft_bounce = yes"
# /etc/init.d/postfix reload
|
Une fois que vous avez trouvé une configuration fonctionnelle, assurez-vous de
désactiver ou de retirer soft_bounce et relancez postfix.
Configurer Amavisd-new
Amavisd-new est utilisé pour gérer tout ce qui concerne le filtrage du courrier
et vous permet de rassembler facilement différentes technologies. À la réception
d'un courrier électronique, il extrait le contenu, le passe à travers
certains filtres personnalisés, utilise des listes noires et blanches,
filtre le courrier grâce à différents anti-virus et, finalement, le passe au
crible de SpamAssassin.
Amavisd-new en lui-même propose un certain nombre de fonctionnalités
supplémentaires :
-
Il identifie les pièces jointes dangereuses et dispose de règles pour
les gérer.
-
Pour chaque utilisateur, chaque domaine et pour l'ensemble du système, il
dispose de règles pour :
- les listes blanches (whitelists) ;
- les listes noires (blacklists) ;
- la gestion de score de spam ;
- la gestion de règles contre les virus et le spam.
Mis à part postfix et freshclam, l'ensemble des applications
sera lancé par l'utilisateur amavis.
Éditez les lignes suivantes dans le fichier
/etc/amavisd.conf :
Exemple de code 2.7 : Éditer /etc/amavisd.conf |
$mydomain = 'exemple.com';
$inet_socket_bind = '127.0.0.1';
$forward_method = 'smtp:127.0.0.1:10025';
$notify_method = $forward_method;
$virus_admin = "alertevirus\@$mondomaine";
$sa_tag_level_deflt = -100;
$sa_tag2_level_deflt = 5;
$sa_kill_level_deflt = $sa_tag2_level_deflt;
$sa_dsn_cutoff_level = 10;
$final_virus_destiny = D_DISCARD; # (par défaut : D_DISCARD)
$final_banned_destiny = D_DISCARD; # (par défaut : D_BOUNCE)
$final_spam_destiny = D_DISCARD; # (par défaut : D_BOUNCE)
|
Note :
Grâce à la ligne $sa_tag2_level_deflt = 5;, vous indiquez un score de
spam pour Spamassassin qui sera de 5. Cela peut être un peu faible. Comme vous
l'aviez peut-être remarqué, la valeur par défaut pour Amavisd-new est de
6.3.
Si vous ne souhaitez voir aucun spam dans votre répertoire de courrier,
choisissez 5, mais si vous ne voulez pas avoir de faux positifs, gardez
la valeur de 6.3.
|
Créer un répertoire de quarantaine pour les mails vérolés, dans la mesure où
nous ne souhaitons pas les délivrer à nos utilisateurs.
Exemple de code 2.8 : Créer le répertoire de quarantaine pour les mails vérolés |
# mkdir /var/amavis/virusmails
# chown amavis:amavis /var/amavis/virusmails
# chmod 750 /var/amavis/virusmails
|
Note :
Amavisd-new propose des politiques plus fines en utilisant les banques de
politiques d'action.
|
Configurer ClamAV
Pour la vérification des virus nous utilisons ClamAV, car il propose de bons
moyens de détection comparables aux offres commerciales. De plus, il est
très rapide et c'est un logiciel libre. Comme nous aimons utiliser les fichiers
de journalisation, vous allez configurer clamd pour utiliser
syslog et utiliser une journalisation verbeuse. Enfin, clamd ne
sera pas lancé en tant que root. Éditez le fichier
/etc/clamd.conf :
Exemple de code 2.9 : Éditer /etc/clamd.conf |
LogSyslog
LogVerbose
LogFacility LOG_MAIL
PidFile /var/run/amavis/clamd.pid
LocalSocket /var/amavis/clamd
StreamMaxLength 10M
User amavis
ScanMail
ScanArchive
|
Note :
De plus, n'oubliez pas d'enlever l'exemple pour que ClamAV puisse fonctionner.
|
ClamAV est fourni avec le démon freshclam, qui permet de mettre à jour
les signatures des nouveaux virus. Au lieu de mettre à jour ces signatures deux
fois par jour, nous effectuerons une mise à jour de la base des signatures de
virus toutes les deux heures.
Exemple de code 2.10 : Éditer /etc/freshclam.conf |
LogSyslog
LogVerbose
DatabaseOwner clamav
Checks 12
DatabaseMirror db.XY.clamav.net
|
Faites lancer clamd et freshclam par les scripts d'initialisation
en modifiant le fichier /etc/conf.d/clamd.
Exemple de code 2.11 : Modifier /etc/conf.d/clamd |
START_CLAMD=yes
FRESHCLAM_OPTS="-d"
|
Pour finir, modifiez le fichier amavisd.conf pour indiquer la bonne
location du socket.
Exemple de code 2.12 : Modifier /etc/amavisd.conf |
['ClamAV-clamd',
\&ask_daemon, ["CONTSCAN {}\n", "/var/amavis/clamd"],
qr/\bOK$/, qr/\bFOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
|
Attention :
NE PAS modifier la variable $unix_socketname sauf si vous savez ce que
vous faites.
|
Configurer Razor de Vipul
Razor2 est un réseau collaboratif et distribué d'identification de spam.
Installez-le grâce à emerge razor et créez les fichiers de configuration
nécessaires sous le compte amavis en utilisant su - amavis, puis
razor-admin -create.
Exemple de code 2.13 : Créer les fichiers de configuration nécessaires |
# emerge razor
# usermod -s /bin/bash amavis
# su - amavis
$ razor-admin -create
$ exit
# usermod -s /bin/false amavis
|
Configurer DCC (Distributed Checksum Clearinghouse)
Tout comme Razor2, DCC est un réseau collaboratif et distribué d'identification
de spam. Son fonctionnement repose sur le nombre de personnes qui reçoivent un
mail donné en identifiant chacun d'eux avec une somme de contrôle.
Exemple de code 2.14 : Installer DCC |
# emerge dcc
|
Configurer Spamassassin
Amavis utilise directement les bibliothèques Perl de Spamassasin, il n'y a donc
pas besoin de lancer le service de spamassassin. Cela génère quelques confusions
dans la configuration, vu que Spamassassin utilise le fichier de configuration
/etc/mail/spamassassin/local.cf, mais le fichier
/etc/amavisd.conf a priorité et remplace certaines de ces
configurations.
Exemple de code 2.15 : Créer le fichier /etc/mail/spamassassin/local.cf |
use_bayes 1
skip_rbl_checks 0
ok_languages fr en
ok_locales en
bayes_path /var/amavis/.spamassassin/bayes
|
Note :
Depuis la version 3.1 de Spamassassin, vous pouvez activer DCC et Razor2 en
décommentant les lignes correspondantes dans le fichier v310.pre.
|
Note :
Vous pouvez chercher de l'inspiration pour votre fichier local.cf
en utilisant le générateur
de configuration de Spamassassin.
|
Note :
Vous pouvez évidemment adapter vos variables ok_languages et
ok_locales à vos besoins.
|
3.
Toute règle a également ses exceptions
Lorsque les premiers courriers arriveront effectivement sur votre passerelle de
courrier, vous découvrirez probablement que la configuration ci-dessus n'est pas
parfaite. Par exemple, certains de vos clients souhaiteront probablement
recevoir des courriers que les autres ne voudront pas. Vous pouvez facilement
mettre en place des listes blanches et noires pour les expéditeurs. Décommentez
la ligne suivante dans le fichier de configuration amavisd.conf.
Exemple de code 3.1 : Modifier amavisd.conf pour attribuer des notes par expéditeurs |
read_hash("/var/amavis/sender_scores_sitewide"),
|
Dans le fichier sender_scores_sitewide, vous pouvez préciser des
adresses complètes ou plus généralement des noms de domaine. Puis, vous leurs
attribuez une note positive ou négative, à ajouter au score de spam.
Exemple de code 3.2 : Exemple de fichier whitelist_sender |
postmaster@exemple.net -3.0
.exemple.net 1.0
|
Note :
Voir /etc/amavisd.conf pour plus d'exemples.
|
Note :
Mettre ces adresses en dehors de amavisd.conf permet une
configuration plus propre et plus sûre.
|
Note :
Vous pouvez également faire la même chose en passant par le fichier de
configuration de Spamassassin /etc/mail/spamassassin/local.cf, mais
je pense que c'est plus propre de le faire dans /etc/amavisd.conf.
|
Note :
Dans un chapitre ultérieur, nous vous montrerons comment implémenter une
politique de listes blanches et noires par utilisateur implémentée à l'aide de
MySQL.
|
En attendant mieux, vous pouvez ajouter les lignes suivantes dans votre
amavisd.conf pour passer outre les vérifications de spam pour les
destinataires postmaster et abuse.
Exemple de code 3.3 : Ne pas filtrer contre le spam pour tous les courrier de postmaster et abuse |
map { $bypass_spam_checks{lc($_)}=1 } (qw(
postmaster@
abuse@
));
|
Important :
Tant qu'on en est à parler de postmaster et abuse, il ne faut
jamais supprimer automatiquement de courriers à destination de ces
adresses. Voir la RFC 2142
Mailbox names for common services, roles and functions (Noms de boîtes de
courrier pour des services communs, rôles et fonctions).
Sinon, votre domaine pourrait finir par être listé dans une des listes du mal
qu'on pourra retrouver sur le site rfc-ignorant.org.
|
4.
Ajouter plus de règles
Si vous souhaitez ajouter quelques-unes des règles proposées par le
SpamAssassin Rules Emporium,
vous pouvez facilement le faire en en ajoutant ou en les mettant à jour grâce à
la fonctionnalité sa-update incluse dans SpamAssassin.
Maintenant, éditez le fichier /etc/rulesdujour/config pour relancer
Amavisd-new au lieu de spamd :
5.
Tester et finaliser
Tester la configuration
Avant de lancer freshclam vous pouvez vérifier manuellement que le
service fonctionne.
Exemple de code 5.1 : Tester freshclam |
# freshclam
ClamAV update process started at Sun May 2 09:13:41 2004
Reading CVD header (main.cvd): OK
Downloading main.cvd [*]
main.cvd updated (version: 22, sigs: 20229, f-level: 1, builder: tkojm)
Reading CVD header (daily.cvd): OK
Downloading daily.cvd [*]
daily.cvd updated (version: 298, sigs: 1141, f-level: 2, builder: diego)
Database updated (21370 signatures) from database.clamav.net (193.1.219.100).
|
Nous venons de mettre à jour les définitions de virus et nous sommes assurés au
passage que freshclam.conf fonctionne correctement.
Testez ensuite freshclam et amavisd en utilisant la CLI (l'interface en ligne de
commandes) avec des courriers de test d'amavisd. Lancez clamd et
amavis avec les commandes suivantes :
Exemple de code 5.2 : Lancer amavisd et clamd et recharger la configuration de postfix |
# /etc/init.d/clamd start
# /etc/init.d/amavisd start
# /etc/init.d/postfix reload
|
Si tout va bien, postfix devrait écouter sur le port 25 pour la réception
de courrier et devrait les réinjecter sur le port 10024. Pour vous en assurer,
jetez un coup d'œil dans vos fichiers de journalisation.
Exemple de code 5.3 : Vérifier les fichiers de journalisation |
# tail -f /var/log/mail.log
|
Note :
Selon votre configuration de journalisation, il se peut que le bon fichier soit
/var/log/messages.
|
Maintenant, si vous n'avez aucun message étrange dans le fichier de
journalisation, il est temps de faire les tests.
Utilisez netcat pour vous connecter manuellement à amavisd sur le
port 10024 et à postfix sur le port 10025.
Note :
Netcat peut être utilisé comme un remplacement amélioré de telnet. Pour
l'installer, vous devez faire emerge netcat.
|
Note :
Pour une raison inconnue, vous ne pouvez pas injecter manuellement un
courrier complet avec netcat dans amavisd. Utilisez telnet à la
place.
|
Exemple de code 5.4 : Vérification manuelle du fonctionnement d'amavisd et de postfix |
# nc localhost 10024
220 [127.0.0.1] ESMTP amavisd-new service ready
nc localhost 10025
220 exemple.com ESMTP Postfix
|
Note :
Si vous souhaitez visualiser l'intégralité des messages de retour avec
amavisd-new, lancez amavisd debug-sa avec le compte utilisateur
amavis et envoyez un courrier. Pour que cela fonctionne, vous devrez
probablement changer le Shell par défaut dans /etc/passwd.
|
Ajoutez amavisd et clamd aux scripts à lancer par défaut au
démarrage.
Exemple de code 5.5 : Amavisd et clamd seront lancés par défaut au démarrage |
# rc-update add clamd default
# rc-update add amavisd default
|
Note :
Nous ne mettons pas spamd dans les scripts de démarrage, dans la mesure
où amavisd utilise directement les bibliothèques en Perl de Spamassassin.
|
Note :
Vous verrez probablement des lignes comme Net::Server: Couldn't POSIX::setuid
to ... [] dans vos fichiers de journalisation. D'après le
guide pour chrooter
amavis, si l'UID du processus est 0 (root), le programme
terminera. Du coup, vous pouvez considérer ce message comme simplement
informatif. C'est dû au fait que POSIX::setuid() retourne une chaîne de
caractère 0 but true.
|
Important :
Si vous avez permis la connexion de l'utilisateur amavis, n'oubliez pas de
remettre son shell de connexion dans /etc/passwd à
/bin/false pour le désactiver à nouveau.
|
6.
Auto-apprentissage et mise en touche de courriers
Créer un utilisateur spamtrap
Nous allons créer un compte spamtrap ainsi qu'un certain nombre de répertoires
utiles par la suite.
Exemple de code 6.1 : Création du compte spamtrap |
# useradd -m spamtrap
# maildirmake /home/spamtrap/.maildir
# chown -R spamtrap:mailusers /home/spamtrap/.maildir
# passwd spamtrap
|
Si vous voulez vérifier manuellement certains des courriers pour vous assurer
qu'il n'y a pas de faux positifs, vous pouvez utiliser la commande
procmail pour mettre à l'écart le spam trouvé dans différents répertoires
de courrier.
Création du fichier .procmailrc
Exemple de code 6.2 : Création de /home/spamtrap/.procmailrc |
MAILDIR=$HOME/.maildir
SPAM_FOLDER=$MAILDIR/.spam-found/
LIKELY_SPAM_FOLDER=$MAILDIR/.likely-spam-found/
:0:
* ^X-Spam-Status: Yes
* ^X-Spam-Level: \*\*\*\*\*\*\*
$SPAM_FOLDER
:0:
* ^X-Spam-Status: Yes
$LIKELY_SPAM_FOLDER
:0
*
./
|
Attention :
Si vous vous attendez à recevoir sur votre serveur de courrier une grande
quantité de courrier, il vaut mieux ne pas utiliser le dépôt pour le courrier
ayant un score entre 5 et 7. À la place, vous pouvez utiliser une valeur
suffisamment grande pour la variable $sa_tag2_level_deflt pour éviter les
faux positifs et vous les filtrerez alors directement dans le répertoire
$SPAM_FOLDER.
|
Note :
Si vous n'avez pas encore installé procmail, vous devez le faire avec
emerge procmail.
|
Maintenant, assurez-vous que Postfix utilise procmail pour délivrer le
courrier.
Exemple de code 6.3 : Modification de /etc/postfix/main.cf |
mailbox_command = /usr/bin/procmail -a "DOMAIN"
|
Créer les répertoires de courrier
Nous allons désormais créer des répertoires partagés pour le spam et le ham
(courrier indésirable et faux positifs).
Exemple de code 6.4 : Création des répertoires de courrier nécessaires |
# maildirmake /var/amavis/.maildir
# maildirmake -S /var/amavis/.maildir/Bayes
# maildirmake -s write -f spam /var/amavis/.maildir/Bayes
# maildirmake -s write -f ham /var/amavis/.maildir/Bayes
# maildirmake -s write -f redeliver /var/amavis/.maildir/Bayes
|
Amavisd-new doit pouvoir lire ces fichiers ainsi que tous les fichiers de
courrier des utilisateurs. Ainsi, nous allons ajouter tous les utilisateurs
concernés ainsi que amavis au groupe mailusers.
Exemple de code 6.5 : Configuration des permissions d'accès |
# groupadd mailusers
# usermod -G mailusers spamtrap
# chown -R amavis:mailusers /var/amavis/.maildir/
# chown amavis:mailusers /var/amavis/
# chmod -R 1733 /var/amavis/.maildir/Bayes/
# chmod g+rx /var/amavis/.maildir/
# chmod g+rx /var/amavis/.maildir/Bayes/
|
Attention :
Ces lignes donnent aux membres du groupe mailusers un accès au courrier
d'amavis.
|
Ici, vous avez donné aux répertoires de spam et ham des droits d'écriture, mais
pas de lecture. De cette manière, les utilisateurs peuvent soumettre avec
confiance leurs faux positifs sans que les autres utilisateurs puissent les
lire.
Enfin, exécutez la commande suivante en tant qu'utilisateur
spamtrap :
Exemple de code 6.6 : Ajouter les répertoires partagés aux répertoires courrier des utilisateurs |
$ maildirmake --add Bayes=/var/amavis/.maildir/Bayes $HOME/.maildir
|
Note :
Nous devons donner des droits de lecture pour le groupe sur le répertoire
Bayes avant que le client mail puisse lire les sous-répertoires
utilisés par IMAP.
|
Ajouter des tâches périodiques
Exécutez maintenant crontab -u amavis -e pour éditer la configuration
crontab de l'utilisateur amavis pour permettre un apprentissage automatique
des filtres bayésiens toutes les heures.
Exemple de code 6.7 : crontab d'amavis |
0 * * * * /usr/bin/sa-learn --spam /var/amavis/.maildir/Bayes/.spam/{cur,new} \
> /dev/null 2>&1
0 * * * * /usr/bin/sa-learn --ham /var/amavis/.maildir/Bayes/.ham/{cur,new} > \
/dev/null 2>&1
|
Note :
Amavis doit être membre du groupe cron pour pouvoir exécuter
les tâches périodiques.
|
Note :
Il semble que les répertoires partagés de courrier obligeront à sa-learn
d'examiner tous les messages deux fois. Cela ne devrait pas être un problème.
En sortie, nous constaterons que le maximum de messages appris ainsi sera de la
moitié de ceux réellement examinés.
|
Mofification de amavisd.conf
Maintenant nous allons modifier amavis pour rediriger les courriers de spam
vers le compte spamtrap en gardant les en-têtes de spam.
Exemple de code 6.8 : Modification de /etc/amavisd.conf |
$spam_quarantine_to = "spamtrap\@$myhostname";
|
Envoyer de nouveau les faux positifs
Si, comme nous l'avons fait jusque là, vous rejetez le courrier ayant un score
de spam très bas, vous aurez très probablement quelques faux positifs. Ils sont
filtrés dans le répertoire likely-spam. Ils sont manuellement
vérifiés et tous les faux positifs sont déplacés dans le répertoire
redeliver. À partir de là, une première étape consiste à exécuter
sa-learn --ham, puis la soumission du courrier, en gardant tous les
en-têtes intacts, est effectuée en utilisant une version corrigée de
smtpclient par
Ralf S. Engelschall.
La version originale 1.0.0 de smtpclient est déjà dans Portage, mais pour
préserver tous les en-têtes, nous devons utiliser une version modifiée. Voici
comment installer cette version :
Exemple de code 6.9 : Installer une version modifiée de smtpclient |
# wget http://home.coming.dk/files/smtpclient.tar.gz
# tar xzf smtpclient.tar.gz
# echo "mail-client/smtpclient ~x86" >> /etc/portage/package.keywords
# echo "mail-client/smtpclient fullheaders" >> /etc/portage/package.use
# emerge smtpclient
|
Vérifiez le courrier dans le répertoire redeliver toutes les
minutes en utilisant cron.
Exemple de code 6.10 : crontab d'amavis |
* * * * * find /var/amavis/.maildir/Bayes/.redeliver/cur/ -type f -name \
"[0-9]*" -exec cp {} /var/amavis/.maildir/Bayes/.ham/cur/ \; \
&& find /var/amavis/.maildir/Bayes/.redeliver/cur/ -type f \
-name "[0-9]*" -exec /usr/local/bin/redeliver.pl {} \;
|
Maintenant, tout ce que vous avez à faire est de copier le fichier
redeliver.pl dans /usr/local/bin/.
Télechargez-le ou
utilisez la version ci-dessous.
Exemple de code 6.11 : redeliver.pl |
use strict;
if(!($#ARGV == 0)) {
die "Usage:\n$0 maildir_mail\n";
}
my $mail = $ARGV[0];
my $to = "";
my $from = "";
sub prunefile ( $ );
open (MAIL, $mail) or die "Could not open $mail: $?\n";
while(<MAIL>) {
if(($to eq "") || ($from eq "")) {
chop;
(my $key, my $value) = split (/:/);
if($key eq "X-Envelope-To") {
$to = $value;
$to =~ s/[\<\>,]//g; # Supprime "<", ">" and ","
$to =~ s/^\s+|\s+$//g; # Supprime les espaces avant et après
}
if($key eq "X-Envelope-From") {
$from = $value;
$from =~ s/[\<\>,]//g;
$from =~ s/^\s+|\s+$//g;
if($from eq "") {
$from = "postmaster";
}
}
}
}
if($to eq "") {
prunefile($ARGV[0]); # Supprimez-le simplement s'il est vide
} else {
my $redelivercmd = "cat $ARGV[0] | smtpclient -F -S 127.0.0.1 -P 10025 -f $from $to";
unless (system($redelivercmd) == 0 ) {
die "Unable to redeliver: $?";
}
prunefile($ARGV[0]); # Clean up
}
sub prunefile ( $ ) {
my ($file) = @_;
unless (unlink $file) {
die "Unable to remove mail: $?";
}
}
|
Nettoyage
Vous ne voulez sans doute pas garder pour toujours le courrier dans les
répertoires, donc utilisez tmpwatch pour faire un nettoyage
régulier. Installez-le avec emerge tmpwatch. Seul l'utilisateur
root est capable d'exécuter tmpwatch donc vous devez éditer la
crontab root.
Exemple de code 6.12 : Modifier la crontab de root |
15 0 * * * /usr/sbin/tmpwatch -c -f -d --quiet 168 /var/amavis/virusmails/
15 0 * * * /usr/sbin/tmpwatch -c -f -d --quiet 168 /var/amavis/.maildir/Bayes/
|
7.
Listes grises
Introduction
Les listes grises sont l'une des armes les plus récentes pour la lutte contre le
spam. Comme leur nom l'indique, c'est un mélange des listes blanches et des
listes noires. À chaque fois qu'un serveur de courriers inconnu essaye d'envoyer
du courrier, le courrier est rejeté avec un message essaye plus tard.
Cela signifie que le courrier sera retardé, mais aussi que les robots de spam
qui n'implémentent pas le protocole RFC refuseront de récupérer le spam et ne
le renverront pas. Avec le temps, les robots de spam seront probablement
modifiés pour tenir compte de cela, mais cela permet de gagner du temps pour
développer de nouvelles technologies pour identifier le spam.
Note :
Si votre fournisseur d'accès à Internet bloque le trafic entrant sur le port 25
et si tout le courrier vous est relayé à travers leur propre serveur de
courrier, les listes grises ne fonctionneront pas.
|
Postfix 2.1 est fourni avec un simple script Perl implémentant un tel serveur
qui gère les listes grises. Cependant, il donne des résultats imprévisibles
quand la partition contenant la base de données de listes grises manque d'espace
libre. Il existe une version améliorée qui ne souffre pas de ce problème. Nous
allons tout d'abord vous présenter comment installer le support des listes
grises fourni avec Postfix, puis nous vous montrerons comment configurer la
version plus robuste qui remplacera ce script.
Note :
D'autres serveurs de listes grises pour Postfix existent. Voyez par exemple
Gld qui est dans Portage ou
SQLgrey. Certaines utilisent
des bases de données, le « listage blanc » automatique et d'autres
fonctionnalités.
|
Listes grises simples
Note :
Si vous préférez utiliser les listes grises améliorées de postgrey, vous pouvez
ignorer la section suivante.
|
Nous avons besoin du fichier greylist.pl, mais malheureusement
l'ebuild ne l'installe pas par défault.
Exemple de code 7.1 : Récupérer le fichier greylist.pl |
# cp /usr/portage/distfiles/postfix-votre-version.tar.gz /root/
# tar xzf postfix-votre-version.tar.gz
# cp postfix-2.1.0/examples/smtpd-policy/greylist.pl /usr/bin/
|
Maintenant que nous disposons du fichier à l'endroit souhaité, nous devons créer
un répertoire pour placer la base de données de listes grises :
Exemple de code 7.2 : Création du répertoire pour la base de données de listes grises |
# mkdir /var/mta
# chown nobody /var/mta
|
Attention :
Ne créez pas le répertoire de base de données de listes grises sur une partition
qui risque de manquer d'espace disque. Si Postfix peut gérer des situations où
il manque de l'espace disque pour les files d'attente de courrier et les boîtes
de courriers des utilisateurs, ce n'est pas le cas pour la base de données des
listes grises. Si le fichier est corrompu, vous ne pourrez plus recevoir du tout
de courrier tant que vous n'aurez pas supprimé le fichier en question à la
main.
|
Configurer les listes grises
Maintenant que tout est prêt, tout ce qu'il nous reste à faire est d'ajouter
cette fonctionnalité à la configuration de Postfix. Tout d'abord, ajoutons les
informations nécessaires au fichier master.cf :
Exemple de code 7.3 : Modification de master.cf pour l'utilisation des listes grises |
policy-greylist unix - n n - - spawn
user=nobody argv=/usr/bin/perl /usr/bin/greylist.pl
|
Le démon spawn de postfix tue normalement ses propres processus fils après 1000
secondes, mais ce temps est trop court pour le processus de listes grises, donc
nous allons devoir augmenter la limite de temps dans main.cf :
Exemple de code 7.4 : Modification de main.cf pour l'utilisation de listes grises |
policy-greylist_time_limit = 3600
check_sender_access hash:/etc/postfix/sender_access
restriction_classes = greylist
greylist = check_policy_service unix:private/policy-greylist
|
Attention :
Assurez-vous de bien définir check_sender_access APRÈS
reject_unauth_destination car sinon votre système pourrait devenir un
serveur relai de courrier ouvert.
|
Note :
La base de données de listes grises se pollue rapidement d'adresses parasites.
Il est bon de protéger les vérifications de la liste grise en ajoutant d'autres
restrictions qui rejettent des expéditeurs et/ou destinataires inconnus.
|
Vous ne voudrez sans doute pas utiliser des listes grises pour tous les domaines
mais seulement ceux qui subissent fréquemment les assauts des spammeurs. Après
tout, les listes grises retardent la réception du courrier. Une liste
de domaines MAIL FROM fréquemment forgés pour le spam est disponible.
Ajoutez les domaines sur lesquels vous recevez beaucoup de spam à votre fichier
/etc/postfix/sender_access :
Exemple de code 7.5 : Format du fichier sender_access |
aol.com greylist
hotmail.com greylist
bigfoot.com greylist
|
Si vous souhaitez une liste plus complète :
Exemple de code 7.6 : Ajouter tous les domaines à sender_access |
# wget http://www.monkeys.com/anti-spam/filtering/sender-domain-validate.in
# cat sender-domain-validate.in | sort | awk {'print $1 "\t\t greylist"'} > /etc/postfix/sender_access
|
Maintenant, nous n'avons plus qu'à initialiser la base de données
sender_access :
Exemple de code 7.7 : Initialiser sender_access |
# postmap /etc/postfix/sender_access
|
La configuration du système de listes grises simples est terminée.
Attention :
J'ai testé cette configuration sur une machine gérant des milliers de courriers
par jour et le résultat a été un désastre complet. Après quatre jours, la
machine était surchargée de centaines de vieux processus greylist.pl.
|
Configurer une amélioration des listes grises avec postgrey
Vous pouvez installer le serveur de politiques de listes grises améliorées en
une seule commande emerge:
Exemple de code 7.8 : Installer postgrey |
# emerge postgrey
|
Après avoir installé postgrey, vous devez éditer le fichier
main.cf. Les modifications sont presque identiques à celles
utilisées précédemment.
Exemple de code 7.9 : Modification de main.cf pour utiliser des listes grises |
check_sender_access hash:/etc/postfix/sender_access
smtpd_restriction_classes = greylist
greylist = check_policy_service inet:127.0.0.1:10030
|
Note :
La variable Postfix SMTPD_POLICY_README utilise uniquement
restriction_classes mais cela semble ne pas fonctionner.
|
Note :
Si vous souhaitez mettre en liste grise absolument tous les domaines, ajoutez à
la place : check_policy_service inet:127.0.0.1:10030.
|
Pour finir, lancez le serveur et ajoutez-le au runlevel adéquat.
Exemple de code 7.10 : Démarrage de postgrey |
# /etc/init.d/postgrey start
# rc-update add postgrey default
|
Note :
Certaines personnes aiment récupérer rapidement leur courrier et dans ce cas les
listes grises sont inutiles. Cela dit, si vous utilisez un serveur courrier de
sauvegarde vous pouvez facilement mettre en place des listes grises dessus. Mon
expérience limitée m'a appris que cela peut supprimer jusqu'à un tiers du spam
reçu.
|
8.
SPF (Sender Policy Framework, ou Système de contrôle des expéditeurs)
Introduction
SPF permet aux propriétaires de noms de domaines d'indiquer dans leurs registres
DNS quelles adresses IP ont le droit d'envoyer des courriers provenant de leurs
domaines. Cela empêche les spammeurs de manipuler le Return-Path.
Note :
Si votre fournisseur d'accès à Internet bloque le trafic entrant sur le port
25 et vous relaye tout le courrier depuis leur propre serveur de courrier, le
SPF ne fonctionnera pas.
|
Tout d'abord, les propriétaires de domaines doivent créer un enregistrement DNS
spécial nommé TXT. Ensuite, le MTA supportant le SPF pourra le lire et,
si le courrier provient d'un serveur qui n'est pas décrit dans les
enregistrements SPF, le courrier pourra être rejeté. Un exemple d'entrée SPF
ressemble à ceci :
Exemple de code 8.1 : Exemple d'enregistrement SPF |
exemple.com. IN TXT "v=spf1 a mx ptr -all"
|
L'option -all signifie qu'il faut rejeter tout courrier par défaut et
autoriser le courrier provenant des enregistrements DNS A (a),
MX (mx) et PTR (ptr). Pour plus d'information,
consultez le chapitre des ressources à la fin du guide.
Note :
Si vous relayez le courrier sortant à votre fournisseur d'accès Internet, il
faudra que vous ajoutiez : include:votrefai.com.
|
Spamassassin 3.0 supporte le SPF, mais l'option n'est pas activée par défaut, et
le nouveau démon de Postfix gérant les politiques supporte le SPF, donc nous
installerons le support SPF proposé par Postfix.
Note :
Si vous souhaitez utiliser le SPF avec Spamassassin, il vous suffit d'installer
emerge dev-perl/Mail-SPF-Query et de relancer Amavisd-new.
|
Préparations
Nous allons tout d'abord devoir installer Postfix 2.1 comme vu précédemment.
Une fois que vous avez téléchargé les sources, récupérez le fichier
spf.pl ainsi :
Exemple de code 8.2 : Installer spf.pl |
# cp postfix-<version>/examples/smtpd-policy/spf.pl /usr/local/bin/
|
Note :
Le script spf.pl fourni avec Postfix est assez bogué. Il vous
faudra trouver et décommenter la ligne suivante : push
@HANDLERS, "sender_permitted_from"; use Mail::SPF::Query;. Ensuite, à la
ligne 199 environ, remplacez comemnt par comment. Vous pouvez
également télécharger la
version de
développement.
|
Ce script Perl nécessite également un certain nombre de bibliothèques qui ne
sont pas fournies dans Portage, mais leur installation reste assez simple :
Exemple de code 8.3 : Installer les bibliothèques Perl nécessaires |
# emerge Mail-SPF-Query Net-CIDR-Lite Sys-Hostname-Long
|
Maintenant que tout est en place, il ne nous reste plus qu'à configurer Postfix
pour qu'il utilise cette nouvelle politique.
Exemple de code 8.4 : Modifier master.cf pour utiliser le SPF |
policy-spf unix - n n - - spawn
user=nobody argv=/usr/bin/perl /usr/local/bin/spf.pl
|
Ajoutez maintenant la vérification SPF dans main.cf. Un SPF bien
configuré ne devrait pas poser de problème donc nous pouvons vérifier le SPF
pour tous les domaines :
Exemple de code 8.5 : Modifier main.cf pour utiliser le SPF |
check_policy_service unix:private/policy-spf
|
Note :
Si vous rencontrez des problèmes avec le SPF, par exemple lors de l'utilisation
de fetchmail, il vous faudra probablement n'activer le SPF que pour
certains domaines.
|
9.
Configurer amavisd-new pour utiliser MySQL
Configurer MySQL
Note :
Cette configuration n'a pas été testée avec des versions supérieures à la 2.2.
Un retour d'expérience est le bienvenu :)
|
Pour des domaines importants, les valeurs par défaut que vous définissez dans
amavisd.conf peuvent ne pas convenir à tous les utilisateurs. Si
vous configurez amavisd-new avec le support de MySQL, vous pourrez avoir des
configurations personnalisées pour les utilisateurs ou pour des groupes
d'utilisateurs.
Exemple de code 9.1 : Création de la base de données MySQL et attribution des droits |
# mysql -u root -p mysql
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 78 to server version: 4.0.18-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database maildb;
mysql> GRANT INSERT,UPDATE,DELETE,SELECT ON maildb.* TO 'mail'@'localhost' IDENTIFIED BY 'mot_de_passe_archi_secret';
mysql> use maildb;
|
Maintenant que la base de données a été créée, nous devons y ajouter les tables
nécessaires. Vous pouvez copier/coller les lignes suivantes dans l'invite de
commandes de mysql :
Exemple de code 9.2 : tables MySQL |
CREATE TABLE users (
id int unsigned NOT NULL auto_increment,
priority int NOT NULL DEFAULT '7', -- 0 est une priorité faible
policy_id int unsigned NOT NULL DEFAULT '1',
email varchar(255) NOT NULL,
fullname varchar(255) DEFAULT NULL, -- non utilisé par amavisd-new
local char(1), -- Y/N (champ optionnel, voir la note plus bas)
PRIMARY KEY (id),
KEY email (email)
);
CREATE UNIQUE INDEX users_idx_email ON users(email);
CREATE TABLE mailaddr (
id int unsigned NOT NULL auto_increment,
priority int NOT NULL DEFAULT '7', -- 0 est une priorité faible
email varchar(255) NOT NULL,
PRIMARY KEY (id),
KEY email (email)
);
CREATE UNIQUE INDEX mailaddr_idx_email ON mailaddr(email);
(expéditeurs sur listes blanches ou noires)
CREATE TABLE wblist (
rid int unsigned NOT NULL, -- destinataire : users.id
sid int unsigned NOT NULL, -- expéditeur : mailaddr.id
wb char(1) NOT NULL, -- W/Y (blanche), B/N (noir), espace=neutre
PRIMARY KEY (rid,sid)
);
CREATE TABLE policy (
id int unsigned NOT NULL auto_increment,
policy_name varchar(32), -- non utilisé par amavisd-new
virus_lover char(1), -- Y/N (Oui/Non)
spam_lover char(1), -- Y/N (champ optionnel)
banned_files_lover char(1), -- Y/N (champ optionnel)
bad_header_lover char(1), -- Y/N (champ optionnel)
bypass_virus_checks char(1), -- Y/N
bypass_spam_checks char(1), -- Y/N
bypass_banned_checks char(1), -- Y/N (champ optionnel)
bypass_header_checks char(1), -- Y/N (champ optionnel)
spam_modifies_subj char(1), -- Y/N (champ optionnel)
spam_quarantine_to varchar(64) DEFAULT NULL, -- (champ optionnel)
spam_tag_level float, -- un score supérieur ajoute les en-têtes de spam
spam_tag2_level float DEFAULT NULL, -- un score supérieur ajoute les champs
-- d'en-tête d'information 'déclaré comme spam'
spam_kill_level float, -- un score supérieur active des actions d'évasion
-- comme rejet/oubli, quarantaine, ...
-- (lié à la configuration de final_spam_destiny)
PRIMARY KEY (id)
);
|
Note :
Si vous rencontrez des problèmes avec la copie de ces lignes, copiez-les
ailleurs puis supprimez les caractères inutiles.
|
Note :
Les vérifications pour essayer d'identifier une adresse de courrier sont
effectuées avec les adresses pures (rfc2821-unquoted and unbracketed) comme
clef, c'est-à-dire : Jean « Pouet » Paul@exemple.com.
|
Note :
Les vérifications sont effectuées dans l'ordre suivant : SQL,
LDAP, hash, ACL, expressions rationnelles et
constantes. Le premier à retourner une réponse définitive (autre que
undef/NULL) arrête le processus de recherche.
|
Si vous souhaitez utiliser les listes blanches et noires, vous devez ajouter
l'expéditeur et le destinataire dans mailadr. Après quoi, vous créerez
une relation entre les deux adresses dans la table wblist et indiquerez
s'il s'agit de liste blanche (W) ou de liste noire (B).
Maintenant que nous avons créé les tables, nous allons ajouter un utilisateur
de test et une politique de test :
Exemple de code 9.3 : Création d'un utilisateur et une politique de test |
INSERT INTO users
SET
id =1,
priority =9,
policy_id =1,
email ="johndoe@exemple.com",
fullname ="John Doe",
local ="Y";
INSERT INTO policy
SET
id =1,
policy_name ="Politique de test 1",
virus_lover ="N",
spam_lover ="N",
banned_files_lover ="N",
bad_header_lover ="N",
bypass_virus_checks ="N",
bypass_spam_checks ="N",
bypass_banned_checks ="N",
bypass_header_checks ="N",
spam_modifies_subj ="N",
spam_quarantine_to =NULL,
spam_tag_level =-50.0,
spam_tag2_level =7.0,
spam_kill_level =10.0;
|
Note :
Copiez ces lignes ailleurs et ajustez-les pour vous conformer à votre propre
environnement avant de les ajouter à votre base.
|
Note :
local devrait être initialisé à Y sinon le courrier ne sera pas
vérifié pour le spam.
|
Ces lignes ajoutent un utilisateur de test et une politique de test. Ajustez
ces exemples pour qu'ils s'adaptent à vos besoins. Vous pouvez trouver plus
d'information sur la configuration dans le fichier amavisd.conf.
Configurer amavisd pour utiliser MySQL
Maintenant que MySQL est prêt, nous allons demander à amavis de l'utiliser.
Exemple de code 9.4 : Modification de amavisd.conf |
@lookup_sql_dsn =
( ['DBI:mysql:maildb:host1', 'mail', 'mot_de_passe_secret'] );
$sql_select_policy = 'SELECT *,users.id FROM users,policy'.
' WHERE (users.policy_id=policy.id) AND (users.email IN (%k))'.
' ORDER BY users.priority DESC';
$sql_select_white_black_list = 'SELECT wb FROM wblist,mailaddr'.
' WHERE (wblist.rid=?) AND (wblist.sid=mailaddr.id)'.
' AND (mailaddr.email IN (%k))'.
' ORDER BY mailaddr.priority DESC';
|
10.
Configurer Spamassassin pour utiliser MySQL
Depuis la version 3.0, Spamassassin permet de sauvegarder les données
bayésiennes et AWL dans une base de données MySQL. Nous utilisons MySQL car ses
performances sont supérieures aux autres pour ce genre de données. De plus, la
gestion du système est plus facile si MySQL est utilisé pour stocker les deux
types de données à la fois. Nous allons présenter comment le configurer
simplement.
Tout d'abord, créez le nouvel utilisateur MySQL, puis créez les tables
nécessaires.
Exemple de code 10.1 : Création d'un utilisateur et d'une base de données MySQL |
# mysql -u root -p mysql
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 78 to server version: 4.0.18-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database nombdd;
mysql> GRANT INSERT,UPDATE,DELETE,SELECT ON nombdd.* TO 'dbuser'@'localhost' IDENTIFIED BY 'un_nouveau_mot_de_passe_super_secret';
mysql> use nombdd;
|
Maintenant que la base a été créée, nous allons créer les tables nécessaires.
Vous pouvez copier/coller les lignes suivantes dans votre invite de commande
mysql :
Exemple de code 10.2 : Structure des tables MySQL |
CREATE TABLE bayes_expire (
id int(11) NOT NULL default '0',
runtime int(11) NOT NULL default '0',
KEY bayes_expire_idx1 (id)
) TYPE=MyISAM;
CREATE TABLE bayes_global_vars (
variable varchar(30) NOT NULL default '',
value varchar(200) NOT NULL default '',
PRIMARY KEY (variable)
) TYPE=MyISAM;
INSERT INTO bayes_global_vars VALUES ('VERSION','3');
CREATE TABLE bayes_seen (
id int(11) NOT NULL default '0',
msgid varchar(200) binary NOT NULL default '',
flag char(1) NOT NULL default '',
PRIMARY KEY (id,msgid)
) TYPE=MyISAM;
CREATE TABLE bayes_token (
id int(11) NOT NULL default '0',
token char(5) NOT NULL default '',
spam_count int(11) NOT NULL default '0',
ham_count int(11) NOT NULL default '0',
atime int(11) NOT NULL default '0',
PRIMARY KEY (id, token),
INDEX (id, atime)
) TYPE=MyISAM;
CREATE TABLE bayes_vars (
id int(11) NOT NULL AUTO_INCREMENT,
username varchar(200) NOT NULL default '',
spam_count int(11) NOT NULL default '0',
ham_count int(11) NOT NULL default '0',
token_count int(11) NOT NULL default '0',
last_expire int(11) NOT NULL default '0',
last_atime_delta int(11) NOT NULL default '0',
last_expire_reduce int(11) NOT NULL default '0',
oldest_token_age int(11) NOT NULL default '2147483647',
newest_token_age int(11) NOT NULL default '0',
PRIMARY KEY (id),
UNIQUE bayes_vars_idx1 (username)
) TYPE=MyISAM;
CREATE TABLE awl (
username varchar(100) NOT NULL default '',
email varchar(200) NOT NULL default '',
ip varchar(10) NOT NULL default '',
count int(11) default '0',
totscore float default '0',
PRIMARY KEY (username,email,ip)
) TYPE=MyISAM;
|
Important :
La ligne INSERT est nécessaire. Sans elle, Spamassassin ne fonctionnera
pas.
|
Note :
Vous trouverez également ces lignes dans l'archive source, dans les fichiers
awl_mysql.sql et bayes_mysql.sql.
|
Configurer Spamassassin pour utiliser l'interface MySQL
Si vous avez une ancienne base de données bayésienne dans la base de données
DBM et que vous souhaitez la garder, suivez les instructions suivantes :
Exemple de code 10.3 : Convertir une base bayésienne depuis une base de données DBM |
# su - amavis
$ sa-learn --sync
$ sa-learn --backup > sauvegarde.txt
$ sa-learn --restore sauvegarde.txt
|
Note :
Notez que la dernière étape ne doit être effectuée qu'une fois que la base
de données MySQL et que le fichier secrets.cf ont été mis à jour.
|
Donnons maintenant à Spamassassin les informations nécessaires :
Exemple de code 10.4 : Modification de /etc/mail/spamassassin/secrets.cf |
bayes_store_module Mail::SpamAssassin::BayesStore::SQL
bayes_sql_dsn DBI:mysql:sa_bayes:localhost:3306
bayes_sql_username nombdd
bayes_sql_password un_nouveau_mot_de_passe_super_secret
auto_whitelist_factory Mail::SpamAssassin::SQLBasedAddrList
user_awl_dsn DBI:mysql:sa_bayes:localhost:3306
user_awl_sql_username nombdd
user_awl_sql_password un_nouveau_mot_de_passe_super_secret
|
Ensuite, renforcez la sécurité du fichier :
Exemple de code 10.5 : Changer les permissions d'accès au fichier |
# chmod 400 /etc/mail/spamassassin/secrets.cf
|
Note :
Pour créer un mot de passe correct, utilisez emerge app-admin/makepasswd
puis makepasswd -chars=8.
|
Tout ce qu'il reste à faire désormais est de lancer/etc/init.d/amavisd
restart.
11.
Problèmes rencontrés
Amavisd-new
Pour déboguer amavisd-new, commencez par l'arrêter avec /etc/init.d/amavisd
stop, puis lancez le manuellement avec amavisd debug, puis cherchez
les anomalies dans les retours du programme.
Spamassassin
Pour déboguer Spamassassin, vous pouvez filtrer un courrier directement avec
spamassassin -D < courrier. Pour vous assurer que ses en-têtes restent
intacts, vous pouvez le déplacer depuis une autre machine avec IMAP.
Note :
Si vous devez faire du débogage, vous devez permettre que l'utilisateur
amavis puisse se connecter en changeant le shell de connexion dans
/etc/passwd pour mettre /bin/bash.
|
Si vous le souhaitez, vous pouvez obtenir les mêmes informations, et même plus,
en utilisant la commande amavisd debug-sa.
Obtenir de l'aide
Si vous avez besoin d'aide, vous pouvez utiliser la liste de diffusion
amavis-user. Avant d'y envoyer une question, essayez de chercher une solution
dans les archives
de la liste de diffusion amavis-user. Si vous ne trouvez pas de réponse
à votre question, vous pouvez vous inscrire à la
liste de
diffusion amavis-user.
Si votre question est spécifique à SpamAssassin, DCC, Razor ou
Postfix, référez-vous à leurs pages web respectives, indiquées plus bas.
12.
Ressources
Pour plus d'informations
Ressources générales
Autres guides
Ce document est protégé par la licence Creative
Commons : Paternité - Partage des Conditions Initiales à
l'Identique 2.5.
|
|