Un serveur mail Debian avec Postfix et Dovecot

Les e-mails, c'est chouette, mais plus grand monde n'utilise son propre serveur mail. Et c'est bien triste. Alors mettons-en un en place. Tant qu'à faire, autant qu'il soit sécurisé, donc on va faire les choses proprement.

Nous allons utiliser Debian 8, avec Postfix comme serveur SMTP, et Dovecot pour l'IMAP. Dovecot va aussi gérer l'authentification, via SASL. Le tout saupoudré de chiffrement: IMAPS + SMTPS.

Je considère que vous avez un nom de domaine (example.com) avec un enregistrement DNS adéquat ainsi que des certificats SSL. Sinon, vous pouvez toujours générer une paire certificat/clé auto-signée:

# openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -out /etc/ssl/certs/mail.crt -keyout /etc/ssl/private/mail.key

Bien, on installe tout, et on y va.

# aptitude install postfix dovecot-imapd

Postfix

Note: configurations non-exhaustives, j'essaie de capturer l'essentiel.

## /etc/postfix/main.cf

# Hostname and domain name
myhostname=mymachine.example.com
mydomain=example.com
myorigin=$mydomain

# SSL/TLS certificates
smtpd_tls_cert_file=/etc/ssl/certs/mail.crt
smtpd_tls_key_file=/etc/ssl/private/mail.key
smtpd_use_tls=yes
smtpd_tls_auth_only=yes

# ~/Maildir directories
home_mailbox = Maildir/

# SASL
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
## /etc/postfix/master.cf

smtp      inet  n       -       -       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes

smtps     inet  n       -       -       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
# service postfix restart

Dovecot

Dans le dossier /etc/dovecot/conf.d:

## 10-ssl.conf

# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
ssl = required
ssl_cert = </etc/ssl/certs/mail.crt
ssl_key = </etc/ssl/private/mail.key
## 10-master.conf

service imap-login {
  inet_listener imap {
    #port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
}

service auth {
 # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}
## 10-auth.conf

# Disable LOGIN command and all other plaintext authentications unless
# SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
# matches the local IP (ie. you're connecting from the same computer), the
# connection is considered secure and plaintext authentication is allowed.
# See also ssl=required setting.
disable_plaintext_auth = yes

auth_mechanisms = plain login
# service dovecot restart

Configuration du client

Server: example.com
Username: linux user login
Password: linux user password
IMAP: SSL/TLS port 993
SMTP: SSL/TLS port 465

Debug

## The mail logs.
# tail -f /var/log/mail.log

## Display the postfix configs.
# postconf -n

## Display the dovcot configs.
# doveconf -n

Aller plus loin

Nous avons à présent un serveur SMTP et IMAP fonctionnel. Il pourrait être utile d'ajouter un anti-spam, un anti-virus, ainsi que le support du Sender Policy Framework (SPF) et du DomainKeys Identified Mail (DKIM). De bien joyeux sujets, que j'aborderai sans doute un jour.

8 réflexions au sujet de « Un serveur mail Debian avec Postfix et Dovecot »

  1. Ça c'est de la configuration simple comme je les aime, sans, par exemple comme dans de nombreux tutos basés sur d'autres tutos…, utiliser sans raison valable une base MySQL.

    À noter qu'il est tout à fait possible de laisser ces serveurs écouter sur les ports standards (non dédiés aux connexions sous TLS), et que le client fasse du STARTTLS pour passer en chiffré. On peut même imposer le STARTTLS, ce qui signifie que le serveur refusera les commandes tant que la connexion n'est pas chiffrée.

    Autrement, vu les sujets que tu abordes, il pourrait être intéressant de (me demander de) t'agréger au Planet auto-hébergement http://planet.auto-hebergement.fr/ .

  2. Bonjour,

    cet article est très intéressant, mais j'avoue que la partie "peut-être" à venir m'intéresse beaucoup. En effet, j'auto-héberge depuis pas mal de temps maintenant mon propre serveur de mail (ça fait plusieurs années), mais depuis quelques mois j'ai de gros soucis avec mon smtp. En effet, de plus en plus de gros fournisseurs de mail (yahoo, google pour ne citer qu'eux) refusent de relayerles messages qui viennent de mon smtp, pour cause de spam soi-disant. (mon smtp n'est pas en openrelay j'ai vérifié!) J'ai mis en place le SPF et le DKIM m'a paru bien compliqué. En attendant je me suis rabattu sur le smtp de mon FAI mais ça ne me plait pas... J'ai donc hâte à la suite de l'article!

  3. bonjour,
    c'est vrai que l'article est succint,
    mais trop succint, il s'adresse aux gens qui "savent" deja.
    J ai suivi a la lettre et cela ne focntionne pas: voila les choses a expliquer peut etre:
    Qaunt on lnace le client icedov par exemple, l'authentification est diverse :
    1. imap: autoedetect, encrypted, , normal pssword, ....
    de meme pour smtp

    dans mon cas il donne des erreurs d'autentifications
    Si j'utilise movemail, le copte est cree, par contre avec create count, il y a probleme.

    des idées sur le manque

  4. merci pour cet article, j'ai mis en place assez rapidement postfix et dovecot sur mon serveur hébergé. good job!

  5. Article suivi à la lettre, mais malheureusement, à l'arrivée, cela ne fonctionne pas.

    À mon avis, le problème réside dans cette petite phrase :
    « configurations non-exhaustives, j'essaie de capturer l'essentiel ».

    Je ne sais pas trop ce que veut dire « capturer l'essentiel » j'ai modifié toutes les lignes de mes fichiers de conf qui étaient visibles dans l'article, afin qu'elles soient identiques à celles de l'article. Mais dans les fichiers de conf, il y a d'autres lignes, et l'article ne dit pas que dire pour celles-ci : doit-on tout supprimer ? les laisser telles qu'elles sont par défaut ? prendre une décision au cas par cas ? (mais si oui, sur quels critères ?).

    Du coup, je les ai laissées comme elles étaient.

    Mais à l'arrivée, si j'ai bien un serveur qui tourne, il ne reçoit aucun mail.

    J'arrive, avec Thunderbird, à relever la boîte. Aucune erreur ne se produit, et Thunderbird indique qu'il n'y a aucun nouveau message dans la boîte.

    Sauf que, visiblement, la boîte ne reçoit pas les messages. J'ai essayé d'envoyer depuis chez moi un e-mail à nom_de_mon_compteunix@nom_machine.domaine.fr et j'ai également essayé, sur la machine, un simple echo test | mail nom_de_mon_compte_unix et malgré cela la boîte reste désespérément vide.

    Par contre, en faisant un tail -F /var/log/mail.log j'ai un message étonnant :

    Dec 15 15:10:11 nom_machine postfix/qmgr[23621]: 010B1CC7D: from=, size=327, nrcpt=1 (queue active)
    Dec 15 15:10:11 nom_machine postfix/smtp[26982]: 010B1CC7D: to=, relay=none, delay=0.01, delays=0.01/0/0/0, dsn=5.4.6, status=bounced (mail for nom_machine.domaine.fr loops back to myself)

    Il est clair qu'il y a une boucle quelque part, mais je ne sais pas où et pourquoi.

  6. Adrien,

    Deux choses a vérifier d’après tes erreurs:
    - tes enregistrements DNS
    - la variable mydestination dans ton main.cf

    Pour répondre aux gens dénonçant le coté trop succinct de cet article: le but était d'avoir un petit cookbook pour mettre en place son serveur email. On pourrait écrire un bouquin sur les configurations de Postfix, je ne pouvais malheureusement pas tout aborder.

    Pour le reste, il y a la documentation officielle: http://www.postfix.org/documentation.html

  7. Merci pour ce tuto ; googd job 😉

    J'ai moi aussi suivi ce tuto et après quelques petites modifications, tout fonctionne parfaitement (en réseau fermé... avec d'autres serveurs mails j'ai encore un soucis pour l'échange de certificats).

    @Adrien : Par défaut (sauf erreur de ma part), postifix est configuré pour une gestion des messages en "/Maildir" (ie il écrira les messages reçus dans une BAL sous /home/user/Maildir/...). Dovecot est configuré pour une gestion en "mbox" (ie il ira lire les messages reçus dans le fichier /var/mail/user). Il te faut donc mettre en concordance les deux configs pour que Dovecot lise les messages au bon endroit (fait une recherche sur mbox et maildir tu devrais trouver pas mal d'infos).
    Sinon, de mémoire, si tu utilises mbox, il me semble qu'il faut ajouter tes utilisateurs dans le groupe mail pour que la création/écriture des boites puisse se faire (à vérifier).

  8. Bonjour, excusez-moi de vous déranger,

    Je suis étudiant en webdeveloper et j'ai pas de très bonnes connaissances en réseau-serveur mais j'ai été obligé de configurer un serveur pour un projet django.

    J'ai passé presque 500h pour configurer un serveur avec tout ce qu'il faut et pour les mails j ai utilisé postfix + courier + roundcube mais impossible de recevoir des emails sur les comptes que je crée, alors que les mails avec la fonction php mail partent, ainsi que via roundcube mais on ne peut pas me répondre, erreur 504 relay access denied

    Je demande votre aide car la fin d'année approche et je voudrais pouvoir avoir un serveur correct à montrer

    Merci pour toute piste, voici mon fichier main.cf de postfix

    smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
    biff = no
    disable_vrfy_command = yes
    smtpd_helo_required = yes

    # appending .domain is the MUA's job.
    append_dot_mydomain = no
    # Pour faire simple, il est conseill页 d'utiliser le reverse DNS de votre serveur.
    myhostname = REVERSEDNSDELIPDUSERVEUR

    myorigin = REVERSEDNSDELIPDUSERVEUR
    mydestination =REVERSEDNSDELIPDUSERVEUR, localhost.localdomain, localhost, MONDOMAINE.COM
    relayhost =
    mynetworks = 127.0.0.0/8, IPDUSERVEUR
    mailbox_size_limit = 0
    recipient_delimiter = +
    inet_interfaces = all
    virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_aliases.cf,mysql:/etc/postfix/mysql-virtual_aliases_comptes.cf
    virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domaines.cf

    virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_comptes.cf
    virtual_mailbox_base = /var/spool/vmail/
    virtual_uid_maps = static:5000
    virtual_gid_maps = static:5000
    virtual_create_maildirsize = yes
    virtual_mailbox_extended = yes
    virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual_quotas.cf
    virtual_mailbox_limit_override = yes
    virtual_maildir_limit_message = "La boite mail de votre destinataire est pleine, merci de reessayez plus tard."

    virtual_overquota_bounce = yes

    # adresses d'expedition
    smtpd_sender_restrictions =
    permit_mynetworks,
    warn_if_reject reject_unverified_sender
    # adresses de destination
    # smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination
    smtpd_recipient_restrictions = permit_sasl_authenticated
    # client
    smtpd_client_restrictions =
    permit_mynetworks
    smtpd_sasl_security_options = noplaintext
    smtpd_tls_auth_only = no

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *