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