Serveur mail et webmail – part. 2 – postfix – dovecot

Dans cette partie nous allons installer postfix et dovecot pour obtenir un serveur pleinement fonctionnel dont les boites aux lettres correspondent à des comptes Linux.

Article fortement inspiré de https://www.linuxbabe.com/mail-server/build-email-server-from-scratch-debian-postfix-smtp

C’est la suite de : Serveur mail et webmail – part. 1 – préparation

Postfix

root@klopmail:~# apt-get install postfix

Je choisis Internet Site (si cet écran réapparaît lors d’un upgrade, le choix sera No Configuration)

Je ne garde que le nom de domaine (dync.fr)

Chez Gandi, J’ajoute un enregistrement MX à mes domaine dync.fr et framboisier.fr

A ce stade seul root at dync.fr peut recevoir des mails. Si je lui envoie un mail, on peut regarder dans les logs :

root@klopmail:~# journalctl -u postfix*
...
Jul 22 08:15:50 klopmail.dync.fr postfix/smtpd[32073]: connect from relay1-d.mail.gandi.net[217.70.183.193]
Jul 22 08:15:50 klopmail.dync.fr postfix/smtpd[32073]: BE77320246: client=relay1-d.mail.gandi.net[217.70.183.193]
Jul 22 08:15:50 klopmail.dync.fr postfix/cleanup[32077]: BE77320246: message-id=<5b6224ac-301b-d90f-0ea1-a77bfaec8b9a@framboisier.net>
Jul 22 08:15:50 klopmail.dync.fr postfix/qmgr[31944]: BE77320246: from=<xxxxxxxxxxx@framboisier.net>, size=1489, nrcpt=1 (queue active)
Jul 22 08:15:50 klopmail.dync.fr postfix/local[32078]: BE77320246: to=<root at dync.fr>, relay=local, delay=0.12, delays=0.11/0.01/0/0, dsn=2.0.0, status=sen>
Jul 22 08:15:50 klopmail.dync.fr postfix/qmgr[31944]: BE77320246: removed
Jul 22 08:15:50 klopmail.dync.fr postfix/smtpd[32073]: disconnect from relay1-d.mail.gandi.net[217.70.183.193] ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit>
... 

La soumission de message doit être activer pour qu’un client (ex : Thunderbird) puisse envoyer des messages au travers du serveur. Dans le fichier /etc/postfix/master.cf, j’ajoute :

submission     inet     n    -    y    -    -    smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_tls_wrappermode=no
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
#pour outlook
smtps     inet  n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth

Pour changer le certificat, c’est dans le fichier /etc/postfix/main.cf. J’y ai changé les deux lignes

smtpd_tls_cert_file=/etc/apache2/md/domains/klopmail.dync.fr/pubcert.pem
smtpd_tls_key_file=/etc/apache2/md/domains/klopmail.dync.fr/privkey.pem

Je redémarre postfix et je teste. Dans le fatras, je vois que l’émetteur du certificat est Let’s Encrypt.

root@klopmail:~# systemctl restart postfix
root@klopmail:~# openssl s_client -connect klopmail.dync.fr:465 -showcerts
...
---
Server certificate
subject=CN = klopmail.dync.fr
issuer=C = US, O = Let's Encrypt, CN = R3
---

Pour les ports 25 et 587, je fais les test avec l’option STARTTLS :

root@klopmail:~# openssl s_client -starttls smtp -connect klopmail.dync.fr:587 -showcerts
root@klopmail:~# openssl s_client -starttls smtp -connect klopmail.dync.fr:25 -showcerts

Pour finir nous allons limiter le nombre de mails par utilisateur. Ceci en cas de prise de contrôle d’un compte par un spammer, nous éviterons que notre serveur inonde internet. Éditons le fichier main.cf

root@klopmail:~# vi /etc/postfix/main.cf

Et limitons l’émission à 100 mails par heure et par utilisateur, en ajoutant les deux lignes

smtpd_client_message_rate_limit = 100
anvil_rate_time_unit = 3600s

Dovecot – serveur imap

root@klopmail:~# apt-get install dovecot-core dovecot-imapd

Par défaut imap est activé. Le fichier /usr/share/dovecot/protocols.d/imapd.protocol doit exister et contenir :

root@klopmail:~# cat /usr/share/dovecot/protocols.d/imapd.protocol 
protocols = $protocols imap

Par défaut Postfix et Dovecot stocke les messages au format mbox. D’après la littérature internet le format maildir est préférable, ainsi que demander à Postfix de déléguer la gestion des boites aux lettres à Dovecot.

Dans le fichier /etc/dovecot/conf.d/10-mail.conf, je change le paramètre mail_location

root@klopmail:~# vi /etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:~/Maildir

Dovecot doit pourvoir lire les mails, il faut l’ajouter au groupe mail

root@klopmail:~# adduser dovecot mail

Dovecot – lmtp

Postfix va remettre les messages locaux à Dovecot via le protocole lmtp (version légère de smtp).

root@klopmail:~# apt-get install dovecot-lmtpd

Je vérifie que le nouveau protocole est activé. Le fichier /usr/share/dovecot/protocols.d/lmtpd.protocol doit exister et contenir :

root@klopmail:~# cat /usr/share/dovecot/protocols.d/lmtpd.protocol 
protocols = $protocols lmtp

Je configure le socket unix pour lmtp :

root@klopmail:~# vi /etc/dovecot/conf.d/10-master.conf 

La section service lmtp doit contenir

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0666
    user = postfix
    group = postfix
  }
}

Postfix envoie les messages locaux dans ce socket.

root@klopmail:~# vi /etc/postfix/main.cf

On ajoute les deux lignes suivante au fichier. La première explique que les mails entrants doivent être remis à dovecot, la seconde désactive smtputf8 par faute de support par dovecot.

mailbox_transport = lmtp:unix:private/dovecot-lmtp
smtputf8_enable = no

Dovecot – authentification des clients

J’édite le fichier de configuration

root@klopmail:~# vi /etc/dovecot/conf.d/10-auth.conf

On désactive l’authentification en texte en l’absence chiffrement via TLS en dé-commentant la ligne :

disable_plaintext_auth = yes

On indique à dovecot de recherher les boites aux lettres uniquement avec la partie gauche de l’adresse. Actuellement, nos utilisateurs sont des utilisateurs linux sans mention de domaine. Je recherche la ligne auth_username_format (qui est commentée) et j’ajoute :

auth_username_format = %n

On ajoute ‘login’ aux mécanismes d’authentification (ça peut servir). Je recherche auth_mechanisms dans le fichier et j’ajoute ‘login’ à la fin. Comme ceci :

auth_mechanisms = plain login 

On sauvegarde et ferme le fichier

Dovecot – TLS

Les échanges entre les clients et le serveurs seront chiffrés, on édite le fichier de configuration.

root@klopmail:~# vi /etc/dovecot/conf.d/10-ssl.conf

On force le chiffrement, en modifiant le paramètre ssl de yes à required comme ceci

ssl = required

On pointe sur le certificat et la clé généré précédemment. Le caractère < est nécessaire. On modifie les deux paramètres :

ssl_cert = </etc/apache2/md/domains/klopmail.dync.fr/pubcert.pem
ssl_key = </etc/apache2/md/domains/klopmail.dync.fr/privkey.pem

On force l’utilisation des algorithmes préférés du serveur en dé-commentant le paramètre ssl_prefer_server_ciphers et en le positionnant à yes

ssl_prefer_server_ciphers = yes

on requiert un protocole minimal en positionnant le paramètre ssl_min_protocol à TLSv1.2. Il faut le dé-commenter la ligne.

ssl_min_protocol = TLSv1.2

On sauvegarde et on ferme le fichier

Dovecot – SASL

Je modifie le fichier de configuration

root@klopmail:~# vi /etc/dovecot/conf.d/10-master.conf

Pour que postfix puisse interroger dovecot changeons la section service auth en :

service auth {
    unix_listener /var/spool/postfix/private/auth {
      mode = 0660
      user = postfix
      group = postfix
    }
}

Je sauvegarde et je ferme le fichier

Serveur fonctionnel

Je redémarre le tout et je vérifie que cela tourne

root@klopmail:~# systemctl restart postfix dovecot
root@klopmail:~# systemctl status postfix dovecot

Je crée un utilisateur de test, le mot de passe sera celui utilisé depuis mon client de messagerie.

root@klopmail:~# adduser test

Dans mon client de messagerie thunderbird, Fichier -> Nouveau -> Compte courrier existant.

  • Votre nom compte : <un truc vous représentant>
  • Adresse de messagerie : test@dync.fr
  • Mot de passe : <celui saisi lors de la création de l’utilisateur>

Après avoir cliqué sur continuer :

On peut cliquer sur terminé. Valider l’écran suivant.

A partir de là, on peut commencer à échanger des messages avec le reste du monde, sauf que Hetzner bloque le port 25 en sortie, il faut attendre 1 mois avant de pouvoir le débloquer.

Un dernier test

Un test avec mxtoolbox permet de se rassurer sur la configuration

Changement de certificat

Le certificat est géré par le module md d’Apache. Il convient de redémarrer les services postfix et dovecot pour qu’en cas de nouveau certificat, celui-ci soit pris en compte.

Dans le répertoire /etc/cron.daily, on crée un fichier :

root@klopmail:/etc/cron.daily# vi redemarrage-mail

Avec le contenu :

#!/bin/sh
/usr/bin/systemctl restart postfix dovecot

et il doit être exécutable

root@klopmail:/etc/cron.daily# chmod 755 redemarrage-mail

Dans l’article suivant nous allons voir comment remplacer les comptes locaux Unix par des comptes déclarés dans une base MariaDb : Serveur mail et webmail – part. 3 – postfix admin – Mariadb

Laisser un commentaire

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