J’ai besoin d’un serveur mail interne (il ne sera pas ouvert vers l’exterieur) pour recevoir les posts de l’infra en general, routeur switch ou rapports de backup on va faire ca avec postfix et dovecot sur une ubuntu 24.04, les mails sont destinés a un user AD existant

1. Joindre le serveur au domaine Active Directory avec SSSD

Installer les packages nécessaires

sudo apt update
sudo apt install realmd sssd sssd-tools adcli samba-common-bin libnss-sss libpam-sss

Découvrir et rejoindre le domaine

# Vérifier que le domaine est accessible
realm discover mondomaine.local

# Joindre le domaine (un compte AD avec droits suffisants est requis)
sudo realm join --user=Administrateur mondomaine.local

Vérifier la jointure

realm list

On doit voir quelque chose comme :

mondomaine.local
  type: kerberos
  realm-name: MONDOMAINE.LOCAL
  domain-name: mondomaine.local
  configured: kerberos-member
  server-software: active-directory
  client-software: sssd

Configuration de SSSD

Le fichier /etc/sssd/sssd.conf est généré automatiquement par realm join. En voici un exemple typique après jointure :

[sssd]
domains = mondomaine.local
config_file_version = 2
services = nss, pam

[domain/mondomaine.local]
default_shell = /bin/bash
krb5_store_password_if_offline = True
cache_credentials = True
krb5_realm = MONDOMAINE.LOCAL
realmd_tags = manages-system joined-with-adcli
id_provider = ad
fallback_homedir = /home/%u@%d
ad_domain = mondomaine.local
use_fully_qualified_names = True
ldap_id_mapping = True
access_provider = permit

Simplifier les noms d’utilisateurs

Par défaut, SSSD utilise le format utilisateur@mondomaine.local pour les noms et les répertoires home (/home/utilisateur@mondomaine.local). Pour simplifier en utilisateur seulement, modifier deux paramètres dans /etc/sssd/sssd.conf :

use_fully_qualified_names = False
fallback_homedir = /home/%u

Appliquer les changements :

sudo systemctl restart sssd
sudo sss_cache -E

# Vérifier
getent passwd nomutilisateur
# Résultat attendu : nomutilisateur:*:XXXX:XXXX::/home/nomutilisateur:/bin/bash

⚠️ Attention : Si un compte Unix local porte le même nom qu’un compte AD, il sera utilisé en priorité par Postfix. Vérifier avec getent passwd nomutilisateur et supprimer tout doublon si nécessaire avec sudo userdel -r nomutilisateur.

⚠️ Attention : Avec use_fully_qualified_names = False, tous les utilisateurs AD sont accessibles sans suffixe de domaine. Cette option est adaptée aux environnements à domaine unique. En multi-domaines, conserver True.


2. Installer Postfix et Dovecot

sudo apt install postfix dovecot-imapd dovecot-pop3d mailutils

Lors de l’installation de Postfix, sélectionner “Site Internet” ou “No configuration” selon la préférence, la config sera faite manuellement.


3. Configurer Postfix

/etc/postfix/main.cf

Voici les paramètres essentiels pour un serveur mail interne :

# Identité du serveur
myhostname = mailsrv.mondomaine.local
mydomain = mondomaine.local
myorigin = $mydomain

# Réseau
inet_interfaces = all
inet_protocols = ipv4

# Domaines locaux acceptés
mydestination = $myhostname, localhost.$mydomain, localhost, mondomaine.local

# Livraison en Maildir
home_mailbox = Maildir/

# Réseau autorisé à relayer sans authentification
mynetworks = 127.0.0.0/8 192.168.1.0/24

# Restrictions de relay
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject

# SASL — authentification SMTP déléguée à Dovecot
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous

Redémarrer Postfix :

sudo systemctl restart postfix

4. Configurer Dovecot

/etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:~/Maildir

namespace inbox {
  inbox = yes
}

/etc/dovecot/conf.d/10-auth.conf

auth_mechanisms = plain login
disable_plaintext_auth = no

passdb {
  driver = pam
}

userdb {
  driver = passwd
}

Dovecot utilise PAM pour l’authentification, qui s’appuie sur SSSD pour valider les credentials AD. Aucune configuration supplémentaire n’est nécessaire côté PAM dans la plupart des cas.

/etc/dovecot/conf.d/10-master.conf

Ajouter le socket SASL pour Postfix dans le bloc service auth. Ce socket permet à Postfix de déléguer l’authentification SMTP à Dovecot :

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
  unix_listener auth-master {
    mode = 0600
    user = root
    group = root
  }
  user = root
}

⚠️ Vérifier qu’il n’existe pas de doublon de socket dans d’autres fichiers de configuration Dovecot avant d’ajouter ce bloc :

grep -rn "unix_listener" /etc/dovecot/

Redémarrer Dovecot :

sudo systemctl restart dovecot

5. Préparer le Maildir utilisateur

Postfix livre les mails dans ~/Maildir/ mais ce répertoire doit exister au préalable. Le créer pour chaque utilisateur :

sudo mkdir -p /home/nomutilisateur/Maildir/new
sudo mkdir -p /home/nomutilisateur/Maildir/cur
sudo mkdir -p /home/nomutilisateur/Maildir/tmp
sudo chown -R nomutilisateur /home/nomutilisateur/Maildir
sudo chmod 750 /home/nomutilisateur

💡 Astuce : Les accolades ({new,cur,tmp}) ne fonctionnent pas dans les chemins entre guillemets. Créer les trois sous-dossiers séparément comme ci-dessus.

💡 Astuce : Pour les utilisateurs AD, le nom du groupe principal peut contenir des espaces. Utiliser uniquement chown -R nomutilisateur sans spécifier le groupe pour éviter les erreurs.


6. Tester la chaîne complète

Envoyer un mail de test

echo "Test mail" | mail -s "Test Postfix" nomutilisateur@mondomaine.local

Vérifier la livraison dans les logs

sudo tail -20 /var/log/syslog | grep postfix

On doit voir une ligne indiquant la livraison réussie :

postfix/local: to=<nomutilisateur@mondomaine.local>, status=sent (delivered to maildir)

Vérifier que le mail est dans le Maildir

sudo ls /home/nomutilisateur/Maildir/new/

Tester l’authentification IMAP avec telnet

telnet localhost 143

Une fois connecté, taper :

a login nomutilisateur@mondomaine.local "MotDePasseAD"
a select INBOX

Réponses attendues :

  • a OK Logged in — authentification réussie
  • * 1 EXISTS — un mail présent dans la boîte

Pour quitter : a logout ou Ctrl+] puis quit.


7. Configurer un client IMAP (Outlook / Thunderbird)

Paramètre Valeur
Serveur entrant (IMAP) mailsrv.mondomaine.local
Port IMAP 143
Chiffrement Aucun (ou STARTTLS si SSL configuré)
Serveur sortant (SMTP) mailsrv.mondomaine.local
Port SMTP 25
Authentification SMTP Oui (login / mot de passe AD)
Login nomutilisateur@mondomaine.local

Points de vigilance

Conflits de comptes : Si un compte Unix local a le même nom qu’un utilisateur AD, Postfix lui livrera les mails en priorité. Toujours vérifier avec getent passwd nomutilisateur avant la mise en production et supprimer les doublons.

Permissions du Maildir : Le répertoire home doit appartenir à l’utilisateur AD. En cas d’erreur Permission denied, vérifier avec ls -la /home/nomutilisateur/.

Espace disque : En IMAP, les mails restent sur le serveur dans le Maildir. Surveiller l’espace avec df -h /home et envisager des quotas Dovecot à terme pour éviter une saturation.

Ordre de démarrage : Dovecot doit être démarré avant que Postfix ne tente d’utiliser le socket SASL. En cas de problème d’auth SMTP, vérifier que les deux services sont actifs avec systemctl status postfix dovecot.

SSL/TLS : Cette configuration fonctionne sans chiffrement, ce qui est acceptable en réseau interne isolé. Pour une exposition hors LAN, ajouter un certificat (Let’s Encrypt ou PKI interne) et activer STARTTLS.


Voila, vous avez une solution de messagerie interne légère, robuste et parfaitement intégrée à Active Directory.