Dernière mise à jour : 25/03/2006
Cet article a pour but de vous initier à un contrôle rapide de votre mail sous Linux. Il nécessite quelques connaissances dans le domaine de la configuration de serveurs web. Je ne ferais donc que survoler les étapes de configuration avec les choses importantes à changer. J'ai réalisé cette configuration sur Gentoo Linux 1.4 et Debian mais c'est également applicable sur tout autre système Linux. Nous allons donc installer postfix, maildrop, spamassassin et fetchmail. J'ai rajouté dans la configuration postfix (première partie) un système anti-spam par interrogation de DNS, c'est relativement efficace, attention néanmoins à ce que vous faîtes. Enfin, postfix comporte deux lignes de configuration pour gérer le contenu et les en-têtes des messages. Après avoir ajouté une section sur les antivirus, voici une mise à jour pour gérer son mail sans postfix mais avec maildrop directement. J'ai écris un article sur l'installation d'un serveur de mail, consultez cet article en premier si vous manquez de notions.
Installez en premier postfix (pour ceux ne voulant pas installer postfix mais gérer leurs mails directement par maildrop, rendez-vous à l'installation de fetchmail directement), je trouve qu'il est toujours utile d'avoir un postfix installé sur une machine, Postfix est un Agent de Transport de Mail (MTA en Anglais). Voici la configuration si vous possédez un domaine que vous gérez vous même. Editez alors : /etc/postfix/main.cf :
-
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
program_directory = /usr/lib/postfix
smtpd_banner = $myhostname ESMTP
setgid_group = postdrop
biff = no
append_dot_mydomain = yes
append_at_myorigin = yes
myhostname = mamachine.mondomaine.org
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydomain = mondomaine.org
mydestination = /etc/postfix/local-domains
relayhost =
mynetworks = 127.0.0.0/8, 192.168.0.0/24 # Précisez ici les machines internes autorisées à envoyer des mails
mailbox_command =
mailbox_size_limit = 0
recipient_delimiter = +
header_checks = regexp:/etc/postfix/header_checks.cf
body_checks = regexp:/etc/postfix/body_checks.cf
mailbox_command = maildrop
relay_domains = mondomaine.org
smtpd_client_restrictions = permit_mynetworks, reject_maps_rbl sbl-xbl.spamhaus.org
smtpd_etrn_restrictions = permit_mynetworks, reject
smtpd_helo_required = yes
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
virtual_maps = hash:/etc/postfix/virtual
Une petite explication rapide sur la ligne smtpd_clients_restrictions s'impose. Vous notez ici la présence d'une adresse sbl-xbl.spamhaus.org. Il s'avère que SpamHaus s'avère comme le meilleur RBL de la nouvelle année (j'utilisais CBL auparavant). SpamHaus utilise CBL plus d'autres règles pour interdire à des sites openrelay de se connecter à votre serveur mail. Enfin, notez que ceux utilisant Postfix 2 doivent changer reject_maps_rbl par reject_rbl_client dans la syntaxe. Vous aurez sans doute noté les deux lignes body_checks et header_checks. Elle vous permettent de filtrer le type de messages arrivant sur votre serveur postfix. Ainsi créez un fichier /etc/postfix/header_checks.cf et copiez ceci :
-
/^Subject: ILOVEYOU/ REJECT
/^From: .*security@microsoft.com/ REJECT
/^Subject: .*viagra.*$/ REJECT Go away evil spam
Ceci ne représente bien sûr qu'une partie des règles possibles pour filtrer les spams et autres virus. Comme vous le voyez, il suffit d'indiquer le type de ligne à consulter (titre, sujet ou originateur du message) puis de rejeter selon la règle. Créez à présent un fichier /etc/postfix/body_checks.cf puis copiez ce qui suit :
-
/^Content-(Disposition|Type):.*name="?.*\.(386|acm|asp|avb|wav|bin|cla|class|dat|bat|com|exe|cmd|cnv|csv|drv|htf|htm|html|class|hta|whf|oci|shs|sys|tlb|tsp|wbf|wiz|wsh|pif|vb|lnk|scr|reg|chm|wsh|js|inf|job|ini|shb|scp|scf|wsc|sct|dll)/ REJECT
/^(.*)name=\"(.*)\.(exe|lnk|dll|shs|vbe|hta|com|vbs|vbe|js|jse|bat|cmd|vxd|scr|shm|pif|chm)\"$/ REJECT This type of attachements are banned on my server.
/^(.*)name=(.*)\.(exe|lnk|dll|eml|shs|vbe|hta|com|vbs|vbe|js|jse|bat|cmd|vxd|scr|shm|pif|chm)$/ REJECT This type of attachements are banned on my server.
/^.*STRICTLY CONFIDENTIAL AND URGENT.*$/ REJECT Gimme money
Ici les filtrages sont faits sur le corps du message, vous filtrez tous attachements abominables et non libres. J'en profite ici pour également filtrer sur le contenu et la codification des noms car les spams sont très intelligents. Notez la dernière ligne qui vous évitera quelques spams assez stupides.
Pour ceux n'utilisant pas de domaine perso, c'est beaucoup plus simple, les seules lignes à modifier sont :
-
header_checks = regexp:/etc/postfix/header_checks.cf
body_checks = regexp:/etc/postfix/body_checks.cf
myhostname = mamachine.mon_fournisseur_internet.fr
relayhost = mail.mon_fournisseur_internet.fr
Les utilisateurs de distributions récentes apprécieront l'usage d'un antivirus. Je vous propose donc clamav. Celui-ci travaille très bien sur une Debian sarge. Pour les installer, faîtes : apt-get install amavisd-new clamav clamavd-server puis éditez /etc/postifx/main.cf pour rajouter :
-
content_filter = smtp-amavis:[127.0.0.1]:10024
Editez ensuite le fichier /etc/postifx/master.cf et ajouter :
-
smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200
127.0.0.1:10025 inet n - n - - smtpd -o content_filter=
Enfin éditez /etc/amavis/amavisd.conf et modifiez les deux lignes suivantes. La première définit votre domaine local et la seconde notifie un utilisateur de votre choix (genre postmaster ou root) de mails contenant des virus. J'ai choisi de garder les défault donc personne de l'envoyeur ou du destinataire n'est notifié de la présence de virus, le mail est donc juste placé en quarantaine (dans /var/lib/amavis/ sous Debian) :
-
$mydomain = 'votre domain local';
$virus_admin = "utilisateur_courant\@$mydomain";
Redémarrez alors postfix pour prendre en compte les modifications (un simple reload suffit pour les versions qui supportent ceci). Nous allons alors installer SpamAssassin. Il vous suffit de l'installer et de démarrer un démon. En effet, SpamAssassin vous permet de vérifier chacun des mails que vous recevez par le biais d'un exécutable mais cela prends beaucoup de ressources selon le nombre de mails, alors qu'un démon qui tourne en tâche de fond fera ca très bien. Donc après avoir installé votre SpamAssassin, il ne vous reste qu'à démarrer le démon :
-
/etc/init.d/spamd start
Passons à présent à l'installation de maildrop. Installez le à partir des outils de votre distribution puis éditez le fichier de configuration. Attention, il est important de savoir si vous voulez faire un paramétrage local ou global. Le local n'affectera que votre utilisateur alors que le global affectera TOUS les utilisateurs. Editez le fichier /etc/maildrop pour une utilisation globale ou bien $HOME/.maildroprc pour une utilisation individuelle. Ensuite entrez (selon votre type de boite mail) :
- maildir : DEFAULT=$HOME/Maildir
- mailbox : DEFAULT=/var/spool/mail/$user (vérifiez sur votre système)
Pour générer une boite de type Maildir dans votre $HOME, je vous conseille courier qui se révèle d'excellente facture pour ce type d'opérations (certains préfèrent cyrus mais courrier est mon programme de choix depuis 3 ans). Installez-le donc et suivez la documentation pour plus d'infos. La commande pour créer une boite Maildir est de faire : maildirmake $HOME/Maildir et vous voilà avec une boîte prête à recevoir votre correspondance.
Passons à présent à fetchmail. Vous pouvez aussi utiliser getmail mais je l'ai écarté car il semblait bien plus long à accéder mon pop3. Créez alors un fichier $HOME/.fetchmailrc dans lequel vous pouvez taper :
-
poll pop.fournisseur_acces.fr with protocol pop3
username utilisateur password "votre_mot_de_passe" is votre_utilisateur_local
poll imap.fournisseur with protocol imap
user utilisateur pass "votre_mot_de_passe" nokeep ssl is utilisateur_local
Ceux désirant retirer leur mail directement sans utiliser postfix devront ajouter les lignes suivantes à leur fetchmail (assurez vous que les chemins sont corrects). Attention, le paramétrage est pour un procmail :
-
set postmaster "votre_utilisateur"
mda '/usr/bin/procmail -f fetchmail'
Ces deux lignes suffisent a dire à fetchmail d'accéder votre fournisseur d'accès en POP3 sur le serveur pop.acces.fr avec votre email et mot de passe et de passer le mail à votre utilisateur_local. Changez ensuite les permissions de votre fichier par la commande chmod 0710 .fetchmailrc. Sans ce changement, il vous sera impossible de retirer des emails. Il vous suffit de recopier ces lignes à l'infini dans le fichier pour consulter plusieurs comptes email. Il vous faut à présent créer un fichier de règles qui sera utilisé par maildrop pour filter vos emails avec SpamAssassin et les rediriger dans les bons répertoires. Créez donc un dossier spam dans votre Maildir en passant par un client mail ou la commande maildirmake. Puis créez un fichier $HOME/.mailfilter dans lequel vous allez entrer ces règles :
-
xfilter "/usr/bin/spamc" #(ou bien tout autre endroit où se trouve spamc)
logfile .delivered #(permet de créer un fichier vous indiquant où vont les mails)
if( /^X-Spam-Flag: YES.*/ )
{
to ./Maildir/.spam #(ou bien vers /dev/null si vous voulez tout supprimer)
}
if( /^From.*gentoo*/ )
{
to ./Maildir/.Folders.gentoo
}
La première ligne indique à maildrop de filtrer les emails en utilisant SpamAssassin (attention, spamc ne marchera que si vous avez démarré votre démon auparavant comme indiqué plus haut dans cet article). La seconde commande à maildrop de maintenir un fichier de log qui s'appelle .delivered dans lequel vous pouvez voir les emails arrivés. Les commandes if () { } sont ici pour rediriger les emails dans vos bons dossiers (cela evite d'avoir tout le temps à paramétrer un client mail). La première classe le spam dans votre dossier Spam, la seconde range mes emails gentoo dans un dossier perso. Libre à vous de créer d'autres règles (mon fichier est trop long et personnel pour être listé en détails ici ;), donc consultez les docs en ligne et votre ami de toujours : man.
Alternativement, les utilisateurs de procmail, ne voulant pas se servir de postfix créeront le fichier .procmailrc avec les lignes suivantes. Notez que pour la bonne marche de ce script, il vous faut un script perl s'appellant clamfilter filtrant les virus à la place d'un autre outil tel qu'amavis décrit dans cet article :
-
PATH=/bin:/usr/bin:/usr/bin
MAILDIR=$HOME/mail
LOGFILE=$MAILDIR/procmaillog
# verifie les emails contre les virus
:0fw
| /usr/bin/clamfilter.pl
# verifie les emails contre le spam
:0fw
| /usr/bin/spamc
# efface les spams
:0:
* ^X-Spam-Status: Yes
/dev/null
# envoie les virus dans un repertoire de quarantaine
:0:
* ^X-Virus-Status: Yes
$MAILDIR/virus
# envoie les mails vers l'inbox
:0:Inbox
Le moment de vérité est arrivé, il faut tester le tout. La première fois, vous pouvez taper en tant que votre utilisateur un fetchmail -v (-v pour verbose, mode bavard) afin qu'il vous indique tout ce qui se passe, en voici l'exemple :
-
dwight@tux dwight $ fetchmail -v
fetchmail: 6.2.2 querying pop.tuxfamily.org (protocol POP3) at Wed 11 Jun 2003 11:06:30 IST: poll started
fetchmail: POP3< +OK Hello there.
...
fetchmail: POP3> USER user@email
fetchmail: POP3< +OK Password required.
fetchmail: POP3> PASS
fetchmail: POP3< +OK logged in.
fetchmail: POP3> STAT
fetchmail: POP3< +OK 8 31125
fetchmail: POP3> UIDL
fetchmail: POP3< +OK
fetchmail: POP3< 1 1055320391.11598.mx1.tuxfamily.net
...
fetchmail: POP3< 8 1055324080.2285.mx1.tuxfamily.net
8 messages for user@email at fetchmail.tuxfamily.net (31125 octets).
fetchmail: POP3> LIST
fetchmail: POP3< +OK POP3 clients that break here, they violate STD53.
...
reading message user@email@fetchmail.tuxfamily.net:1 of 8 (2251 octets)
...
fetchmail: POP3> DELE 7
fetchmail: POP3< +OK Deleted.
fetchmail: POP3> TOP 8 99999999
fetchmail: POP3< +OK headers follow.
...
reading message user@email@fetchmail.tuxfamily.net:8 of 8 (4107 octets)
fetchmail: POP3> QUIT
fetchmail: POP3< +OK Bye-bye.
fetchmail: 6.2.2 querying pop.tuxfamily.org (protocol POP3) at Wed 11 Jun 2003 11:06:36 IST: poll completed
fetchmail: SMTP> QUIT
fetchmail: SMTP< 221 Bye
fetchmail: normal termination, status 0
Si vous allez à présent vérifier vos emails dans votre client préféré, vous devriez les voir apparaître (assurez vous bien sûr de paramétrer votre client mail pour consulter votre Maildir local sinon vous ne risquez pas de les voir, j'utilises IMAP que je trouve bien pratique pour cela). Vous pouvez aussi vérifier votre fichier de livraison de mails pour vous assurer qu'il les dirige bien. Essayez par exemple : tail $HOME/.delivered :
-
dwight@tux dwight $ tail .delivered
Date: Wed Jun 11 11:21:13 2003
From: "xxxx" xxx@xxx.xxx
Subj: encore un putain de spam
File: /home/dwight/Maildir/.spam (4559)
Date: Wed Jun 11 11:21:13 2003
From: un bon email xxx@gentoo.org
Subj: Re: [gentoo-dev] Readme files for portage
File: ./Maildir/.Folders.gentoo (2516)
Voilà , ceci conclus notre introduction dans le monde du mail géré sur votre petit Linux avec système Anti-Spam. Je rajouterais des éléments petit à petit, j'attends vos critiques et commentaires. Inutilie de préciser que si je n'ai pas documenté quelque chose, c'est très certainement parce que l'aide en ligne le couvre, lisez avant d'envoyer un email.