serveur_hebergement:serveur_mail:partie_1_postfix

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
serveur_hebergement:serveur_mail:partie_1_postfix [2022/11/03 15:53] fateserveur_hebergement:serveur_mail:partie_1_postfix [2023/08/08 14:00] (Version actuelle) – modification externe 127.0.0.1
Ligne 2: Ligne 2:
  
 Nous allons voir dans cette série d'article comment monter un serveur de messagerie électronique. Avant de rentrer dans le détail de l'installation et la configuration de Postfix, on va voir comment fonctionne l'envoie d'un courrier électronique, ou courriel. Nous allons voir dans cette série d'article comment monter un serveur de messagerie électronique. Avant de rentrer dans le détail de l'installation et la configuration de Postfix, on va voir comment fonctionne l'envoie d'un courrier électronique, ou courriel.
 +
 +===== Fonctionnement d'un serveur de messagerie électronique =====
 +
 Pour pouvoir envoyer un courriel et le faire parvenir jusqu'à son destinataire, il vous faut 3 choses : Pour pouvoir envoyer un courriel et le faire parvenir jusqu'à son destinataire, il vous faut 3 choses :
   * Un MTA (Mail Transfer Agent ou Agent de Transfert du Courrier en français), Posftix dans notre cas. Il va se charger d'envoyer le courriel. Il utilise le protocole SMTP (Simple Mail Transfer Protocol ou Protocole Simple de Transfert de Courrier en français).   * Un MTA (Mail Transfer Agent ou Agent de Transfert du Courrier en français), Posftix dans notre cas. Il va se charger d'envoyer le courriel. Il utilise le protocole SMTP (Simple Mail Transfer Protocol ou Protocole Simple de Transfert de Courrier en français).
-  * un MDA (Mail Delivery Agent ou Agent de Distribution du Courrier en français), Dovecot dans notre cas. Il va se charger de remettre le courriel au destinataire. Il utilise le protocole POP (Post Office Protocol ou Protocole de Bureau de Poste en français) ou IMAP (Internet Message Access Protocol ou Protocole d'Accès au Courrier Électronique en français). +  * Un MDA (Mail Delivery Agent ou Agent de Distribution du Courrier en français), Dovecot dans notre cas. Il va se charger de remettre le courriel au destinataire. Il utilise le protocole POP (Post Office Protocol ou Protocole de Bureau de Poste en français) ou IMAP (Internet Message Access Protocol ou Protocole d'Accès au Courrier Électronique en français). 
   * Un MUA (Mail User Agent ou Agent Utilisateur de Courrier en français littéral), Thunderbird ou un webmail comme Roundcube par exemple. Il va se charger d'afficher le courriel à l'utilisateur.   * Un MUA (Mail User Agent ou Agent Utilisateur de Courrier en français littéral), Thunderbird ou un webmail comme Roundcube par exemple. Il va se charger d'afficher le courriel à l'utilisateur.
  
-Un petit schéma valant mieux qu'une longue explication, voici un schéma (simplifié) du fonctionnement de l'envoi d'un courriel. Imaginons qu'une personne, Pierre, ayant une adresse chez Orange pierre@orange.fr, envoie un courrier à Alice, utilisatrice de notre serveur de messagerie domaine.fr ayant une adresse alice@domaine.fr : +Un petit schéma valant mieux qu'une longue explication, voici un schéma (simplifié) du fonctionnement de l'envoi d'un courriel. Imaginons qu'une personne, Pierre, ayant une adresse chez Orange pierre@orange.fr, envoie un courrier à Alice, utilisatrice de notre serveur de messagerie domaine.frayant une adresse alice@domaine.fr :
-{{:serveur_hebergement:serveur_mail:pasted:20221103-163809.png}}+
  
-Donc, Pierre envoie un courriel via son adresse Orange à Alice qui a une adresse sur notre serveur, domaine.fr. Cet envoi se fait via le client Thunderbird, qui va se connecter via le protocole SMTP au serveur SMTP d'Orange sur le port 465. Le serveur SMTP d'orange va se connecter à notre serveur SMTP qui va transmettre le courriel à notre serveur IMAP/POP qui va à son tour transmettre le courriel au client de Alice via le protocole IMAP ou POP. +{{:serveur_hebergement:serveur_mail:pasted:20221103-163809.png}}
-Sur le schéma j'ai séparé Postfix et Dovecot dans la zone domaine.fr comme s'ils étaient sur deux serveurs distincts pour que ce soit plus clair, mais ils tourneront sur le même serveur et la communication entre les deux se fera donc en local. +
-On va rentrer un peu plus dans le détail. Commençons par Postfix. +
-Postfix est un serveur de messagerie électronique chargé de livrer les messages. Il utilise pour ça le protocole SMTP (Simple Mail Transfer Protocol ou Protocole Simple de Transfert de Courrier en français). +
-Le protocole SMTP est utilisé pour la connexion entre le client (Thunderbird par exemple) et le serveur SMTP (Postfix) mais également pour la communication entre deux serveurs e-mail+
  
 +Pierre envoie donc un courriel via son adresse Orange à Alice qui a une adresse sur notre serveur, domaine.fr. Cet envoi se fait via un client, Thunderbird sur le schéma, qui va se connecter via le protocole SMTP au serveur SMTP d'Orange sur le port 465. Le serveur SMTP d'orange va se connecter à notre serveur SMTP, toujours via le protocole SMTP mais sur le port 25, qui va transmettre le courriel à notre serveur IMAP/POP qui va à son tour transmettre le courriel au client d’Alice via le protocole IMAP, sur le port 993, ou POP, sur le port 995.
 +Sur le schéma j'ai séparé Postfix et Dovecot dans la zone domaine.fr comme s'ils étaient sur deux serveurs distincts pour que ce soit plus clair, mais ils tourneront sur le même serveur et la communication entre les deux se fera donc en local. 
 +Pour faire une analogie, Postfix est l'équivalent d'un bureau de poste, Dovecot l'équivalent du facteur et Thunderbird l'équivalent de votre boite aux lettres.
 +Voyons un peu plus en détails les protocoles utilisés.
  
-Pour envoyer un e-mail, le client, Thunderbird dans notre exemple, va se connecter à Postfix, via le port 465 en utilisant [[https://fr.wikipedia.org/wiki/Transport_Layer_Security|TLS]] (chiffrement). La communication via le port 465 est appelée TLS implicite et toute la communication est chiffrée. À la différence de la communication via le port 587appelée TLS explicite, qui utilise StartTLS avec lequel une partie ou toute la communication se fait en clair (on en parlera un peu plus loin). Les communications sur ces 2 ports imposent un mécanisme d'authentification grâce à une extension du protocole SMTP, [[https://fr.wikipedia.org/wiki/Authentification_SMTP|SMTP-AUTH]]. +Le protocole SMTP est utilisé pour la connexion entre le client (Thunderbird) et le serveur SMTP (Postfix) mais également pour la communication entre deux serveurs SMTP.  
-Votre serveur va ensuite se connecter au serveur e-mail de destination, via le port 25 avec une connexion StartTLS, pour transmettre l'e-mail.+Pour envoyer un courriel, le client va se connecter au serveur SMTP via le port 465. Les communications client-serveur imposent un mécanisme d'authentification grâce à une extension du protocole SMTP, [[https://fr.wikipedia.org/wiki/Authentification_SMTP|SMTP-AUTH]]. C'est Dovecot qui gèrera les utilisateurs dans notre configuration.  
 +La communication via le port 465 est appelée TLS implicite et toute la communication est chiffrée grâce à [[https://fr.wikipedia.org/wiki/Transport_Layer_Security|TLS]]. À savoir, il existe un autre port utilisé pour la connexion client-serveur, le port 587. La communication via ce port est appelée TLS explicite et utilise StartTLS avec lequel une partie ou toute la communication se fait en clair (on en parlera un peu plus loin). 
  
 Petite parenthèse historique sur StartTLS et le port 587. Les protocoles utilisent souvent 2 ports, un pour les communications non-chiffrées et un autre pour les communications chiffrées (par exemple le protocole HTTP utilise le port 80 pour les communications non-chiffrée et le port 443 pour les communications chiffrées). StartTLS est un mécanisme qui permet d'utiliser le même port pour les communications chiffrées et non-chiffrées. Il commence par établir une connexion non-chiffrée afin de voir si le destinataire supporte les communications chiffrées (c'est très simplifié). Si le destinataire supporte les communications chiffrées, le reste de la communication va être chiffré en utilisant TLS. Si ce n'est pas le cas, la communication se fera en clair, non-chiffrée.  Petite parenthèse historique sur StartTLS et le port 587. Les protocoles utilisent souvent 2 ports, un pour les communications non-chiffrées et un autre pour les communications chiffrées (par exemple le protocole HTTP utilise le port 80 pour les communications non-chiffrée et le port 443 pour les communications chiffrées). StartTLS est un mécanisme qui permet d'utiliser le même port pour les communications chiffrées et non-chiffrées. Il commence par établir une connexion non-chiffrée afin de voir si le destinataire supporte les communications chiffrées (c'est très simplifié). Si le destinataire supporte les communications chiffrées, le reste de la communication va être chiffré en utilisant TLS. Si ce n'est pas le cas, la communication se fera en clair, non-chiffrée. 
-Pour revenir au SMTP, lorsque SMTP-AUTH a été mis en place, c'est le port 587 qui a été choisi pour remplacer le port 25 pour les communications client-serveur (les communications serveur-serveur utilisent toujours le port 25). Et lorsque TLS a été implémentée pour les communications client-serveur, le port 587 a été conservé et le mécanisme StartTLS a été choisi par [[https://fr.wikipedia.org/wiki/Internet_Engineering_Task_Force|l'IETF]] afin de ne pas casser la compatibilité client-serveur (si le client ou le serveur ne supporte pas le chiffrement, la communication se fait en clair, aucun souci de refus de connexion). Mais dans le même temps, une autre organisation, [[https://fr.wikipedia.org/wiki/Internet_Assigned_Numbers_Authority|l'IANA]] a décrété que le port 465 serait utilisé pour le SMTPS, SMTP utilisant TLS implicite. Problème, c'est l'IETF qui fixe les standards et non l'IANA. Donc le port officiel pour le SMTP sécurisé est resté le 587 via StartTLS mais le port 465 et le TLS implicite a continué à être utilisé malgré le fait que ce n'était pas le standard. Son utilisation était donc déconseillée dans de nombreuses documentations car ne respectant pas les bonnes pratiques (qui demandent de respecter les standards). Mais suite à une découverte de problème de sécurité dans le mécanisme StartTLS, l'IETF via la [[https://datatracker.ietf.org/doc/rfc8314/|RFC 8314]] a déclaré le port 465, et donc le TLS implicite, comme port standard à utiliser pour la communication entre le client et le serveur e-mail. Ce changement étant relativement récent (2018), vous trouverez énormément de documentations et sites, obsolètes, utilisant le port 587 et non le port 465 pour les communications client-serveur.+ 
 +Pour revenir au SMTP, lorsque SMTP-AUTH a été mis en place, c'est le port 587 qui a été choisi pour remplacer le port 25 pour les communications client-serveur (les communications serveur-serveur utilisent toujours le port 25). Et lorsque TLS a été implémenté pour les communications client-serveur, le port 587 a été conservé et le mécanisme StartTLS a été choisi par [[https://fr.wikipedia.org/wiki/Internet_Engineering_Task_Force|l'IETF]] afin de ne pas casser la compatibilité client-serveur (si le client ou le serveur ne supporte pas le chiffrement, la communication se fait en clair, aucun souci de refus de connexion). Mais dans le même temps, une autre organisation, [[https://fr.wikipedia.org/wiki/Internet_Assigned_Numbers_Authority|l'IANA]] a décrété que le port 465 serait utilisé pour le SMTPS, SMTP utilisant TLS implicite.  
 + 
 +Problème, c'est l'IETF qui fixe les standards et non l'IANA. Donc le port officiel pour le SMTP sécurisé est resté le 587 via StartTLS mais le port 465 et le TLS implicite a continué à être utilisé malgré le fait que ce n'était pas le standard. Son utilisation était donc déconseillée dans de nombreuses documentations car ne respectant pas les bonnes pratiques (qui demandent de respecter les standards). Mais suite à une découverte de problème de sécurité dans le mécanisme StartTLS, l'IETF via la [[https://datatracker.ietf.org/doc/rfc8314/|RFC 8314]] a déclaré le port 465, et donc le TLS implicite, comme port standard à utiliser pour la communication entre le client et le serveur. Ce changement étant relativement récent (2018), vous trouverez énormément de documentations et sites, obsolètes, conseillant d'utiliser le port 587 et non le port 465 pour les communications client-serveur.
 Fin de la parenthèse. Fin de la parenthèse.
 +
 +Votre serveur va ensuite se connecter au serveur SMTP de destination, via le port 25 avec une connexion StartTLS, pour transmettre le courriel.
 +
 +Postfix transfère ensuite le courriel à Dovecot. Ce dernier va stocker le message en attendant que le client, Thunderbird dans notre exemple, le récupère. Le client va se connecter à Dovecot soit via le protocole IMAP soit via le protocole POP. Les deux utilisent TLS pour chiffrer la connexion. La différence est que le protocole POP récupère les courriels pour les copier en local et les efface du serveur (comportement par défaut) là où le protocole IMAP les consultent directement sur le serveur et créé un miroir en local (si vous supprimez un courriel en local il sera supprimé sur le serveur également). Pour ma part j'utilise IMAP plutôt que POP.
 +
 +Voilà pour le fonctionnement. Passons donc à l'installation de Postfix.
  
 ===== Pré-requis ===== ===== Pré-requis =====
  
-Vous avez besoin d'un certain nombre de choses pour faire tourner un serveur e-mail :+Vous avez besoin d'un certain nombre de choses pour faire tourner un serveur de messagerie électronique :
   * un serveur (serveur dédié, Raspberry Pi, etc) sous Linux (Debian dans mon cas)   * un serveur (serveur dédié, Raspberry Pi, etc) sous Linux (Debian dans mon cas)
   * un nom de domaine   * un nom de domaine
Ligne 58: Ligne 70:
 ===== Configuration ===== ===== Configuration =====
  
-Ouvrez le fichier /etc/postfix/main.cf+Ouvrez le fichier main.cf : 
 +<code bash>sudo nano /etc/postfix/main.cf</code>
  
 Changez la ligne "myhostname" et mettre comme valeur votre FQDN Changez la ligne "myhostname" et mettre comme valeur votre FQDN
Ligne 67: Ligne 80:
 <code bash>sudo hostnamectl set-hostname FQDN</code> <code bash>sudo hostnamectl set-hostname FQDN</code>
  
-Changez la ligne "mydestination" et mettre comme valeur localhost.$mydomain, localhost+Changez la ligne "mydestination" et mettre comme valeur localhost.$mydomain, localhost, FQDN (remplacez FQDN par le FQDN de votre serveur)
  
 Si pas de reverse DNS IPV6 ou pas d'IPV6, changer la ligne inet_protocols = all par inet_protocols = ipv4 Si pas de reverse DNS IPV6 ou pas d'IPV6, changer la ligne inet_protocols = all par inet_protocols = ipv4
  
 Configurez la partie TLS parameters comme suit : Configurez la partie TLS parameters comme suit :
-<code># TLS parameters +<code> 
-#Déclaration des clés de chiffrements +Paramètres TLS
-smtpd_tls_cert_file=/etc/letsencrypt/live/domaine.fr/fullchain.pem +
-smtpd_tls_key_file=/etc/letsencrypt/live/domaine.fr/privkey.pem   +
-smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt+
  
-#Postfix server. Activation du chiffrement lors de la réception des e-mails (depuis le client ou un autre serveur e-mail)+#Postfix server. Activation du support du chiffrement lors de la réception des e-mails (depuis le client ou un autre serveur e-mail)
 smtpd_tls_security_level=may smtpd_tls_security_level=may
 smtpd_tls_loglevel = 1 smtpd_tls_loglevel = 1
 smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
 +smtpd_tls_cert_file=/etc/letsencrypt/live/siebert.ovh/fullchain.pem
 +smtpd_tls_key_file=/etc/letsencrypt/live/siebert.ovh/privkey.pem
 +smtpd_tls_CApath = /etc/ssl/certs
 +smtpd_tls_CAfile = /etc/letsencrypt/live/siebert.ovh/cert.pem
  
-#Postfix client. Activation du chiffrement lors de l'envoi des e-mails vers un autre serveur e-mail+#Postfix client. Activation du support du chiffrement lors de l'envoi des e-mails vers un autre serveur e-mail
 smtp_tls_security_level=may smtp_tls_security_level=may
 smtp_tls_loglevel = 1 smtp_tls_loglevel = 1
 smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
 +smtp_tls_cert_file=/etc/letsencrypt/live/siebert.ovh/fullchain.pem
 +smtp_tls_key_file=/etc/letsencrypt/live/siebert.ovh/privkey.pem
 +smtp_tls_CApath = /etc/ssl/certs
 +smtp_tls_CAfile = /etc/letsencrypt/live/siebert.ovh/cert.pem
  
 #Force l'utilisation des protocoles TSLv1.3 et TSLv1.2 uniquement (depuis Postfix 3.6, la syntaxe à utiliser est >=TLSv1.2) #Force l'utilisation des protocoles TSLv1.3 et TSLv1.2 uniquement (depuis Postfix 3.6, la syntaxe à utiliser est >=TLSv1.2)
Ligne 94: Ligne 112:
  
 Les lignes smtpd_tls_mandatory_protocols et smtpd_tls_mandatory_protocols ne servent que si smtpd_tls_security_level et smtp_tls_security_level ont pour valeur "encrypt". Les lignes smtpd_tls_mandatory_protocols et smtpd_tls_mandatory_protocols ne servent que si smtpd_tls_security_level et smtp_tls_security_level ont pour valeur "encrypt".
-Si smtpd_tls_security_level et smtp_tls_security_level ont pour valeur "encrypt", l'utilisation de StartTLS est rendu obligatoire pour la communication serveur-serveur (dans les deux sens) en cas d'envoi ou réception d'e-mail mais cette configuration est déconseillée car il y a encore de nombreux serveurs e-mail configurés sans support de TLS. Ce qui fait qu'avec l'option "encrypt" vous ne pourrez ni recevoir ni envoyer d'e-mail depuis/vers ces serveurs. La [[https://www.rfc-editor.org/rfc/rfc2487|RFC 2487]] spécifie d'ailleurs qu'un serveur SMTP public (dans le sens exposé à Internet) ne doit pas forcer l'utilisation de StartTLS. +Si smtpd_tls_security_level et smtp_tls_security_level ont pour valeur "encrypt", l'utilisation de StartTLS est rendu obligatoire pour la communication serveur-serveur (dans les deux sens) en cas d'envoi ou réception de courriels mais cette configuration est déconseillée car il y a encore de nombreux serveurs configurés sans support de TLS. Ce qui fait qu'avec l'option "encrypt" vous ne pourrez ni recevoir ni envoyer de courriels depuis/vers ces serveurs. La [[https://www.rfc-editor.org/rfc/rfc2487|RFC 2487]] spécifie d'ailleurs qu'un serveur SMTP public (dans le sens exposé à Internet) ne doit pas forcer l'utilisation de StartTLS. 
-Notez que même à mettant smtpd_tls_security_level à "may", la communication avec le client e-mail sera toujours chiffrée avec TLS implicite.+Notez que même à mettant smtpd_tls_security_level à "may", la communication avec le client sera toujours chiffrée avec TLS implicite.
  
-Ajoutez les lignes suivantes pour la gestion des adresses virtuelles avec Postfixadmin (voir [[serveur_hebergement:serveur_mail:partie_3_postfixadmin|Partie 3 : Postfixadmin]]) :+Ajoutez les lignes suivantes :
 <code> <code>
-virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf +# Envoie les courriels reçus à Dovecot
-virtual_mailbox_maps = +
-   proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, +
-   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf +
-virtual_alias_maps = +
-   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, +
-   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, +
-   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf+
 virtual_transport = lmtp:unix:private/dovecot-lmtp virtual_transport = lmtp:unix:private/dovecot-lmtp
  
 +# Emplacement où seront stockés les courriels
 virtual_mailbox_base = /var/vmail virtual_mailbox_base = /var/vmail
-virtual_minimum_uid = 2000 
-virtual_uid_maps = static:2000 
-virtual_gid_maps = static:2000 
 </code> </code>
  
-Ouvrez le fichier /etc/postfix/master.cf et ajoutez les lignes suivantes :+Ouvrez le fichier master.cf : 
 +<code bash>sudo nano /etc/postfix/master.cf</code> 
 + 
 +Ajoutez les lignes suivantes :
 <code> <code>
 smtps     inet  n                               smtpd smtps     inet  n                               smtpd
Ligne 132: Ligne 144:
   * smtpd_tls_wrappermode : active TLS implicite au lieu de StartTLS   * smtpd_tls_wrappermode : active TLS implicite au lieu de StartTLS
   * smtpd_sasl_auth_enable : active l'authentification [[https://fr.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer|SASL]]   * smtpd_sasl_auth_enable : active l'authentification [[https://fr.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer|SASL]]
-  * smtpd_relay_restrictions : on restreint l'envoi d'e-mail via notre serveur qu'aux utilisateurs authentifiés et on rejette les autres. Ça évite que notre serveur se transforme en machine à spam +  * smtpd_relay_restrictions : on restreint l'envoi de courriels via notre serveur qu'aux utilisateurs authentifiés et on rejette les autres. Ça évite que notre serveur se transforme en machine à spam 
-  * smtpd_recipient_restrictions : on restreint l'acceptation des e-mails uniquement à destination des utilisateurs interne et des utilisateurs enregistrés, on rejette le reste.+  * smtpd_recipient_restrictions : on restreint l'acceptation des courriels uniquement à destination des utilisateurs interne et des utilisateurs enregistrés, on rejette le reste.
   * smtpd_sasl_type & smtpd_sasl_path : on utilise Dovecot pour l'authentification des utilisateurs.   * smtpd_sasl_type & smtpd_sasl_path : on utilise Dovecot pour l'authentification des utilisateurs.
  
Ligne 144: Ligne 156:
 On peut maintenant installer [[serveur_hebergement:serveur_mail:partie_2_dovecot|Dovecot]] On peut maintenant installer [[serveur_hebergement:serveur_mail:partie_2_dovecot|Dovecot]]
  
-Source : https://www.linuxbabe.com/mail-server/build-email-server-from-scratch-debian-postfix-smtp+Source :  
 +https://www.linuxbabe.com/mail-server/build-email-server-from-scratch-debian-postfix-smtp 
 +https://postfix.traduc.org/ 
 +https://workaround.org/ispmail
  • serveur_hebergement/serveur_mail/partie_1_postfix.1667490837.txt.gz
  • Dernière modification : 2023/08/08 14:01
  • (modification externe)