Installation du Postfix avec la librairie SASL sur Debian
Oussama Hammami, 2010-05-31
Switzernet
1- Authentification SMTP : SASL
1.3- Tester l’installation du SASL
2.3- Tester l’installation du Postfix
Postfix est l’un des serveurs de messagerie les plus utilisés du fait de sa puissance et de sa relative simplicité à mettre en œuvre.
L’objectif de ce document est de détailler l’installation d’un serveur SMTP (outgoing mail server) base sur Postfix et la librairie SASL afin d’assurer l’authentification des utilisateurs de ce service.
Ce document se résume en 2 chapitres principaux :
Le 1er chapitre présentera l’installation et l’utilisation de la librairie SASL.
Une fois que cette librairie est fonctionnelle, on passe à l’installation et la configuration du Postfix.
En préparant ce document j’ai trouvé plusieurs tutoriaux qui présentent mal l’installation de ce couple sur Debian (Postfix+SASL) en utilisant par exemple des liens symboliques inutiles.
Par contre dans ce document on va vous présenter une installation simple, standard et fonctionnelle.
Ce document a été basé sur la distribution Debian fournie par OVH sur ses serveurs dédiés. Il s'agit donc d'une Sarge patchée, fournie avec uniquement un accès SSH.
Conventions
Voici les conventions adoptées ici:
Lignes commençant par "#" : commandes à exécuter en root (ou, selon le contexte, commentaire)
Et pour les exemples d'échanges serveur/client:
"<": Envoi du client.
">": Réponse du serveur.
SASL (Simple Authentication and Security Layer) est un protocole d’authentification décrit dans la RFC 2222. Il est conçu pour permettre une authentification en utilisant un des nombreux mécanismes disponibles (PAM, LDAP, shadow, ...).
# aptitude update
# aptitude install sasl2-bin libsasl2 libsasl2-modules
S'il annonce que le package n'a pas été trouvé, éditez le fichier source d'Apt et ajoutez :
# vi /etc/apt/sources.list
< deb http://packages.dotdeb.org stable all
On met à jour la liste des packages :
# apt-get update
SASL fournit donc le serveur d’authentification: saslauthd qu’est inclus dans le package sasl2-bin
Le serveur d’authentification saslauthd est lancé en lisant le fichier /etc/default/saslauthd (toujours sous Debian). Ce fichier (/etc/default/saslauthd) contient le mécanisme d’authentification qui sera utilisé. Ce mécanisme d’authentification est défini, dans ce fichier /etc/default/saslauthd, par le mot clef: MECHANISMS="xxxx"
Les mécanismes d’authentification supportés par le serveur saslauthd sont renvoyés par la commande:
# saslauthd -v
> saslauthd 2.1.22
> authentication mechanisms: sasldb getpwent kerberos5 pam rimap shadow ldap
Certains mécanismes d’authentification SASL laissent transiter les mots de passe en clair ! (p154) donc SASL peut être configuré en sus de TLS qui permet de chiffrer la communication avec le serveur SMTP (ce n’est pas le cas dans notre document).
Le mécanisme d’authentification gouverne les défis et les réponses entre client et serveur ainsi que la façon dont ils seront encodés pour la transmission (p154).
Le modèle d’authentification indique comment le serveur vérifiera et stockera le mot de passe (p154).
Nous disposons alors d’un fichier de configuration /etc/default/saslauthd et une base de données d’utilisateur autorisées /etc/sasldb2
Il faut modifie deux paramètre dans la configuration de SASL :
# vi /etc/default/saslauthd
< START=yes
< MECHANISMS="sasldb"
# /etc/init.d/saslauthd restart
> Stopping SASL Authentication Daemon: saslauthd.
> Starting SASL Authentication Daemon: saslauthd.
Nous avons changé MECHANISMS pour utiliser la base de données SASL (nous ne voulons pas utiliser de comptes systèmes pour l'authentification SMTP).
Le fichier /etc/sasldb2 contient une liste d'utilisateurs et de mots de passe ; il sera utilisé par Postfix pour le SMTP AUTH.
Pour ajouter un couple user/passwd au fichier /etc/sasldb2, utiliser le logiciel saslpasswd2 (il s'est installé avec la lib SASL libsasl2). Cf. la page de man. Par exemple :
# echo yourpasswd | saslpasswd2 -p -c -u smtp.switzernet.com oussama.hammami
Et on teste l’authentification avec ce compte
# testsaslauthd -u oussama.hammami -r smtp.switzernet.com -p yourpasswd
> 0: OK "Success."
Vous pouvez utiliser ce petit script perl pour automatiser la creation du compte à partir du fichier smpt-accounts.txt
#! /usr/bin/perl -w
use strict;
use warnings;
my $file="smpt-accounts.txt";
my @Acc;
my $i=0;
open(FILE,"$file") or die"open: $!";
while (my $ligne = <FILE>) {
my @word1 = split /\s+/, $ligne;
my @word2 = split /@\s*/,$word1[0];
if ($word2[0] && $word2[1] && $word1[1])
{
$Acc[$i] ="echo $word1[1] | saslpasswd2 -p -c -u $word2[1] $word2[0]";
$i++;
}
else
{
print "Erreur file Format: username\@yourdomaine password !";
exit();
}
}
close FILE;
system "rm /etc/sasldb2";
foreach my $Com (@Acc)
{
print "$Com\n";
system $Com;
}
system "chown root.sasl /etc/sasldb2";
system "/etc/init.d/saslauthd restart";
Vous pouvez télécharger directement ce script sur votre serveur :
# wget http://switzernet.com/public/100531-postfix-sasl-smtp/tosasldb2.tar.gz
# tar xzf tosasldb2.tar.gz
# ls -l
> total 12
> -rw-r--r-- 1 root root 70 2010-05-31 19:45 smpt-accounts.txt
> -rwxr-xr-x 1 root root 619 2010-05-31 20:22 tosasldb2.pl
> -rw-r--r-- 1 root root 587 2010-05-31 20:27 tosasldb2.tar.gz
# vi smpt-accounts.txt
< youraccountname@yourdomaine.com yourpassword
# ./tosasldb2.pl
> echo testpass1 | saslpasswd2 -p -c -u yourdomaine.com test1
> echo testpass2 | saslpasswd2 -p -c -u yourdomaine.com test2
> Stopping SASL Authentication Daemon: saslauthd.
> Starting SASL Authentication Daemon: saslauthd.
L’installation du serveur SMTP proprement dite est très simple. Il suffit d’installer le paquet Postfix. Pour faciliter les tests en ligne de commande, on peut également installer les paquets Mailutils qui fournira un ensemble de petits outils GNU pour la gestion des mails par la console.
# aptitude install postfix mailutils
Sur une install Debian toute neuve, aptitude détecte un conflit avec Exim4 et propose de le désinstaller. C’est bien ce qu’il faut faire !
L’installateur demande le type de serveur et le domaine de courrier. Choisissons une configuration de type « Site Internet » et dans ce cas précis, nous travaillons sur le domaine « smtp.switzernet.com ». Les réponses à ces questions n’ont pas ici, une grande importance : Nous reprendrons manuellement la configuration plus loin.
Le fichier de configuration principal de Postfix est /etc/postfix/main.cf
# vi /etc/postfix/main.cf
Description de certaines directives :
myhostname = smtp.switzernet.com
Vérifiez que cette option contient bien le nom de domaine (FQDN) de votre serveur.
myorigin = /etc/mailname
Cette option définit le nom utilisé par le serveur pour s'identifier. En précisant un nom de fichier (par défaut /etc/mailname), le contenu de celui-ci sera lu et assigné à l'option. Dans notre cas, /etc/mailname contient smtp.switzernet.com, n'hésitez pas à vérifier l'exactitude du contenu de ce fichier.
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
Bannière affichée lors de la connexion SMTP sur le port 25. Les variables commençant par $ seront remplacées par leurs valeurs définies précédemment.
mydestination = smtp.switzernet.com, localhost
Liste des domaines pour lesquels le serveur doit accepter le courrier.
relayhost =
Pour effectuer les livraisons de courrier via un relais (ici vide).
mynetworks = 127.0.0.0/8
Réseaux locaux autorisés.
mailbox_size_limit = 0
Limite de taille pour les boîtes aux lettres, en octets (0 = illimité).
message_size_limit = 0
Limite de la taille maximum d'un message, en octets (0 = illimité).
La documentation Postfix traduite en français [http://postfix.traduc.org/index.php/postconf.5.html] recense les paramètres de configuration.
L'outil postconf vous permet d'afficher la configuration de Postfix avec les arguments suivants :
postconf -d : affiche les paramètres par défaut de Postfix au lieu de ceux utilisés
postconf -n : affiche les paramètres modifiés par rapport aux valeurs par défaut
postconf -v : affiche la totalité des paramètres utilisés
postconf -e 'biff = no' : édite le fichier main.cf (ajoute ou modifie la ligne mentionnée)
On ajoute les directives pour l'authentification dans le fichier principal de configuration de Postfix /etc/postfix/main.cf :
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
smtp_sasl_auth_enable = no
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
La première ligne active l'authentification SASL. Les options de sécurité définissent ce que l'on doit accepter. Il est très important de mentionner noanonymous, sinon l'authentification permet de relayer n'importe quel courrier entrant.
Le domaine local SASL (smtpd_sasl_local_domain) spécifie le domaine à utiliser lors de l'authentification. Chaque utilisateur a un nom, un domaine et un mot de passe. Ordinairement, le domaine correspond à celui dont votre serveur est membre. La dernière option correspond aux besoins spécifiques de certains MUA. Positionnez cette option à yes si Microsoft Outlook Express Version 4 et Microsoft Exchange server Version 5.0 utilisent votre Postfix comme relai authentifié de messagerie. Sinon il est prudent de mettre no.
Et avec la directive smtpd_recipient_restrictions on informe Postfix que les clients authentifiés sont acceptables.
Postfix utilise le démon d'authentification SASL saslauthd pour décider si l'authentification est correcte ou non. La demande est faite via le slot Unix « socket » de saslauthd, ordinairement présent dans /var/run/saslauthd/mux. C'est problématique puisque Postfix fonctionne dans son propre environnement racine « chroot », /var/spool/postfix/, et ne peut pas accéder au slot. Vous avez donc maintenant deux choix possibles, soit abandonner l'exécution « chroot » de Postfix, soit déplacer le socket de saslauthd ailleurs.
Au moment de configurer le fichier master.cf, on a choisi d’éviter de chrooter les daemons en modifiant ‘–‘ (valeur par défaut : yes) par ‘n’ (no).
# vi /etc/postfix/master.cf
smtp inet n - n - - smtpd
Créons avec la commande le fichier smtpd.conf dans /etc/postfix/sasl contenant:
# vi /etc/postfix/sasl/smtpd.conf
< saslauthd_path: /var/run/saslauthd/mux
< pwcheck_method: saslauthd
< mech_list: plain login
Évidement pour que Postfix utilise le daemon saslauthd correctement il a également besoin d’être dans le groupe SASL.
# adduser postfix sasl
Après toute modification de ce fichier, redémarrez Postfix ou rechargez plus simplement la configuration grâce à postfix reload, ou encore /etc/init.d/postfix reload.
On peur aussi vérifier la syntaxe de la configuration de Postfix avec postfix check
# postfix check
# postfix reload
> postfix/postfix-script: refreshing the Postfix mail system
On commence par le teste le plus simple, tester les emails sortants :
echo " testBody " | mailx -s test oussama.hammami@switzernet.com
Modifiez l’adresse email par votre propre adresse et vérifier que vous avez bien reçus cet email.
Maintenant on passe à un teste plus sérieux;
Crée le compte test avec le mot de passe testpass et teste ce compte avec testsaslauthd
# echo testpass | saslpasswd2 -p -c test
# testsaslauthd -u test -p testpass
> 0: OK "Success."
Produire, à partir des données de ce compte, une chaîne MIME pour les testes :
# printf "test\0test\0testpass" | mmencode
ou bien :
# perl -MMIME::Base64 -e 'print encode_base64(test\0test\0testpass);'
Ce qui nous donne une chaîne du type : " dGVzdAB0ZXN0AHRlc3RwYXNz " qui nous servira pour nous authentifier "à la main" (telnet localhost 25) par la méthode "plain" :
# telnet smtp.switzernet.com 25
> Trying 94.23.242.150...
> Connected to mail8.switzernet.com.
> Escape character is '^]'.
> 220 mail8.switzernet.com ESMTP Postfix (Debian/GNU)
> HELO smtp.switzernet.com
> 250 mail8.switzernet.com
< AUTH PLAIN dGVzdAB0ZXN0AHRlc3RwYXNz
> 235 2.7.0 Authentication successful
< QUIT
> 221 2.0.0 Bye
> Connection closed by foreign host.
On cas de problème vous devez commencer par les messages affichés dans le log /var/log/mail.log
Ci-dessous une erreur affichée dans ce log dû aux droits insuffisants de l’utilisateur Postfix qui peut se produire lorsqu’on n’ajouter pas ce dernier dans le group SASL.
< May 31 16:40:17 r33806 postfix/smtpd[29963]: warning: 212.147.8.99: hostname bbcs-adsl-c008-p099.vtx.ch verification failed: Name or service not known
< May 31 16:40:17 r33806 postfix/smtpd[29963]: connect from unknown[212.147.8.99]
< May 31 16:41:12 r33806 postfix/smtpd[29963]: warning: SASL authentication failure: cannot connect to saslauthd server: Permission denied
Enfin vous pouvez commencer l’utilisation du ce serveur comme un Outgoing SMTP Server
Par exemple avec ThunderBird :
Et voila le contenu d’un email envoyée avec notre serveur SMTP (vous pouvez voir ce contenu en appuyant sur Ctrl+u avec ThunderBird)
Received: from mail8.switzernet.com ([94.23.242.150])
by condore07.webcreatif.ch (Webcreatif Network Condore07) with ESMTP id NTA75032
for <rates@unappel.ch>; Mon, 31 May 2010 16:47:32 +0200
Received: from [192.168.1.130] (unknown [212.147.8.99])
(Authenticated sender: oussama.hammami@smtp.switzernet.com)
by mail8.switzernet.com (Postfix) with ESMTPSA id C28C43E0AF
for <rates@unappel.ch>; Mon, 31 May 2010 16:47:43 +0200 (CEST)
Message-ID: <4C03CBF8.5030903@switzernet.com>
Date: Mon, 31 May 2010 16:47:20 +0200
From: Oussama Hammami <oussama.hammami@switzernet.com>
User-Agent: Thunderbird 2.0.0.24 (Windows/20100228)
MIME-Version: 1.0
To: Oussama Hammami <rates@unappel.ch>
Subject: Re: test
References: <20100531142747.95ACB3E0AC@mail8.switzernet.com>
In-Reply-To: <20100531142747.95ACB3E0AC@mail8.switzernet.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, hits=1.10 required=9.00 tests=BAYES_20=-0.11,MR_NOT_ATTRIBUTED_IP=0.20,NO_RDNS2=0.01,MR_DIFF_MID=1.00
version=3.2.5
X-Spam-Level: *
X-Spam-Checker-Version: SpamAssassin 3.2.5 (1.1) on condore07.webcreatif.ch
testBody
Authentification SMTP
http://www.quadriv.com/blog/public/info/gazette/lg142-C.html
Installer un système de mail complet et sécurisé
http://ben.reynerie.org/services/mail/serveur_mail.htm
Postfix : authentification SASL
http://luxpopuli.fr/Internet/Postfix-Cyrus-IMAP-SSL-LDAP/Postfix-authentification-SASL
SMTP auth TLS : postfix avec SASL linké à IMAP
http://blog.hacky.info/index.php/post/2006/11/10/12-smtp-auth-tls-postfix-avec-sasl-linke-a-imap
Authentification SASL avec Postfix
http://postfix.traduc.org/index.php/SASL_README.html
Installing Postfix, Cyrus SASL, and Courier IMAP to use MySQL for Virtual Domains
http://www.webconexion.net/knowledgebase/linux_howto/virtual_mail_server.php
Postfix SASL Howto
http://www.postfix.org/SASL_README.html#server_cyrus
Installation d’un serveur mail brique par brique… (OpenLDAP, Postfix, Cyrus-imap, TLS, SASL, Spamassassin, Amavis, etc…)
Outgoing SMTP Authentication
http://wiki.zimbra.com/index.php?title=Outgoing_SMTP_Authentication
Authentification SASL avec Postfix
http://postfix.traduc.org/index.php/SASL_README.html#client_sasl
Exemples de configuration standard de Postfix
http://postfix.traduc.org/index.php/STANDARD_CONFIGURATION_README.html#backup
Postfix, SMTP, SASL (SSL), TLS, POP3 et IMAP
http://www.alsacreations.com/tuto/lire/614-Serveur-mail-Postfix.html
Postfix Configuration Parameters
http://www.postfix.org/postconf.5.html#smtpd_recipient_restrictions
Authentification SMTP avec Postfix
http://ftp.traduc.org/doc-vf/gazette-linux/html/2007/142/lg142-C.html#sortant
SMTP Authentication for Mail servers
http://postfix.state-of-mind.de/patrick.koetter/smtpauth/smtp_auth_mailservers.html
Imap migration
http://simson.net/page/Imap_migration
imapsync(1) - Linux man page
http://linux.die.net/man/1/imapsync
Debian : Serveur de mail Postfix et Dovecot
http://www.moroblog.info/Debian-Serveur-de-mail-Postfix-et.html
Serveur mail postfix / postfix-mysql / Dovecot / RoundCube / spamassassin sous CentOS 5
How to configure postfix virtual domains
http://www.sysdesign.ca/guides/postfix_virtual.html
Postfix - Hosting Multiple Domains with Virtual Accounts
http://www.akadia.com/services/postfix_separate_mailboxes.html
Postfix, Dovecot, et des utilisateurs virtuels sans Mysql
http://blog.effraie.org/post/2008/06/11/Postfix-Dovecot-et-des-utilisateurs-virtuels-sans-Mysql
Comment synchroniser plusieurs adresses mail avec imapsync.
http://glob.bargeo.fr/fr/web/linux/comment-synchroniser-plusieurs-adresses-mail-avec-imapsync/
Zimbra mail server installation
http://switzernet.com/company/091215-zimbra-installation-config/#_Toc248637176