Comment configurer un relais de messagerie avec Postfix et Mailgun sur Ubuntu 16.04

introduction

La configuration d’un serveur SMTP n’est pas une tâche difficile. Non seulement la sécurité est une préoccupation majeure, mais la délivrabilité du courrier est un problème encore plus grave. Garantir la haute délivrabilité des e-mails provenant d'un serveur SMTP local sans être considérés comme du spam n'est pas très faisable en raison du degré élevé de protection anti-spam fournie par la plupart des fournisseurs de messagerie.

Un relais de messagerie résout ces deux problèmes. Il est beaucoup plus simple à configurer qu'un serveur SMTP complet, car il vous suffit de router tout courrier électronique généré par votre serveur vers un serveur SMTP géré de manière professionnelle. En conséquence, vous serez libéré de la plupart des problèmes de délivrabilité des e-mails.

Il existe deux types de relais de messagerie:open etclosed. Un relais de messagerie ouvert achemine le courrier provenant de sources externes ainsi que le courrier du serveur interne. Ce type de relais est mûr pour les abus des spammeurs. Un relais fermé ne transmet que les messages générés en interne sur notre serveur et notre réseau interne.

Bien que vous puissiez utiliser n'importe quel serveur SMTP externe pour acheminer vos e-mails, Mailgun offre de nombreux avantages par rapport aux autres serveurs SMTP. Il est gratuit pour un maximum de 10 000 courriels par mois, il est incroyablement fiable et vous permet d’envoyer des courriers à partir d’un domaine distinct. En utilisant un domaine distinct de votre domaine de messagerie professionnel, vous ajoutez une autre couche de protection contre les mises à l'index accidentellement.

Ce didacticiel vous guidera tout au long du processus de création et de configuration d’un compte Mailgun gratuit et d’un sous-domaine, de la configuration des enregistrements DNS DigitalOcean nécessaires et de la configuration d’un relais de messagerie fermé à l’aide de Postfix.

Conditions préalables

Avant de commencer ce guide, vous aurez besoin des éléments suivants:

  • Un serveur Ubuntu 16.04 configuré en suivantthe Ubuntu 16.04 initial server setup guide, y compris un utilisateur sudo non root et un pare-feu.

  • Un nom de domaine enregistré, tel queexample.com, pointant vers les serveurs de noms de DigitalOcean. Vous pouvez configurer cela en suivant le tutorielHow to Set Up a Host Name with DigitalOcean.

  • Un compte de messagerie ordinaire sur lequel vous pouvez recevoir des messages texte que vous enverrez.

[[step-1 -—- setting-up-a-mailgun-account]] == Étape 1 - Configuration d'un compte Mailgun

Créez un nouveau compte àhttps://mailgun.com/signup. Une fois votre inscription terminée, connectez-vous et accédez à vosdashboard et cliquez sur le lienDomains dans le menu en haut de la page.

Vous verrez un domaine de sandbox créé par Mailgun pour vous.

Initial Sandbox Domain

Au lieu d'utiliser le bac à sable, créez un sous-domaine pour Mailgun en cliquant sur le boutonAdd New Domain. Vous pouvez nommer ce sous-domaine comme vous le souhaitez, commemailgun.example.com oubulkemail.example.com. Ce tutoriel utiliseramg.example1.com dans ses exemples.

Après avoir créé votre sous-domaine, votre pageDomains devrait ressembler à l'image suivante:

After Adding SubDomain

Ensuite, sur votre page de sous-domaine en cliquant sur le lien correspondant à son nom. Vous verrez trois ensembles d’enregistrements DNS, comme le montre l’image suivante:

SubDomain’s DNS records

Vous devrez ajouter ces enregistrements DNS pour votre domaine dans votre tableau de bord DigitalOcean. Les enregistrements DNS pourSending etTracking sont obligatoires, mais vous pouvez ignorer ceux pourReceiving. Vous utiliserez les informations de cette page pour créer les enregistrements DNS appropriés à l’étape suivante. Conservez cette page ouverte pour pouvoir copier les valeurs de ces enregistrements.

[[step-2 -—- setting-up-dns-records-on-digitalocean]] == Étape 2 - Configuration des enregistrements DNS sur DigitalOcean

Connectez-vous à votre compte DigitalOcean et cliquez sur le menuNetworking de votre tableau de bord. Entrez ensuite le sous-domaine que vous avez créé dans Mailgun dans le champDomain et sélectionnez le droplet sur lequel vous souhaitez configurer le relais de messagerie. Appuyez ensuite sur le boutonCreate Record.

Adding SubDomain to DigitalOcean

Le nouveau domaine apparaîtra dans votre liste de domaines. Cliquez dessus pour afficher sa page d'édition. En plus des enregistrements déjà créés, vous devrez ajouter les deux enregistrementsTXT et l'enregistrementCNAME spécifiés par Mailgun. Vous pouvez également ajouter les enregistrementsMX, mais ils ne sont pas nécessaires pour le relais de messagerie. Reportez-vous à cet exemple de capture d'écran lors de la création de vos enregistrements:

DNS Records that need to be added

Ajoutez les enregistrements suivants, en utilisant les informations fournies par Mailgun que vous avez obtenues à l'étape 1:

  • Créez un nouvel enregistrementCNAME:

    • Entrezemail pour lesname etmailgun.org. pour leshostname. La période à la fin deshostname est obligatoire.

  • Créez un enregistrementTXT:

    • Entrez@ pour lesname.

    • Pour lesText, entrez le texte du premier enregistrementTXT de Mailgun, entre guillemets. Dans cet exemple, il s'agit de"v=spf1 include:mailgun.org ~all", mais vous devez le vérifier en regardant la valeur fournie par Mailgun.

  • Créez un autre enregistrementTXT:

    • Entrez la partie en gras duHostname du deuxième enregistrementtxt fourni par Mailgun pour le champname. Dans cet exemple, il s'agit demallo._domainkey, mais cela peut être différent pour votre domaine Mailgun.

    • Pour lestext, copiez la valeur entière fournie par Mailgun et mettez-la entre guillemets. Cela devrait ressembler à"k=rsa; p=MIGfMA0G...AQAB".

Mailgun doit valider les paramètres de votre domaine avant de pouvoir continuer. Vous pouvez soit attendre la mise à jour des enregistrements DNS, soit revenir à la page de votre domaine dans Mailgun, trouver la sectionDomain Verification & DNS, et cliquer sur le boutonCheck DNS Records Now Lorsque vos enregistrements DNS sont vérifiés, vous verrez le vert cases à cocher par les enregistrements qui ont été validés.

Les enregistrements DNS peuvent prendre un certain temps pour se mettre à jour. Les temps de mise à jour peuvent varier de quelques minutes à plusieurs heures.

[.note] #Note: Si vos enregistrements DNS ne sont pas validés dans Mailgun, revérifiez les valeurs que vous avez entrées pour vous assurer qu'elles correspondent à celles de votre page de domaine Mailgun. N'oubliez pas de mettre les valeurs d'enregistrement deTXT entre guillemets («). De plus, le nom du premier (plus court) enregistrementTXT doit être@, et non leshostname fournis par Mailgun.
#

Pendant que vous attendez la mise à jour DNS, affichez et copiez vos informations d'identification SMTP à partir de la page de votre domaine MailGun. Vous aurez bientôt besoin de ces valeurs. Dans la sectionDomain Information, votre nom d'utilisateur est répertorié à côté deDefault SMTP Login et le mot de passe est à côté deDefault Password. Vous pouvez également modifier ces valeurs si vous le souhaitez en cliquant sur le lienManage SMTP credentials.

Configurons ensuite Postfix.

[[step-3 -—- installation-et-configuration-postfix]] == Étape 3 - Installation et configuration de Postfix

Nous utiliserons le gestionnaire de pacakge intégré pour installer Postfix.

Connectez-vous à votre serveur en tant qu'utilisateur non root:

ssh sammy@your_server_ip

Normalement, le processus d'installation de Postfix utilise des écrans interactifs pour vous demander des informations. Pour éviter toute erreur éventuelle lors de cette installation, préconfigurons ces informations avant de lancer le processus d’installation.

Commencez par configurer Postfix pour qu’il agisse comme un relais de messagerie:

sudo debconf-set-selections <<< "postfix postfix/main_mailer_type select Satellite system"

Ensuite, indiquez à Postfix d'utiliser le nom d'hôte de votre serveur pour le nom d'hôte du serveur de messagerie:

sudo debconf-set-selections <<< "postfix postfix/mailname string $HOSTNAME"

Configurez ensuite Postfix pour utiliser le serveur SMTP de Mailgun pour le courrier relayé:

sudo debconf-set-selections <<< "postfix postfix/relayhost string smtp.mailgun.org"

Avec ces configurations en place, installez Postfix:

sudo apt -y install postfix

Pour que Postfix puisse se connecter à Mailgun, vous devez créer un fichier d’identifiants avec le nom d’utilisateur et le mot de passe du sous-domaine Mailgun obtenu à l’étape 2.

[.note] #Remarque: chaque sous-domaine Mailgun possède ses propres informations d'identification. Pour plus d'informations, consultezWhere Can I Find My API key and SMTP Credentials dans la documentation Mailgun.
#

Créez et modifiez un nouveau fichier d'informations d'identification:

sudo nano /etc/postfix/sasl_passwd

Ajoutez la ligne suivante au nouveau fichier:

/etc/postfix/sasl_password

smtp.mailgun.org your_mailgun_smtp_user@your_subdomain_for_mailgun:your_mailgun_smtp_password

Ensuite, protégez le fichier en limitant les droits de lecture et d’écriture àroot et utilisez la commandepostmap pour mettre à jour les tables de recherche de Postfix afin d’utiliser ce nouveau fichier:

sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd

Améliorez ensuite la sécurité du relais de messagerie en empêchant les connexions anonymes et en spécifiant le fichier d’identifiants pour fournir des connexions sécurisées à Mailgun. Editez le fichier de configuration de Postfix:

sudo nano /etc/postfix/main.cf

et ajoutez ces lignes à la fin du fichier:

/etc/postfix/main.cf

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = AUTH LOGIN

[.Remarque]##

Remarque: Postfix a mis en place diverses mesures de sécurité pour empêcher l'utilisation de votre relais de messagerie par les spambots (voirhttp://www.postfix.org/SMTPDACCESSREADME.html pour plus d'informations). Plus précisément, ces deux lignes dans `main.cf` restreignent l'utilisation du relais de messagerie à votre réseau local et aux utilisateurs autorisés par SASL que vous avez définis précédemment.

/etc/postfix/main.cf

smtpd_relay_restrictions = permit_mynetworks
permit_sasl_authenticated defer_unauth_destination

Redémarrez maintenant Postfix pour charger la nouvelle configuration:

sudo systemctl restart postfix

Assurez-vous également qu'aucun des ports SMTP entrants n'est ouvert en exécutant cette commande pour vérifier l'état de votre pare-feu:

sudo ufw status

La sortie devrait ressembler à ceci:

OutputTo                         Action      From
--                         ------      ----
22                         ALLOW IN    Anywhere
22 (v6)                    ALLOW IN    Anywhere (v6)

La sortie doitnot contenir l'un de ces ports dans la colonneTo:25,465 ou587. Ces ports sont utilisés pour l'accès SMTP et vous ne souhaitez pas autoriser le trafic entrant à utiliser votre relais de messagerie. Si ces ports apparaissent dans la sortie, consultezthis tutorial pour savoir comment supprimer des règles ou refuser explicitement l'accès.

Normalement, pour configurer un serveur SMTP à l’aide de Postfix, le nom d’hôte de votre serveur doit être le même que celui desfully-qualified domain name (FQDN) de votre site Web. Si le nom d’hôte de votre serveur est un nom de domaine complet, vous pouvez passer à l’étape 5. Sinon, lisez la suite.

[[step-4 -—- setting-up-domain-mapping]] == Étape 4 - Configuration du mappage de domaine

Comme nous utilisons Mailgun pour notre serveur SMTP au lieu de Postfix, il n’est pas nécessaire que le nom d’hôte de votre serveur corresponde au nom de domaine complet que vous utilisez pour votre courrier électronique. C'est très courant. Par exemple, si votre serveur est un serveur de base de données ou un serveur de surveillance, il peut ne pas avoir de nom de domaine complet. Nous pouvons configurer unmapping table, qui remplace une adresse e-mail par une autre.

Dans ce cas, nous allons mapper votre compte de messagerie utilisateur Linux sur le nom d'utilisateur de votre domaine MailGun.

Créez et modifiez une nouvelle table de mappage en créant le fichier/etc/postfix/generic:

sudo nano /etc/postfix/generic

Ajoutez cette ligne au fichier qui mappe l'utilisateursammyur votre machine à Mailgun.

/etc/postfix/generic

sammy@your_hostname sender@your_subdomain_for_mailgun

Vous pouvez remplacersender par le nom de votre choix, tel quewordpress ouno-reply. La seule partie qui compte vraiment estyour_subdomain_for_mailgun, qui devrait être votre sous-domaine Mailgun que vous avez défini à l'étape 1.

Vous pouvez spécifier plusieurs utilisateurs en créant plus de lignes comme celle-ci.

Ajoutez maintenant ce mappage aux tables de recherche de Postfix en utilisant la commandepostmap:

sudo postmap /etc/postfix/generic

Ensuite, éditez votre fichier de configuration Postfix pour ajouter le fichier de mapping:

sudo nano /etc/postfix/main.cf

Ajoutez cette ligne à la fin du fichier:

/etc/postfix/main.cf

smtp_generic_maps = hash:/etc/postfix/generic

Enfin, redémarrez Postfix pour intégrer les modifications:

sudo systemctl restart postfix

Testons le relais de messagerie pour s’assurer que tout est configuré correctement.

[[step-5 -—- testing-your-mail-relay]] == Étape 5 - Test de votre relais de messagerie

Pour tester votre nouveau relais de messagerie, vous enverrez un message à votre adresse électronique personnelle depuis votre serveur. Installezmailutils pour pouvoir envoyer rapidement un e-mail de test.

sudo apt -y install mailutils

Utilisez ensuitemailutils pour rédiger et envoyer un message à votre compte de messagerie personnel à partir de votre utilisateur actuel sur le serveur.

mail -s "Test mail" your_email_address <<< "A test message using Mailgun"

Vous pouvez changer le message en tout ce que vous voulez.

Vérifiez votre client de messagerie et voyez si vous avez reçu votre message de test. Si tel est le cas, félicitations pour la configuration réussie d’un relais de messagerie. Si vous ne l'avez pas fait, lisez la suite pour résoudre le problème.

[[step-6 -—- troubleshooting-your-mail-relay]] == Étape 6 - Dépannage de votre relais de messagerie

Bien qu'il existe un certain nombre de problèmes qui peuvent mal se produire, tels que le fait de commettre une erreur lors de l'une des étapes précédentes, voici quelques problèmes courants que vous pouvez rencontrer.

Tout d’abord, assurez-vous que Mailgun a validé vos enregistrements DNS. Rien ne peut arriver jusqu'à ce que cette étape est réussie. Vérifiez l’interface utilisateur de Mailgun et assurez-vous que le domaine a été vérifié.

Ensuite, revérifiez votre fichier d'informations d'identification (/etc/postfix/sasl_passwd). Assurez-vous que votre nom d'utilisateur et votre mot de passe correspondent à ceux du sous-domaine correspondant dans Mailgun. N'utilisez pas vos identifiants Mailgun, ceux-ci ne fonctionneront pas. Utilisez les informations d'identification spécifiques fournies par Mailgun pour votre sous-domaine.

Consultez vos journaux de messagerie pour vous assurer que tout message d'erreur utile est présent. Vous voudrez vérifier deux endroits. Tout d'abord, vérifiez le journal sur votre serveur, que vous pouvez trouver dans le fichier/var/log/mail.log. Vous pouvez voir les dernières entrées avec

tail -f /var/log/mail.log

Cela affiche les dernières lignes de votre fichier journal, mais "suit" également la sortie, ce qui signifie que toutes les nouvelles entrées du journal seront affichées telles qu'elles sont écrites dans le journal. Consultez le résultat pour voir si des messages d'erreur vous aident à diagnostiquer les problèmes. Par exemple, un mot de passe incorrect pour Mailgun affichera cette erreur:

Output> Nov 1 16:07:45 cart-1268 postfix/smtp[30082]: 0E8062038A: to=, relay=smtp.mailgun.org[173.203.37.114]:25, delay=2.3, delays=0.02/0/2.3/0, dsn=4.7.0, status=deferred (SASL authentication failed; server smtp.mailgun.org[173.203.37.114] said: 535 5.7.0 Mailgun is not loving your login or password)

En plus de votre serveur, Mailgun enregistre également les transactions. Accédez à votre tableau de bord Mailgun et sélectionnez le menuLogs pour afficher les messages d'erreur susceptibles de s'être produits et d'empêcher la remise du message.

Enfin, si le nom d’hôte de votre serveur n’est pas un nom de domaine complet, assurez-vous d’avoir suivi l’étape 4 pour créer des mappages pour vos utilisateurs afin qu’ils puissent envoyer des messages.

Conclusion

Félicitations pour la configuration de votre premier relais de messagerie à l’aide de Mailgun. Vous disposez désormais d'une méthode sécurisée pour envoyer toutes sortes d'e-mails depuis votre serveur, des communications internes et des résultats des tâchescron, aux newsletters clients ou aux messages de votre application Web.

Si vous souhaitez utiliser d'autres serveurs pour envoyer du courrier, il vous suffit d'exécuter à nouveau les étapes 3 et 4 sur chaque serveur. Vous pouvez réutiliser le même domaine MailGun pour autant de serveurs que vous le souhaitez. Vous pouvez également configurer plusieurs domaines afin de différencier votre courrier électronique en fonction de votre utilisation.

Un scénario courant consiste à utiliser deux domaines. un pour le courrier interne du serveur et l'autre pour le courrier en nombre. Le courrier interne du serveur est tout ce qui peut être envoyé à partir de l’un des programmes de votre serveur, comme une tâchecron ou Wordpress. Le courrier en bloc est lorsque vous envoyez un message à une liste de diffusion entière. Ce type de courrier électronique est particulièrement susceptible de faire l’objet d’une liste noire en raison du courrier indésirable. Par conséquent, vous voudrez probablement utiliser un domaine que vous pourrez supprimer s'il est bloqué, tout en préservant vos autres domaines. Dans tous les cas, veillez à utiliser les bonnes pratiques de messagerie lors de l'envoi de courrier en nombre. Pour plus d'informations, consultezThe Art of Inboxing.

Afin d'ajouter des domaines de messagerie supplémentaires, effectuez à nouveau les étapes 1 et 2 pour chaque nouveau domaine, puis modifiez/etc/postfix/sasl_passwd et/etc/postfix/generic si nécessaire. La configuration de base de Postfix reste la même.

Heureux emailing!