Ressources informatiques

Ressources informatiques

Ressources informatiques

Installer un serveur de messagerie

Avertissement : cette article décrit l'installation d'un serveur de messagerie interne utilisé en laboratoire à titre d'exemple. Il utilise un certificat autosigné, ce qui ne doit jamais être fait sur un serveur mis en production (utilisé en interne ou communicant avec un réseau public). Dans ce dernier cas il faudra acquérir un certificat après d'une autorité de certification.

Donnez un nom FQDN à votre serveur mail

adminMailX@serveurMailX:~$ hostname
serveurMailX

Suivez la procédure ressourcesinformatiques.com > Modifier le nom du serveur pour modifier le nom de votre serveur

Créez les utilisateurs du serveur mail

Documentation : Utilisateurs et droits d'accès

Créer l'administrateur du serveur mail adminMail

adminMailX@serveurMailX:~$ sudo useradd -G mail -m -s /bin/bash adminMail
adminMailX@serveurMailX:~$ sudo passwd adminMail

Créer deux utilisateurs qui s'enverront des mails

Je crée les utilisateurs alice et martin en leur affectant comme groupe secondaire le groupe mail puis leur attribue un mot de passe.
Exemple pour alice :

adminMailX@serveurMailX:~$ sudo useradd -G mail -m -s /bin/bash alice
adminMailX@serveurMailX:~$ sudo passwd alice

Modifier le serveur DNS pour indiquer les Ressource Record (RR) relatifs au serveur de messagerie

Effectuer la configuration

La strucuture de base de mon serveur DNS est décrite dans l'article Installer un serveur DNS.
Il faut que le fichier /etc/bind/db.x.lan contiennent les lignes suivantes :

          IN     MX 10   mail ; Définit le nom du serveur de mail du domaine
serveurMailX      IN     A       192.168.56.3
mail              IN     A       192.168.56.3

Assurez-vous que la zone inverse contiennent la correspondance adresse IP <---> nom pour le serveur de mail. Exemple :

3        IN      PTR     serveurMailX.x.lan.

Redémarrez le serveur DNS et validez à nouveau son fonctionnement.

Tester la résolution de noms

adminMailX@serveurMailX:~$ host mail
mail.x.lan has address 192.168.56.3
adminMailX@serveurMailX:~$ sudo apt-get install dnsutils
adminMailX@serveurMailX:~$ dig MX mazone.lan
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5885
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2

;; QUESTION SECTION:
;x.lan.                         IN      MX

;; ANSWER SECTION:
x.lan.                  86400   IN      MX      10 mail.x.lan.

;; ADDITIONAL SECTION:
mail.x.lan.             86400   IN      A       192.168.56.3

;; SERVER: 192.168.56.101#53(192.168.56.101) (UDP)

Créer les certificats du serveur

Lisez les définitions ressourcesinformatiques.com > Cyber > Définitions Remarque : ne possédant pas d’autorité de certification nous allons créer un certificat serveur auto-signé.

Tapez la commandes ci-dessous en modifiant les parties en jaune :

adminMailX@serveurMailX:~$ sudo openssl req -x509 \
-nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/mail.key \
-out /etc/ssl/certs/mail.crt \
-subj "/C=FR/ST=France/L==maVille/O=monEntreprise/OU=monService/CN=mail.x.lan/emailAddress=adminMailX@x.lan"

Résultat :

root@serveurMailX:~#  ls -l /etc/ssl/certs | grep mail
-rw-r--r-- 1 root root   1460 16 oct.  09:44 mail.crt
root@serveurMailX:~#  ls -l /etc/ssl/private | grep mail
-rw------- 1 root root     1704 16 oct.  09:44 mail.key

Activer SASL

Installer et configurer SASL

Téléchargez le dépôt
adminMailX@serveurMailX:~$ sudo apt install sasl2-bin db-util
Effectuer une sauvegarde du fichier de configuration
adminMailX@serveurMailX:~$ sudo cp /etc/default/saslauthd /etc/default/saslauthd.origin
Activer le démarrage du service

Dans le fichier /etc/default/saslauthd, il faut affecter à la directive START la valeur yes. Pour cela, nous allons créer un fichier sans les commentaires, puis effectuer la configuration nécessaire.

root@raspberrypi:~# cat /etc/default/saslauthd | grep -v -E '^(#|$)'  | sudo tee -a /etc/default/saslauthdSansCommentaire
root@raspberrypi:~# sudo cp /etc/default/saslauthdSansComentaire  /etc/default/saslauthd
root@raspberrypi:~# sudo rm /etc/default/saslauthdSansComentaire

Effectuez cette modification à l'aide d'un éditeur, exemple : nano.

adminMailX@serveurMailX:~$ sudo nano /etc/default/saslauthd
START=yes
DESC="SASL Authentication Daemon"
NAME="saslauthd"
MECHANISMS="pam"
MECH_OPTIONS=""
THREADS=5
OPTIONS="-c -m /var/run/saslauthd"
Valider l'installation
Redémarrer le service
adminMailX@serveurMailX:~$ sudo systemctl restart saslauthd
Vérifier l'état du service
adminMailX@serveurMailX:~$ sudo systemctl status saslauthd
 saslauthd.service - LSB: saslauthd startup script
   Loaded: loaded (/etc/init.d/saslauthd; generated)
   Active: active (running)
.... 
....                                    : Starting SASL Authentication Daemon: saslauthd.
....                                    : Started LSB: saslauthd startup script.

Serveur SMTP (envoi de messages) : Postfix

Installer le serveur SMTP postfix

adminMailX@serveurMailX:~$ sudo apt update
adminMailX@serveurMailX:~$ sudo apt install postfix

Configuration type de serveur de messagerie : choisir Internet Site

postfix RPI

Nom du courrier : je choisis la zone mazone.lan, zone que j'ai créée dans l'article Installer un serveur DNS

postfix RPI

Messages de fin d'installation :

WARNING: /etc/aliases exists, but does not have a root alias.
Postfix (main.cf) is now set up with a default configuration.  If you need to
make changes, edit /etc/postfix/main.cf
After modifying main.cf, be sure to run 'service postfix reload'.

Le message ci-dessus indique que le fichier de configuration de postfix se nomme /etc/postfix/main.cf.

Configurer postfix

Documentation : Postfix : configuration de base | Postfix : home_mailbox

Rediriger les courriers adressés à root vers adminMail

Effectuer une sauvegarde du fichier de configuration /etc/aliases

adminMailX@serveurMailX:~$ sudo cp /etc/aliases /etc/aliases.origin

Ajoutez la ligne ci-dessous dans ce fichier :

adminMailX@serveurMailX:~$ sudo nano /etc/aliases
# See man 5 aliases for format
postmaster:    root
root: adminMail

Le nom du domaine qui apparaîtra sur les courriers postés sur votre serveur (myorigin). Cette valeur est stockée dans le fichier /etc/mailname. Ce fichier doit contenir votre nom de domaine. Effectuez la modification ci-dessous :

adminMailX@serveurMailX:~$ sudo nano /etc/mailname
x.lan

Rechargez la configuration des alias des adresses mail

adminMailX@serveurMailX:~$ sudo newaliases
Fichier /etc/postfix/main.cf
Effectuer une sauvegarde du fichier de configuration /etc/postfix/main.cf
adminMailX@serveurMailX:~$ sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.origin
Effectuer la configuration

Effectuez, les ajouts et modifications à l'aide de l'éditeur de votre choix :

adminMailX@serveurMailX:~$  sudo nano /etc/postfix/main.cf
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 3.6

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/mail.crt
smtpd_tls_key_file=/etc/ssl/private/mail.key
smtpd_use_tls=yes
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=encrypt
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# sasl
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination


smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = serveurMailX.x.lan
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, x.lan, serveurMailX, localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
Configurer le chiffrage TLS des connexions SMTP

Effectuez une sauvegarde du fichier de configuration /etc/postfix/master.cf

adminMailX@serveurMailX:~$ sudo cp /etc/postfix/master.cf /etc/postfix/master.cf.origin

Il faut décommenter la directive submission dans le fichier /etc/postfix/master.cf en enlevant le caractère # devant la ligne
#submission inet n - y - - smtpd
afin d'indiquer à postfix d'ouvrir le port 587. Pour effectuez, la modification :

adminMailX@serveurMailX:~$ sudo nano /etc/postfix/master.cf

Résultat :

adminMailX@serveurMailX:~$ sudo cat /etc/postfix/master.cf | grep "submission inet n"
submission inet n       -       y       -       -       smtpd

Installer serveurs POP et IMAP pour la consultation des messages reçus

Installer dovecot

adminMailX@serveurMailX:~$ sudo apt install dovecot-core dovecot-imapd dovecot-pop3d

Configurer dovecot pour SASL

Nous allons configurer dovecot pur qu’il utilise l’authentification SASL proposé par postfix. Documentation : postfix.org > Configuring Dovecot SASL

Fichier /etc/dovecot/conf.d/10-master.conf
Sauvegarder le fichier
adminMailX@serveurMailX:~$ sudo cp /etc/dovecot/conf.d/10-master.conf \
/etc/dovecot/conf.d/10-master.conf.origin
Configurer

Recherchez la ligne # Postfix smtp-auth dans le fichier /etc/dovecot/conf.d/10-master.conf. Effectuez, les modifications ci-dessous dans ce fichier :

adminMailX@serveurMailX:~$ sudo nano /etc/dovecot/conf.d/10-master.conf

Résultat attendu :

adminMailX@serveurMailX:~$  grep -A6 smtp-auth /etc/dovecot/conf.d/10-master.conf
  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
   group = postfix
  }  
Fichier /etc/dovecot/conf.d/10-auth.conf
Sauvegarder le fichier d'origine et créer un fichier sans commentaire
adminMailX@serveurMailX:~$ sudo cp  /etc/dovecot/conf.d/10-auth.conf  \
/etc/dovecot/conf.d/10-auth.conf.origin

adminMailX@serveurMailX:~$ grep -v -E '^(#|$)' /etc/dovecot/conf.d/10-auth.conf |  sudo \
tee  /etc/dovecot/conf.d/10-auth.confSansCommentaire

adminMailX@serveurMailX:~$ sudo cp /etc/dovecot/conf.d/10-auth.confSansCommentaire \
/etc/dovecot/conf.d/10-auth.conf 
Configurer

Effectuez, la modification ci-dessous dans ce fichier :

adminMailX@serveurMailX:~$ sudo nano /etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain login
!include auth-system.conf.ext
Fichier /etc/dovecot/conf.d/10-ssl.conf
Sauvegarder le fichier d'orignine et créer un fichier sans commentaire
adminMailX@serveurMailX:~$  sudo cp /etc/dovecot/conf.d//10-ssl.conf \
/etc/dovecot/conf.d//10-ssl.conf.origin

adminMailX@serveurMailX:~$ grep -v -E '^(#|$)' /etc/dovecot/conf.d/10-ssl.conf | sudo \
tee /etc/dovecot/conf.d//10-ssl.confSansCommentaire

adminMailX@serveurMailX:~$ sudo cp /etc/dovecot/conf.d//10-ssl.confSansCommentaire \
/etc/dovecot/conf.d/10-ssl.conf
Configurer

Modifiez les lignes ssl_cert = </etc/dovecot/private/dovecot.pem et ssl_key = </etc/dovecot/private/dovecot.key pour indiquer l'emplacement du certificat autosigné (crt) et de la clé privée (key) créé précédemment :

ssl = yes
ssl_cert = </etc/ssl/certs/mail.crt
ssl_key = </etc/ssl/private/mail.key
ssl_client_ca_dir = /etc/ssl/certs
ssl_dh = </usr/share/dovecot/dh.pem

Valider l'installation

Redémarrer les serveurs

adminMailX@serveurMailX:~$ sudo systemctl restart postfix
adminMailX@serveurMailX:~$ sudo systemctl restart dovecot

Vérifier l'état du serveur

Postfix
adminMailX@serveurMailX:~$ sudo systemctl status postfix
  postfix.service - Postfix Mail Transport Agent
...
   Active: active (exited) ...
...
................  Starting Postfix Mail Transport Agent.
Dovecot
adminMailX@serveurMailX:~$ sudo systemctl status dovecot
 dovecot.service - Dovecot IMAP/POP3 email server
...
   Active: active (running) ...
...
................ Started Dovecot IMAP/POP3 email server.

Visualiser les ports ouverts

Commande ss : another utility to investigate sockets
Options :

adminMailX@serveurMailX:~$  ss -lntp sport != :22
State    Recv-Q   Send-Q   Local Address:Port     Peer Address:Port   Process
LISTEN   0        100          0.0.0.0:143             0.0.0.0:*       users:(("dovecot",pid=5471,fd=39))
LISTEN   0        100          0.0.0.0:587             0.0.0.0:*       users:(("master",pid=5459,fd=18))
LISTEN   0        100          0.0.0.0:110             0.0.0.0:*       users:(("dovecot",pid=5471,fd=22))
LISTEN   0        100          0.0.0.0:25              0.0.0.0:*       users:(("master",pid=5459,fd=13))
LISTEN   0        100          0.0.0.0:993             0.0.0.0:*       users:(("dovecot",pid=5471,fd=41))
LISTEN   0        100          0.0.0.0:995             0.0.0.0:*       users:(("dovecot",pid=5471,fd=24))
LISTEN   0        100          [::]:143                [::]:*          users:(("dovecot",pid=5471,fd=40))
LISTEN   0        100          [::]:587                [::]:*          users:(("master",pid=5459,fd=19))
LISTEN   0        100          [::]:110                [::]:*          users:(("dovecot",pid=5471,fd=23))
LISTEN   0        100          [::]:25                 [::]:*          users:(("master",pid=5459,fd=14))
LISTEN   0        100          [::]:993                [::]:*          users:(("dovecot",pid=5471,fd=42))
LISTEN   0        100          [::]:995                [::]:*          users:(("dovecot",pid=5471,fd=25))

Les ports 25 (SMTP), 110 (POP3), 143 (IMAP), 587 (Submission), 993 (IMAPS) et 995 (POP3S) acceptent les connexions IPv4 et IPv6.

Envoyer un mail depuis un poste Linux

Installer le client de messagerie swaks
doe@clientX:~$ su - root
Mot de passe :
doe@clientX:~$ apt install swaks
Envoyer

Alice envoie le mail "bonjour dupond" à dupond

x@clientX:~$ swaks --from "alice@x.lan" --to "dupond@x.lan"  --server mail.x.lan --auth LOGIN \
--auth-user "alice" --auth-password "bonjour" -tls --body "bonjour Dupond"
=== Trying mail.x.lan:25...
=== Connected to mail.x.lan.
<-  220 serveurMailX.x.lan ESMTP Postfix (Debian/GNU)
 -> EHLO clientX
<-  250-serveurMailX.x.lan
<-  250-PIPELINING
<-  250-SIZE 10240000
<-  250-VRFY
<-  250-ETRN
<-  250-STARTTLS
<-  250-AUTH PLAIN LOGIN
<-  250-ENHANCEDSTATUSCODES
<-  250-8BITMIME
<-  250-DSN
<-  250-SMTPUTF8
<-  250 CHUNKING
 -> STARTTLS
<-  220 2.0.0 Ready to start TLS
=== TLS started with cipher TLSv1.3:TLS_AES_256_GCM_SHA384:256
=== TLS no local certificate set
=== TLS peer DN="/C=FR/ST=France/L=maVille/O=monEntreprise/OU=monService/CN=mail.x.lan/emailAddress=adminMailX@x.lan"
 ~> EHLO clientX
<~  250-serveurMailX.x.lan
<~  250-PIPELINING
<~  250-SIZE 10240000
<~  250-VRFY
<~  250-ETRN
<~  250-AUTH PLAIN LOGIN
<~  250-ENHANCEDSTATUSCODES
<~  250-8BITMIME
<~  250-DSN
<~  250-SMTPUTF8
<~  250 CHUNKING
 ~> AUTH LOGIN
<~  334 VXNlcm5hbWU6
 ~> YWxpY2U=
<~  334 UGFzc3dvcmQ6
 ~> Ym9uam91cg==
<~  235 2.7.0 Authentication successful
 ~> MAIL FROM:
<~  250 2.1.0 Ok
 ~> RCPT TO:
<~  250 2.1.5 Ok
 ~> DATA
<~  354 End data with .
 ~> Date: Thu, 16 Oct 2025 10:20:00 +0200
 ~> To: dupond@x.lan
 ~> From: alice@x.lan
 ~> Subject: test Thu, 16 Oct 2025 10:20:00 +0200
 ~> Message-Id: <20251016102000.001637@clientX>
 ~> X-Mailer: swaks v20201014.0 jetmore.org/john/code/swaks/
 ~>
 ~> bonjour Dupond
 ~>
Vérifier la réception du mail sur le serveur

Remarque : cette partie correspond à une version plus anciene n'utilisant pas la même zone DNS

Installer le logiciel de lecture de mail sur le Raspberry pi

adminMailX@serveurMailX:~$ sudo apt install mailutils

Se connecter à l'aide de bob

C:\>ssh bob@192.168.1.11
bob@192.168.1.11's password:
...
You have mail.

La boîtes aux lettres de bob a été créé dans le répertoire /var/mail

bob@raspberrypi:~ $ ls -l /var/mail
total 4
-rw------- 1 bob mail 564 ... bob

Bob lit son mail

bob@raspberrypi:~ $ mail
"/var/mail/bob": 1 message 1 new
>N   1 alice@mazone.lan   Tue Aug 24 09:58  16/515   test Tue, 24 Aug 2021 09:58:44 +0200
?
Return-Path: <alice@mazone.lan>
X-Original-To: bob@mazone.lan
Delivered-To: bob@mazone.lan
Received: from debian (debian.mazone.lan [192.168.1.34])
        by raspberrypi.mazone.lan (Postfix) with ESMTPSA id EF49040065
        for <bob@mazone.lan>; Tue, 24 Aug 2021 09:58:44 +0200 (CEST)
Date: Tue, 24 Aug 2021 09:58:44 +0200
To: bob@mazone.lan
From: alice@mazone.lan
Subject: test Tue, 24 Aug 2021 09:58:44 +0200
Message-Id: <20210824095844.007884@debian>
X-Mailer: swaks v20201014.0 jetmore.org/john/code/swaks/

bonjour bob

ctrl + D pour quitter

1 message sauvegardé dans /home/bob/mbox
0 message conservé dans /var/mail/bob

Une fois lu, le message est sauvegardé dans /home/bob/mbox

bob@raspberrypi:~ $ cat /home/bob/mbox
From alice@mazone.lan  Tue Aug 24 09:58:45 2021
Return-Path: <alice@mazone.lan>
X-Original-To: bob@mazone.lan
Delivered-To: bob@mazone.lan
Received: from debian (debian.mazone.lan [192.168.1.34])
        by raspberrypi.mazone.lan (Postfix) with ESMTPSA id EF49040065
        for <bob@mazone.lan>; Tue, 24 Aug 2021 09:58:44 +0200 (CEST)
Date: Tue, 24 Aug 2021 09:58:44 +0200
To: bob@mazone.lan
From: alice@mazone.lan
Subject: test Tue, 24 Aug 2021 09:58:44 +0200
Message-Id: <20210824095844.007884@debian>
X-Mailer: swaks v20201014.0 jetmore.org/john/code/swaks/

bonjour bob

Le message n'est plus présent dans /var/mail

bob@raspberrypi:~ $ ls -l /var/mail
total 0
-rw------- 1 bob mail 0 ... bob

Recevoir et envoyer un mail depuis un poste Windows

Remarque : votre système d'exploitation doit être capable de déterminer l'adresse IP du nom mail.mazone.lan. Il peut donc être nécessaire de configurer votre système d'exploitation pour qu'il utilise le serveur DNS qui gère la zone mazone.lan pour le protocole IPv4 ET le protocole IPv6.

Vérifier la résolution DNS
Vider la cache DNS
C:\>ipconfig /flushdns
Configuration IP de Windows
Cache de résolution DNS vidé.
Tester la résolution DNS
C:\>nslookup mail.mazone.lan
Serveur :   debian.mazone.lan
Address:  192.168.1.34

Nom :    raspberrypi.mazone.lan
Address:  192.168.1.11
Aliases:  mail.mazone.lan
Configurer le client de messagerie

Téléchargez claws-mail.org 64 bits, puis démarrez l'installation (modifiez la langue).

Configurer claws-mail Configurer claws-mail Configurer claws-mail Configurer claws-mail Configurer claws-mail Configurer claws-mail Configurer claws-mail Configurer claws-mail Configurer claws-mail
login as: alice
alice@192.168.1.11's password:
...
You have new mail.
...
alice@raspberrypi:~ $ mail
"/var/mail/alice": 1 message 1 nouveau
>N   1 bob                 ...
?
Return-Path: <bob@mazone.lan>
X-Original-To: alice@mazone.lan
Delivered-To: alice@mazone.lan
Received: from localhost (unknown [192.168.1.201])
        by raspberrypi.mazone.lan (Postfix) with ESMTPSA id 88A431F81D
        for <alice@mazone.lan>;  ...
Date:  ...
From: bob <bob@mazone.lan>
To: alice@mazone.lan
Subject: Re: test ...
Message-ID: ...
In-Reply-To: ...
References: ...
Organization: monEntreprise
X-Mailer: ...
MIME-Version: 1.0
...
Bonjour Alice
?
...
1 message sauvegardé dans /home/alice/mbox
0 message conservé dans /var/mail/alice