rss logo

Installer et configurer un serveur de messagerie Courier MTA sous Debian

Introduction

Ce guide explique comment installer et configurer un serveur de messagerie Courier MTA sous Debian. Il couvre les services SMTP et IMAP, les utilisateurs de messagerie virtuels, les alias, le relais de messages, l’authentification et le dépannage. Nous sécuriserons également les communications par courrier électronique à l’aide du chiffrement TLS et de certificats SSL/TLS.

Environnement de test

Ce guide a été initialement testé avec les versions logicielles suivantes :

  • Système d’exploitation : Debian 7.8 « Wheezy »
  • Courier MTA : 0.68
  • Courier IMAP : 4.10

Installer Courier MTA et IMAP

Installez Courier MTA, les services SMTP et IMAP sécurisés ainsi que l’utilitaire de surveillance de fichiers Gamin :

root@host:~# apt-get update
root@host:~# apt-get install gamin courier-mta courier-mta-ssl courier-imap courier-imap-ssl

Si vous prévoyez de proposer un accès POP3, installez les paquets Courier correspondants :

root@host:~# apt-get update
root@host:~# apt-get install courier-pop courier-pop-ssl

💡 Remarque : Gamin fournit les notifications du système de fichiers utilisées par Courier IMAP pour prendre en charge les fonctionnalités avancées d’IMAP IDLE.

Configurer l’authentification Courier

Configurez Courier afin qu’il utilise son moteur d’authentification UserDB. Modifiez le fichier /etc/courier/authdaemonrc et définissez la valeur suivante :

authmodulelist="authuserdb"

Courier UserDB stocke les informations des comptes utilisateurs virtuels dans une base de données reposant sur le format Berkeley DB.

Créer l’utilisateur de messagerie virtuel

Pour éviter de créer un compte système distinct pour chaque boîte aux lettres, créez un utilisateur système dédié nommé vmail. Ce compte sera propriétaire des répertoires de messagerie de tous les utilisateurs virtuels.

root@host:~# useradd --system --uid 7200 --home-dir /data/vmail \
  --create-home --shell /usr/sbin/nologin vmail

💡 Remarque : Le compte vmail ne nécessite ni mot de passe ni shell interactif, car il sert uniquement à posséder et à gérer les fichiers des boîtes aux lettres virtuelles.

Créez le répertoire qui contiendra les fichiers sources de Courier UserDB, puis limitez son accès à l’utilisateur root :

root@host:~# mkdir -p /etc/courier/userdb
root@host:~# chmod 700 /etc/courier/userdb

Créer un utilisateur de messagerie virtuel

Ajoutez la boîte aux lettres virtuelle user1@domain1 au fichier UserDB de domain1. Les valeurs uid et gid doivent correspondre aux identifiants attribués au compte vmail :

root@host:~# userdb -f /etc/courier/userdb/domain1 \
  user1@domain1 set \
  home=/data/vmail/domain1/user1 \
  mail=/data/vmail/domain1/user1/Maildir \
  uid=7200 \
  gid=7200

Définir le mot de passe de l’utilisateur virtuel

Générez et stockez les empreintes de mot de passe utilisées pour authentifier la boîte aux lettres virtuelle :

root@host:~# userdbpw -md5 | \
  userdb -f /etc/courier/userdb/domain1 \
  user1@domain1 set systempw

root@host:~# userdbpw -hmac-sha1 | \
  userdb -f /etc/courier/userdb/domain1 \
  user1@domain1 set hmac-sha1pw

🚨 Important : MD5 et SHA-1 sont des algorithmes cryptographiques obsolètes. Ces commandes sont conservées pour assurer la compatibilité avec l’ancienne version de Courier utilisée dans ce guide et ne doivent pas être employées pour déployer un nouveau serveur de messagerie.

Créer le Maildir de l’utilisateur

Créez l’arborescence qui stockera les boîtes aux lettres virtuelles. Dans cet exemple, toutes les données de messagerie sont stockées sous /data/vmail.

root@host:~# mkdir -p /data/vmail/domain1
root@host:~# chown -R vmail:vmail /data/vmail
root@host:~# chmod 750 /data/vmail
root@host:~# chmod 750 /data/vmail/domain1

Les permissions obtenues pour les répertoires doivent être similaires aux suivantes :

  • /data : appartient Ă  root:root, avec les permissions 755
  • /data/vmail : appartient Ă  vmail:vmail, avec les permissions 750
  • /data/vmail/domain1 : appartient Ă  vmail:vmail, avec les permissions 750

Créez le répertoire de la boîte aux lettres user1@domain1 et initialisez sa structure Maildir en tant qu’utilisateur vmail :

root@host:~# install -d -o vmail -g vmail -m 750 /data/vmail/domain1/user1
root@host:~# runuser -u vmail -- maildirmake /data/vmail/domain1/user1/Maildir

La commande maildirmake crée les sous-répertoires standards cur, new et tmp requis par le format Maildir.

Construire la base de données des utilisateurs

Assurez-vous que le répertoire Courier UserDB et ses fichiers sources sont accessibles uniquement par l’utilisateur root :

root@host:~# chmod 700 /etc/courier/userdb
root@host:~# chmod 600 /etc/courier/userdb/*

Compilez les fichiers sources UserDB dans la base de données utilisée par Courier :

root@host:~# makeuserdb

💡 Remarque : Exécutez de nouveau makeuserdb chaque fois que vous ajoutez, modifiez ou supprimez un utilisateur de messagerie virtuel.

Redémarrez le service d’authentification Courier pour appliquer les modifications :

root@host:~# /etc/init.d/courier-authdaemon restart

Testez l’authentification de la boîte aux lettres virtuelle :

root@host:~# authtest user1@domain1

Configurer les alias de messagerie

Les alias Courier redirigent une adresse électronique vers une autre. Modifiez le fichier d’alias associé au domaine hébergé, par exemple /etc/courier/aliases/domain1 :

alias@domain1: user1@domain1

Vérifiez la configuration des alias sans reconstruire la base de données :

root@host:~# makealiases -chk

Si aucune erreur n’est signalée, compilez la base de données des alias :

root@host:~# makealiases

Affichez les alias actuellement stockés dans la base de données compilée :

root@host:~# makealiases -dump

💡 Remarque : Exécutez de nouveau makealiases après chaque modification d’un fichier d’alias.

Configurer les domaines locaux et hébergés

Définissez les noms d’hôte que Courier doit considérer comme locaux. Le fichier /etc/courier/locals doit contenir les noms d’hôte locaux du serveur de messagerie :

root@host:~# echo "localhost" > /etc/courier/locals
root@host:~# echo "mail.domain1" >> /etc/courier/locals

Configurez ensuite les domaines de messagerie hébergés par le serveur. Créez un fichier pour chaque domaine hébergé dans le répertoire /etc/courier/hosteddomains :

root@host:~# mkdir -p /etc/courier/hosteddomains
root@host:~# echo "domain1" > /etc/courier/hosteddomains/domain1
root@host:~# makehosteddomains

💡 Remarque : Exécutez de nouveau makehosteddomains chaque fois que vous ajoutez ou supprimez un domaine de messagerie hébergé.

Configurez Courier SMTP afin qu’il accepte les messages entrants adressés à domain1 :

root@host:~# mkdir -p /etc/courier/esmtpacceptmailfor.dir
root@host:~# echo "domain1" > /etc/courier/esmtpacceptmailfor.dir/domain1
root@host:~# makeacceptmailfor

🚨 Important : Ajoutez uniquement les domaines pour lesquels ce serveur est autorisé à recevoir des messages. Une configuration incorrecte peut amener Courier à accepter des messages destinés à des domaines qu’il ne gère pas.

Configurer un relais SMTP sortant

Si le serveur ne peut pas distribuer directement les messages aux serveurs de messagerie destinataires, Courier peut transférer tous les messages sortants par l’intermédiaire d’un relais SMTP externe, également appelé smarthost. Cette configuration peut être imposée par votre fournisseur d’accès à Internet ou votre hébergeur.

Modifiez le fichier /etc/courier/esmtproutes et définissez le serveur relais :

: smtp.domain1

Les deux-points au début de la ligne appliquent la route à tous les domaines de destination. Pour utiliser un port TCP particulier, ajoutez-le au nom d’hôte du relais :

: smtp.domain1,587

Si le relais SMTP exige une authentification, ajoutez les identifiants correspondants dans /etc/courier/esmtpauthclient :

smtp.domain1,587 username password

Limitez l’accès au fichier d’authentification, car il contient le mot de passe du relais en clair :

root@host:~# chown root:root /etc/courier/esmtpauthclient
root@host:~# chmod 600 /etc/courier/esmtpauthclient

🚨 Important : Le nom d’hôte et le port indiqués dans esmtpauthclient doivent correspondre au relais défini dans esmtproutes. Remplacez les valeurs d’exemple par celles fournies par votre prestataire SMTP.

Activer TLS et l’authentification SMTP

Modifiez /etc/courier/esmtpd pour configurer le service SMTP, activer STARTTLS et définir les mécanismes d’authentification pris en charge.

Vérifiez ou modifiez les paramètres suivants :

COURIERTLS=/usr/bin/couriertls
TLS_CERTFILE=/etc/courier/esmtpd.pem
TLS_TRUSTCERTS=/etc/ssl/certs
TLS_VERIFYPEER=NONE

ESMTPAUTH="PLAIN LOGIN"
ESMTPAUTH_TLS="PLAIN LOGIN"

ESMTPDSTART=YES

Le fichier TLS_CERTFILE doit contenir le certificat du serveur SMTP et sa clé privée non chiffrée. Il ne doit pas être lisible par les utilisateurs non privilégiés.

root@host:~# chown root:root /etc/courier/esmtpd.pem
root@host:~# chmod 600 /etc/courier/esmtpd.pem

🚨 Important : Les mécanismes PLAIN et LOGIN ne chiffrent pas eux-mêmes les identifiants. Ils doivent être proposés uniquement via une connexion TLS chiffrée.

💡 Remarque : Courier peut utiliser un service distinct de soumission SMTP sur le port TCP 587, configuré au moyen de /etc/courier/esmtpd-msa. Cette solution est préférable à l’utilisation du port TCP 25 pour les clients de messagerie authentifiés.

Exiger TLS 1.2 ou une version ultérieure

Configurez Courier afin qu’il accepte uniquement TLS 1.2 ou une version ultérieure. Modifiez /etc/courier/esmtpd et définissez :

TLS_PROTOCOL="TLSv1.2+"

🚨 Important : N’utilisez pas TLS1 ni une liste de suites cryptographiques limitée à TLSv1. TLS 1.0 est obsolète et ne doit plus être activé sur un serveur de messagerie.

Activer IMAP IDLE

L’extension IMAP IDLE permet aux clients de messagerie compatibles de recevoir les mises à jour de la boîte aux lettres sans interroger continuellement le serveur. Les clients peuvent, par exemple, être avertis lorsqu’un message est ajouté, supprimé ou marqué comme lu.

Modifiez /etc/courier/imapd et vérifiez que les paramètres suivants sont activés :

IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE"
IMAP_USELOCKS=1
IMAP_ENHANCEDIDLE=1

💡 Remarque : La capacité IDLE doit figurer dans IMAP_CAPABILITY. L’option IMAP_USELOCKS synchronise les mises à jour des index de dossiers lorsque plusieurs clients IMAP accèdent à la même boîte aux lettres.

Redémarrez le service Courier IMAP pour appliquer les modifications :

root@host:~# /etc/init.d/courier-imap restart

Consultez la documentation de Courier IMAP pour plus d’informations.

Définir la taille maximale des messages

Courier lit la taille maximale acceptée des messages, exprimée en octets, dans /etc/courier/sizelimit. L’exemple suivant fixe une limite de 50 Mio :

root@host:~# echo "52428800" > /etc/courier/sizelimit

💡 Remarque : Cette limite s’applique au message complet, notamment à ses en-têtes, son corps, ses pièces jointes et la surcharge liée à l’encodage MIME. Une limite de 50 Mio n’autorise donc pas nécessairement une pièce jointe de 50 Mio.

🚨 Important : La valeur 0 désactive la limite de taille des messages. Cette configuration est généralement déconseillée, car des messages très volumineux pourraient consommer une quantité excessive d’espace disque ou de ressources serveur.

Configurer une adresse collectrice

Une adresse collectrice (« catch-all ») reçoit les messages envoyés à des adresses qui n’existent pas dans un domaine hébergé. Dans cet exemple, tous les messages sans destinataire correspondant pour domain1 sont distribués dans la boîte aux lettres associée à l’utilisateur virtuel alias@domain1.

Assurez-vous que la boîte aux lettres collectrice existe, puis créez son instruction de distribution Courier par défaut :

root@host:~# install -d -o vmail -g vmail -m 750 /data/vmail/domain1/alias
root@host:~# runuser -u vmail -- maildirmake /data/vmail/domain1/alias/Maildir
root@host:~# printf '%s\n' "./Maildir" > /data/vmail/domain1/alias/.courier-default
root@host:~# chown vmail:vmail /data/vmail/domain1/alias/.courier-default
root@host:~# chmod 600 /data/vmail/domain1/alias/.courier-default

🚨 Important : Les adresses collectrices reçoivent généralement beaucoup de messages indésirables, car elles acceptent les messages envoyés à des destinataires mal orthographiés, aléatoires ou inexistants. Elles compliquent également la vérification des destinataires et le dépannage. Créez des alias explicites chaque fois que possible.

Configurer IMAP avec TLS

Courier IMAP peut fournir un accès chiffré aux boîtes aux lettres via IMAPS sur le port TCP 993. Modifiez /etc/courier/imapd-ssl et vérifiez les paramètres suivants :

SSLPORT=993
SSLADDRESS=0
SSLPIDFILE=/var/run/courier/imapd-ssl.pid
SSLLOGGEROPTS="-name=imapd-ssl"

IMAPDSSLSTART=YES
IMAPDSTARTTLS=YES
IMAP_TLS_REQUIRED=0

COURIERTLS=/usr/bin/couriertls
TLS_CERTFILE=/etc/courier/imapd.pem
TLS_TRUSTCERTS=/etc/ssl/certs
TLS_VERIFYPEER=NONE
TLS_PROTOCOL="TLSv1.2+"

TLS_CACHEFILE=/var/lib/courier/couriersslcache
TLS_CACHESIZE=524288

MAILDIRPATH=Maildir

💡 Remarque : IMAPDSSLSTART=YES active le service IMAPS dédié sur le port TCP 993. IMAPDSTARTTLS=YES permet aux clients connectés au service IMAP standard sur le port TCP 143 de sécuriser la connexion au moyen de STARTTLS.

🚨 Important : Avec IMAP_TLS_REQUIRED=0, une authentification non chiffrée peut rester disponible sur le port TCP 143. Définissez cette option sur 1 si toute authentification IMAP doit obligatoirement utiliser TLS, après avoir vérifié que chaque client de messagerie le prend en charge.

Protégez la clé privée contenue dans le fichier de certificat Courier :

root@host:~# chown root:root /etc/courier/imapd.pem
root@host:~# chmod 600 /etc/courier/imapd.pem

Créer un certificat autosigné

Un certificat autosigné peut être utilisé pour des tests ou dans un environnement interne où l’autorité de certification est manuellement approuvée par tous les clients de messagerie.

root@host:~# openssl req -x509 -newkey rsa:4096 -sha256 -nodes \
  -days 3650 \
  -keyout server.key \
  -out server.crt \
  -subj "/CN=mail.domain1" \
  -addext "subjectAltName=DNS:mail.domain1"

Créez les fichiers PEM attendus par Courier pour les services SMTP et IMAP :

root@host:~# cat server.key server.crt > /etc/courier/esmtpd.pem
root@host:~# cat server.key server.crt > /etc/courier/imapd.pem

root@host:~# chown root:root /etc/courier/esmtpd.pem /etc/courier/imapd.pem
root@host:~# chmod 600 /etc/courier/esmtpd.pem /etc/courier/imapd.pem

🚨 Important : Remplacez mail.domain1 par le nom d’hôte utilisé par les clients de messagerie. Un certificat autosigné génère un avertissement de confiance, sauf si son certificat émetteur est explicitement installé sur chaque client.

Utiliser des certificats Let’s Encrypt

Pour un serveur de messagerie accessible publiquement, utilisez un certificat émis pour le nom d’hôte du serveur. Courier attend la clé privée et la chaîne complète de certificats dans un seul fichier PEM.

root@host:~# cat \
  /etc/letsencrypt/live/mail.domain1/privkey.pem \
  /etc/letsencrypt/live/mail.domain1/fullchain.pem \
  > /etc/courier/esmtpd.pem

root@host:~# cp /etc/courier/esmtpd.pem /etc/courier/imapd.pem

root@host:~# chown root:root /etc/courier/esmtpd.pem /etc/courier/imapd.pem
root@host:~# chmod 600 /etc/courier/esmtpd.pem /etc/courier/imapd.pem

Redémarrez les services TLS SMTP et IMAP de Courier :

root@host:~# /etc/init.d/courier-mta-ssl restart
root@host:~# /etc/init.d/courier-imap-ssl restart

🚨 Important : Les certificats Let’s Encrypt sont renouvelés régulièrement, mais les fichiers PEM combinés de Courier ne sont pas régénérés automatiquement. Ajoutez ces commandes à un script de déploiement Certbot afin que Courier reçoive le certificat renouvelé et recharge ses services.

Tester Courier MTA

Envoyer un message de test depuis le serveur

Envoyez un message de test par l’intermédiaire du Courier MTA local à l’aide de la commande sendmail :

root@host:~# printf 'To: user2@domain2\nFrom: user1@domain1\nSubject: Courier test\n\nThis is a test message.\n' | /usr/sbin/sendmail -t

L’option -t demande à sendmail de lire les adresses des destinataires dans les en-têtes du message.

Tester l’authentification localement

Utilisez authtest pour vérifier que Courier peut authentifier une boîte aux lettres virtuelle :

root@host:~# authtest -s imap user1@domain1 password

🚨 Important : Le mot de passe est visible dans l’historique du shell et potentiellement dans la liste des processus pendant l’exécution de cette commande. Utilisez un compte de test temporaire ou supprimez la commande de l’historique du shell après le test.

Tester POP3 et IMAP depuis un client

Tester POP3 avec STARTTLS

Connectez-vous au service POP3 sur le port TCP 110, puis sécurisez la connexion avec TLS :

user@client:~$ openssl s_client \
  -connect mail.domain1:110 \
  -starttls pop3 \
  -servername mail.domain1 \
  -crlf

Une fois la connexion TLS établie, saisissez :

USER user1@domain1
PASS password
STAT
QUIT

Tester POP3 avec TLS implicite

Testez le service POP3 chiffré sur le port TCP 995 :

user@client:~$ openssl s_client \
  -connect mail.domain1:995 \
  -servername mail.domain1 \
  -crlf

Saisissez ensuite :

USER user1@domain1
PASS password
STAT
QUIT

Tester IMAP avec STARTTLS

Connectez-vous au service IMAP sur le port TCP 143 et négociez STARTTLS :

user@client:~$ openssl s_client \
  -connect mail.domain1:143 \
  -starttls imap \
  -servername mail.domain1 \
  -crlf

Une fois connecté, authentifiez-vous et affichez l’état de la boîte aux lettres :

a LOGIN user1@domain1 password
a EXAMINE INBOX
a LOGOUT

Tester IMAP avec TLS implicite

Testez le service IMAP chiffré sur le port TCP 993 :

user@client:~$ openssl s_client \
  -connect mail.domain1:993 \
  -servername mail.domain1 \
  -crlf

Saisissez ensuite :

a LOGIN user1@domain1 password
a EXAMINE INBOX
a LOGOUT

💡 Remarque : Remplacez mail.domain1, user1@domain1 et password par le nom d’hôte de votre serveur et les identifiants de votre compte de test.

Vérifier le certificat TLS

Ajoutez -verify_return_error afin que le test échoue si OpenSSL ne peut pas valider la chaîne de certificats :

user@client:~$ openssl s_client \
  -connect mail.domain1:993 \
  -servername mail.domain1 \
  -verify_hostname mail.domain1 \
  -verify_return_error

Une vérification réussie doit se terminer par :

Verify return code: 0 (ok)

Tester le service SMTP

Les exemples suivants utilisent S: pour les réponses renvoyées par le serveur et C: pour les commandes saisies par le client.

Tester SMTP sans authentification

Connectez-vous au service SMTP sur le port TCP 25 et négociez une connexion TLS à l’aide de STARTTLS :

user@client:~$ openssl s_client \
  -connect mail.domain1:25 \
  -starttls smtp \
  -servername mail.domain1 \
  -crlf

Une fois la connexion établie, saisissez les commandes SMTP suivantes :

S: 220 mail.domain1 ESMTP Courier
C: EHLO client.domain1
S: 250-mail.domain1
S: 250-STARTTLS
S: 250-SIZE 52428800
S: 250 HELP

C: MAIL FROM:<test@sender.example>
S: 250 Ok

C: RCPT TO:<user1@domain1>
S: 250 Ok

C: DATA
S: 354 End data with <CR><LF>.<CR><LF>

C: From: test@sender.example
C: To: user1@domain1
C: Subject: Courier SMTP test
C:
C: This is a test message.
C: .

S: 250 Ok
C: QUIT
S: 221 Bye

💡 Remarque : La ligne vide entre l’en-tête Subject et le corps du message est obligatoire. Pour terminer la commande DATA, saisissez un point seul sur une nouvelle ligne.

🚨 Important : Une distribution sans authentification ne doit réussir que lorsque le destinataire appartient à un domaine hébergé par le serveur. Courier doit refuser les tentatives de relais vers des domaines externes provenant de clients non autorisés.

Tester SMTP avec authentification

Pour tester la soumission SMTP authentifiée, connectez-vous au serveur sur le port TCP 587 avec STARTTLS. L’exemple ci-dessous utilise le mécanisme d’authentification AUTH LOGIN.

Encodez d’abord le nom d’utilisateur et le mot de passe en Base64. Utilisez printf afin de ne pas ajouter de caractère de saut de ligne :

user@client:~$ printf '%s' 'user1@domain1' | base64
dXNlcjFAZG9tYWluMQ==
user@client:~$ printf '%s' 'P@ssw0rd' | base64
UEBzc3cwcmQ=

🚨 Important : Base64 est un format d’encodage, pas un chiffrement. N’utilisez jamais AUTH LOGIN sans avoir préalablement établi une connexion chiffrée par TLS.

Connectez-vous au service de soumission SMTP et négociez STARTTLS :

user@client:~$ openssl s_client \
  -connect mail.domain1:587 \
  -starttls smtp \
  -servername mail.domain1 \
  -crlf

Une fois la connexion TLS établie, saisissez les commandes SMTP suivantes :

S: 220 mail.domain1 ESMTP Courier
C: EHLO client.domain1
S: 250-mail.domain1
S: 250-AUTH LOGIN PLAIN
S: 250 SIZE 52428800

C: AUTH LOGIN
S: 334 VXNlcm5hbWU6
C: dXNlcjFAZG9tYWluMQ==

S: 334 UGFzc3dvcmQ6
C: UEBzc3cwcmQ=

S: 235 Authentication successful

C: MAIL FROM:<user1@domain1>
S: 250 Ok

C: RCPT TO:<recipient@example.net>
S: 250 Ok

C: DATA
S: 354 End data with <CR><LF>.<CR><LF>

C: From: user1@domain1
C: To: recipient@example.net
C: Subject: Courier authenticated SMTP test
C:
C: This is a test message sent through authenticated SMTP.
C: .

S: 250 Ok
C: QUIT
S: 221 Bye

💡 Remarque : Contrairement au test sans authentification sur le port TCP 25, un utilisateur authentifié doit normalement être autorisé à envoyer des messages vers des domaines externes par l’intermédiaire du service de soumission.

🚨 Important : Le nom d’utilisateur et le mot de passe saisis pendant ce test peuvent rester visibles dans l’historique du terminal. Utilisez un compte de test dédié et évitez d’exposer des identifiants de production.

Autoriser le relais SMTP pour les clients de confiance

Par défaut, Courier ne doit accepter que les messages adressés aux domaines hébergés par le serveur. Pour permettre à un appareil ou à une application de confiance de relayer des messages vers des domaines externes sans authentification SMTP, ajoutez son adresse IP aux règles d’accès SMTP de Courier.

Créez ou modifiez un fichier dans /etc/courier/smtpaccess, par exemple /etc/courier/smtpaccess/trusted-clients :

root@host:~# nano /etc/courier/smtpaccess/trusted-clients

Ajoutez l’adresse IP du client de confiance, suivie d’une tabulation et de la règle allow,RELAYCLIENT :

192.168.1.50<TAB>allow,RELAYCLIENT

💡 Remarque : Remplacez <TAB> par un véritable caractère de tabulation. Ne saisissez pas littéralement le texte <TAB>.

Reconstruisez la base de données des accès SMTP de Courier :

root@host:~# makesmtpaccess

Redémarrez les services SMTP de Courier pour appliquer la nouvelle règle :

root@host:~# /etc/init.d/courier-mta restart
root@host:~# /etc/init.d/courier-mta-ssl restart

🚨 Important : Autorisez uniquement des adresses IP de confiance précises. N’accordez jamais l’accès au relais à un réseau public entier ni à tous les hôtes, car le serveur pourrait devenir un relais ouvert et permettre à des spammeurs d’envoyer des messages par son intermédiaire.

💡 Recommandation : Pour les postes de travail et les clients de messagerie, privilégiez la soumission SMTP authentifiée via TLS sur le port TCP 587. Les règles de relais fondées sur l’adresse IP conviennent principalement aux serveurs de confiance, imprimantes, systèmes de supervision ou applications anciennes qui ne peuvent pas utiliser l’authentification SMTP.

Archiver les messages Maildir par date

L’exemple suivant déplace les messages dont l’en-tête Date contient l’année 2012 vers le dossier Maildir .Sent.2012.

🚨 Important : Cette méthode utilise la date déclarée dans l’en-tête du message, et non celle à laquelle le message a été reçu ou stocké. Les en-têtes peuvent être incorrects ou avoir été modifiés par l’expéditeur.

Créez d’abord le dossier Maildir de destination s’il n’existe pas encore :

root@host:~# runuser -u vmail -- maildirmake /data/vmail/domain1/user1/Maildir/.Sent.2012

Placez-vous dans le répertoire cur contenant les messages à archiver :

root@host:~# cd /data/vmail/domain1/user1/Maildir/.Sent/cur

Avant de déplacer des messages, affichez les fichiers dont l’en-tête Date contient 2012 :

root@host:~# find . -maxdepth 1 -type f -print0 | \
  while IFS= read -r -d '' message; do
    if grep -qm1 '^Date:.*2012' "$message"; then
      printf '%s\n' "$message"
    fi
  done

Après avoir vérifié les résultats, déplacez les messages correspondants vers le dossier de destination :

root@host:~# find . -maxdepth 1 -type f -print0 | \
  while IFS= read -r -d '' message; do
    if grep -qm1 '^Date:.*2012' "$message"; then
      mv -- "$message" ../../.Sent.2012/cur/
      printf 'Moved: %s\n' "$message"
    fi
  done

💡 Remarque : Exécutez ces commandes en tant qu’utilisateur vmail ou vérifiez le propriétaire des fichiers déplacés après l’opération. Sauvegardez la boîte aux lettres avant de déplacer un grand nombre de messages.

Erreurs courantes de Courier MTA

Message MIME corrompu ou mal formé

Courier peut remplacer un message par un avertissement lorsqu’il détecte un contenu MIME mal formé, une pièce jointe incorrectement encodée ou un formatage de message invalide.

Le destinataire peut recevoir un message similaire au suivant :

CORRUPTED MESSAGE

This is the Courier Mail Server 0.68 on mailserver.

I received the following message for delivery to your address. This message
contains several internal formatting errors.

This message contains improperly-formatted binary content, or attachment.

Cette erreur est généralement provoquée par un client de messagerie ayant généré un message MIME invalide, par une pièce jointe incorrectement encodée ou, dans certains cas, par un contenu volontairement mal formé.

🚨 Important : Ne supposez pas automatiquement que le message est inoffensif. Un contenu MIME mal formé peut provenir d’un expéditeur légitime, mais il peut également servir à dissimuler des pièces jointes malveillantes ou à exploiter des vulnérabilités dans les clients de messagerie.

Pour autoriser Courier à accepter les messages MIME mal formés, créez ou modifiez le fichier /etc/courier/bofh et ajoutez :

opt BOFHBADMIME=accept

Redémarrez Courier MTA pour appliquer la modification :

root@host:~# /etc/init.d/courier-mta restart

🚨 Important : Cette option désactive le rejet par Courier de certains messages MIME mal formés. Bien qu’elle puisse améliorer la compatibilité avec des messages incorrectement formatés, elle peut également entraîner des messages endommagés, des pièces jointes inaccessibles ou un comportement inattendu des clients de messagerie. Activez-la uniquement si nécessaire.

Accepter les majuscules dans les adresses électroniques

Par défaut, Courier peut rejeter les adresses électroniques locales contenant des majuscules. Créez le fichier /etc/courier/locallowercase afin que le traitement des adresses locales ne soit pas sensible à la casse :

root@host:~# touch /etc/courier/locallowercase
root@host:~# /etc/init.d/courier-mta restart

💡 Remarque : Les noms de domaine des adresses électroniques ne sont pas sensibles à la casse. Bien que la partie locale d’une adresse puisse théoriquement l’être, il est fortement recommandé d’utiliser systématiquement des adresses en minuscules afin d’éviter les problèmes de compatibilité.

Débloquer les adresses bloquées par la protection contre le backscatter

Si Courier rencontre un échec de distribution locale, par exemple parce que le Maildir n’existe pas, que la boîte aux lettres possède un propriétaire incorrect ou qu’une commande de distribution échoue, il peut temporairement cesser d’accepter les messages destinés au destinataire concerné.

Ce mécanisme réduit le risque de générer des rapports répétés de non-distribution, également appelés backscatter. Des erreurs telles que les suivantes peuvent apparaître dans les journaux ou être renvoyées au serveur expéditeur :

456 Address temporarily unavailable
502 ESMTP command error

Corrigez le problème sous-jacent de boîte aux lettres ou de distribution avant de débloquer l’adresse.

Répertoriez toutes les adresses actuellement bloquées par la protection contre le backscatter de Courier :

root@host:~# courier show all

Débloquez une adresse précise :

root@host:~# courier clear user1@domain1

Débloquez toutes les adresses :

root@host:~# courier clear all

🚨 Important : Le déblocage d’une adresse ne corrige pas le problème de distribution initial. Vérifiez d’abord le chemin du Maildir, son propriétaire, ses permissions, l’entrée UserDB et la configuration de distribution des messages ; sinon, Courier risque de bloquer de nouveau l’adresse.

Erreur « No Route to Host »

courieresmtp: id=00000000008002CF.0000000050C99F63.00003ECE,from=<>,addr=<user@example.net> No route to host

Cette erreur indique que Courier ne peut pas établir de connexion réseau avec le serveur SMTP de destination. Les causes possibles comprennent une route réseau incorrecte, une règle de pare-feu, un problème de résolution DNS, un serveur distant indisponible ou un trafic SMTP sortant bloqué.

Commencez par vérifier la connectivité réseau et la résolution DNS :

root@host:~# getent hosts example.net
root@host:~# ip route
root@host:~# nc -vz mail.example.net 25

Si la distribution SMTP directe est bloquée par votre fournisseur d’accès à Internet, configurez Courier pour transférer les messages sortants par l’intermédiaire d’un relais SMTP autorisé. Modifiez /etc/courier/esmtproutes :

: smtp.provider.example,587

Redémarrez Courier MTA après avoir modifié la route :

root@host:~# /etc/init.d/courier-mta restart

🚨 Important : Utilisez uniquement un relais SMTP pour lequel vous disposez d’une autorisation et d’identifiants valides. Le nom d’hôte, le port et les paramètres d’authentification du relais doivent correspondre aux informations fournies par votre prestataire.

Limite maximale de connexions IMAP atteinte

L’erreur suivante indique que Courier IMAP a atteint la limite globale de connexions ou le nombre maximal de connexions simultanées autorisées pour une même adresse IP cliente :

Maximum connection limit reached for ::ffff:192.168.X.X

Modifiez /etc/courier/imapd et vérifiez les paramètres suivants :

MAXDAEMONS=300
MAXPERIP=60

MAXDAEMONS définit le nombre maximal de processus IMAP simultanés, tandis que MAXPERIP limite le nombre de connexions concurrentes provenant d’une même adresse IP.

🚨 Important : N’augmentez pas ces valeurs sans avoir identifié la cause du nombre excessif de connexions. Un client de messagerie mal configuré, une adresse NAT partagée ou une attaque automatisée peut consommer toutes les sessions IMAP disponibles.

Redémarrez les services Courier IMAP après avoir modifié les limites :

root@host:~# /etc/init.d/courier-imap restart
root@host:~# /etc/init.d/courier-imap-ssl restart

Erreur « 513 Relaying Denied »

Cette erreur se produit lorsque Courier refuse de relayer un message. Si le destinataire appartient à un domaine hébergé par le serveur, assurez-vous que ce domaine figure dans la configuration des domaines de messagerie acceptés :

root@host:~# mkdir -p /etc/courier/esmtpacceptmailfor.dir
root@host:~# echo "domain1" > /etc/courier/esmtpacceptmailfor.dir/domain1
root@host:~# makeacceptmailfor

Redémarrez Courier MTA pour appliquer la nouvelle configuration :

root@host:~# /etc/init.d/courier-mta restart

🚨 Important : N’ajoutez pas de domaines externes arbitraires dans esmtpacceptmailfor.dir. Ce fichier doit contenir uniquement les domaines pour lesquels le serveur est autorisé à recevoir des messages. L’accès au relais externe doit plutôt être accordé au moyen de l’authentification SMTP ou d’une règle de relais restreinte fondée sur l’adresse IP.

Connexions SMTP ou distribution des messages lentes

La lenteur des connexions SMTP peut être provoquée par les recherches DNS inversées ou les requêtes Ident effectuées lors de la connexion d’un client. Pour désactiver ces vérifications, modifiez /etc/courier/esmtpd :

TCPDOPTS="-nodnslookup -noidentlookup -stderrlogger=/usr/sbin/courierlogger"

Redémarrez Courier MTA après avoir modifié la configuration :

root@host:~# /etc/init.d/courier-mta restart

💡 Remarque : La désactivation des recherches DNS lors de la connexion peut réduire les délais, mais supprime également des journaux des informations potentiellement utiles sur les noms d’hôte. Vérifiez la configuration DNS du serveur et les performances du résolveur avant de désactiver définitivement ces recherches.

Consultez la documentation de Courier MTA pour obtenir des informations supplémentaires sur les délais de connexion SMTP.

Commandes Courier MTA utiles

  • Afficher la file d’attente actuelle des messages :
root@host:~# mailq
  • Afficher les fichiers stockĂ©s dans le spool de messagerie Courier :
root@host:~# ls -Rhl /var/lib/courier/msgs/
  • Supprimer un message prĂ©cis de la file d’attente :
root@host:~# cancelmsg message-id

💡 Remarque : Utilisez mailq pour récupérer l’identifiant du message avant d’exécuter cancelmsg.

  • Supprimer tous les messages de la file d’attente :
root@host:~# mailq | awk '/^[[:space:]]*[0-9A-F]+\./ { print $2 }' | \
  while IFS= read -r message_id; do
    cancelmsg "$message_id"
  done

🚨 Important : Cette commande supprime définitivement tous les messages correspondants de la file d’attente Courier. Examinez la sortie de mailq et sauvegardez les messages importants en attente avant de l’exécuter.

Références