URL: https://linuxfr.org/forums/linux-debian-ubuntu/posts/messagerie-imap-ssl-avec-antivirus-et-antispam Title: Messagerie IMAP SSL avec antivirus et antispam Authors: DeMZed Date: 2006年10月21日T12:18:37+02:00 Tags: debian et awstats Score: 0 _Article du 11/03/2006_ **Introduction** Cet aticle va esssayer de synthétiser une méthodologie efficace et simple pour mettre en place : * [http://www.postfix.org/,](http://www.postfix.org/,) PostFix : le MTA (serveur smtp) * [http://spamassassin.apache.org/,](http://spamassassin.apache.org/,) SpamAssassin : Filtrage spam * [http://www.amavis.org/,](http://www.amavis.org/,) Amavis : Scanner de virus mail * [http://www.clamav.net/,](http://www.clamav.net/,) ClamAV : Antivirus * [http://www.courier-mta.org/imap/,](http://www.courier-mta.org/imap/,) Courier-IMAP : Serveur POP3 et IMAP. _A noter : on utilisera procmail comme MDA_ Je n'invente rien, je m'inspire de liens connexes comme ceux-ci : * [http://www.lea-linux.org/cached/index/Reseau-message-postfix(...)](http://www.lea-linux.org/cached/index/Reseau-message-postfix.html,) Reseau-message-postfix * [http://www.destination-linux.org/article32.html,](http://www.destination-linux.org/article32.html,) Mettre en place un serveur de mail + webmail + liste de diffusion * [http://www.abul.org/article130.html,](http://www.abul.org/article130.html,) Mise en oeuvre de SpamAssassin avec un MTA Postfix * [https://www.spenneberg.com/228.html,](https://www.spenneberg.com/228.html,) SpamAssassin/Amavis * [http://www.henol.fr/articles/debian_awstats.php,](http://www.henol.fr/articles/debian_awstats.php,) AWStats sous Debian **Etape 1 : Postfix (MTA)** **_Installation_** Postfix est un serveur SMTP. Actuellement les distro Debian sont livrées avec Exim4. Je n'argumenterai pas ici sur le choix de tel ou tel serveur SMTP, mais simplement qu'il est plus habituel de voire en entrerpise PostFix que Exim (qu'on croise plutot à la FAC). Il va donc falloir remplacer Exim par PostFix... heureusement apt est mon ami et l'installation de PostFix se charge de supprimer Exim ! (oh ! 1ere joie) Pour l'installer, c'est simple : apt-get install postfix Là, il vous indique bien la suppression de exim4 : £spaces£ £/spaces£vieuxpaf:~$ sudo apt-get install postfix £spaces£ £/spaces£Password: £spaces£ £/spaces£Reading package lists... Done £spaces£ £/spaces£Building dependency tree... Done £spaces£ £/spaces£Suggested packages: £spaces£ £/spaces£postfix-mysql postfix-pgsql postfix-ldap postfix-pcre sasl2-bin libsasl2-modules £spaces£ £/spaces£Recommended packages: £spaces£ £/spaces£resolvconf £spaces£ £/spaces£The following packages will be REMOVED: £spaces£ £/spaces£exim4 exim4-base exim4-config exim4-daemon-light £spaces£ £/spaces£The following NEW packages will be installed: £spaces£ £/spaces£postfix £spaces£ £/spaces0ドル upgraded, 1 newly installed, 4 to remove and 1 not upgraded. £spaces£ £/spaces£Need to get 0B/946kB of archives. £spaces£ £/spaces£After unpacking 1061kB disk space will be freed. £spaces£ £/spaces£Do you want to continue [Y/n]? Allez, Yes ! La configuration est alors lancée. On vous demande successivement 1. Comment allez vous utiliser votre MTA ? Si vous voulez monter un serveur SMTP sur l'extérieur, il faut choisir "Internet Site" 1. Que faire des mails qui sont destinés à root ? Laissons les, dans un 1er temps, n'aller nulle part ; c'est toujours facile de balancer du pourriel à root@monserveur.com ! Laissons à NONE 1. Quel est le nom de votre serveur ? Si vous avez (comme moi) un compte chez Dyndns([http://www.dyndns.com/),](http://www.dyndns.com/),) c'est le moment de l'indiquer ! pour moi : votresite.homeip.net 1. Quel est le domaine réseau pour lequel votre serveur se considèrera le destinataire des messages ? Dans mon cas, hormis votresite.homeip.net et mon réseau local, rien d'autre : je saisi donc votresite.homeip.net, localhost.localdomain, localhost _A noter, il y a un doublon dans la liste originelle)_ 1. La synchronisation des mails doit elle être forcée ? Comme on vous l'explique trés bien, mieux vaut pas ! donc choisissez Non Ayé ! terminé pour la conf ? pas tout à fait ! Comme on vous le dit : £spaces£ £/spaces£Postfix is now set up with a default configuration. If you need to make £spaces£ £/spaces£changes, edit /etc/postfix/main.cf (and others) as needed. To view Postfix configuration £spaces£ £/spaces£values, see postconf(1). £spaces£ £/spaces£After modifying main.cf, be sure to run '/etc/init.d/postfix reload'. Allons y donc faire un tour dans /etc/postfix/main.cf. La conf n'y est pas tout à fait correcte à mon gout ! * on a myhostname = localhost.localdomain alors qu'on devrait avoir myhostname = votresite.homeip.net * On peut aussi un peut customiser mydestination = votresite.homeip.net, localhost.localdomain, localhost en mydestination = $myhostname, localhost.localdomain, localhost * Si vous avez plusieurs interfaces réseau, vous pouvez aussi configurer ici celle que vous souhaitez sur laquelle PostFix soit en écoute : il vous faut alors modifier le paramètre inet_interfaces Maintenant que vous avez bidouillé la config, checkez là : /etc/init.d/postfix check Si pas de bétises, relancer le serveur : /etc/init.d/postfix reload Et ça en est fini pour l'installation de postfix **_Test_** Pour cela, une petite commande telnet est d'usage ! £spaces£ £/spaces£vieuxpaf:~$ telnet localhost 25 £spaces£ £/spaces£Trying 127.0.0.1... £spaces£ £/spaces£Connected to localhost.localdomain. £spaces£ £/spaces£Escape character is '^]'. £spaces£ £/spaces220ドル votresite.homeip.net ESMTP Postfix (Debian/GNU) £spaces£ £/spaces£helo £spaces£ £/spaces501ドル Syntax: HELO hostname £spaces£ £/spaces£MAIL FROM: demzed £spaces£ £/spaces250ドル Ok £spaces£ £/spaces£RCPT TO: demzed@gmail.com £spaces£ £/spaces250ドル Ok £spaces£ £/spaces£DATA £spaces£ £/spaces354ドル End data with . £spaces£ £/spaces£Subject: test localhost £spaces£ £/spaces£ca marche ti ? £spaces£ £/spaces£. £spaces£ £/spaces250ドル Ok: queued as 756F1F404B £spaces£ £/spaces£quit Là on saute sur sa messagerie, et on attends frénétiquement le mail... si ça marche pas, consultez mailq pour savoir si il n'y aurait pas une petite erreur ... Bon, maintenant, chose super importante : vérifier que le serveur ne relaye pas les mails ! Depuis une autre machine, se connecter au serveur : £spaces£ £/spaces220ドル votresite.homeip.net ESMTP Postfix (Debian/GNU) £spaces£ £/spaces£helo me £spaces£ £/spaces250ドル votresite.homeip.net £spaces£ £/spaces£mail from: steph £spaces£ £/spaces250ドル Ok £spaces£ £/spaces£rcpt to: demzed@gmail.com £spaces£ £/spaces501ドル Bad address syntax £spaces£ £/spaces£rcpt to: demzed@gmail.com £spaces£ £/spaces554ドル <demzed@gmail.com>: Relay access denied Si vous avez un 554, c'est bon, sinon, ne continuez pas sous peine de devenir en quelques minutes un relay à SPAM !! **_Les Alias_** Maintenant, toujours depuis une autre machine, est-ce qu'on peut envoyer un mail à root, et si oui, où cela va-t-il ? £spaces£ £/spaces220ドル votresite.homeip.net ESMTP Postfix (Debian/GNU) £spaces£ £/spaces501ドル Syntax: MAIL FROM: £spaces£ £/spaces£mail from: demzed £spaces£ £/spaces250ドル Ok £spaces£ £/spaces£rcpt to: root £spaces£ £/spaces250ドル Ok £spaces£ £/spaces£data £spaces£ £/spaces354ドル Enter mail, end with "." on a line by itself £spaces£ £/spaces£subject: test root £spaces£ £/spaces£message pour root £spaces£ £/spaces£. Loggé en @user@, on se rends compte qu'on a alors un nouveau message dans /etc/mail/@user@: £spaces£ £/spaces£From demzed@votresite.homeip.net Sat Mar 11 10:13:57 2006 £spaces£ £/spaces£Return-Path: <demzed@votresite.homeip.net> £spaces£ £/spaces£X-Original-To: root £spaces£ £/spaces£Delivered-To: root@votresite.homeip.net £spaces£ £/spaces£Received: from me (unknown [192.168.0.3]) £spaces£ £/spaces£by votresite.homeip.net (Postfix) with SMTP id 991A6F404D £spaces£ £/spaces£for ; 2006年3月11日 10:13:40 +0100 (CET) £spaces£ £/spaces£subject: test root £spaces£ £/spaces£Message-Id: <20060311091343.991A6F404D@votresite.homeip.net> £spaces£ £/spaces£Date: 2006年3月11日 10:13:40 +0100 (CET) £spaces£ £/spaces£From: demzed@votresite.homeip.net £spaces£ £/spaces£To: undisclosed-recipients:; £spaces£ £/spaces£ £spaces£ £/spaces£message pour root @user@ recoit donc les mails qui sont destinés à root, alors qu'on a bien mis "NONE" dans la configuration ! En fait, si l'on écrit à n'importe qui, les mails sont systématiquement relayés à notre user @user@. Essayons de faire le même test en local : £spaces£ £/spaces£vieuxpaf:/~$ telnet localhost 25 £spaces£ £/spaces£Trying 127.0.0.1... £spaces£ £/spaces£Connected to localhost.localdomain. £spaces£ £/spaces£Escape character is '^]'. £spaces£ £/spaces220ドル votresite.homeip.net ESMTP Postfix (Debian/GNU) £spaces£ £/spaces£helo me £spaces£ £/spaces250ドル votresite.homeip.net £spaces£ £/spaces£mail from: toto £spaces£ £/spaces250ドル Ok £spaces£ £/spaces£rcpt to: toto £spaces£ £/spaces550ドル : Recipient address rejected: User unknown in local recipient table £spaces£ £/spaces£rcpt to: root £spaces£ £/spaces250ドル Ok £spaces£ £/spaces£data £spaces£ £/spaces354ドル End data with . £spaces£ £/spaces£subject: test £spaces£ £/spaces£test root £spaces£ £/spaces£. £spaces£ £/spaces250ドル Ok: queued as D6D72F404D Comme on le voit, toto n'est pas connu alors que root l'est ! Mais on a une piste : "local recipient table". On se rends compte alors que : 1. Si on écrit à @anotheruser@, seul lui recoit le mail 1. Si on écrit à @user@, seul lui recoit le mail 1. Si on écrit à utilisateur n'existant pas, seul @user@ recoit ce mail Postfix se base en effet sur une liste de correspondances entre les destinatires des messages envoyés au serveur, et les alias *NIX existant; ceci est expliqué dans ce lien : [http://x.guimard.free.fr/postfix/index.php?page=DATABASE_REA(...)](http://x.guimard.free.fr/postfix/index.php?page=DATABASE_README.html#intro;) et en substance, il y est écrit que le fichier /etc/postfix/main.cf définit deux variables qui indiquent cette liste : £spaces£ £/spaces£alias_maps = hash:/etc/aliases £spaces£ £/spaces£alias_database = hash:/etc/aliases _A noter : alias_databases est défini pour une connectivité vers une base de données (si vous n'en n'avez pas besoin, cela ne vous sert à rien)._ Vous observez donc que le fichier /etc/aliases est un hash de correspondances des users : c'est la "local recipient table". Comment alors configurer postfix renvoyer un message d'erreur si l'utilisateur n'est pas connu ? Rien ! depuis la version 2.0, postfix vous renvoie bouler ! "root" fait en fait partie des utilisateurs un peu spéciaux. Si vous essayer d'envoyer un mail à "toto", vous allez recevoir un message de postmaster : £spaces£ £/spaces£Reporting-MTA: dns; smtp.gmail.com £spaces£ £/spaces£X-Postfix-Queue-ID: 0106A1A4399 £spaces£ £/spaces£X-Postfix-Sender: rfc822; demzed@gmail.com £spaces£ £/spaces£Arrival-Date: 2006年3月11日 11:14:24 +0100 (CET) £spaces£ £/spaces£ £spaces£ £/spaces£Final-Recipient: rfc822; toto@votresite.homeip.net £spaces£ £/spaces£Action: failed £spaces£ £/spaces£Status: 5.0.0 £spaces£ £/spaces£Diagnostic-Code: X-Postfix; host votresite.homeip.net[84.5.109.210] said: 550 £spaces£ £/spaces£<toto@votresite.homeip.net>: Recipient address rejected: User unknown in local £spaces£ £/spaces£recipient table (in reply to RCPT TO command) C'est quand même bien fait non ? ;-) **Etape 2 : SpamAssassin & AMaVIS** SpamAssassin est un filtre anti-spam performant avec des fonctionnalités d'auto-apprentissage. Anomy Sanitizer est un filtre mail qui corrige les messages défectueux et bloque les pièces jointes suspectes. Il se charge aussi d'appeler l'antivirus. Maintenant que c'est dit, Hop, on installe ! **_Installations_** **_SpamAssassin_** Comme toujours, <aware>apt is my friend</aware> ;-) £spaces£ £/spaces£apt-get install spamassassin Attention ! Comme on vous le dit à la fin de l'install : SpamAssassin Mail Filter Daemon: disabled, see . Allons voire ce fichier ... et c'est comme le port salut : £spaces£ £/spaces£# Change to one to enable spamd £spaces£ £/spaces£ENABLED=0 Mettons "1" puisque c'est si gentillement demandé ! ;-) Allons finalement éditer le fichier /etc/mail/spamassassin/local.cf afin de modifier les entêtes des futurs mails marqués comme SPAMs ; il faut décommenter la commande rewrite_header Subject *****SPAM***** et au besoin la personnaliser. Avec cette configuration, les messages détectés comme spam (avec un score supérieur à 5) auront leur champ Subject commençant par *****SPAM***** et un tag X-Spam-Level indiquant le score du message. **_AMaVIS_** Un petit coup d'APT : apt-get install amavisd-new clamav clamav-daemon arj rar-2.80 zoo unzoo nomarch lzop cabextra L'install du biniou, vous pouvez le voire, n'est pas faite seule ! on en profite pour installer ClamAV, et des utilistaires de compression/décompression. ClamAV s'enquérie alors de son mode de fonctionnement. * Comment doit-il se mettre à jour ? En tant que démon c'est parfait, à moins que vous n'ayez pas une connection permanente ou pseudo permanente. * Quel mirroir ? choisissez celui le plus prés de chez vous... ou le plus rapide à répondre ! * Utilisez vous un proxy ? sinon, laissez cette partie vide * Notification : avertissez clamd de la mise à jour C'est tout ce qu'il y a à faire pour l'installer...Allons donc voire un peu plus loin ! **_Liaisons à PostFix_** Comme vous vous en doutez surement, il s'agit désormais de bidouiller les fichiers /etc/postfix/master.cf et /etc/postfix/main.cf dans lequel sont écrits les règles de Postfix. Editez d'abord /etc/postfix/master.cf ; à la fin de ce fichier, rajoutez ceci : £spaces£ £/spaces127ドル.0.0.1:10025 inet n - y - - smtpd £spaces£ £/spaces£-o content_filter= £spaces£ £/spaces£-o local_recipient_maps= £spaces£ £/spaces£-o smtpd_helo_restrictions= £spaces£ £/spaces£-o smtpd_client_restrictions= £spaces£ £/spaces£-o smtpd_sender_restrictions= £spaces£ £/spaces£-o smtpd_recipient_restrictions=permit_mynetworks, \ £spaces£ £/spaces£reject_unauth_destination £spaces£ £/spaces£-o mynetworks=127.0.0.0/8 smtp-amavis unix - - y - 2 smtp £spaces£ £/spaces£-o smtp_data_done_timeout=1200 £spaces£ £/spaces£-o disable_dns_lookups=yes Ceci a pour but d'ajouter un second listener SMTP en écoute sur le port 10025, utilisé pour réinjecter les messages scannés dans Postfix Ensuite, éditer /etc/postfix/main.cf afin de lui rajouter à la fin ceci : content_filter = smtp-amavis:[127.0.0.1]:10024 Ceci a pour but d'indiquer à Postfix d'envoyer tous les emails au démon amavis pour filter leur contenus. _A noter : le port 10024 est ouvert par défaut par amavis_ **Etape 3 : Courier-IMAP + ProcMail (MDA)** **_Installation_** Un petit coup d'APT pour installer le £spaces£ £/spaces£apt-get install courier-imap-ssl A l'installation, il vous crée des certificats par défaut qui sont dans /etc/courier/pop3d.pem et /etc/courier/imapd.pem. Modifier le fichier de configuration de Postfix /etc/postfix/main.cf, et lui rajouter (si ce n'est pas déjà présent) : £spaces£ £/spaces£home_mailbox = Maildir/ _ A Noter : Maildir doit être scrupuleusement écrit (gare à la casse !) ; ce répertoire est référencé ainsi un peu partout, mieux vaut le laisser !_ Sinon on peut AUSSI utiliser ceci : £spaces£ £/spaces£mailbox_command = /usr/bin/procmail -a "$EXTENSION" Mais attention ! SOIT l'un SOIT l'autre j'ai passé à ma 1ere config plus de 3 heures à me demander pourquoi cela ne marchait pas ! Créez alors les MailDir des utilisateurs avec ce genre de script : £spaces£ £/spaces£#!/bin/bash £spaces£ £/spaces£# £spaces£ £/spaces£# Script de création des boites aux lettres utilisateurs £spaces£ £/spaces£# £spaces£ £/spaces£ £spaces£ £/spaces£# Création des répertoire "de base", "Envoyés, "Brouillons" et "SPAM" £spaces£ £/spaces£maildirmake /home/1ドル/Maildir £spaces£ £/spaces£maildirmake -f Envoyés /home/1ドル/Maildir £spaces£ £/spaces£maildirmake -f Brouillons /home/1ドル/Maildir £spaces£ £/spaces£maildirmake /home/1ドル/Maildir/.Spam £spaces£ £/spaces£chown -R 1ドル /home/1ドル/Maildir £spaces£ £/spaces£ £spaces£ £/spaces£# Copie du MDA procmail dans le compte de l'utilisateur £spaces£ £/spaces£cp `whereis -b procmail | awk '{print 2ドル}'` /home/1ドル/.procmailrc £spaces£ £/spaces£chmod 600 /home/1ドル/.procmailrc £spaces£ £/spaces£chown 1ドル /home/1ドル/.procmailrc £spaces£ £/spaces£ £spaces£ £/spaces£sudo touch /var/log/procmailrc.log £spaces£ £/spaces£sudo chmod 666 /var/log/procmailrc.log Bon... et bien maintenant il n'y a plus maintenant qu'à s'envoyer un petit mail pour tester tout ça ! **Etape 4 : les cerises** Maintenant que tout ce joli monde est installé, le réflexe normal (si ce n'est déjà fait) est de passer en mode paranoiaque ! Si ouvrir des services à l'extérieur ne vous fait pas froid dans le dos, trés bien, dans ce cas, passez votre chemin. Si ce n'est pas le cas, je pense que vous ne seriez pas contre un petit peu de surveillance dans ce monde de brutes ? Allez, on va installer deux outils pour "monitorer" notre petit monde : * [http://awstats.sourceforge.net/,](http://awstats.sourceforge.net/,) AWStats : Analyseur de logs * [http://people.ee.ethz.ch/~dws/software/mailgraph/,](http://people.ee.ethz.ch/~dws/software/mailgraph/,) MailGraph : Représentation graphique de l'activité Pour cela, APT is my friend. apt-get install awstats mailgraph Et Boum. Comme vous pouvez le lire dans la doc officielle qui va bien, AWStats et MailGraph sont des script ... qu'il vaut donc mieux planquer ! **_AWStats_** Première chose, en root, j'ai créé un petit dossier /root/awstats dans lequel je vais mettre mes fichiers utilisés : mkdir /root/awstats mv /usr/lib/cgi-bin/awstats.pl /root/awstats cp /etc/awstats/awstats.conf /root/awstats J'utilise AWStats pour deux choses : surveiller les logs de mon serveur WEB et celui de mon serveur Postfix. Pour cela, dans lequel j'ai mis deux fichiers de config pour chacun, comme l'indique la doc PostFix : * [http://awstats.sourceforge.net/docs/awstats_setup.html#INSTA(...)](http://awstats.sourceforge.net/docs/awstats_setup.html#INSTALLAPACHE) pour le serveur web * [http://awstats.sourceforge.net/docs/awstats_faq.html#MAIL](http://awstats.sourceforge.net/docs/awstats_faq.html#MAIL) pour le serveur MAIL _A noter: La config est basée sur le fichier /etc/awstats/awstats.conf : cp /root/awstats/awstats.conf /root/awstats/awstats.votresite.homeip.net.conf cp /root/awstats/awstats.conf /root/awstats/awstats.postfix.conf _ J'y ai également collé deux autres script : cp /usr/share/doc/awstats/examples/awstats_buildstaticpages.pl /root/awstats cp /usr/share/doc/awstats/examples/maillogconvert.pl /root/awstats Ces deux derniers sont utiles pour respectivement générer les pages HTML et convertir le log Postfix en un log exploitable, comme le montre le script créé à cet effet dans /usr/local/bin/awstats-rebuild.sh : #!/bin/bash # # Script de recréation des statistiques AWSTATS # /root/awstats/awstats.pl -config=votresite.homeip.net -update /root/awstats/awstats_buildstaticpages.pl -config=votresite.homeip.net -awstatsprog=/root/awstats/awstats.pl -dir=/var/www/votresite.homeip.net/awstats/apache2 /root/awstats/awstats.pl -config=postfix -update /root/awstats/awstats_buildstaticpages.pl -config=postfix -awstatsprog=/root/awstats/awstats.pl -dir=/var/www/votresite.homeip.net/awstats/postfix chown -R www-data:www-data /var/www/votresite.homeip.net/awstats Tout le biniou est alors programmé dans un gros CRON ;) qui le lance et ainsi met à dispo les résultats dans un répertoire de mon serveur WEB (qui change au passage les permissions de fichiers générés). vieuxpaf:~/awstats# crontab -l # m h dom mon dow command 0 * * * * /usr/local/bin/awstats-rebuild.sh > /dev/null Et puis comme je suis faignant, dans chaun des répertoires, je me suis fait un index.html qui me redirige automatiquement sur la bonne page généré (à adapter suivant le contexte) : £spaces£ £/spaces£ £spaces£ £/spaces£ £spaces£ £/spaces£<META HTTP-EQUIV="Refresh" content="0; awstats.postfix.html"> £spaces£ £/spaces£ £spaces£ £/spaces£ £spaces£ £/spaces£ Ayé, Postgres et Apache sont désormais sous monitoring... manuel ! **_MailGraph_** Mailgraph a pour moi un role indispensable : il me permet de voire d'un coup d'oeil l'activité du serveur. Lorsqu'il s'installe via apt-get, un démon peut être lancé qui suit l'évolution des fichiers de conf... ne le désactivez pas faute de quoi vous ne verrez jamais le compteur décoller de 0 ! Pour se le mettre à dispo sur le serveur web, il faut : 1. Dans le répertoire que je dédie à cet usage dans mon DocumentRoot, créer un lien symbolique vers le script exécutable : £spaces£ £/spaces£ln -s /usr/lib/cgi-bin/mailgraph.cgi /var/www/votresite.homeip.net/awstats/postfix/mailgraph/index.cgi £spaces£ £/spaces£ 1. Editer alors le fichier de conf de mon virtualhost afin de rendre l'exécution du script CGI possible : <Directory /var/www/votresite.homeip.net/awstats/postfix/mailgraph> £spaces£ £/spaces£Options +ExecCGI £spaces£ £/spaces£ £spaces£ £/spaces£ **Fin** Et voilà, on a un super serveur SMTP, délivrant de zolis mails via IMAP over SSL, le tout suivi par vous (super-admin) ébahi devant de superbes graphes !!