Comment envoyer un courrier électronique via un service SMTP externe avec Sendmail sur FreeBSD 10.1

introduction

L’envoi d’un courrier électronique est l’un des besoins les plus courants lors de la configuration d’un nouveau serveur Web. Pour ce faire, le moyen le plus simple et le plus sûr consiste à connecter votre serveur à un service de messagerie tel que SendGrid ou Amazon SES. L’utilisation d’un service externe vous aidera à éviter les pièges, tels que l’adresse IP de votre serveur qui serait inscrite sur la liste noire des services anti-spam.

Dans ce tutoriel, nous verrons comment connecter le service Sendmail intégré de FreeBSD à SendGrid afin d’envoyer des emails à partir de votre serveur. Vous pouvez également adapter les paramètres pour un autre service de messagerie externe sans trop de peine.

Si vous êtes nouveau dans FreeBSD, certaines de nos actions peuvent sembler un peu effrayantes, mais vous serez bientôt prêt à retrousser vos manches pour recompiler un peu les outils système tels que les pros de FreeBSD.

Buts

Dans ce tutoriel, nous allons:

  • Recompiler Sendmail avec le support SASL afin que le serveur puisse s’authentifier avec un service externe

  • Configurez le serveur de messagerie Sendmail avec les paramètres appropriés

  • Testez le courrier électronique sortant pour vous assurer que le courrier sort de votre serveur.

Conditions préalables

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

  • Une gouttelette FreeBSD 10.1

  • Accédez à votre compte * root * ou à un compte disposant des privilèges sudo à la suite de ce https://www.digitalocean.com/community/tutorials/how-to-add-and-remove-users-on-freebsd

  • Connaissance pratique de la modification de fichiers texte à partir de la ligne de commande

  • Vous devez installer votre éditeur de texte favori, tel que + nano ou` + vim`

  • Un compte gratuit SendGrid à des fins de test, ou un autre fournisseur de messagerie qui vous fournit les détails SMTP du service. Vous aurez besoin de ces informations pour votre fournisseur de messagerie externe:

  • Nom d’hôte SMTP

  • Nom d’utilisateur

  • mot de passe

  • Le nom d’hôte de votre serveur, que vous pouvez trouver en exécutant + nom_hôte +

Ce tutoriel est le plus facilement suivi en tant que * racine *:

sudo su

Étape 1 - Configurer la gestion des paquets

Tout d’abord, nous devons recompiler Sendmail afin qu’il puisse s’authentifier auprès d’un service de messagerie externe - dans ce cas, SendGrid.

Toutes les étapes sont décrites ici, mais si vous le souhaitez, vous pouvez suivre le official FreeBSD handbook.

Certains logiciels seront compilés à partir de Ports Collection de FreeBSD, nous devons donc nous assurer qu’il est à jour au préalable.

portsnap fetch && portsnap update

L’utilitaire Portmaster nous permettra de compiler facilement les logiciels à partir de l’arborescence des ports. Lançons donc l’installation.

pkg install portmaster

Exécutez la commande suivante pour vous assurer que le système sait installer les packages récemment compilés dans le dernier format de package pour FreeBSD.

echo 'WITH_PKGNG=yes' >> /etc/make.conf

Étape 2 - Installer et configurer le package SASL

En utilisant notre utilitaire Portmaster nouvellement installé, compilez et installez le paquetage + cyrus-sasl2 + avec la commande suivante. Ceci est utilisé pour l’authentification avec le service de messagerie externe.

portmaster security/cyrus-sasl2

Lorsque vous y êtes invité, assurez-vous que * LOGIN * est coché, ce qui devrait être le cas par défaut. Choisissez * OK * et appuyez deux fois sur + ENTER + pour choisir toutes les valeurs par défaut. Lorsque vous y êtes invité, répondez + y + pour mettre à niveau et installer vos packages. Vous devez vous attendre à une grande quantité de sortie, se terminant par:

Output===>>> Done displaying pkg-message files

===>>> The following actions were performed:
   Upgrade of pkg-1.4.12 to pkg-1.5.0
   Upgrade of perl5-5.18.4_11 to perl5-5.18.4_13
   Installation of security/cyrus-sasl2 (cyrus-sasl-2.1.26_9)

Editez le fichier (en le créant s’il n’existe pas déjà) + / usr / local / lib / sasl2 / Sendmail.conf + et ajoutez-y le texte suivant:

vim /usr/local/lib/sasl2/Sendmail.conf

/usr/local/lib/sasl2/Sendmail.conf

pwcheck_method: saslauthd

Ensuite, installez le service + saslauthd + pour l’authentification SASL. Lorsque vous y êtes invité, acceptez les paramètres par défaut et choisissez * OK *.

portmaster security/cyrus-sasl2-saslauthd

Editez le fichier de configuration du système + / etc / rc.conf + et ajoutez les paramètres de configuration suivants à la fin du fichier. Remplacez «++» par le nom d’hôte de votre serveur.

vim /etc/rc.conf

/etc/rc.conf

hostname = ""
sendmail_enable="YES"
saslauthd_enable="YES"

Maintenant démarrez le service + saslauthd +.

service saslauthd start

Vous devriez voir cette sortie:

Outputusage: hostname [-fs] [name-of-host]
usage: hostname [-fs] [name-of-host]
Starting saslauthd.

Editez le fichier + / etc / make.conf + en ajoutant les paramètres suivants pour que le système sache quelles options SASL Sendmail utiliser.

vim /etc/make.conf

/etc/make.conf

SENDMAIL_CFLAGS=-I/usr/local/include/sasl -DSASL
SENDMAIL_LDFLAGS=-L/usr/local/lib
SENDMAIL_LDADD=-lsasl2

Étape 3 - Recompiler Sendmail avec le support SASL

Dans cette section, nous recompilerons Sendmail pour utiliser l’authentification SASL.

Nous devons maintenant synchroniser le dernier code source de FreeBSD 10.1.

Tout d’abord, nous allons installer Subversion afin d’obtenir facilement le code source dont nous avons besoin.

pkg install subversion

Nous pouvons maintenant consulter le dernier code de recompilation, directement à partir du site Web du projet FreeBSD, pour mettre à jour nos sources dans + / usr / src +.

svn co http://svn.freebsd.org/base/releng/10.1/ /usr/src

Les prochaines commandes à exécuter successivement, un groupe à la fois. Ce que nous faisons ici consiste à dire au système de recompiler (ou de reconstruire) les packages Sendmail intégrés avec nos nouvelles exigences en matière de sécurité et de connexion, puis de réinstaller Sendmail.

cd /usr/src/lib/libsmutil
make cleandir && make obj && make
cd /usr/src/lib/libsm
make cleandir && make obj && make
cd /usr/src/usr.sbin/sendmail/
make cleandir && make obj && make && make install

Étape 4 - Configurer Sendmail

Vous avez atteint ce stade et nous avons terminé la recompilation. Continuons!

Pour cette étape suivante, nous allons passer en revue une configuration de base de Sendmail qui indiquera à Sendmail de router tout le courrier sortant via notre service d’hébergement intelligent externe sélectionné.

Premièrement, nous allons être en sécurité et créer une sauvegarde du répertoire + / etc / mail.

cp -a /etc/mail /etc/mail.bak

Entrez le répertoire de configuration du courrier.

cd /etc/mail

Exécutez la commande suivante pour générer une configuration de messagerie de base.

make

Créez et éditez le fichier + relay-domains +, en ajoutant les paramètres suivants. Remplacez «» par votre nom de domaine complet et «» par votre nom de domaine.

vim /etc/mail/relay-domains

/ etc / mail / relay-domain

Créez et éditez le fichier + local-host-names +, en ajoutant les paramètres suivants. Remplacez les variables par vos noms d’hôtes locaux.

vim /etc/mail/local-host-names

/ etc / mail / local-host-names

Créez et éditez le fichier + access +, en ajoutant les paramètres suivants. (Notez que vous devrez changer l’adresse + smtp.sendgrid.net + si vous utilisez un fournisseur autre que SendGrid.)

vim /etc/mail/access

/ etc / mail / access

smtp.sendgrid.net      OK
GreetPause:localhost    0

Créez et éditez le fichier + authinfo +, en ajoutant les paramètres suivants. Remplacez ` et ` par votre nom de compte et votre mot de passe SendGrid. Si vous avez choisi d’utiliser un autre fournisseur de messagerie externe, vous devez également remplacer la valeur + smtp.sendgrid.net + par l’adresse du serveur de votre fournisseur.

vim /etc/mail/authinfo

/ etc / mail / authinfo

AuthInfo:smtp.sendgrid.net "U:root" "I:" "P:" "M:LOGIN"
AuthInfo:smtp.sendgrid.net:587 "U:root" "I:" "P:" "M:LOGIN"

Les fichiers + access + et + authinfo + seront vraiment de simples bases de données à partir desquelles Sendmail lit les paramètres de configuration. Cela peut paraître déroutant, en particulier si vous êtes nouveau dans FreeBSD et Sendmail, mais vous devez simplement exécuter ces deux commandes indolores à partir du + / etc / mail / + pour générer les bases de données.

makemap hash access < access
makemap hash authinfo < authinfo

Maintenant, nous allons éditer la configuration de base et générer quelques commandes. Editez le fichier + .mc +. (Vous pouvez + ls + le répertoire + / etc / mail / + si vous n’êtes pas sûr du nom du fichier.)

vim /etc/mail/.mc

Insérez les lignes de configuration suivantes entre les blocs + dnl define (+ SMART_HOST ', + your.isp.mail.server') + et le + dnl Décommentez la première ligne pour modifier l’emplacement du bloc + par défaut indiqué ci-dessous.

Si vous n’utilisez pas de compte SendGrid comme dans l’exemple, vous devrez remplacer l’adresse + smtp.sendgrid.net + par celle du serveur de votre fournisseur. Vous devrez également mettre à jour les deux instances de «++» sur le domaine pour lequel vous souhaitez que le courrier soit * à partir de *. (Notez que vous devrez peut-être définir les options TXT, DKIM, PTR, etc. appropriées. enregistrements pour éviter les rapports d’usurpation d’identité.)

votre_serveur.exemple.com.mc ’> / etc / mail / .mc

dnl define(`SMART_HOST', `your.isp.mail.server')

dnl SET OUTBOUND DOMAIN
MASQUERADE_AS(`')
MASQUERADE_DOMAIN()
FEATURE(masquerade_envelope)
FEATURE(masquerade_entire_domain)

dnl SMART HOST CONFIG
define(`SMART_HOST', `smtp.sendgrid.net')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
FEATURE(`authinfo',`hash /etc/mail/authinfo.db')dnl
TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

dnl Uncomment the first line to change the location of the default

Avant d’appliquer les modifications, examinons un peu la configuration ci-dessus. Le premier bloc indique à Sendmail que nous souhaitons nous assurer que notre courrier sortant provient de notre domaine ++.

Le second bloc définit l’emplacement où nous voulons smart host notre courrier, y compris le port, les méthodes d’authentification et les informations d’authentification que nous avons configurées à une étape précédente. Notez que nous faisons référence au fichier + / etc / mail / authinfo.db +.

Appliquons maintenant les modifications que nous avons apportées. Assurez-vous que vous êtes toujours dans le répertoire + / etc / mail / +. Assurez-vous que Sendmail est démarré:

service sendmail start

Mise à jour de notre configuration:

make
make install restart

Redémarrez Sendmail:

service sendmail restart

Notre configuration Sendmail est terminée. La prochaine étape consiste à envoyer un email de test.

Étape 5 - Envoyez un e-mail de test

Maintenant que toutes les étapes ont été franchies pour que la configuration soit correcte, vérifions que tout fonctionne correctement.

Utilisez la commande + mailx + pour envoyer un message de test à un compte de messagerie réel que vous utilisez tous les jours.

mailx

Lorsque vous y êtes invité, entrez + test ou ce que vous voulez pour un sujet, puis appuyez sur` + ENTER`.

Subject:

Vous n’aurez alors plus qu’un curseur et la possibilité d’écrire le corps de votre e-mail de test. Il suffit d’écrire à nouveau le mot + test et d’appuyer à nouveau sur` + ENTER`.

test

Vous devez dire + mailx + que vous avez fini d’écrire votre message; Pour ce faire, nous devons terminer le message avec un seul signe «. +» et appuyer sur « ENTRÉE » une dernière fois. Vous verrez immédiatement ` EOT +` comme une confirmation de cela.

.
EOT

Ensuite, exécutez la commande suivante pour vérifier que la file d’attente de messagerie est vide et que notre message a été envoyé.

mailq

La sortie devrait ressembler à ceci si notre message de test a été envoyé avec succès, et vous devriez le voir dans votre boîte de réception sous peu.

/var/spool/mqueue is empty
               Total requests: 0

Allez vérifier votre email maintenant pour vous assurer que le message est bien arrivé. Il devrait être de * freebsd @ *.

Avoir aveuglément confiance dans le fait que la file d’attente de courrier est vide n’est pas un test de succès valide. Même si vous avez déjà reçu le message, vous souhaiterez connaître les bases de la consultation de vos journaux de messagerie. Exécutez la commande suivante.

tail -f /var/log/maillog

Les deux clés que vous recherchez dans la sortie du journal sont:

  • * + Envoyé (<ID message> Message accepté pour la livraison) + *

  • * `+ relay = smtp.sendgrid.net. [208.43.76.147], dsn = 2.0.0, stat = Envoyé (livraison en cours) + `*

Assurez-vous de pouvoir repérer ces messages dans la sortie du journal ci-dessous.

Mail LogFeb 11 04:09:13 your_server sm-mta[49080]: t1B49CW0049080: from=<freebsd@your_server>, size=331, class=0, nrcpts=1, msgid=<201502110409.t1B49CZ4049079@your_server>, proto=ESMTP, daemon=Daemon0, relay=localhost [127.0.0.1]
Feb 11 04:09:13 your_server sendmail[49079]: t1B49CZ4049079: [email protected], ctladdr=freebsd (1001/1001), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30040, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (t1B49CW0049080 Message accepted for delivery)
Feb 11 04:09:13 your_server sm-mta[49082]: STARTTLS=client, relay=smtp.sendgrid.net., version=TLSv1/SSLv3, verify=FAIL, cipher=AES128-GCM-SHA256, bits=128/128
Feb 11 04:09:13 your_server sm-mta[49082]: t1B49CW0049080: to=<[email protected]>, ctladdr=<freebsd@your_server> (1001/1001), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30331, relay=smtp.sendgrid.net. [208.43.76.147], dsn=2.0.0, stat=Sent (Delivery in progress)

Cela montre que votre message a été accepté et qu’il est sur le point d’arriver dans votre boîte de réception, ce qui peut être un peu anticlimatique si vous l’avez déjà reçu.

Pour effectuer des tests en direct et résoudre des problèmes, vous pouvez ouvrir deux sessions de terminal et laisser la commande + tail -f / var / log / maillog + s’exécuter dans l’une, pendant que vous envoyez des messages de test dans l’autre.

Conclusion

Vous êtes maintenant prêt à envoyer des courriels sortants à partir de votre droplet FreeBSD via SendGrid ou tout autre service de messagerie de votre choix. Tous les sites Web ou applications Web que vous déployez pourront désormais en tirer parti avec une configuration minimale, voire nulle.

Si vous avez des questions ou des commentaires, veuillez les laisser ci-dessous.