Comment installer et configurer Postfix en tant que serveur SMTP d’envoi uniquement sur Debian 9


Article original : How To Install and Configure Postfix as a Send-Only SMTP Server on Debian 9

Introduction

Postfix est un agent de transfert de courrier (MTA), une application utilisée pour envoyer et recevoir du courrier électronique. Dans ce tutoriel, vous installerez et configurerez Postfix pour qu’il ne puisse être utilisé que pour envoyer des courriels par des applications locales, c’est-à-dire celles installées sur le même serveur que Postfix.

Si vous utilisez déjà un fournisseur de messagerie tiers pour envoyer et recevoir des e-mails, vous n’avez pas besoin d’utiliser votre propre serveur de messagerie. Toutefois, si vous gérez un serveur cloud sur lequel vous avez installé des applications qui doivent envoyer des notifications par courrier électronique, l’exécution d’un serveur SMTP local d’envoi uniquement est une bonne alternative à l’utilisation d’un fournisseur de services de messagerie tiers ou d’un serveur SMTP complet.

Dans ce tutoriel, vous installerez et configurerez Postfix en tant que serveur SMTP d’envoi uniquement sur Debian 9.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de :

  • Un serveur Debian 9, configuré et un utilisateur sudo non-root.
  • Un nom de domaine valide, xoyaz.xyz, pointant vers votre serveur.

Notez que le nom d’hôte de votre serveur doit correspondre à votre domaine ou sous-domaine. Vous pouvez vérifier le nom d’hôte du serveur en tapant hostname à l’invite de commande. La sortie doit correspondre au nom que vous avez donné au serveur lors de sa création.

Étape 1 - Installation de Postfix

Dans cette étape, vous apprendrez comment installer Postfix. Vous aurez besoin de deux paquets : mailutils, qui inclut les programmes nécessaires au fonctionnement de Postfix, et postfix lui-même.

Tout d’abord, mettez à jour la base de données des paquets :

sudo apt update

Ensuite, installez les mailtuils :

sudo apt install mailutils

Enfin, installez postfix :

sudo apt install postfix

Vers la fin du processus d’installation, une fenêtre ressemblant à celle de l’image ci-dessous s’affiche. L’option par défaut est Site Internet. C’est l’option recommandée pour ce tutoriel, alors appuyez sur TAB, puis sur ENTER.

Après cela, vous obtiendrez une autre fenêtre comme celle de l’image suivante. Le nom de messagerie du système doit être le même que celui que vous avez attribué au serveur lorsque vous l’avez créé. S’il affiche un sous-domaine comme subdomain.example.com, changez-le en exemple.com. Lorsque vous avez terminé, appuyez sur TAB, puis sur ENTER.

Vous avez maintenant installé Postfix et vous êtes prêt à modifier ses paramètres de configuration.

Étape 2 - Configuration de Postfix

Dans cette étape, vous configurerez Postfix pour qu’il traite les demandes d’envoi d’emails uniquement à partir du serveur sur lequel il est exécuté, c’est-à-dire depuis localhost.

Pour cela, Postfix doit être configuré pour n’écouter que sur l’interface loopback, l’interface réseau virtuelle que le serveur utilise pour communiquer en interne. Pour effectuer le changement, ouvrez le fichier de configuration principal de Postfix en utilisant nano ou votre éditeur de texte préféré :

sudo nano /etc/postfix/main.cf

Lorsque le fichier est ouvert, faites défiler vers le bas jusqu’à ce que vous voyiez la section suivante :

. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
. . .

Changez la ligne qui lit inet_interfaces = all en inet_interfaces = loopback-only:

. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
. . .

Une autre directive que vous devrez modifier est mydestination, qui est utilisée pour spécifier la liste des domaines qui sont livrés via le transport de distribution du courrier local_transport. Par défaut, les valeurs sont similaires à celles-ci :

. . .
mydestination = $myhostname, example.com, localhost.com, , localhost
. . .

Les valeurs par défaut recommandées pour cette directive sont données dans le bloc de code ci-dessous, alors modifiez les vôtres en conséquence :

. . .
mydestination = $myhostname, localhost.$your_domain, $your_domain
. . .

Sauvegardez et fermez le fichier.

Remarque : Si vous hébergez plusieurs domaines sur un même serveur, les autres domaines peuvent également être transmis à Postfix en utilisant la directive mydestination. Cependant, configurer Postfix d’une manière qui évolue et qui ne présente pas de problèmes pour une telle configuration implique des configurations supplémentaires qui dépassent le cadre de cet article.

Enfin, redémarrez Postfix.

sudo systemctl restart postfix

Etape 3 - Test du serveur SMTP

Dans cette étape, vous testerez si Postfix peut envoyer des e-mails à un compte de messagerie externe en utilisant la commande mail, qui fait partie du paquet mailutils que vous avez installé à l’étape 1.

Pour envoyer un e-mail de test, tapez :

echo "Ceci est le corps de l'email" | mail -s "Ceci est l'objet de l'email" votre_adresse_email

En effectuant vos propres tests, vous pouvez utiliser le corps et le texte de la ligne d’objet tels quels, ou les modifier à votre guise. Cependant, à la place de votre_adresse_email, utilisez une adresse email valide. La partie domaine peut être gmail.com, fastmail.com, yahoo.com, ou tout autre fournisseur de services de messagerie que vous utilisez.

Vérifiez maintenant l’adresse e-mail à laquelle vous avez envoyé le message de test. Vous devriez voir le message dans votre boîte de réception. Sinon, vérifiez votre dossier Spam.

Notez qu’avec cette configuration, l’adresse dans le champ De (From) pour les e-mails de test que vous envoyez sera sammy@example.com, où sammy est votre nom d’utilisateur Linux et le domaine est le nom d’hôte du serveur. Si vous changez votre nom d’utilisateur, l’adresse De (From) changera également.

Étape 4 - Transfert du courrier du système

La dernière chose que nous voulons mettre en place est la redirection, de sorte que vous recevrez des courriels envoyés à la racine sur le système à votre adresse de courriel personnelle et externe.

Pour configurer Postfix de façon à ce que les courriels générés par le système soient envoyés à votre adresse courriel, vous devez modifier le fichier /etc/aliases :

sudo nano /etc/aliases

Le contenu complet du fichier sur une installation par défaut de Debian 9 est le suivant :

mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root

postmaster: root assure que les courriels générés par le système sont envoyés à l’utilisateur root. Vous souhaitez modifier ces paramètres pour que ces e-mails soient redirigés vers votre adresse e-mail. Modifiez le fichier

mailer-daemon: postmaster
postmaster:    root
root:          votre_adresse_email
. . .

Remplacez votre_adresse_email_adresse par votre adresse email personnelle. Une fois terminé, enregistrez et fermez le fichier. Pour que la modification prenne effet, exécutez la commande suivante :

sudo newaliases

Vous pouvez tester son fonctionnement en envoyant un e-mail au compte racine à l’aide de :

echo "This is the body of the email" | mail -s "This is the subject line" root

Vous devriez recevoir le courriel à votre adresse courriel. Sinon, vérifiez votre dossier Spam.

Conclusion

C’est tout ce qu’il faut pour configurer un serveur d’envoi uniquement avec Postfix. Vous voudrez peut-être prendre des mesures supplémentaires pour protéger votre domaine contre les spammeurs, cependant.

Si vous voulez recevoir des notifications de votre serveur à une seule adresse, le fait d’avoir des emails marqués comme Spam est moins problématique car vous pouvez créer une liste blanche. Cependant, si vous voulez envoyer des courriels à des utilisateurs potentiels du site (comme des courriels de confirmation pour une inscription), vous devrez certainement configurer les enregistrements SPF et DKIM de sorte que les courriels de votre serveur soient considérés comme légitimes.

Si elles sont correctement configurées, ces étapes rendent difficile l’envoi de spam avec une adresse qui semble provenir de votre domaine. Ces étapes de configuration supplémentaires augmenteront également la probabilité que les fournisseurs de messagerie courants considèrent les courriels provenant de votre serveur comme légitimes.

Comment configurer le cryptage TLS dans Postfix ?

Bien que Postfix (et le protocole SMTP en général) puisse fonctionner sans aucun type de cryptage, l’activation de TLS peut être une bonne idée en termes de sécurité et de confidentialité, alors voyons comment cela peut être fait facilement.

Nous allons en fait configurer deux types de cryptage distincts :

Opportunistic encryption - Chiffrement opportuniste pour SMTP régulier (port 25), entrant (courriels envoyés à vos utilisateurs) et sortant (lorsque votre serveur, après avoir accepté un nouveau mail d’un de vos utilisateurs, l’envoie à sa destination). “Opportuniste”, ici, signifie que le serveur demandera le cryptage et l’utilisera si l’autre partie le supporte également, mais si ce n’est pas le cas, il fonctionnera sans cryptage. Bien que le forcer puisse sembler tentant pour des raisons de sécurité, en réalité beaucoup de “petits” serveurs dans le monde ne le supportent toujours pas, vous ne pourriez donc pas envoyer ou recevoir du courrier de ces serveurs. Opportunistic TLS signifie au moins que la plupart des “ grands ” services de messagerie (par exemple Gmail) communiqueront avec vous (et vous avec eux) par cryptage.

Forced encryption - Cryptage forcé pour le service de soumission (port 587). Ceci est utilisé par vos propres utilisateurs (même s’il n’y a que vous) pour envoyer du courrier via votre serveur, et a généralement différentes restrictions (par exemple, il est authentifié, mais d’autre part il peut être utilisé pour envoyer du courrier vers l’extérieur (contrairement au port entrant 25 qui ne l’est pas, car cela ferait un relais ouvert)). L’authentification des utilisateurs qui serait autrement en texte clair et le fait que seul un nombre limité d’utilisateurs (vos utilisateurs aussi) auront accès à ce port via des clients de messagerie (jamais d’autres serveurs de messagerie que vous ne contrôlez pas) rendent le chiffrement forcé ici un jeu d’enfant.

NOTE : bien entendu, il ne s’agit pas d’un tutoriel Postfix exhaustif. Je vais supposer que vous avez déjà un serveur qui fonctionne, et que vous voulez juste y ajouter le cryptage TLS. De plus, certaines parties peuvent ne pas s’appliquer à votre cas.

1. Avoir/obtenir un certificat TLS pour le nom public de votre hôte de messagerie

Si vous n’en avez pas déjà un, voyez comment créer un nouveau certificat TLS. Nous utiliserons ici un certificat RSA (au lieu d’utiliser l’ECDSA) car contrairement, disons, à un serveur Web auquel accèdent les navigateurs standard, vous ne pouvez pas contrôler ce que les autres serveurs de messagerie supportent (Par exemple, un Postfix configuré avec seulement un certificat ECDSA ne pourrait pas “parler” en toute sécurité avec un autre Postfix avec seulement un certificat RSA, et ils devraient se rabattre sur une connexion non cryptée. Vous pourriez résoudre ce problème en ajoutant les deux types de certificats à votre Postfix… mais, alors, seul le certificat RSA serait utilisé, ce qui signifie qu’il n’y aurait de toute façon aucun intérêt à le faire…), il est donc préférable de choisir l’option la plus courante (Pour les curieux : la principale différence ici est qu’un serveur web ou, disons, un serveur IMAP ne parle qu’aux clients (par exemple, les navigateurs, les clients IMAP, etc., qui supportent généralement la plupart des types de cryptage), tandis qu’un serveur SMTP se connecte également aux autres serveurs (qui sont limités aux types de cryptage supportés par la paire clé / certificat qu’ils utilisent)).

Notez que le CN du certificat doit correspondre au nom public de votre hôte de messagerie (par ex. “mail.domain.com”). Cela correspondra probablement aussi à (un des) enregistrements MX du domaine.

2. Configuration Postfix

Encore une fois, je vais supposer que votre Postfix non-TLS fonctionne déjà bien.

Mettez votre certificat et votre clé dans /etc/postfix (par exemple). Pour cet exemple, je vais les appeler myserver-full.crt et myserver.key.

Dans /etc/postfix/main.cf, ajoutez les lignes suivantes :

# TLS configuration starts here

tls_random_source = dev:/dev/urandom

# openssl_path=/usr/local/libressl/bin/openssl
# uncomment and edit the above if you're using a different "openssl" than the system's
# (in this case, LibreSSL)

# SMTP from your server to others
smtp_tls_key_file = /etc/postfix/mailserver.key
smtp_tls_cert_file = /etc/postfix/mailserver.crt
smtp_tls_CAfile = /etc/postfix/mailserver.crt
smtp_tls_security_level = may
smtp_tls_note_starttls_offer = yes
smtp_tls_mandatory_protocols=!SSLv2,!SSLv3
smtp_tls_loglevel = 1
smtp_tls_session_cache_database =
    btree:/var/lib/postfix/smtp_tls_session_cache

# SMTP from other servers to yours
smtpd_tls_key_file = /etc/postfix/mailserver.key
smtpd_tls_cert_file = /etc/postfix/mailserver.crt
smtpd_tls_CAfile = /etc/postfix/mailserver.crt
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_database =
    btree:/var/lib/postfix/smtpd_tls_session_cache

# TLS configuration ends here

Et dans /etc/postfix/master.cf, en supposant que vous avez déjà une section “submission” un peu comme celle-ci :

submission  inet  n     -       n       -       -       smtpd
    -o smtpd_etrn_restrictions=reject
    -o smtpd_sasl_auth_enable=yes
    -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
    -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
    -o smtpd_helo_restrictions=permit_mynetworks,permit

Ajoutez à cette section :

-o smtpd_tls_security_level=encrypt

Ce qui précède force le cryptage pour le service de soumission (rappelez-vous que ce n’est pas nécessaire pour le SMTP normal, c’est juste souhaité).

En bref :

  • votre serveur tente de se connecter à d’autres en utilisant TLS, mais revient à une connexion non cryptée si l’autre côté ne supporte pas le cryptage ;
  • d’autres serveurs peuvent se connecter au vôtre en utilisant TLS, mais s’ils ne le font pas, la connexion sera décryptée ;
  • vos utilisateurs doivent utiliser le cryptage (et l’authentification) pour envoyer du courrier via votre serveur.

Redémarrez votre serveur, et vérifiez les logs : vous devriez recevoir les mentions de TLS maintenant. Par exemple, un serveur de messagerie qui démarre une connexion cryptée avec la vôtre ressemble à :

Sep 6 14:25:58 drax postfix/smtpd[22727]: Anonymous TLS connection established from lists.openbsd.org[192.43.244.163]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)

Comment créer un certificat RSA (pour postfix) ?

Qu’il s’agisse d’un serveur Web, d’un serveur de messagerie (deux, en fait, en supposant que vous en utilisez un pour SMTP et un autre pour IMAP, comme il est courant) ou d’autres types d’applications, un certificat TLS 1 est nécessaire pour avoir des connexions cryptées. Il peut être auto-signé (par exemple, si vous êtes le seul à avoir besoin d’accéder à ce serveur), mais les navigateurs et les clients de messagerie se plaignent (bruyamment !), donc, si vous voulez que votre serveur soit universellement accessible, un “vrai” certificat est nécessaire, alors montrons comment l’obtenir.

Cette recette crée un certificat RSA (fortement recommandé pour, disons, Postfix, puisque vous ne pouvez pas contrôler ce que les autres serveurs de messagerie supportent, vous devriez donc opter pour l’option la plus courante) ; pour les serveurs web (accessibles par les navigateurs standard), un certificat ECDSA pourrait être une bonne alternative.

L’option la plus simple. Lancez simplement cette commande sur votre serveur et vous aurez un certificat valable pour tous les usages avec une durée de validité de dix ans :

openssl req -newkey rsa:4096 -nodes -sha512 -x509 -days 3650 -nodes -out /etc/ssl/certs/mailserver.pem -keyout /etc/ssl/private/mailserver.pem
# Clef privée du serveur
openssl genrsa -out /etc/postfix/mailserver.key 4096
# Demande de signature du certificat (Le seul champ de saisie important est le 'Common Name')
openssl req -new -key /etc/postfix/mailserver.key -out /etc/postfix/mailserver.csr
# Signature du certificat
openssl x509 -req -days 3650 -in /etc/postfix/mailserver.csr -signkey /etc/postfix/mailserver.key -out /etc/postfix/mailserver.crt

Pendant la création on va vous demander plusieurs informations. Entrez ce que vous voulez. Le seul champ de saisie important est le Common Name qui doit contenir le nom pleinement qualifié par lequel vous voulez que votre serveur soit connu sur Internet. Pleinement qualifié signifie nom d’hôte + nom de domaine.

Assurez-vous que la clé privée soit seulement lisible par l’utilisateur root

chmod go= /etc/postfix/mailserver.key