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

Créer l'autorité de certification

adminMailX@serveurMailX:~$ sudo mkdir /etc/ssl/ca
adminMailX@serveurMailX:~$ sudo openssl genpkey -algorithm RSA -out  /etc/ssl/ca/ca.key
adminMailX@serveurMailX:~$ sudo openssl req -x509 -new -nodes -key /etc/ssl/ca/ca.key -sha256 -days 365 -out /etc/ssl/ca/ca.crt -subj "/C=FR/ST=France/L=maVille/O=monEntreprise/OU=monService/CN=ca.x.lan"

Résultat :

adminMailX@serveurMailX:~$ ls -l /etc/ssl/ca
total 8
-rw-r--r-- 1 root root 1375 22 mai   10:44 ca.crt
-rw------- 1 root root 1704 22 mai   10:42 ca.key

Création des certificats serveurs

adminMailX@serveurMailX:~$ sudo openssl genpkey -algorithm RSA -out /etc/ssl/mail.key
adminMailX@serveurMailX:~$ ++++++++++++++++++
adminMailX@serveurMailX:~$  sudo openssl req -new -key /etc/ssl/mail.key -out /etc/ssl/mail.csr -subj "/C=FR/ST=France/L=maVille/O=monEntreprise/OU=monService/CN=mail.x.lan"

Résultat :

adminMailX@serveurMailX:~$  ls -l /etc/ssl | grep mail
-rw-r--r-- 1 root root      1025 22 mai   10:49 mail.csr
-rw------- 1 root root      1704 22 mai   10:47 mail.key
adminX@broker:~$  sudo openssl x509 -req -in /etc/ssl/mail.csr  -CA /etc/ssl/ca/ca.crt -CAkey /etc/ssl/ca/ca.key -CAcreateserial -out /etc/ssl/mail.crt -days 365 -sha256
Certificate request self-signature ok
subject=C = FR, ST = France, L = maVille, O = monEntreprise, OU = monService, CN = mail.mazone.lan

Résultat :

adminX@serveurMailX:~$  ls -l /etc/ssl | grep mail
-rw-r--r-- 1 root root      1257 22 mai   10:57 mail.crt
-rw-r--r-- 1 root root      1025 22 mai   10:54 mail.csr
-rw------- 1 root root      1704 22 mai   10:47 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
mazone.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/mail.crt
smtpd_tls_key_file=/etc/ssl/mail.key
smtpd_use_tls=yes
smtpd_tls_security_level=may
smtp_tls_CApath=/etc/ssl/ca
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 = mail.mazone.lan
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, mazone.lan, mail, 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-get 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:~$ cat /etc/dovecot/conf.d/10-master.conf  |  grep -v -E '^([ ]*#|$)'
service imap-login {
  inet_listener imap {
  }
  inet_listener imaps {
  }
}
service pop3-login {
  inet_listener pop3 {
  }
  inet_listener pop3s {
  }
}
service submission-login {
  inet_listener submission {
  }
}
service lmtp {
  unix_listener lmtp {
  }
}
service imap {
}
service pop3 {
}
service submission {
}
service auth {
  unix_listener auth-userdb {
  }
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
}
service auth-worker {
}
service dict {
  unix_listener dict {
  }
}
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
pi@raspberrypi:~$ su - root
Password:
root@raspberrypi:~# cat /etc/dovecot/conf.d/10-auth.conf | grep -v -E '^(#|$)' > /etc/dovecot/conf.d/10-auth.confSansCommentaire
root@raspberrypi:~# cp /etc/dovecot/conf.d/10-auth.confSansCommentaire /etc/dovecot/conf.d/10-auth.conf
root@raspberrypi:~# exit
logout
adminMailX@serveurMailX:~$ 
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
pi@raspberrypi:~$ su - root
Password:
root@raspberrypi:~# cp /etc/dovecot/conf.d//10-ssl.conf /etc/dovecot/conf.d//10-ssl.conf.origin
root@raspberrypi:~# cat /etc/dovecot/conf.d/10-ssl.conf | grep -v -E '^(#|$)' > /etc/dovecot/conf.d//10-ssl.confSansCommentaire
root@raspberrypi:~# cp /etc/dovecot/conf.d//10-ssl.confSansCommentaire /etc/dovecot/conf.d//10-ssl.conf
root@raspberrypi:~# exit
logout
adminMailX@serveurMailX:~$ 
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 :

adminMailX@serveurMailX:~$ sudo nano /etc/dovecot/conf.d/10-ssl.conf
ssl = yes
ssl_cert = </etc/ssl/mail.crt
ssl_key = </etc/ssl/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 -lnt  sport != :22 
State      Recv-Q Send-Q     Local Address:Port        Peer Address:Port
LISTEN      0      100        0.0.0.0:25                0.0.0.0:*
LISTEN      0      100        0.0.0.0:993               0.0.0.0:*
LISTEN      0      100        0.0.0.0:995               0.0.0.0:*
LISTEN      0      100        0.0.0.0:587               0.0.0.0:*
LISTEN      0      100        0.0.0.0:110               0.0.0.0:*
LISTEN      0      100        0.0.0.0:143               0.0.0.0:*
LISTEN      0      100        [::]:25                   [::]:*
LISTEN      0      100        [::]:993                  [::]:*
LISTEN      0      100        [::]:995                  [::]:*
LISTEN      0      100        [::]:587                  [::]:*
LISTEN      0      100        [::]:110                  [::]:*
LISTEN      0      100        [::]:143                  [::]:*

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-get install swaks
Envoyer

Alice envoie le mail "bonjour bob" à Bob

doe@clientX:~$ swaks --to "bob@mazone.lan" --from "alice@mazone.lan" --server mail.mazone.lan --auth LOGIN --auth-user "alice" --auth-password "bonjour" -tls --body "bonjour boabaq"
=== Trying mail.mazone.lan:25...
=== Connected to mail.mazone.lan.
<-  220 mail.mazone.lan ESMTP Postfix (Debian/GNU)
 -> EHLO clientX
<-  250-mail.mazone.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.mazone.lan"
 ~> EHLO clientX
<~  250-mail.mazone.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: Wed, 22 May 2024 11:29:31 +0200
 ~> To: bob@mazone.lan
 ~> From: alice@mazone.lan
 ~> Subject: test Wed, 22 May 2024 11:29:31 +0200
 ~> Message-Id: <20240522112931.002507@clientX>
 ~> X-Mailer: swaks v20201014.0 jetmore.org/john/code/swaks/
 ~>
 ~> bonjour boabaq
 ~>
 ~>
 ~> .
<~  250 2.0.0 Ok: queued as 2CD4D7E1
 ~> QUIT
<~  221 2.0.0 Bye
=== Connection closed with remote host.
Vérifier la réception du mail sur le serveur

Installer le logiciel de lecture de mail sur le Raspberry pi

adminMailX@serveurMailX:~$ sudo apt-get 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