POSTFIX - Configurer postfix pour relayer en SASL

De PedroWiki

Introduction

Le contexte: vous avez un serveur, qui porte une application web. Cette application dispose par exemple d'un formulaire de contact, ou fait des traitements nécessitant des notifications par mail, et vous avez besoin de pouvoir envoyer via localhost sur le port 25.

Cet article décrit comment j'ai produit une configuration fonctionnelle pour relayer au travers d'un relay de chez Gandi ou Gmail, ces configurations sont valables quel que soit le relay SMTP.

Liens utiles

N'étant pas spécialiste de postfix ou de la messagerie en général, je me suis appuyé sur quelques liens et tutos bien utiles:

Pré requis

  • connaitre votre OS (Debian 9.5 dans notre cas).
  • avoir un relay (ex: mail.gandi.net ou smtp.google.com).
  • connaitre le port TCP de destination (en général 587 pour le SASL).
  • disposer d'un compte et d'un mot de passe pour pouvoir utiliser ce relai.
  • vérifier que votre hébergeur vous permet de sortir sur les ports SMTP classiques.

Chez Scaleway par exemple, il est nécessaire de se rendre dans la configuration du Security Group protégeant votre VM, et de cocher une case correspondant à l'autorisation, en sortie, des protocoles de messagerie. Sans cette autorisation explicite, votre configuration pourra être valide, mais vous ne relayerai pas correctement.

SecGroup..PNG

Installation et configuration

Vérifications préalables

  • Vérifier s'il y a déjà un service SMTP installé en local:
netstat -tpln ==> vérifier ce qui écoute sur le port 25
  • Si besoin, désinstaller l'éventuel service SMTP (ex: exim par défaut sur les images Debian Scaleway):
apt-get remove exim4 --purge

Installation de postfix

apt-get update
apt-get install postfix

Dans l'assistant de configuration graphique proposé par l'installer Postfix, choisir "No configuration", on fera tout manuellement ensuite.

Préparation de la configuration

cp /usr/share/postfix/main.cf.debian /etc/postfix/main.cf

Configuration compte SASL

vi /etc/postfix/sasl_passwd
...
[smtp.gmail.com]:587    username@gmail.com:password (ATTENTION A INSTANCIER FONCTION DE VOS PARAM PERSOS)
...
chmod 600 /etc/postfix/sasl_passwd
postmap /etc/postfix/sasl_passwd

Configuration des aliases

vi /etc/postfix/aliases
...
root: <votre_adresse_d_admin>
...
postalias /etc/postfix/aliases
cp /etc/postfix/aliases.db /etc/ (ON PEUT CONFIGURER LE CHEMIN DANS POSTFIX, MAIS LA FLEMME, DONC ON RECOPIE LE FICHIER OU LA CONF PAR DEFAUT LE CHERCHE)

Configuration relaying SASL

vi /etc/postfix/main.cf

Avec l'option "No configuration" votre main.cf doit ressembler à ça:

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2

Ajouter en fin de fichier les lignes suivantes:

relayhost = [smtp.google.com]:587 (ATTENTION LE RELAY DOIT ETRE COHERANT AVEC CELUI DESIGNE DANS sasl_passwd)
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

Redémarrer postfix pour prendre la configuration en compte

systemctl restart postfix.service

En principe sur une conf si petite, peu de chance d'avoir des erreurs au démarrage, sauf fichier mal placé ou fautes de frappe. Vous pouvez vérifier que le service tourne bien:

netstat -tpln => chercher le port 25, vérifier qu'il n'est bien bindé que sur 127.0.0.1
systemctl status postfix.service