Niveau : Expert

Postfix, SMTP, SASL (SSL), TLS, POP3 et IMAP

Configuration de Postfix, le serveur de mail phare, avec ses services POP3, SMTP et IMAP, authentifications sécurisées et spamassassin.

Tutoriel par (Alsacréations, Strasbourg)
Créé le , mis à jour le (150461 lectures)
Tags : développement, smtp, smtpd, pop3, postfix, imap, pop3d

Postfix

Postfix brouette

Postfix est le serveur SMTP de messagerie électronique libre le plus répandu. Il se charge de la livraison des e-mails et a été conçu de façon modulaire autour de différents programmes dévolus chacun à une tâche précise. Cela le rend résistant en terme de sécurité, tout en étant extensible. Plusieurs commandes servent à l'administrer, en voici quelques unes :

  • postfix : pour démarrer, arrêter et redémarrer Postfix (root seulement)
  • postconf : affiche ou permet d'éditer les paramètres du fichier main.cf
  • postalias : maintient les bases de données alias de Postfix (cf : newaliases)
  • postmap : maintient les tables de correspondances de Postfix (cf : hash)
  • postsuper : maintient la file d'attente

Dans la plupart des cas, la configuration suggérée ici sera à adapter à votre situation. En effet, celle-ci est relativement longue à mettre en place selon les mécanismes de stockage et d'identification choisis.

Installation

Commençons par ajouter les paquets postfix, sasl pour l'authentification et procmail :

apt-get install postfix libsasl2-2 sasl2-bin libsasl2-modules libdb4.8-util procmail

Si l'installation ne vous propose pas directement de répondre aux questions de configuration des paquets, utilisez la commande :

dpkg-reconfigure postfix

Voici les réponses-types à apporter dans la langue de Shakespeare. En ce qui concerne le nom du serveur, remplacez bien sûr test.alsacreations.com par votre hostname (de préférence celui contenu dans le fichier /etc/hostname) :

General type of configuration? <-- Internet Site
Where should mail for root go <-- rien (laisser blanc)
Mail name? <-- test.alsacreations.com
Other destinations to accept mail for? (blank for none) <-- test.alsacreations.com, localhost
Force synchronous updates on mail queue? <-- No
Local networks? <-- 127.0.0.0/8
Use procmail for local delivery? <-- Yes
Mailbox size limit <-- 0
Local address extension character? <-- +
Internet protocols to use? <-- all

Configuration minimale

Le fichier de configuration principal de Postfix est /etc/postfix/main.cf

vi /etc/postfix/main.cf

Description de certaines directives :

myhostname = test.alsacreations.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 test.alsacreations.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. Soyez sobre.
mydestination = test.alsacreations.com, test, localhost.localdomain, 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 = 51200000
Limite de la taille maximum d'un message, en octets (ici 50 Mo).

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.

La documentation Postfix traduite en français recense les paramètres de configuration, n'hésitez pas à l'interroger.

Configuration avancée

biff = no
Activer la notification en cas de réception de nouveaux e-mails dans la console (yes / no).
mailbox_command = procmail -a "$EXTENSION"
Commande pour procmail.
recipient_delimiter = +
Séparateur entre le nom d'utilisateur et les extensions d'adresse (par défaut le signe +).
inet_interfaces = all
Interfaces réseau sur lesquelles écouter (ici all = toutes).
header_checks = regexp:/etc/postfix/header_checks
Permet d'opérer des tests sur les headers contenus dans l'e-mail avec des expressions régulières contenues dans le fichier mentionné. Utile pour filtrer "manuellement" des courriers indésirables. L'équivalent body_checks existe également.
alias_database = hash:/etc/aliases
Fichier de hash contenant une table d'alias mail. Celle-ci est éditable dans /etc/aliases, puis (indispensable) regénérée en hash grâce à la commande newaliases qui produit /etc/aliases.db

Consultez la documentation relative aux tables de correspondance pour plus de détails sur ces types.

Dans notre cas, nous allons utiliser le panel DTC pour la gestion des boîtes e-mail virtuelles (multi-domaines), ce qui produira automatiquement les options suivantes (données pour information, celles-ci pouvant varier selon le système et les versions) :

transport_maps = hash:/etc/postfix/transport
alias_maps = hash:/etc/aliases, hash:/var/lib/dtc/etc/postfix_aliases
relay_domains = /var/lib/dtc/etc/postfix_relay_domains
relay_recipient_maps = hash:/var/lib/dtc/etc/postfix_relay_recipients
virtual_alias_maps = hash:/var/lib/dtc/etc/postfix_virtual
virtual_mailbox_domains = hash:/var/lib/dtc/etc/postfix_virtual_mailbox_domains
virtual_mailbox_maps = hash:/var/lib/dtc/etc/postfix_vmailbox
virtual_uid_maps = hash:/var/lib/dtc/etc/postfix_virtual_uid_mapping
virtual_gid_maps = static:65534
virtual_mailbox_limit = 51200000
virtual_minimum_uid = 500
virtual_mailbox_base = /

Consultez aussi la documentation : Hébergement des sites virtuels

Vérifiez à tout instant la configuration grâce à postfix check, puis rechargez avec postfix reload

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)

Si vous utilisez le panel DTC, éditez/var/lib/dtc/etc/postfix_config_snippets pour ajouter des instructions spécifiques au fichier main.cf de Postfix qui peut être regénéré et donc oublier vos modifications. Celui-ci sera chargé en sus.

Postfix SASL (SSL) et TLS

Ces options sont facultatives mais permettent d'augmenter significativement la sécurité du serveur. Dans la plupart des cas si vous utilisez un panel de gestion (DTC, VHCS, ISPConfig, Plesk), elles seront mises en place automatiquement.

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) : Alsacreations
Organizational Unit Name (OU) : SMTPD SSL key
Common Name (CN) : test.alsacreations.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

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

Avec le panel d'administration DTC et au moment de la rédaction de ce tutoriel, il est recommandé d'exploiter sasldb2. Vous pouvez donc arrêter le service saslauthd et le retirer du démarrage : /etc/init.d/saslauthd stop && update-rc.d -f saslauthd remove puis modifier la façon dont le SMTP identifie les utilisateurs :

vi /etc/postfix/sasl/smtpd.conf

pwcheck_method: auxprop
mech_list: login plain

Dans certains cas, une petite manipulation est nécessaire pour la compatibilité du fichier sasldb2 avec Debian :

chown root.root /var/spool/postfix/etc/sasldb2

ln -s /var/spool/postfix/etc/sasldb2 /etc/sasldb2

N'oubliez pas de redémarrer Postfix si nécessaire : /etc/init.d/postfix restart puis passez directement à la dernière étape : Courier (POP3 et IMAP).

Si vous n'utilisez pas DTC, suivez ces quelques instructions pour mettre en place le daemon d'authentification, saslauthd :

mkdir -p /var/spool/postfix/var/run/saslauthd

ln -s /var/spool/postfix/var/run/saslauthd /var/run

chgrp sasl /var/spool/postfix/var/run/saslauthd

adduser postfix sasl

vi /etc/default/saslauthd

START=yes
MECHANISMS="pam"
PARAMS="-r"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"

vi /etc/postfix/sasl/smtpd.conf

pwcheck_method: saslauthd
mech_list: login plain

Démarrez ou redémarrez saslauthd : /etc/init.d/saslauthd start

N'oubliez pas de redémarrer Postfix si nécessaire : /etc/init.d/postfix restart

Si vos certificats ont été créés pour localhost et que vous obtenez un message d'avertissement dans votre client mail, re-générez ces derniers avec les bonnes informations (le champ CN=... doit refléter votre hostname dans imapd.cnf et pop3d.cnf) :

cd /etc/courier
vi /etc/courier/imapd.cnf
CN=test.alsacreations.com
vi /etc/courier/pop3d.cnf
CN=test.alsacreations.com
rm -f /etc/courier/imapd.pem
rm -f /etc/courier/pop3d.pem
mkimapdcert
mkpop3dcert

Puis redémarrez les services :

/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop-ssl restart

Amavis et Spamassassin

Il est possible d'utiliser l'anti-virus Amavis et Spamassassin pour filtrer les courriers entrants. Référez-vous à leurs documentations respectives pour tous les détails sur leur mise en place.

Courier : POP3 et IMAP

Courier joue le rôle de serveur POP3 et IMAP pour la réception des messages.

Installation

apt-get install courier-authdaemon courier-base courier-imap courier-maildrop courier-pop courier-pop-ssl courier-imap-ssl

Quelques questions peuvent vous être posées lors de l'installation. Par défaut, répondez :

Create directories for web-based administration ? <-- No
SSL certificate required <-- Ok

Nous pouvons voir qu'il est constitué de plusieurs paquets, deux pour le protocole POP et sa déclinaison SSL, deux autres pour l'IMAP et sa déclinaison SSL, et aussi un pour l'authentification.

Configuration

Toute la configuration de courier réside dans /etc/courier. Celle-ci sera en théorie générée automatiquement si vous possédez un panel d'administration (tel que DTC).

authdaemonrc
Contient la configuration du démon d'authentification, notamment la directive authmodulelist
authmodulelist
Liste des modules utilisés pour l'authentification
authmysqlrc
Si nécessaire contient les informations de connexion MySQL dans le cadre d'une authentification par base de données
imapd
Contient la configuration du démon IMAP avec notamment IMAPDSTART et MAILDIRPATH
imapd-ssl
Equivalent pour l'IMAP SSL
pop3d
Contient la configuration du démon POP3 avec notamment POP3DSTART et MAILDIRPATH
pop3d-ssl
Equivalent pour le POP3 SSL
userdb
Liste des utilisateurs, associée aux emplacements de stockage des mails

N'hésitez pas à redémarrer les services lors de changements de configuration.

/etc/init.d/courier-authdaemon restart

/etc/init.d/courier-imap restart

/etc/init.d/courier-imap-ssl restart

/etc/init.d/courier-pop restart

/etc/init.d/courier-pop-ssl restart

Spamassassin

Spam

SpamAssassin est le plus célèbre des anti-spam. Son installation se déroule de manière classique :

apt-get install spamassassin

Editez /etc/default/spamassassin pour activer le daemon en modifiant l'option ENABLED à 1.

ENABLED=1

Editez le fichier /etc/mail/spamassassin/local.cf en vous référant à la documentation pour personnaliser les règles de filtrage, et décommentez notamment la ligne permettant de définir le préfixe à ajouter aux sujets d'e-mails détectés comme indésirables :

rewrite_header Subject *****SPAM*****

Précisez si vous le souhaitez les trusted_networks (réseaux de confiance) et le niveau de sensibilité required_score qui se situe par défaut à 5 (score bas, 10 étant le plus élevé et le plus sensible mais augmentant le risque de faux positifs).

required_score required_score 5.0

L'option report_safe permet de sauver les messages incriminés en pièce jointe du mail original (0 : désactivé, 1 : activé, 2 : utiliser seulement du texte).

report_safe 1

Pour activer les filtres bayésiens :

use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1

Démarrez le service spamd :

/etc/init.d/spamassassin start

Lorsque vous rencontrez un e-mail de spam, vous pouvez le placer dans un répertoire (par exemple ~/Mail/spam) et lancer l'apprentissage : sa-learn --showdots --spam ~/Mail/spam. Si vous désirez tester un fichier mail, utilisez le client : spamc -c <fichier.eml 17.3="" 5.0=""></fichier.eml>. Note : Vous pouvez également coupler SpamAssassin à Razor 2, DCC et Pyzor pour la détection d'empreintes connues.

Dans certains cas il vous sera nécessaire de modifier la configuration de postfix dans /etc/postfix/master.cf afin de lui indiquer la méthode de filtrage. Si vous utilisez un panel tel que DTC, ces règles sont ajoutées automatiquement. Sinon, inspirez-vous de ces indications. A la ligne concernant le smtp, ajoutez l'option ''content_filter'. Ceci devrait ressembler à :

smtp inet n - - - 2 smtpd
-o content_filter=spamassassin

(Le 2 doit être le même chiffre indiqué que pour l'option max-children dans /etc/default/spamassassin).

Ajoutez également si nécessaire à la fin du fichier /etc/postfix/master.cf :

spamassassin unix - n n - - pipe
user=spamd argv=/usr/bin/spamc -f -e
/usr/sbin/sendmail -oi -f ${sender} ${recipient}

Puis rechargez la configuration de postfix /etc/init.d/postfix reload

Vous pourrez tester la bonne marche de spamassassin en vous envoyant un e-mail contenant XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X dans son body.

Consultez la Documentation de Postfix en français, c'est une mine inépuisable d'informations sur les différentes directives de configuration.