Forum Linux.debian/ubuntu Messagerie IMAP SSL avec antivirus et antispam

Posté par  .
Étiquettes :
0
21
oct.
2006
Article du 11/03/2006

Introduction



Cet aticle va esssayer de synthétiser une méthodologie efficace et simple pour mettre en place :

A noter : on utilisera procmail comme MDA

Je n'invente rien, je m'inspire de liens connexes comme ceux-ci :


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 :

vieuxpaf:~$ sudo apt-get install postfix
Password:
Reading package lists... Done
Building dependency tree... Done
Suggested packages:
postfix-mysql postfix-pgsql postfix-ldap postfix-pcre sasl2-bin libsasl2-modules
Recommended packages:
resolvconf
The following packages will be REMOVED:
exim4 exim4-base exim4-config exim4-daemon-light
The following NEW packages will be installed:
postfix
0 upgraded, 1 newly installed, 4 to remove and 1 not upgraded.
Need to get 0B/946kB of archives.
After unpacking 1061kB disk space will be freed.
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"

  2. 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

  3. Quel est le nom de votre serveur ? Si vous avez (comme moi) un compte chez Dyndns(http://www.dyndns.com/), c'est le moment de l'indiquer ! pour moi : votresite.homeip.net

  4. 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)

  5. 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 :

Postfix is now set up with a default configuration. If you need to make
changes, edit /etc/postfix/main.cf (and others) as needed. To view Postfix configuration
values, see postconf(1).

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 !

vieuxpaf:~$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 votresite.homeip.net ESMTP Postfix (Debian/GNU)
helo
501 Syntax: HELO hostname
MAIL FROM: demzed
250 Ok
RCPT TO: demzed@gmail.com
250 Ok
DATA
354 End data with .
Subject: test localhost
ca marche ti ?
.
250 Ok: queued as 756F1F404B
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 :

220 votresite.homeip.net ESMTP Postfix (Debian/GNU)
helo me
250 votresite.homeip.net
mail from: steph
250 Ok
rcpt to: demzed@gmail.com
501 Bad address syntax
rcpt to: demzed@gmail.com
554 <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 ?

220 votresite.homeip.net ESMTP Postfix (Debian/GNU)
501 Syntax: MAIL FROM:
mail from: demzed
250 Ok
rcpt to: root
250 Ok
data
354 Enter mail, end with "." on a line by itself
subject: test root
message pour root
.


Loggé en @user@, on se rends compte qu'on a alors un nouveau message dans /etc/mail/@user@:

From demzed@votresite.homeip.net Sat Mar 11 10:13:57 2006
Return-Path: <demzed@votresite.homeip.net>
X-Original-To: root
Delivered-To: root@votresite.homeip.net
Received: from me (unknown [192.168.0.3])
by votresite.homeip.net (Postfix) with SMTP id 991A6F404D
for ; Sat, 11 Mar 2006 10:13:40 +0100 (CET)
subject: test root
Message-Id: <20060311091343.991A6F404D@votresite.homeip.net>
Date: Sat, 11 Mar 2006 10:13:40 +0100 (CET)
From: demzed@votresite.homeip.net
To: undisclosed-recipients:;

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 :

vieuxpaf:/~$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 votresite.homeip.net ESMTP Postfix (Debian/GNU)
helo me
250 votresite.homeip.net
mail from: toto
250 Ok
rcpt to: toto
550 : Recipient address rejected: User unknown in local recipient table
rcpt to: root
250 Ok
data
354 End data with .
subject: test
test root
.
250 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

  2. Si on écrit à @user@, seul lui recoit le mail

  3. 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(...) et en substance, il y est écrit que le fichier /etc/postfix/main.cf définit deux variables qui indiquent cette liste :

alias_maps = hash:/etc/aliases
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 :

Reporting-MTA: dns; smtp.gmail.com
X-Postfix-Queue-ID: 0106A1A4399
X-Postfix-Sender: rfc822; demzed@gmail.com
Arrival-Date: Sat, 11 Mar 2006 11:14:24 +0100 (CET)

Final-Recipient: rfc822; toto@votresite.homeip.net
Action: failed
Status: 5.0.0
Diagnostic-Code: X-Postfix; host votresite.homeip.net[84.5.109.210] said: 550
<toto@votresite.homeip.net>: Recipient address rejected: User unknown in local
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> ;-)

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 :

# Change to one to enable spamd
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 :

127.0.0.1:10025 inet n - y - - smtpd
-o content_filter=
-o local_recipient_maps=
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks, \
reject_unauth_destination
-o mynetworks=127.0.0.0/8

smtp-amavis unix - - y - 2 smtp
-o smtp_data_done_timeout=1200
-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

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) :

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 :

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 :

#!/bin/bash
#
# Script de création des boites aux lettres utilisateurs
#

# Création des répertoire "de base", "Envoyés, "Brouillons" et "SPAM"
maildirmake /home/$1/Maildir
maildirmake -f Envoyés /home/$1/Maildir
maildirmake -f Brouillons /home/$1/Maildir
maildirmake /home/$1/Maildir/.Spam
chown -R $1 /home/$1/Maildir

# Copie du MDA procmail dans le compte de l'utilisateur
cp `whereis -b procmail | awk '{print $2}'` /home/$1/.procmailrc
chmod 600 /home/$1/.procmailrc
chown $1 /home/$1/.procmailrc

sudo touch /var/log/procmailrc.log
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 :

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 :

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) :



<META HTTP-EQUIV="Refresh" content="0; awstats.postfix.html">





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 :

    ln -s /usr/lib/cgi-bin/mailgraph.cgi /var/www/votresite.homeip.net/awstats/postfix/mailgraph/index.cgi


  2. 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>
    Options +ExecCGI





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 !!

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.