Déploiement MAIL publique - bahuwart/Projet-admin-2 GitHub Wiki

Créer le serveur mail

La création d'un serveur mail accessible en publique ne diffère pas beaucoup de la création d'un serveur mail accessible en interne. Dans cette documentation je ne vais aborder que les points nécessaires pour faire en sorte que votre serveur mail soit accessible en publique, donc si vous voulez avoir toutes les explications sur les commandes de bases que je ne vais pas expliquer ici, n'hésitez pas à aller regarder ma première page de documentation qui s'intitule : Déploiement MAIL interne.

Pour la création du Dockerfile, nous allons reprendre la même configuration que pour le mail interne à une différence, nous allons ajouter une commande permettant d'ajouter le package "OpenSSL". Ce package va nous être utile afin de sécuriser les communications avec l'extérieur. Imaginons que vous souhaitez envoyer un message secret à quelqu'un via Internet, SSL/TLS va se comporter comme une enveloppe sécurisée qui protège votre message pendant son transport.

Voici la configuration du Dockerfile :

FROM ubuntu:latest

RUN apt update

RUN apt install dovecot-imapd dovecot-pop3d -y
RUN apt install postfix -y
RUN apt install openssl -y

COPY dovecot.conf /etc/dovecot/
COPY main.cf /etc/postfix/

CMD service postfix start && service dovecot start && tail -f /dev/null

Une fois fait, il nous faut maintenant nous occuper de la configuration des fichiers "Postfix" et "Dovecot". Ceux-ci seront donc copiés à l'emplacement choisi dans le Dockerfile. Le fichier "dovecot.conf" est identique à celui utilisé pour l'interne tant dis que le fichier "main.cf", lui, est un peu différent.

Fichier "dovecot.conf":

protocols = pop3 imap


#Utilisation des utilisateurs systmes et des shadow password
passdb {
  driver = shadow
}
userdb {
  driver = passwd
}

#Dovecot doit faire partie du groupe mail pour avoir les permissions sur /var/m>
mail_privileged_group = mail


#Indiquer où dovecot sendmail stocke le mail
mail_location = mbox:~/mail:INBOX=/var/mail/%u


#Pas de ssl par facilité
ssl=no
disable_plaintext_auth = no


#Configuration des logs : On veut un maximum d'informations
log_path=/var/log/dovecot.log
auth_verbose = yes
auth_verbose_passwords = yes
auth_debug = yes
auth_debug_passwords = yes
mail_debug = yes

Fichier "main.cf":

# Définir l'identité du serveur
myhostname = mail.m2-3.ephec-ti.be
mydomain = m2-3.ephec-ti.be

# Le mail sortant doit utiliser ce domaine comme adresse source
myorigin = $mydomain

# Accepter la distribution locale du courrier pour ces destinations
mydestination = $myhostname localhost.$mydomain localhost $mydomain

smtpd_banner = $myhostname ESMTP $mail_name

# TLS
smtp_use_tls = yes                               //Active l'utilisation de TLS pour les connexions sortantes SMTP
smtpd_use_tls = yes                              //Active l'utilisation de TLS pour les connexions entrantes SMTP destinées au serveur.
smtpd_tls_auth_only = no                         //Autorise l'authentification non chiffrée (en texte brut) pour les connexions entrantes SMTP.
smtpd_tls_key_file = /etc/postfix/ssl/mail.m2-3.ephec-ti.be.key                     //Chemin du fichier de clé privée TLS
smtpd_tls_cert_file = /etc/postfix/ssl/mail.m2-3.ephec-ti.be.crt                    //Chemin du fichier de certificat TLS
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem                                      //Chemin du fichier d'autorité de certification (CA)
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes                  //Ajoute une en-tête de réception indiquant si la connexion SMTP entrante est sécurisée via TLS
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
relayhost = [mail.m2-3.ephec-ti.be]:465          //Spécifie le relais SMTP utilisé pour l'envoi des e-mails sortants

# Réseau à partir duquel nous acceptons les connexions smtp
mynetworks = 0.0.0.0/0
smtpd_relay_restrictions = permit_mynetworks, reject

# Autoriser le mail entrant de n'importe où
inet_interfaces = all

Comment vous pouvez l'avoir remarqué, pas mal de choses se sont ajouté dans ce fichier de configuration pour rendre notre serveur mail accessible en publique. La majorité des nouvelles lignes sont directement commentées dans le fichier, je vais donc vous donner une explication pour celles qui ne sont pas commentées :

  • Premièrement, le "hostname" et le nom de domaine ont été changé. Respectivement "mail.woodytoys.interne" et "woodytoys.interne" dans l'ancien fichier, ils ont été changé en "mail.m2-3.ephec-ti.be" et "m2-3.ephec-ti.be". Cela signifie qu'en gros, les adresses mail de l'entreprise pouvant communiquer avec l'extérieur seront nommées "[email protected]" au lieu de "[email protected]".

  • Deuxièmement, il y a l'ajout de toute la partie faisant référence à TLS. Il y a à chaque fois un commentaire à côté des ligne pour le TLS, mais j'aimerais parler de deux lignes en particulier : celles en rapport avec la clé privé TLS et le certificat TLS.

Une clé privé TLS ressemble à cela :

key

Et un certificat TLS ressemble à cela :

fullchain

Ces deux éléments sont des éléments essentiels pour une communication sécurisée via le protocole TLS. La clé privée est utilisée par le serveur pour déchiffrer les données reçues, tandis que le certificat sert à prouver l'authenticité du serveur aux clients lors de l'établissement d'une connexion sécurisée.


Une fois que tous nos fichiers sont correctement configurés, il ne nous reste plus qu'à créer notre image et lancer notre conteneur. La création de l'image se fait exactement de la même manière que pour le mail interne, mais le lancement du conteneur va se faire d'un manière un peu différente. Etant donné que pour le serveur mail interne, aucun mail ne devait sortir, la précision des ports que nous avions utilisés ne portait aucune importance. Dans le cadre d'un serveur mail qui doit être accessible en publique, il en est une tout autre histoire.

Lors du "docker run", nous allons devoir spécifier les ports que le conteneur va utiliser afin de pouvoir envoyer et recevoir de mails. Les ports sont les suivant :

  • Port 587: port standard utilisé pour le protocole SMTP avec chiffrement TLS
  • Port 465: port utilisé pour le protocole SMTPS (protocole qui utilise directement une connexion chiffrée SSL/TLS
  • Port 143: port standard utilisé pour le protocole IMAP
  • Port 110: port standard utilisé pour le protocole POP3

Pour ce qui est du nommage du conteneur, cela se passe de la même manière que pour le mail interne.

Commande pour créer l'image :

docker build -t mail_publique .  //créer l'image

Commande pour créer et lancer le conteneur :

docker run -d -p 587:587 -p 465:465 -p 143:143 -p 110:110 --name mail_publique mail_publique

Tester votre serveur mail

Notre serveur mail accessible en publique est maintenant créé, il nous reste plus qu'à tester si tout fonctionne correctement. Pour cela, nous allons opter pour la même technique que pour le mail interne, nous allons devoir créer un utilisateur dans le terminal du serveur mail publique. La création se fait exactement de la même manière que pour le mail interne.

Une fois fait, il ne vous reste plus qu'à vous envoyer un mail depuis votre adresse mail personnelle vers votre nouvel utilisateur créé dans le terminal du mail publique, celui-ci possédant une adresse mail ayant comme nom de domaine "m2-3.ephec-ti.be", pour voir si votre serveur fonctionne bien.