Utiliser GSuite pour envoyer des emails depuis un serveur

Imaginons la situation suivante :

  • Vous avez souscrit à l’offre GSuite de Google, et vous utilisez ainsi Gmail avec votre propre nom de domaine.
  • Vous avez un serveur Linux, depuis lequel vous souhaitez pouvoir envoyer des emails.

(Si vous n’êtes pas encore client GSuite, n’oubliez pas que j’ai proposé des coupons de réduction)

Il existe plusieurs raisons pour lesquelles vous avez tout intérêt à ce que les emails soient en fait envoyés par les serveurs de Google plutôt que par le votre : Dans la mesure où votre domaine est géré (au moins pour les emails) par Google, votre serveur n’apparaîtra pas comme étant légitime pour ce domaine, et donc les messages qu’il enverra risquent d’être classés en spam. De plus, vous pourrez retrouver la trace de tous les messages envoyés dans Gmail, ce qui peut être très pratique.

Côté serveur, j’ai l’habitude d’utiliser Exim. Historiquement, c’était le seul serveur SMTP qui pouvait intégrer complètement le filtre anti-spam SpamAssassin (pas en l’appelant comme un filtre externe, mais bien en l’intégrant à Exim, ce qui est bien plus efficace). J’ai gardé l’habitude de l’utiliser, car il est au moins aussi bon que Postfix ou Qmail.

Configuration GSuite

Pour commencer, nous allons créer un compte GSuite dédié à ces envois. Pour cela, il faut aller dans l’interface d’administration, puis dans Utilisateurs. Cliquez sur l’icône « Créer un utilisateur » en bas à droite. Enfin bon, si vous utilisez GSuite, vous devez savoir comment créer un utilisateur et comment lui assigner une ou plusieurs adresses email.

Sachez qu’il existe deux manière d’utiliser Gmail comme serveur de relais (dixit la documentation) :

  • La première, recommandée par Google, est basée sur l’adresse IP de votre serveur. Elle permet d’envoyer des messages (en nombre illimité semble-t-il) à 10 000 destinataires différents par jour au maximum. Cette méthode implique que votre serveur a une adresse IP fixe, et que le nombre de serveurs est stable.
  • La seconde est basée sur les identifiants de connexion du compte d’envoi. Elle permet d’envoyer jusqu’à 2 000 messages par jour (toujours avec la limite de 10 000 destinataires, cf. documentation). Cette méthode doit être utilisée si vous avez des adresses IP dynamiques et/ou si vous ajoutez de nouveaux serveurs régulièrement (par exemple si vous utilisez des machines virtuelles de test).

Remarquez qu’il est possible de combiner les deux méthodes. Si vous souhaitez utiliser la méthode par adresse IP, je vous conseille d’activer quand même l’option d’authentification SMTP. A minima, cela permettra à Google de savoir à quel compte Gmail vous voulez que les messages envoyés soient liés, ce qui vous permettra de les retrouver dans Gmail.

La procédure à suivre est très bien expliquée dans la documentation fournie :

  1. Dans la console d’administration Gsuite, allez dans Applications, G Suite, Gmail, Paramètres avancés.
  2. Dans la partie « Service de relais SMTP », cliquez sur « Configurer » (ou « En ajouter un autre » si vous en avez déjà un de configuré).
  3. À la question « Expéditeurs autorisés », gardez le choix « Uniquement les utilisateurs Google Apps enregistrés appartenant à mes domaines ». Cela réduira (un peu) les risques d’envois incorrects passant par votre compte.
    Si vous avez besoin de pouvoir envoyer des emails dont l’adresse d’expédition ne fait pas partie de vos utilisateurs GSuite, vous pouvez choisir l’option « Toutes les adresses ». Mais sachez que si vous activez l’authentification SMTP, l’utilisateur en question apparaîtra dans les messages envoyés (dans les en-têtes des emails).
  4. Dans la partie « Authentification », je vous suggère d’activer l’option « Accepter uniquement les messages provenant des adresse IP spécifiées » si vous en avez la possibilité. Vous pouvez alors saisir des adresses IP ou des plages d’adresses (IPv4 ou IPv6).
    Comme dit précédemment, je vous suggère aussi d’activez l’option « Authentification SMTP requise ».
  5. Enfin, cochez la case « Exiger le chiffrement TLS ». Exim supporte très bien l’encryption de la connexion, donc autant en profiter pour sécuriser un peu les échanges.
  6. Enfin, cliquez sur « Enregistrer ».

Il faut ensuite attendre jusqu’à une heure pour que les modifications soient bien prises en compte par les serveurs Gmail.

Configuration Exim

Du côté de votre serveur, il faut commencer par installer Exim si ce n’est déjà fait :

# apt-get install exim4-daemon-light

Si vous l’avez déjà installé, il faudra le reconfigurer :

# dpkg-reconfigure exim4-config
  1. Choisissez l’option « Envoi par relais “smarthost” – pas de courrier local ».
  2. Pour le nom de courrier du système, vous pouvez mettre « localhost » ou le nom de la machine locale.
  3. Pour la liste des IP de connexions SMTP entrantes, mettez « 127.0.0.1 », pour que Exim n’accepte que les connexions locales. De toute façon, je vous conseille de mettre en place un firewall pour empêcher les tentatives de connexion provenant de l’extérieur (voir l’article que j’avais écrit au sujet de la configuration de serveur Linux).
  4. Laissez vide pour les autres destinations.
  5. Mettre « localdomain » pour le nom de domaine visible pour les utilisateurs locaux.
  6. À la question « Nom réseau ou adresse IP du système “smarthost” », vous devez mettre une valeur qui va dépendre de la méthode d’authentification choisie :
    • Si vous avez activé l’option par adresse IP, saisissez « smtp-relay.gmail.com::587 ».
    • Si vous avez activé uniquement l’option par authentification SMTP, tapez « smtp.gmail.com::587 ».
  7. Répondez « Non » à la question « Faut-il cacher le nom local de courrier dans les courriers sortants ? ».
  8. Répondez « Non » à la question « Faut-il minimiser les requêtes DNS ? ».
  9. Pour « Faut-il séparer a configuration dans plusieurs fichiers ? », répondez « Oui ».

Si vous avez activé l’authentification SMTP, il faut que vous éditiez le fichier /etc/exim4/passwd.client :

*.google.com:user@domain.tld:mot_de_passe

En mettant évidemment l’adresse email et le mot de passe du compte Gmail que vous souhaitez utiliser pour envoyer les messages.

Redémarrez Exim :

# service exim4 restart

Test

En local sur votre serveur, on va tester l’envoi d’email. Pour cela, on va se connecter au démon Exim en utilisant Telnet. Cela peut paraître moins pratique que d’utiliser un outil en ligne de commande, mais au moins on voit immédiatement certaines erreurs.

Dans un premier terminal, ouvrez le fichier de logs Exim :

# tail -f /var/log/exim4/mainlog

Dans un second terminal :

# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 localhost ESMTP Exim 4.86_2 Ubuntu Wed, 31 May 2017 13:38:08 +0200
MAIL FROM: user@domain.tld
250 OK
RCPT TO: recipient@somewhere.tld
250 Accepted
DATA
354 Enter message, ending with "." on a line by itself
From: user@domain.tld
To: recipient@somewhere.tld
Subject: Test email 01

TEST 1
.
250 OK id=1dG1xL-0007WJ-B5
QUIT
221 localhost closing connection

Normalement, le message est bien parti. Dans les logs, vous devriez avoir quelque chose de la forme suivante :

2017-05-31 13:38:47 1dG1xL-0007WJ-B5 <= user@domain.tld H=localhost [127.0.0.1] P=smtp S=348
2017-05-31 13:38:47 1dG1xL-0007WJ-B5 H=gmail-smtp-relay.l.google.com [2a00:1450:400c:c02::1c] Network is unreachable
2017-05-31 13:38:47 1dG1xL-0007WJ-B5 => recipient@somewhere.tld R=smarthost T=remote_smtp_smarthost H=gmail-smtp-relay.l.google.com [74.125.71.28] X=TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128 CV=no DN="C=US,ST=California,L=Mountain View,O=Google Inc,CN=smtp-relay.gmail.com" A=plain C="250 2.0.0 OK 1496230727 123sm2023007wmr.3 - gsmtp"
2017-05-31 13:38:47 1dG1xL-0007WJ-B5 Completed

La deuxième ligne indique que mon démon Exim a essayé de se connecter aux serveurs Gmail en IPv6 et que ça a échoué (le réseau n’est pas configuré en IPv6 sur le serveur de test que j’ai utilisé). On peut voir à la ligne d’en-dessous qu’il a réussi à se connecter en IPv4 sans problème.

En cas de soucis, le problème vient la plupart du temps d’une erreur dans la configuration du côté GSuite/Gmail. Vérifiez aussi que votre firewall autorise bien les connexions sortantes sur le port 587.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Notifiez-moi des commentaires à venir via email. Vous pouvez aussi vous abonner sans commenter.