Serveur de messagerie · 4 min read · Oct 13, 2025

Configurer un serveur de messagerie avec Exim4, Clamav, Dovecot, SpamAssassin et bien d'autres sur Debian Lenny

Configurer un serveur de messagerie avec Exim4, Clamav, Dovecot, SpamAssassin et bien d’autres sur Debian

Ce howto décrit une manière de construire une plateforme de messagerie évolutive, sécurisée et complète. Il offre un hébergement virtuel de boîtes aux lettres au format maildir avec support pour les quotas et le filtrage côté serveur, l’aliasing de domaine, l’aliasing d’adresse, le transfert d’adresse, et les adresses catchall. Le relais est sécurisé avec STARTTLS et SMTP-AUTH. Les mails entrants sont vérifiés pour les virus, le spam, et vérifiés contre la politique SPF et DNSBL.

Afin d’atteindre l’évolutivité, la configuration sera répartie sur 3 serveurs :

  • 1 serveur MX, où se trouvent la plupart des fonctionnalités de sécurité (faramir.middle.earth)
  • 1 relais SMTP, pour permettre aux utilisateurs d’envoyer des mails vers le monde extérieur (ectelion.middle.earth)
  • 1 serveur Mailstore, où se trouve la boîte aux lettres (denetor.middle.earth)

Bien sûr, plus de MX peuvent être ajoutés en utilisant des enregistrements MX DNS à vos domaines, plus de serveurs relais peuvent être ajoutés en utilisant un round-robin DNS, et plus de magasins de mails peuvent être ajoutés en utilisant les mécanismes décrits dans ce howto. À l’opposé, vous pouvez facilement fusionner la partie MX et relais, ou la partie relais et mailstore. La fusion de MX et mailstore implique certaines modifications.

Remarque préliminaire

Dans ce howto, nous supposerons que vous avez un serveur Debian fonctionnel. De plus, sudo est supposé être installé sur les systèmes et vous devez être un sudoer.

Configuration de LDAP

Les informations des utilisateurs seront stockées dans un annuaire LDAP. Ici, nous allons l’installer sur le serveur relais.

Tout d’abord, installons les paquets nécessaires :

 sudo apt-get install slapd ldap-utils

Pour le tutoriel, nous utiliserons les paramètres LDAP suivants :

ldapBase: dc=middle,dc=earth

adminDn: cn=admin,dc=middle,dc=earth

adminPwd: thirdAge

De plus, nous utiliserons un schéma LDAP spécifique. La plupart des attributs et objets sont standards, sauf un ou deux. Attention : comme il y a beaucoup d’attributs standards, vous devrez vous assurer qu’aucun d’entre eux n’est défini deux fois.

Ajoutons donc le schéma dans openldap dans /etc/ldap/schema/mailMEO.schema :

 attributetype ( 2.16.840.1.113730.3.1.13   
    NAME 'mailLocalAddress'   
    DESC 'Adresse email RFC822 de ce destinataire'   
    EQUALITY caseIgnoreIA5Match   
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )   
  
attributetype ( 2.16.840.1.113730.3.1.16   
    NAME 'mailQuota'   
    DESC 'Quantité maximale d'espace disque pour une boîte aux lettres en kilooctets'   
    EQUALITY integerMatch   
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )   
  
attributetype ( 2.16.840.1.113730.3.1.18   
    NAME 'mailHost'   
    DESC 'FQDN du SMTP/MTA de ce destinataire'   
    EQUALITY caseIgnoreIA5Match   
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256}   
    SINGLE-VALUE )   
  
attributetype ( 2.16.840.1.113730.3.1.22   
    NAME 'mailCopyAddress'   
    DESC 'Adresse de copie d'ombre RFC822'   
    EQUALITY caseIgnoreIA5Match   
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )   
  
attributetype ( 2.16.840.1.113730.3.1.47   
    NAME 'mailRoutingAddress'   
    DESC 'Adresse de routage RFC822 de ce destinataire'   
    EQUALITY caseIgnoreIA5Match   
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )   
  
attributetype ( 2.16.840.1.113730.3.1.49   
    NAME 'spamassassinUserPrefs'   
    DESC 'Préférences utilisateur SpamAssassin'   
    EQUALITY caseIgnoreIA5Match   
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )   
  
objectclass ( 2.16.840.1.113730.3.2.147   
    NAME 'inetLocalMailRecipient'   
    DESC 'Destinataire de mail local Internet'   
    SUP top AUXILIARY   
    MAY    ( mailLocalAddress $ mailHost $ mailRoutingAddress $ mailCopyAddress $ mailQuota $ spamassassinUserPrefs ) )   
   
objectclass ( 2.16.840.1.113730.3.2.148   
    NAME 'inetMailForwarder'   
    DESC 'Adresse de transfert de mail Internet'   
    SUP top AUXILIARY   
    MAY    ( mailHost $ mailRoutingAddress ) )

Ensuite, assurez-vous d’ajouter le schéma nécessaire dans /etc/ldap/slapd.conf :

...  
include /etc/ldap/schema/inetorgperson.schema  
include /etc/ldap/schema/mailMEO.schema  
...

… et vérifiez le suffixe (debconf devrait déjà l’avoir configuré lorsque vous avez installé slapd) :

suffix          "dc=middle,dc=earth"

Maintenant, ajoutons quelques ACL que les démons auront besoin de lier à LDAP.

Un accès en lecture seule à l’attribut userPassword pour dovecot :

access to attrs=userPassword,shadowLastChange   
        by dn="cn=admin,dc=middle,dc=earth" write   
        by dn="uid=dovecot,dc=middle,dc=earth" read   
        by anonymous auth   
        by self write   
        by * none

Un accès en lecture seule à d’autres attributs pour exim et dovecot :

access to *   
        by dn="cn=admin,dc=middle,dc=earth" write   
        by dn="uid=dovecot,dc=middle,dc=earth" read   
        by dn="uid=exim,dc=middle,dc=earth" read   
        by * read  
        by anonymous none

La dernière ACL désactive les lectures anonymes mais permet la lecture (recherche) pour chaque utilisateur authentifié, ce que vous ne voudrez peut-être pas.

Nous pouvons maintenant redémarrer slapd pour que les changements prennent effet :

sudo /etc/init.d/slapd restart

Nous devons créer les utilisateurs des ACL précédentes. Pour ce faire, nous utiliserons le fichier user.ldif suivant :

dn: uid=exim,dc=middle,dc=earth  
objectClass: account  
objectClass: simpleSecurityObject  
objectClass: top  
uid: exim  
userPassword:: e01ENX1hOElTeXAwV2hnVzFSVnhHd0hCNDF3PT0=  
  
dn: uid=dovecot,dc=middle,dc=earth  
objectClass: account  
objectClass: simpleSecurityObject  
objectClass: top  
uid: dovecot  
userPassword:: e01ENX1yZGp2Q1lPNmtDRm1scXAyVWQwa0xBPT0=

Le user/pass sont :

dovecot/dovecotpopper
exim4/eximmta 

Pour alimenter l’annuaire, tapez :

ldapadd -x -D cn=admin,dc=middle,dc=earth -W < users.ldif

Voici un autre fichier ldif qui contient des données d’exemple (attention, cet exemple contient des adresses IP qui ne conviendront pas à votre configuration, changez-les manuellement) :

dn: ou=domains,dc=middle,dc=earth  
objectClass: organizationalUnit  
objectClass: top  
ou: domains  
  
dn: dc=middle.earth,ou=domains,dc=middle,dc=earth  
dc: middle.earth  
objectClass: dNSDomain  
objectClass: top  
objectClass: inetLocalMailRecipient  
objectClass: domainRelatedObject  
objectClass: posixAccount  
mailLocalAddress: [email protected]  
cn: catchall  
gidNumber: 8  
homeDirectory: /var/mail/middle.earth/c/catchall  
uid: catchall  
uidNumber: 8  
userPassword:: e01ENX1EV3RteGErOFROanJKNUFXZWt1Z0tBPT0=  
mailQuota: 102400  
mailHost: denetor.middle.earth  
associatedDomain: middle.earth  
associatedDomain: lotr.middle.earth  
  
dn: uid=sam,dc=middle.earth,ou=domains,dc=middle,dc=earth  
cn: sam  
displayName: Sam Gamji  
gidNumber: 8  
homeDirectory: /var/mail/middle.earth/s/sam  
mail: [email protected]  
mailHost: 172.16.16.23  
mailQuota: 102400  
objectClass: inetLocalMailRecipient  
objectClass: inetOrgPerson  
objectClass: posixAccount  
objectClass: top  
sn: Gamji  
uidNumber: 8  
uid: sam  
userPassword:: e01ENX1NeVV5M1BxaHkvWWVLaVpyMXlOaExBPT0=  
mailLocalAddress: [email protected]  
mailLocalAddress: [email protected]  
mailLocalAddress: [email protected]  
  
dn: uid=frodo,dc=middle.earth,ou=domains,dc=middle,dc=earth  
cn: frodo  
displayName: Frodo Baggins  
gidNumber: 8  
givenName: Frodo  
homeDirectory: /var/mail/middle.earth/f/frodo  
mail: [email protected]  
mailHost: 172.16.16.23  
mailQuota: 102400  
objectClass: inetLocalMailRecipient  
objectClass: inetOrgPerson  
objectClass: posixAccount  
objectClass: top  
sn: Baggins  
uidNumber: 8  
uid: frodo  
userPassword:: e01ENX04UGlDRHVnWEdCMmNhRktnbDljTmpRPT0=  
mailLocalAddress: [email protected]  
mailLocalAddress: [email protected]  
mailLocalAddress: [email protected]  
  
dn: uid=gmail,dc=middle.earth,ou=domains,dc=middle,dc=earth  
cn: gmail  
mail: [email protected]  
mailHost: 172.16.16.23  
mailRoutingAddress: [email protected]  
objectClass: inetMailForwarder  
objectClass: inetOrgPerson  
objectClass: top  
sn: alias to Gmail address  
uid: gmail
Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.