Monter son serveur de messagerie personnel

Introduction

J’utilise Gmail et Yahoo Mail pour différents usages (professionnel notamment, étant freelance). Possesseur d’un Raspberry pi 4 qui fonctionne sous Archlinux ARM, je l’utilise en tant que cloud personnel (Nextcloud), j’héberge mon blog (WordPress) ainsi qu’un certain nombre de services. Dans le cadre de la fameuse stratégie dite de dégooglisation, j’en suis venu à l’idée d’installer mon propre serveur de mail. Il existe bien évidemment des fournisseurs qui garantissent un service efficace avec un respect des données personnelles, gratuitement ou pour un prix modique. Mais l’idée d’être autonome est séduisante et par ailleurs, on apprend beaucoup de choses sur le fonctionnement d’Internet.

Pour gérer l’envoi et la réception de courriels, il est nécessaire d’avoir trois logiciels :

  • MUA ou Mail User Agent : il s’agit ici du logiciel que vous utilisez pour lire et envoyer vos e-mails (par exemple Thunderbird, Gmail,…)
  • MTA ou Mail Transfert Agent est le logiciel qui transmet votre message entre les différents serveurs (le vôtre et celui du destinataire)
  • MDA ou Mail Delivery Agent est le logiciel qui s’occupe de la livraison des e-mails.

Pour fonctionner, ces trois logiciels vont utiliser trois protocoles :

  • STMP ou Simple Mail Transfer Protocol, qui envoie le message
  • POP ou Post Office Protocol
  • IMAP ou Internet Message Access Protocol

Les deux derniers sont responsables de la réception des messages.

Le schéma ci-dessous résume les différentes étapes :

À cette présentation succincte, nous ajouterons un dernier logiciel essentiel pour le bon fonctionnement d’une messagerie électronique : l’anti-spams. Celui-ci traite les courriers indésirables qui représentent un volume conséquent des échanges dans le monde.

Monter son serveur de messagerie comporte un certain nombre de pré-requis :

  • être en auto-hébergement ou louer un VPS (chez OVH, Gandi.net, …)
  • avoir un nom de domaine (pour la partie droite de l’adresse après le @)
  • avoir de préférence comme OS Linux (Debian, CentOS, Ubuntu Server, …)
  • des connaissances techniques suffisantes pour effectuer l’ensemble des manipulations

Dans le cadre de cet article (qui se fonde sur des tutoriels présents sur la toile), j’ai voulu résumer les étapes d’installation sur ma propre machine en mettant en avant les points essentiels et ceux sur lesquels j’ai buté par manque de connaissances préalables et qui me semblent importants pour que l’opération réussisse. J’ai rappelé les définitions principales quand cela était nécessaire aussi les personnes qui sont déjà au fait de ces points techniques pourront sauter certaines sections.

Les différents logiciels que je vais implémenter sont les suivants :

  • MDA (Mail Delivery Agent) : Dovecot
  • MTA (Mail Transfert Agent) : Postfix
  • SGBD : MariaDB (Mysql)
  • Gestion des spams : Rspamd
  • Serveur web : Nginx (pour les interfaces d’administration Postfixadmin et Rspamd)
  • Gestion du cache Rspamd : Redis
  • Certificats SSL : Letsencrypt (certbot)
  • OpenDKIM (validition que le courriel est bien rattaché à votre nom de domaine)

Les variables d’environnement et répertoires indiqués sont ceux d’Archlinux. Il faudra adapter certaines commandes en fonction de votre distribution.

ÉTAPE 1 : création du nom de domaine

Je possède deux noms de domaine chez OVH dont celui qui me sert pour le serveur de messagerie. Vous êtes bien sûr libres de choisir le fournisseur en fonction de votre historique, de vos affinités

J’ai procédé à la création de 2 éléments essentiels pour la gestion des mails :

  • un sous-domaine (en l’occurrence, il a la forme smtp.example.com)
  • un champ MX

Le champ MX est important car il relie votre nom de domaine à votre serveur de mail. Lorsque l’un de vos correspondants vous envoie un e-mail, le serveur effectuant l’envoi sait vers quel serveur il doit l’acheminer grâce au champ MX.

Celui doit avoir la forme suivante : IN MX 50 smtp

J’ai ensuite paramétré le hostname de mon serveur avec smtp.example.com. Dans le fichier host, j’ai une ligne :

127.0.0.1 smtp.example.com smtp

Pour vérifier que le DNS example.com est bien reconnu (MX, smtp), faire :

dig MX example.com +short @ns110.ovh.net (ovh dans mon cas bien sûr)

La réponse sera : 50 smtp.example.com

host smtp.example.com ns110.ovh.net

La réponse sera :

Using domain server:

Name: ns110.ovh.net

Address: XX.XX.XX.XX#53

Aliases: smtp.example.com has address XX.XX.XX.XX (cette adresse est l’IP publique de ma box puisque je suis en auto-hébergement)

host -t MX example.com

La réponse sera : example.com mail is handled by 50 smtp.example.com.

ÉTAPE 2 : ouverture des ports de la box

Pour les personnes qui installeraient le serveur de messagerie sur leur serveur local, ne pas oublier d’ouvrir les ports 25, 587 et 993 sur la box.

ÉTAPE 3 : installation d’un résolveur DNS local

Le DNS ou Domaine Name System permet de faire la translation entre un nom de domaine (par exemple : google.com) et une adresse IP (par exemple : 62.210.16.2). Postfix et Rspamd ont besoin de résoudre des requêtes DNS pour bien fonctionner (réception ou envoi de mails de/vers hotmail.com par exemple). Il est donc recommandé d’installer un résolveur DNS local : Unbound.

Installation d’Unbound sous Archlinux :

pacman -S unbound

Si vous êtes en DHCP, il faut modifier le fichier /etc/resolv.conf :

name_servers="127.0.0.1"

resolv_conf_options="trust-ad"

unbound_conf=/etc/unbound/resolvconf.conf

Attention sur Archlinux, il faut éditer le fichier /etc/resolvconf.conf et générer ensuite resolv.conf via :

resolvconf -u

Vous pouvez tester la prise en compte du résolveur DNS local via :

dig google.fr

Vous devriez obtenir une ligne :

SERVER: 127.0.0.1#53(127.0.0.1) (le serveur local a été interrogé et a répondu).

Autre commande de vérification :

nslookup example.com | grep Server

Réponse : Server: 127.0.0.1

ÉTAPE 4 : reverse DNS

– Définition

Le terme Reverse DNS (rDNS), ou Reverse DNS Lookup, désigne une requête DNS permettant de retourner le nom de domaine et le nom d’hôte d’une adresse IP. La seule condition, c’est que l’adresse Internet à retourner dispose d’un PTR-Record (enregistrement « Pointer »), qui pointe le nom et permet ainsi une requête dite « inversée » dans le Domain Name System. L’organisation de ces entrées, que l’on retrouve dans l’espace de nom du site (domaine), est de la responsabilité des différents fournisseurs Internet.

Dans mon cas, il s’agit de SFR

– Problématique

Dans le cas d’échanges de mails, certains fournisseurs (type AOL) vérifient à la réception d’un mail le PTR. Dans mon cas, mon nom de domaine est un FDQN lié à une adresse IP qui provient de SFR, donc mon nom de domaine est chez OVH avec une adresse IP gérée par SFR (IP de ma box). Ce qui occasionne une erreur lors d’un reverse lookup.

SFR ne propose pas de modifications du PTR. Si vous êtes en mode hébergement, il faut vérifier via l’outil suivant : https://mxtoolbox.com/SuperTool.aspx avec une requête Reverse Lookup. Je pense que dans le cadre d’un VPS hébergé chez un fournisseur de type OVH, Gandi.net, le problème ne se pose pas.

ÉTAPE 5 : SPF Record

– Définition

Un « SPF record »(Sender Policy Framework en anglais) est la base d’une implémentation SPF dans laquelle la politique SPF est définie. Un SPF record est publié dans le DNS (Domain Name Service) et contient une liste de serveurs de messagerie électronique autorisés qui peuvent envoyer des e-mails au nom de votre nom de domaine. Si un expéditeur de courrier électronique n’est pas répertorié dans la section du record et envoie des e-mails au nom de votre domaine, cet e-mail peut ne pas être considéré comme légitime et peut être rejeté par le destinataire du courrier électronique.

Avoir un SPF record correctement configuré améliorera la délivrabilité du courrier électronique et contribuera à protéger votre domaine contre les courriels malveillants envoyés au nom de votre domaine. Toutefois, dans la pratique, ces objectifs sont atteints plus efficacement si vous utilisez un SPF record avec DMARC. DMARC et DMARC Analyzer utilisent à la fois SPF et DKIM. Ensemble, ils créent une synergie et le meilleur résultat pour la sécurité et la délivrabilité de la messagerie électronique.

– Mise en place

Chez l’hébergeur du nom de domaine, il faut configurer un champ de type TXT avec les éléments suivants :

v=spf1 a mx ip4:XX.XX.XX.XX/32 include:mx.ovh.com ?all (/32 si une seule IP pour le serveur).

Ensuite on vérifie via https://mxtoolbox.com/SuperTool.aspx avec un SPF Record Lookup :

Résultat SPF Record Lookup

ÉTAPE 6 : DMARC Record

Définition

+ DMARC

Le DMARC (Authentification, Rapport et Conformité de Message par Domaine) est une technique d’authentification par email. Le DMARC a été créé par PayPal avec Google, Microsoft et Yahoo! Avec le DMARC, un propriétaire de domaine publie un DMARC record et obtient un aperçu et un contrôle sur l’envoi d’email en son nom. Vous pouvez utiliser le DMARC pour protéger vos domaines contre les attaques de phishing (hameçonnage) ou spoofing (usurpation).

+ DMARC record

Un « DMARC record » est la base d’une implémentation DMARC dans laquelle l’ensemble de règles de DMARC record est défini. Ce DMARC record informe les destinataires de courriers électroniques si un domaine est configuré pour DMARC. Si c’est le cas, le DMARC record contient la politique que le propriétaire du domaine veut utiliser. Essentiellement, un DMARC enregistre une entrée DNS (Domain Name Service). On peut commencer à utiliser DMARC en implémentant un record DNS DMARC. Ce DMARC record sera utilisé par les destinataires de courriers électroniques qui ont adopté DMARC. Cela vous permettra de surveiller tous les messages qui ont été envoyés à votre domaine en tenant compte de votre politique DMARC.

– Mise en place

Via ce lien : https://elasticemail.com/dmarc/. vous pourrez mettre en place le DMARC Record qui aura la forme suivante :

"v=DMARC1;p=reject;rua=mailto:XXXX@example.com;pct=100;ruf=mailto:XXXX@example.com;fo=0:d:s;aspf=r;adkim=r;"

Via https://mxtoolbox.com/SuperTool.aspx, faire une requête DMARC Lookup :

Résultat DMARC Lookup

ÉTAPE 7 : création des certificats SSL

On utilise l’outil pour générer les certificats SSL qui permettront de gérer les envois de mails. On peut créer un certificat global pour l’ensemble des composants ou 3 certificats (mail, imap, smtp). La commande à taper est la suivante :

cerbot certonly -d example.com

les fichiers sont sauvegardés sous

/etc/letsencrypt/live/example.com/

avec le certificat fullchain.pem et la clé privée privkey.pem que l’on indiquera dans la partie paramétrage de Dovecot, Postfix et Rspamd.

Les certificats Letsencrypt sont renouvelables tous les 3 mois. On passera soit par un cronjob (crontab -e) soit (et c’est ce que je préfère) par Systemd avec un timer.

ÉTAPE 8 : installation de Postfix Admin (optionnel)

De façon à gérer les domaines mails, les utilisateurs, on peut passer par la mise en place de Postfixadmin. Vous aurez besoin d’un serveur web (nginx dans mon cas), de PHP (php-fpm, php-imap) et de l’instance de MariaDB pour la gestion des mails.

Sous Archlinux :

Modification du fichier suivant :

/etc/webapps/postfixadmin/config.local.php

<?php

$CONF['configured'] = true;

// correspond to dovecot maildir path /home/vmail/%d/%u $CONF['domain_path'] = 'YES';

$CONF['domain_in_mailbox'] = 'NO';

$CONF['database_type'] = 'mysqli';

$CONF['database_host'] = 'localhost';

$CONF['database_user'] = 'postfix_user';

$CONF['database_password'] = 'hunter2';

$CONF['database_name'] = 'postfix_db';

// globally change all instances of ''change-this-to-your.domain.tld''

// to an appropriate value

$CONF['default_aliases'] = array ( 'abuse' => 'abuse@change-this-to-your.domain.tld', 'hostmaster' => 'hostmaster@change-this-to-your.domain.tld', 'postmaster' => 'postmaster@change-this-to-your.domain.tld', 'webmaster' => 'webmaster@change-this-to-your.domain.tld'

$CONF['vacation_domain'] = 'autoreply.change-this-to-your.domain.tld'; $CONF['footer_text'] = 'Return to change-this-to-your.domain.tld'; $CONF['footer_link'] = 'http://change-this-to-your.domain.tld';

);

Modification du fichier suivant :

/etc/php/php-fpm.d/postfixadmin.conf

[postfixadmin]

user = postfixadmin

group = postfixadmin

listen = /run/postfixadmin/postfixadmin.sock

listen.owner = root

listen.group = http

listen.mode = 0660

pm = ondemand

pm.max_children = 4

php_admin_value['date.timezone'] = Europe/Berlin php_admin_value['session.save_path'] = /tmp php_admin_value['open_basedir'] = /tmp/:/usr/share/webapps/postfixadmin/:/etc/webapps/postfixadmin/:/usr/bin/doveadm:/var/cache/postfixadmin

Création du fichier conf pour Nginx

/etc/nginx/sites-available/postfixadmin.conf

server {

listen 8081;

server_name postfixadmin;

root /usr/share/webapps/postfixadmin/public/;

index index.php;

charset utf-8;

access_log /var/log/nginx/postfixadmin-access.log;

error_log /var/log/nginx/postfixadmin-error.log;

location / {

try_files $uri $uri/ index.php;

}

location ~* \.php$ { ù

fastcgi_split_path_info ^(.+\.php)(/.+)$;

include fastcgi_params;

fastcgi_pass unix:/run/postfixadmin/postfixadmin.sock;

fastcgi_index index.php;

include fastcgi_params;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_buffer_size 16k;

fastcgi_buffers 4 16k;

}

}

Ajout de uwsgi-plugin-php et configuration d’une socket et modification du fichier conf :

# pass all .php or .php/path urls to uWSGI

location ~ ^(.+\.php)(.*)$ {

include uwsgi_params;

uwsgi_modifier1 14;

uwsgi_pass unix:/run/postfixadmin/postfixadmin.sock:

}

Ne pas oublier de créer le lien symbolique vers sites-enabled et redémarrer le service Nginx.

Interface de Postfix Admin

ÉTAPE 9 : création de la base de données du serveur de messagerie

Pour le bon fonctionnement du serveur de mails, il faut créer 3 tables, les noms de domaine, les utilisateurs et les alias (servant à transférer ou à rediriger les mails). On peut passer par l’interface CLI de MariaDB ou via phpmyadmin (je ne détaille pas l’installation de celui-ci).

– Création de la base et de l’utilisateur ayant les droits sur la base

SQL :

create database servermail

CHARACTER SET 'utf8';

SQL :

grant select on vmail.* to 'vmail'@'localhost' identified by 'vmaildbpass';

SQL :

use vmail;

Les 3 requêtes de création de tables suivantes peuvent être copiées et collées directement.

– Table noms de domaine pour le serveur

INSERT INTO `servermail`.`virtual_domains`

(`id` ,`name`)

VALUES

('1', 'example.com'),('2', 'smtp.example.com');

– Table des utilisateurs, ajout email1@example.com

INSERT INTO `servermail`.`virtual_users`

(`id`, `domain_id`, `password` , `email`)

VALUES('1', '1', ENCRYPT('monmotdepasse', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email1@example.com');

Pour ajouter un nouvel utilisateur

('2', '1', ENCRYPT('monmotdepasse2', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email2@example.com');

– Table des alias

INSERT INTO `servermail`.`virtual_aliases`

(`id`, `domain_id`, `source`, `destination`)

VALUES

('1', '1', 'email3@example2.com', 'email1@example.com');

ÉTAPE 10 : création du vmail-user et du répertoire vmail

– Création du dossier pour les boîtes mail (Mailbox)

mkdir /var/vmail/vhosts/example.com

(où example.com est votre nom de domaine)

– Création groupe et utilisateur vmail

groupadd -g 5000 vmail

useradd -g vmail -u 5000 vmail -d /var/mail

– Création du répertoire Sieve (pour Rspamd)

mkdir -p /var/vmail/sieve/global

– On attribue les droits pour l’utilisateur vmail

chown -R vmail /var/vmail

chgrp -R vmail /var/vmail

chmod -R 770 /var/vmail

ÉTAPE 11 : configuration de Postfix

– Configuration du fichier /etc/postfix/main.cf

Exécuter :

nano /etc/postfix/main.cf

Les paramètres à garder / modifier :

1. compatibility_level = 2

2. mail_owner = postfix

3. TLS parameters

smtpd_tls_cert_file=/etc/letsencrypt/live/example.com/fullchain.pem

smtpd_tls_key_file=/etc/letsencrypt/live/example.com/privkey.pemsmtpd_use_tls=yes

smtpd_tls_auth_only = yes

smtpd_sasl_auth_enable = yes

smtpd_sasl_type = dovecot

smtpd_sasl_path = private/auth

smtpd_recipient_restrictions =       

permit_sasl_authenticated,       

permit_mynetworks,       

reject_unauth_destination

4. Hostname

myhostname = smtp.example.com

(correspond à votre FDQN)

5. Domain

mydomain = example.com

(le nom de domaine)

6. myorigin = $myhostname

7. inet_interfaces = all

8. mydestination = localhost

(cela permet au serveur d’utiliser le domaine défini dans la table MariaDB virtual_domains)

9.  virtual_transport = lmtp:unix:private/dovecot-lmtp

(permet de délivrer les mails à tous les domaines présents dans la table MariaDB virtual_domains)

10. configuration de postfix avec la base servermail précédemment créée

virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

11. Indiquer à Postfix le répertoire où sont stockés les mails

virtual_uid_maps = static:5000

virtual_gid_maps = static:5000

virtual_mailbox_base = /var/mail

12. Networksmynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

13. Alias database utilisée par Postfix

alias_maps = hash:/etc/aliases

alias_database = hash:/etc/aliases

– Configuration des requêtes Postfix à la base servermail

1. requête vers les domaines (modifier avec vos paramètres)

nano /etc/postfix/mysql-virtual-mailbox-domains.cf

user = usermail

password = mailpassword

hosts = 127.0.0.1

dbname = servermail

query = SELECT 1 FROM virtual_domains WHERE name='%s'

Redémarrer Postfix (systemctl restart postfix)

Exécuter la commande suivante pour valider le bon fonctionnement

postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

Si la valeur retournée est 1, le test est réussi

2. requête mapping des boîtes mails des utilisateurs

nano /etc/postfix/mysql-virtual-mailbox-maps.cf

user = usermail

password = mailpassword

hosts = 127.0.0.1

dbname = servermail

query = SELECT 1 FROM virtual_users WHERE email='%s'

Redémarrer Postfix

Exécuter la commande suivante pour valider le bon fonctionnement

postmap -q email1@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

Si la valeur retournée est 1, le test est réussi

3. requête mapping des alias

nano /etc/postfix/mysql-virtual-alias-maps.cf

user = usermail

password = mailpassword

hosts = 127.0.0.1

dbname = servermail

query = SELECT destination FROM virtual_aliases WHERE source='%s'

Redémarrer Postfix

Exécuter la commande suivante pour valider le bon fonctionnement

postmap -q alias@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf

Si le mail qui est retourné est celui de l’alias créé, le test est réussi

Ne pas oublier d’exécuter newaliases de façon à créer la base /etc/aliases.db

14. Paramètres à ajouter pour Open DKIM

# For use by dkim

miltersmtpd_milters = inet:localhost:8891

non_smtpd_milters = $smtpd_milters

milter_default_action = accept

– Configuration du fichier /etc/postfix/master.cf

De façon à communiquer de manière sécurisée, il est nécessaire de passer par le port 587 (STARTTLS). Il est possible de passer par le port 465 (SSL/TLS). Le paramétrage indiqué est celui du port 587 :

nano /etc/postfix/master.cf

Décommenter les lignes suivantes :

submission inet n - - - - smtpd

-o syslog_name=postfix/submission

-o smtpd_tls_security_level=encrypt

-o smtpd_sasl_auth_enable=yes

-o smtpd_client_restrictions=permit_sasl_authenticated,reject

-o smtpd_milters=inet:127.0.0.1:8891

Cette dernière ligne est à ajouter pour le paramétrage de DKIM

Redémarrer Postfix et vérifier que le port 587 est bien ouvert (via netstat).Vous pouvez vous assurer aussi via http://mxtoolbox.com/SuperTool.aspx que les ports 25 et 587 sont bien ouverts.

ÉTAPE 12 : Configuration de Dovecot

– Fichiers de configuration

1. on crée le répertoire /etc/dovecot/conf.d

mkdir /etc/dovecot/conf.d

2. les fichiers de configuration seront les suivants :

1. /etc/dovecot/dovecot.conf

2. /etc/dovecot/dovecot-sql.conf.ext

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

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

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

6. /etc/dovecot/conf.d/10-ssl.conf

7. /etc/dovecot/conf.d/auth-sql.conf.ext

8. /etc/dovecot/conf.d/15-mailboxes.conf

9. /etc/dovecot/conf.d/ 20-lmtp.conf

10. /etc/dovecot/conf.d/ 20-managesieve.conf

11. /etc/dovecot/conf.d/90-sieve.conf

– Dovecot.conf

nano /etc/dovecot/dovecot.conf

1. activer le protocole imap et sieve

protocols = imap lmtp sieve

!include_try /usr/share/dovecot/protocols.d/*.protocol

2. décommenter la ligne suivante pour prendre en compte les fichiers de configuration

!include conf.d/*.conf

– 10-mail.conf

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

1. chercher la ligne mail_location, décommenter et saisir le paramètre suivant

mail_location = maildir:/var/mail/vhosts/%d/%n

2. chercher la ligne mail_privileged_group, décommenter et saisir le paramètre suivant

mail_privileged_group = mail

– 10-auth.conf

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

1. décommenter le paramètre plaintext et saisir

disable_plaintext_auth = yes

2. modifier auth_mechanisms et saisir

auth_mechanisms = plain login

3. commenter la ligne suivante

#!include auth-system.conf.ext

4. autorisation pour la base servermail

!include auth-sql.conf.ext

– dovecot-sql.conf.ext

nano /etc/dovecot/conf.d/auth-sql.conf.ext

1. copier le code suivant

passdb {

driver = sql

args = /etc/dovecot/dovecot-sql.conf.ext

}

userdb {

driver = static

args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n

}

2. Modifier le fichier dovecot-sql.conf.ext

nano /etc/dovecot/dovecot-sql.conf.ext

Décommenter la ligne suivante :

driver = mysql

Décommenter la ligne suivante et saisir les paramètres de connexion à MariaDB :

connect = host=127.0.0.1 dbname=servermail user=usermail password=mailpassword

Décommenter la ligne default_pass_scheme et changer le

default_pass_scheme = SHA512-CRYPT

Décommenter la ligne password_query et saisir les informations suivantes

password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';

– Droits sur le répertoire Dovecot

chown -R vmail:dovecot /etc/dovecot

chmod -R o-rwx /etc/dovecot

– 10-master.conf

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

Modifier les sections suivantes :

1. imap-login

service imap-login { 

inet_listener imap {   

port = 0 

inet_listener imaps {   

port = 993   

ssl = yes 

}

2. lmtpservice

lmtp { 

unix_listener /var/spool/postfix/private/dovecot-lmtp {   

mode = 0600  

user = postfix  

group = postfix 

}

3. authservice auth

{

unix_listener /var/spool/postfix/private/auth {

mode = 0660

user = postfix

group = postfix

}

4. auth-userdb 

unix_listener auth-userdb {  

mode = 0600  

user = vmail   #group = 

}

user = dovecot

5. auth-worker

service auth-worker {

# Auth worker process is run as root by default, so that it can access # /etc/shadow. If this isn't necessary, the user should be changed to # $default_internal_user.

user = vmail

}

– 10-ssl.conf

nano /etc/dovecot/conf.d/10-ssl.conf

ssl = yes

ssl_cert = </etc/letsencrypt/live/smtp.example.com/fullchain.pem

ssl_key = </etc/letsencrypt/live/smtp.example.com/privkey.pem

– 20-lmtp.conf

Fichier à créer pour la gestion du module de filtre d’emails (dans le cadre de l’anti-spams). Sous Archlinux, il faudra installer le module https://www.archlinux.org/packages/?name=pigeonhole

nano /etc/dovecot/conf.d/20-lmtp.conf

protocol lmtp {

mail_plugins = $mail_plugins sieve

}

– 20-managesieve.conf

service managesieve-login {

}

service managesieve {

}

protocol sieve {

}

– 90-sieve.conf

# From elsewhere to Spam folder or flag changed in Spam folder

imapsieve_mailbox1_name = Spam

imapsieve_mailbox1_causes = COPY FLAG

imapsieve_mailbox1_before = file:/var/lib/dovecot/sieve/report-spam.sieve

# From Spam folder to elsewhere

imapsieve_mailbox2_name = *

imapsieve_mailbox2_from = Spam

imapsieve_mailbox2_causes = COPY

imapsieve_mailbox2_before = file:/var/lib/dovecot/sieve/report-ham.sieve

sieve_global_extensions = +vnd.dovecot.pipe

Redémarrer le service Dovecot (systemctl restart dovecot). Pour tester que le port 993 (imap) est ouvert et fonctionnel :

telnet example.com 993

ÉTAPE 13 : configurer le compte de messagerie dans Thunderbird

1. aller dans Paramètres des comptes Courrier et Groupes puis ajouter un compte de messagerie

2. Configurer les éléments comme suit :

Interface de création de compte dans Thunderbird

1. L’adresse électronique et le mot de passe sont ceux définis dans la table virtual_users

2. les serveurs IMAP et SMTP pointent sur example.com avec les ports 993 et 587 (ouverts lors du paramétrage de Postfix et Dovecot)

3. pour les identifiants, celui du serveur entrant est la partie gauche de l’adresse email par contre il est important de mettre l’adresse complète du mail pour le serveur sortant

4. tester les paramètres de connexion, il doit trouver les informations du serveur. Cliquer sur terminer, la boîte mail est créée dans Thunderbird

ÉTAPE 14 : configuration de Rspamd

La dernière étape de la configuration du serveur de mail est le paramétrage de l’outil anti-spams Rspamd (https://rspamd.com/). La page suivante permet de monter rapidement l’outil : https://rspamd.com/doc/quickstart.html.

Je vous conseille d’utiliser l’assistant de configuration de Rspamd car cela permet d’éviter d’aller modifier les fichiers à la main. Pour exécuter l’assistant :

rspamadm configwizard

1. une erreur que j’ai commise au moment de saisir les informations liées à Redis : mettre localhost. En fait il faut saisir 127.0.0.1:6379 (sinon il y aura une erreur de connexion).

2. pour DKIM signing for outbound, j’ai paramétré le nom de la DKIM key avec le nom de mon domaine. Il faut publier la clé sur votre gestionnaire de nom de domaine.

Soit un champ TXT avec example.com._domainkey.example.org, saisir la clé générée par l’assistant de Rspamd.

Pour gérer la DKIM key sur le serveur, on installe opendkim (pacman -S opendkim). Puis on configure le fichier conf comme suit :

Domain example.com

KeyFile /var/lib/rspamd/dkim/private.key

Selector dkim._domainkey

Socket inet:8891@localhost

UserID opendkim

Canonicalization relaxed/simple

Il faut ajouter un champ TXT dans le DNS de votre nom de domaine :

dkim._domainkey IN TXT "v=DKIM1;t=s;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDnrgYTDitUF0vUwV+VgsuzpDDEfxR7qL9bO/PrygAAVpI7oCdeh7bmKUtnyaDIAfzDZvz/xkB61kv63JggxPb5xwPJODrZ5cgIeBRITJpSS6cS0pNGBwJxDb+XjFgRqcMk"

On peut vérifier via un DKIM Lookup que cela est bien pris en compte avec https://mxtoolbox.com/SuperTool.aspx

Mise en place de l’interface d’administration de Rpsamd (optionnel) :

Les indications suivantes se basent sur le choix de Nginx comme serveur web et d’une configuration des fichiers Rspamd dans le contexte Archlinux.

1. création d’un fichier /etc/nginx/sites-available/rspamd.conf

2. Informations à saisir :

server {       

listen 443 ssl;       

add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";       

add_header X-Content-Type-Options nosniff;      

add_header X-Frame-Options SAMEORIGIN;       

add_header X-XSS-Protection "1; mode=block";       

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;      

ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;       

server_name mail.example.com;       

location / {           

root /usr/share/rspamd/www/;           

try_files $uri @proxy;       

}       

location /rspamd/ {             

proxy_pass    http://localhost:11334/;             

proxy_set_header Host      $host;             

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;       

}      

  location @proxy {               

proxy_pass  http://127.0.0.1:11334;               

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                proxy_set_header Host $http_host;       

}       

ssl_protocols TLSv1.2 TLSv1.3;       

ssl_prefer_server_ciphers on;       

ssl_session_cache shared:TLS:10m;       

ssl_session_timeout 1d;       

ssl_stapling on;      

  ssl_stapling_verify on;       

server_tokens off;

}

3. création du lien symbolique :

ln -s /etc/nginx/sites-available/rspamd.conf /etc/nginx/sites-enabled/rspamd.conf

4. vérifier qu’il n’y a pas d’erreurs : nginx -t et relancer le serveur systemctl restart nginx

5. Accès : https://mail.example.com/rspamd/

6. Accès à l’interface web via un tunnel SSH :ssh -L 8080:localhost:11334 admin@mail.example.com -NL’url d’accès est alors : http://localhost:8080.

Conclusion

J’espère avoir été complet dans les différents étapes de paramétrage du serveur de messagerie personnel. Si vous constatez des erreurs ou avez des suggestions d’amélioration, des modifications qui vous semblent importantes à remonter, n’hésitez pas à le faire dans la partie commentaires.

Laisser un commentaire