Installation du Postfix avec la librairie SASL sur Debian

Oussama Hammami, 2010-05-31

Switzernet

 

1- Authentification SMTP : SASL. 2

1.1- Installation. 2

1.2- Configuration. 2

1.3- Tester l’installation du SASL. 3

2- Serveur SMTP : Postfix. 3

2.1- Installation. 3

2.2- Configuration. 5

2.3- Tester l’installation du Postfix. 7

Référence: 11

 

 

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.

1- Authentification SMTP : SASL

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

1.1- Installation

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

1.2- Configuration

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

1.3- Tester l’installation du SASL

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.

 

2- Serveur SMTP : Postfix

2.1- Installation

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.

 

 

2.2- Configuration

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

2.3- Tester l’installation du Postfix

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

  

Référence:

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

http://www.jopa.fr/index.php/2009/02/03/installation-dun-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

http://www.llaumgui.com/post/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