Étiquette : orange

Envoyer des emails avec un relai smtp hébergé chez Orange (FreeBSD & Sendmail)

Envoyer des emails avec un relai smtp hébergé chez Orange (FreeBSD & Sendmail)

Il existe beaucoup d’articles sur ce sujet mais aucun avec la configuration que j’ai mise en place. Du coup je ne sais pas si cela va servir à quelqu’un mais dans le doute je me permets d’expliquer ma configuration. Le but de cet article est d’expliquer comment envoyer des emails depuis votre serveur de messagerie personnel.

L’auto-herbergement de ces types de services (serveur web, serveur mail, serveur de fichiers, etc.) augmente régulièrement depuis de nombreuses années et avec l’arrivée des micro-ordinateurs (comme Raspberry), cette tendance ne fait que de s’amplifier. J’ai donc décidé d’héberger mon serveur de messagerie personnel.

Pour héberger un serveur de messagerie pour lequel vous souhaitez envoyer et recevoir des emails depuis le réseau Internet, vous devez au préalable avoir un enregistrement DNS type MX valide. Pour cela, j’utilise le service de « DNS Dynamic » noip. J’associe à mon enregistrement DNS type A, un enregistrement DNS type MX portant le même nom.

$ host server.noipdomain.net
myserver.mydomain.net has address x.x.x.x
myserver.mydomain.net mail is handled by 10 myserver.mydomain.net.

J’ai mis en place l’environnement technique suivant :

  • Micro-ordinateur Raspberry 3 Model B
  • Image RaspBSD (r313109M) (FreeBSD 11.0 pour arm64)
  • Sendmail avec le support de SASL

La difficulté n’est pas tant de recevoir les emails depuis Internet mais bien de les envoyer depuis votre serveur de messagerie vers Internet. En effet pour éviter la diffusion de SPAM les opérateurs télécoms ont bloqués les connexions (depuis les box) vers les serveurs de messageries. Il est donc nécessaire d’utiliser un relai SMTP valide pour envoyer un email.

Mon fournisseur d’accès Internet est Orange, j’utilise donc leur relai de messagerie (smtp.orange.fr). La connexion au relai de messagerie chez Orange nécessite une authentification (d’où le support de SASL pour Sendmail). Pour une question de sécurité, j’ai créé un compte de messagerie spécifique. La procédure de création d’une boîte aux lettres secondaire est décrite ici.

Vérifier le support de SASL dans Sendmail via la commande suivante :

# /usr/local/sbin/sendmail -d0.1 -bv root
Version x.xx.x
 Compiled with: DNSMAP IPV6_FULL LOG MAP_REGEX MATCHGECOS MILTER
MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS
PICKY_HELO_CHECK PIPELINING SASLv2 SCANF STARTTLS TCPWRAPPERS
USERDB XDEBUG

============ SYSTEM IDENTITY (after readcf) ============
      (short domain name) $w = myserver
  (canonical domain name) $j = myserver.mydomain.net
         (subdomain name) $m = mydomain.net
              (node name) $k = myserver
========================================================

root... deliverable: mailer local, user root

Si le support de SASL n’est pas disponible dans Sendmail, je vous invite à suivre la procédure de compilation d’écrite dans le Handbook de FreeBSD.

Il faut créer le fichier d’authentification au serveur relai de messagerie. J’utilise ici le compte de messagerie spécifique que j’ai créé :

# cat authinfo
AuthInfo:smtp.orange.fr "U:root" "I:xxx@orange.fr" "P:pass" "M:LOGIN"
AuthInfo:smtp.orange.fr:587 "U:root" "I:xxx@orange.fr" "P:pass" "M:LOGIN"

Une fois le fichier généré, il faut créer la table correspondante :

# makemap hash authinfo < authinfo

Il faut insérer les macros suivante à votre configuration de sendmail (modifier le ficher <server>.mc) :

dnl SMART HOST CONFIG
define(`SMART_HOST', `smtp.orange.fr')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

On génère le fichier de configuration via la commande make et on n’oublie pas de recopier le fichier de configuration :

# cd /etc/mail && make
/usr/bin/m4 -D_CF_DIR_=/usr/local/share/sendmail/cf/   /usr/local/share/sendmail/cf/m4/cf.m4 server.mc > unixme.cf
/usr/bin/m4 -D_CF_DIR_=/usr/local/share/sendmail/cf/   /usr/local/share/sendmail/cf/m4/cf.m4 server.submit.mc > server.submit.cf

# cp server.cf sendmail.cf

Un arrêt / relance de sendmail est nécessaire pour prendre en compte les modifications :

# service sendmail stop
Stopping sendmail.
Waiting for PIDS: 37413.
Stopping sendmail_msp_queue.
Waiting for PIDS: 36932.

# service sendmail start
Starting sendmail.
Starting sendmail_msp_queue.

Maintenant il suffit de tester notre configuration :

$ mail -v -s Test <messagerie@test.fr>
test send
.
EOT

messagerie@test.fr... Connecting to [127.0.0.1] via relay...
220 myserver.mydomain.net ESMTP Sendmail x.xx.x/x.xx.x; Fri, 14 Apr 2017 16:16:59 +0200 (CEST)
>>> EHLO myserver.mydomain.net
250-myserver.mydomain.net Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH DIGEST-MD5 CRAM-MD5 LOGIN PLAIN
250-STARTTLS
250-DELIVERBY
250 HELP
>>> STARTTLS
220 2.0.0 Ready to start TLS
>>> EHLO myserver.mydomain.net
250-myserver.mydomain.net Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH DIGEST-MD5 CRAM-MD5 LOGIN PLAIN
250-DELIVERBY
250 HELP
>>> MAIL From:<moi@myserver.mydomain.net> SIZE=53 AUTH=moi@myserver.mydomain.net
250 2.1.0 <moi@myserver.mydomain.net>... Sender ok
>>> RCPT To:<messagerie@test.fr>
>>> DATA
250 2.1.5 <messagerie@test.fr>... Recipient ok
354 Enter mail, end with "." on a line by itself
>>> .
250 2.0.0 v3EEGxQi037463 Message accepted for delivery
messagerie@test.fr... Sent (v3EEGxQi037463 Message accepted for delivery)
Closing connection to [127.0.0.1]
>>> QUIT
221 2.0.0 myserver.mydomain.net closing connection

Les logs de Sendmail indique les échanges suivants :

Apr 14 16:16:59 myserver sendmail[37462]: v3EEGx4r037462: from=moi, size=53, class=0, nrcpts=1, msgid=<201704141416.v3EEGx4r037462@myserver.mydomain.net>, relay=moi@localhost
Apr 14 16:16:59 myserver sm-mta[37463]: STARTTLS=server, relay=localhost [127.0.0.1], version=TLSv1.2, verify=NO, cipher=ECDHE-RSA-AES256-GCM-SHA384, bits=256/256
Apr 14 16:16:59 myserver sendmail[37462]: STARTTLS=client, relay=[127.0.0.1], version=TLSv1.2, verify=FAIL, cipher=ECDHE-RSA-AES256-GCM-SHA384, bits=256/256
Apr 14 16:16:59 myserver sm-mta[37463]: v3EEGxQi037463: from=<moi@myserver.mydomain.net>, size=383, class=0, nrcpts=1, msgid=<201704141416.v3EEGx4r037462@myserver.mydomain.net>, proto=ESMTPS, daemon=IPv4, relay=localhost [127.0.0.1]
Apr 14 16:16:59 myserver sendmail[37462]: v3EEGx4r037462: to=messagerie@test.fr, ctladdr=moi (1000/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30053, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (v3EEGxQi037463 Message accepted for delivery)
Apr 14 16:17:00 myserver sm-mta[37465]: v3EEGxQi037463: to=<messagerie@test.fr>, ctladdr=<moi@myserver.mydomain.net> (1000/0), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30383, relay=smtp.orange.fr. [x.x.x.x], dsn=2.0.0, stat=Sent (8EGz1v00h4tU8mL03EGzx4 mail accepted for delivery)

Le relai de messagerie d’Orange a bien pris en compte l’envoi de l’email. Reste à vérifier depuis le client de messagerie distant la bonne réception de cet email. L’entête du message permet de suivre son cheminement :

...
Received: from smtp.smtpout.orange.fr (smtp08.smtpout.orange.fr [x.x.x.x])
    by in12.mail.test.fr (Postfix) with ESMTPS id 4C012FC3
    for <messagerie@test.fr>; Fri, 14 Apr 2017 16:17:00 +0200 (CEST)
Received: from myserver.mydomain.net ([x.x.x.x])
    by mwinf5d68 with ME
    id 8EGz1v00h4tU8mL03EGzx4; Fri, 14 Apr 2017 16:17:00 +0200
...

Si jamais vous avez des questions ou besoin de plus de détails sur la configuration mise en place , nécessitez pas à me les poser via un commentaire.