L'objet de cet article est de décrire de façon complète les étapes de la mise en place d'un serveur de mail, basé sur le MTA Postfix, protégé par SSL et une authentification TLS, dans un environnement Linux Debian.
Note :
Le présent tutoriel reprend des extraits d'articles sur le même sujet par Alsacreations et le blog d'Hacky, selon les termes de la licence Creative Commons "Paternité - Pas d'Utilisation Commerciale 2.0 France (CC BY-NC 2.0)".
http://www.alsacreations.com/tuto/lire/614-Serveur-mail-Postfix.html
http://blog.hacky.info/index.php/post/2006/06/25/4-smtp-auth-en-tls-sous-postfix-avec-sasl-courier-authdaemon
http://creativecommons.org/licenses/by-nc/2.0/fr/
Postfix SASL (SSL) et TLS
Les paquets indispensables
apt-get install postfix libsasl2-2 sasl2-bin libsasl2-modules postfix-pcre
apt-get install sasl2-bin libsasl2-modules
TLS
La couche de sécurité du transport TLS (ou SSL) fournit les authentifications basées sur des certificats et le chiffrement des sessions. Une session chiffrée protège les informations transmises par message SMTP ou par les authentifications SASL.
Génération des certificats SSL
Afin d'exploiter le SSL, il va falloir générer des certificats pour Postfix :
mkdir /etc/postfix/ssl
cd /etc/postfix/ssl/
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr
Quelques exemples de réponses aux questions qui vous seront posées à cette étape :
Organization Name (O) : Priot
Organizational Unit Name (OU) : SMTPD SSL key
Common Name (CN) : priot.com
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
Répondez aux questions de la même façon qu'à l'étape précédente.
Modification de la configuration Postfix pour TLS
Ajoutons quelques lignes de configuration à main.cf pour activer TLS :
vi /etc/postfix/main.cf
smtpd_tls_security_level = may
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_auth_only = no
smtpd_use_tls = yes
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
smtpd_recipient_limit = 100
smtpd_helo_restrictions = reject_invalid_hostname
smtpd_sender_restrictions = reject_unknown_address
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, reject_unknown_sender_domain, reject_unknown_client, reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net, reject_rbl_client cbl.abuseat.org, permit
La dernière instruction nécessite une précision. Elle permet la connexion aux clients authentifiés via SASL, puis aux clients appartenant aux réseau locaux, rejette les destinations inconnues, les expéditeurs provenant de domaines inconnus et les clients inconnus. Elle contient également une liste de serveurs RBL qui contiennent des bases de données d'adresses IP de spammeurs identifiés. N'hésitez pas à l'ajuster selon vos besoins. Certains serveurs sont plus restrictifs que d'autres. Enfin, elle se termine par l'instruction permit qui autorise l'accès aux clients ayant passé avec succès cette liste de vérifications. Consultez aussi la documentation : Contrôle d'accès et de relais SMTP et Vérification des adresses pour la réception
SASL
Afin de permettre l'authentification SASL par Postfix, il va être nécessaire de modifier la configuration générale. Nous allons ajouter les options suivantes à /etc/postfix/main.cf afin de n'autoriser l'accès au SMTP qu'aux utilisateurs identifiés (par un login qui est leur adresse e-mail, et le mot de passe de ce compte e-mail). Consultez aussi à ce sujet la documentation : Authentification SASL
vi /etc/postfix/main.cf
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
SMTP auth en TLS sous postfix avec SASL & courier-authdaemon
Pré-requis, au risque d'être trivial :
apt-get install courier-imapcourier-authdaemon
Corrigez les permissions sur le répertoire /var/run/courier/authdaemon afin que saslauthd dialogue avec courier-authdaemond.
chmod 775 /var/run/courier/authdaemon
Passons maintenant à la configuration de saslauthd :
Editez le fichier /etc/default/saslauthd :
NAME="saslauthd"
START=yes
MECHANISMS="sasldb"
OPTIONS="-c -r -m /var/run/saslauthd"
mkdir -p /var/spool/postfix/var/run/saslauthd
chgrp sasl /var/spool/postfix/var/run/saslauthd
mv /var/run/saslauthd /var/spool/postfix/var/run/saslauthd
ln -s /var/spool/postfix/var/run/saslauthd /var/run/saslauthd
Ensuite créez le répertoire /etc/postfix/sasl :
mkdir /etc/postfix/sasl && chown root:postfix /etc/postfix/sasl
Et créez y le fichier smtpd.conf contenant :
pwcheck_method: authdaemond
authdaemond_path: /var/run/courier/authdaemon/socket
mech_list: plain login
allow_plaintext: true
Et finissons avec la configuration de postfix :
Editons le fichier /etc/postfix/main.cf, et ajoutons :
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key
Enfin, redémarrons le tout :
/etc/init.d/postfix restart
/etc/init.d/saslauthd restart
Courier
Régler courier-authdaemond pour traiter les requêtes d'authentifications - pour imap comme pour smtp.
dans /etc/courier
mkdir authdaemon
Ajouter le module de méthode d'authentification userdb au fichier authdaemonrc et créer les entrées nécessaire dans cette table.
Attention, la syntaxe du fichier userdb est stricte : il est par exemple impératif que les logins soient séparés de leur chaine d'informations à par une tabulation unique.
Réglage du port d'écoute
Pour forcer Postfix à faire écouter SMTPS sur le port 465
Ajouter la ligne suivante au fichier de conf master.cf:
smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject
Client mail
Voila ! Il ne vous reste plus qu'à configurer votre client mail favori pour se connecter en TLS sur port 465 avec authentification "PLAIN", y indiquer votre login et votre mot de passe.
Si votre client est une version 2.* de Thunderbird, vous pourrez installer un add-on lui permettant de retenir l'exception de sécurité constituée par l'absence de certification par un organisme tiers de votre certificat SSL.
http://www.andrewlucking.com/archives/category/remember-mismatched-domains/
http://www.andrewlucking.com/code/ff-extensions/remember-mismatch_1.4.6.xpi
Les versions 3.* de Thunberbird intégrent désormais cette fonctionnalité.