Tutorial

Comment installer et configurer Postfix en tant que serveur SMTP à envoi uniquement sur Ubuntu 18.04

EmailUbuntu 20.04

L'auteur a choisi le Free and Open Source Fund comme récipiendaire d'un don dans le cadre du programme Write for DOnations.

Introduction

Postfix est un agent de transfert de courriel (MTA), une application utilisée pour envoyer et recevoir des courriels. Elle peut être configurée de manière à ce qu'elle puisse être utilisée pour envoyer des courriels par application locale uniquement. Cela est utile dans les situations où vous devez régulièrement envoyer des notifications par courrier électronique à partir de vos applications, ou simplement en cas de trafic sortant important qu'un fournisseur de services de courrier électronique tiers n'autoriserait pas. C'est également une alternative plus légère à l'exploitation d'un serveur SMTP complet, tout en conservant les fonctionnalités requises.

Dans ce tutoriel, vous allez installer et configurer Postfix en tant que serveur SMTP pour l'envoi uniquement. Vous allez également demander des certificats TLS gratuits à Let’s Encrypt pour votre domaine et crypter les courriels sortants à l'aide de ces certificats.

Conditions préalables

  • Un serveur Ubuntu 20.04 configuré avec la Configuration initiale du serveur avec Ubuntu 20.04 y compris la création d'un sudo non root user.
  • Un nom de domaine entièrement enregistré. Ce tutoriel utilisera your_domain. Vous pouvez acheter un nom de domaine sur Namecheap, en obtenir un gratuitement sur Freenom, ou utiliser le bureau d'enregistrement de domaine de votre choix.
  • Un enregistrement DNS A avec your_domain pointant sur l'adresse IP publique de votre serveur. Vous pouvez suivre cette introduction à DigitalOcean DNS pour savoir comment les ajouter.

Note : Le nom d'hôte de votre serveur et le nom de votre Droplet doivent correspondre à your_domain car DigitalOcean établit automatiquement des enregistrements PTR pour l'adresse IP de la Droplet en fonction de son nom. 

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é à la Droplet lors de sa création.

Étape 1 — Installer Postfix

Dans cette étape, vous allez installer Postfix. Le moyen le plus rapide est d'installer le paquet mailutils qui regroupe Postfix avec quelques programmes supplémentaires que vous utiliserez pour tester l'envoi de courrier électronique. 

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

  • sudo apt update

Ensuite, installez Postfix en exécutant la commande suivante :

  • sudo apt install mailutils

Vers la fin du processus d'installation, la fenêtre de configuration de Postfix vous sera présentée :

Sélectionnez Internet Site dans le menu, puis appuyez sur la touche TAB pour sélectionner<Ok>puis ENTRÉE 

L'option par défaut est Site Internet. C'est l'option recommandée pour votre cas d'utilisation, donc appuyez sur TAB, puis ENTRÉE. Si vous ne voyez que le texte de la description, appuyez sur TAB pour sélectionner OK, puis sur ENTER. 

S'il ne s'affiche pas automatiquement, exécutez la commande suivante pour le démarrer :

  • sudo dpkg-reconfigure postfix

Après cela, vous obtiendrez une autre invite de configuration concernant le nom de messagerie du système :

Entrez votre nom de domaine, puis appuyez sur TAB pour sélectionner<Ok>ENTRÉE

Le nom de messagerie du système doit être le même que celui que vous avez attribué à votre serveur lors de sa création. Lorsque vous avez terminé, appuyez sur TAB, puis sur ENTRÉE.

Vous avez maintenant installé Postfix et vous êtes prêt à commencer à le configurer.

Étape 2 — Configurer Postfix

Au cours de cette étape, vous configurerez Postfix pour envoyer et recevoir des courriels uniquement à partir du serveur sur lequel il fonctionne, c'est-à-dire à partir de localhost.

Pour que cela arrive, Postfix doit être configuré pour écouter uniquement sur l’interface de bouclage, l'interface de réseau virtuel que le serveur utilise pour communiquer en interne. Pour effectuer les changements, vous devrez modifier le fichier de configuration principal de Postfix appelé main.cf, stocké sous etc/postfix. 

Ouvrez-le pour l'éditer à l'aide de votre éditeur de texte préféré :

  • sudo nano /etc/postfix/main.cf

Trouvez les lignes suivantes :

/etc/postfix/main.cf
. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
. . .

Définissez la valeur du paramètre inet_interfaces à loopback-only :

/etc/postfix/main.cf
. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
. . .

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

/etc/postfix/main.cf
. . .
mydestination = $myhostname, your_domain, localhost.com, , localhost
. . .

Changez la ligne pour qu'elle ressemble à ceci :

/etc/postfix/main.cf
. . .
mydestination = localhost.$mydomain, localhost, $myhostname
. . .

Si votre domaine est en fait un sous-domaine, et que vous souhaitez que les courriels aient l'air d'avoir été envoyés depuis le domaine principal, vous pouvez ajouter la ligne suivante à la fin de main.cf:

/etc/postfix/main.cf
...
masquerade_domains = your_main_domain

Le paramètre facultatif masquerade_domains spécifie pour quels domaines la partie de sous-domaine sera supprimée dans l'adresse e-mail.

Lorsque vous avez terminé, enregistrez et fermez le fichier.

Note : Si vous hébergez plusieurs domaines sur un seul serveur, les autres domaines peuvent également être transmis à Postfix en utilisant la directive mydestination.

Ensuite, redémarrez Postfix en exécutant la commande suivante :

  • sudo systemctl restart postfix

Vous avez configuré Postfix pour n'envoyer des courriels qu'à partir de votre serveur. Vous allez maintenant le tester en envoyant un exemple de message à une adresse électronique.

Étape 3 — Tester le serveur SMTP

Au cours de cette étape, vous allez tester si Postfix peut envoyer des courriels à un compte de messagerie externe en utilisant la commande mail qui fait partie du paquet mailutils que vous avez installé lors de la première étape.

Pour envoyer un courriel de test, exécutez la commande suivante :

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

Vous pouvez changer le corps et l'objet du courriel à votre convenance. N'oubliez pas de remplacer your_email_address avec une adresse électronique valide à laquelle vous pouvez accéder. 

Maintenant, vérifiez l'adresse électronique à laquelle vous avez envoyé ce message. Vous devriez voir le message dans votre boîte de réception. S'il n'y est pas, vérifiez votre dossier de courrier indésirable. À ce stade, tous les courriers électroniques que vous envoyez ne sont pas cryptés, ce qui fait penser aux fournisseurs de services qu'il s'agit probablement de spam. Vous mettrez en place le cryptage plus tard, à l'étape 5.

Si vous recevez une erreur de la part de la commande mail ou que vous n'avez pas reçu de message après une période prolongée, vérifiez que la configuration de Postfix que vous avez modifiée est valide et que le nom de votre serveur et le nom d'hôte sont définis pour votre domaine.

Notez qu'avec cette configuration, l'adresse dans le champ de départ pour les courriels de test que vous envoyez sera sous la forme your_user_name@your_domain, où your_user_name est le nom d'utilisateur de l'utilisateur du serveur sous lequel vous avez exécuté la commande. 

Vous avez maintenant envoyé un courriel à partir de votre serveur et vérifié qu'il a bien été reçu. Dans l'étape suivante, vous mettrez en place une redirection de courrier électronique pour root. 

Étape 4 — Transférer le courrier système

Au cours de cette étape, vous configurerez le transfert de courrier électronique pour l'utilisateur root afin que les messages générés par le système qui lui sont envoyés sur votre serveur soient transférés à une adresse électronique externe.

Le fichier /etc/aliases contient une liste de noms alternatifs pour les destinataires du courrier électronique. Ouvrez-le pour le modifier :

  • sudo nano /etc/aliases

Dans son état par défaut, il ressemble à ceci :

/etc/aliases
# See man 5 aliases for format
postmaster:    root

La seule directive présente précise que les courriels générés par le système sont envoyés à root.

Ajoutez la ligne suivante à la fin du fichier :

/etc/aliases
...
root:          your_email_address

Avec cette ligne, vous précisez que les courriels envoyés à root finissent par être transférés à une adresse électronique. N'oubliez pas de remplacer your_email_address avec votre adresse électronique personnelle. Lorsque vous avez terminé, enregistrez et fermez le fichier.

Pour que le changement prenne effet, exécutez la commande suivante :

  • sudo newaliases

L'exécution de newaliases permet de constituer une base de données des alias utilisés par la commande mail, qui sont extraits du fichier de configuration que vous venez d'éditer.

Testez que l'envoi de courriels vers root fonctionne, en exécutant :

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

Vous devriez recevoir le courriel à votre adresse électronique. S'il n'y est pas, vérifiez votre dossier spam.

Dans cette étape, vous avez mis en place le transfert des messages générés par le système vers votre adresse électronique. Vous allez maintenant activer le cryptage des messages de sorte que tous les courriers électroniques envoyés par votre serveur sont à l'abri de toute altération pendant leur transit et seront considérés comme plus légitimes.

Étape 5 — Activation du cryptage SMTP

Vous allez maintenant activer le cryptage SMTP en demandant un certificat TLS gratuit à Let’s Encrypt pour votre domaine (en utilisant Certbot) et en configurant Postfix pour l'utiliser lors de l'envoi de messages.

Ubuntu inclut Certbot dans ses référentiels de paquets par défaut ; vous pouvez donc l'installer en exécutant la commande suivante :

  • sudo apt install certbot

Lorsqu'on vous demande une confirmation, tapez Y et appuyez sur ENTER .

Lors de la configuration initiale du serveur dans les conditions préalables, vous avez installé ufw, le pare-feu non compliqué. Vous devrez le configurer pour autoriser le port HTTP 80 afin que la vérification du domaine puisse être effectuée. Exécutez la commande suivante pour l'activer :

  • sudo ufw allow 80

La sortie finale ressemblera à ceci :

Output
Rule added Rule added (v6)

Maintenant que le port est ouvert, lancez Certbot pour obtenir un certificat :

  • sudo certbot certonly --standalone --rsa-key-size 4096 --agree-tos --preferred-challenges http -d your_domain

Cette commande ordonne à Certbot d'émettre des certificats avec une clé RSA de 4096 bits pour faire fonctionner un serveur Web autonome temporaire (--standalone) pour la vérification, et pour vérifier via le port 80 (--preferred-challenges http). N'oubliez pas de remplacer your_domain par votre domaine avant d'exécuter la commande, et entrez votre adresse électronique lorsque vous y êtes invité. 

Le résultat sera similaire à celui-ci :

Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator standalone, Installer None Obtaining a new certificate Performing the following challenges: http-01 challenge for `your_domain` Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your cert will expire on 2020-07-11. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

Comme indiqué dans les notes, votre certificat et votre fichier de clé privée ont été enregistrés sous /etc/letsencrypt/live/your_domain. 

Maintenant que vous avez votre certificat, ouvrez main.cf pour l'éditer :

  • sudo nano /etc/postfix/main.cf

Trouvez la section suivante :

/etc/postfix/main.cf
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may

smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

Modifiez-le pour qu'il ressemble à ceci, en remplaçant your_domain par votre domaine, si nécessaire. Cela permettra de mettre à jour vos paramètres TLS pour Postfix :

/etc/postfix/main.cf
# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/your_domain/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/your_domain/privkey.pem
smtpd_tls_security_level=may

smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

Une fois que vous avez terminé, enregistrez et fermez le fichier.

Pour appliquer les changements, redémarrez Postfix :

  • sudo systemctl restart postfix

Maintenant, essayez d'envoyer à nouveau un courriel :

  • echo "This is the body of an encrypted email" | mail -s "This is the subject line" your_email_address

Ensuite, vérifiez l'adresse électronique que vous avez fournie. Il est possible que vous voyiez le message dans votre boîte de réception immédiatement car les fournisseurs de messagerie électronique sont beaucoup plus susceptibles de marquer les messages non cryptés comme étant du spam.

Vous pouvez vérifier les informations techniques concernant le message électronique dans votre client pour voir si le message est effectivement crypté.

Conclusion

Vous disposez maintenant d'un serveur de courrier électronique à envoi unique, alimenté par Postfix. Le cryptage de tous les messages sortants est un premier pas efficace pour que les fournisseurs de services de messagerie électronique ne marquent pas purement et simplement vos messages comme du spam. Si vous faites cela dans un scénario de développement, alors cette mesure devrait suffire.

Cependant, si votre cas d'utilisation est l'envoi de courriels aux utilisateurs potentiels du site (comme des courriels de confirmation pour l'inscription à un forum), vous devriez envisager de créer des registres SPF afin que les courriels de votre serveur soient encore plus susceptibles d'être considérés comme légitimes.

Creative Commons License