Postfix – Créer son propre SMTP Mail Relay

Synopsis

Le mail est un des moyens de communication les plus utilisés dans le monde, ce qui créer automatiquement des dérives comme le Spam et autres usurpations. Il faut savoir que le protocole SMTP (Simple Mail Transfert Protocol) date des années 80 et comme son nom l’indique est assez simple, il n’a donc pas été pensé pour être sécurisé.

Étant donné que dans la conception ouverte du SMTP n’importe qui peut en théorie envoyer un mail en se faisant passer pour qui il veux, la logique s’est tourné vers une vérification à la réception via DKIM, SPF, DMARK et Antispam … ainsi qu’une sécurisation via SMTP over STARTTLS/SSL.

Voilà pourquoi la plupart des Antispam utilisent des RBL (Real-time Blackhole List) ou DNSBL (Domain Name System-based Blackhole List) dont une qui liste toutes les IP publiques non « professionnelles » pour s’assurer que les ordinateurs d’utilisateurs lambda victimes de malwares ne se transforment en bots envoyant massivement du spam. D’ailleurs certains opérateurs bloquent les requêtes sortantes sur le port SMTP (25).

Une mesure efficace pour Monsieur Michu, mais gênante pour l’utilisateur avancé qui souhaite héberger son propre serveur mail. Voila pourquoi ce post va vous permettre de solutionner ceci avec la mise en place d’un relais SMTP authentifié.

Prérequis

  • Un nom de domaine.
  • Un serveur sous Ubuntu Server LTS (ex. 16.04) comme par exemple un VPS chez OVH (P’tite pub…).
  • Une connexion en root (Pour éviter le sudo :D).
  • Configuration DNS (Voir plus bas)
    • Reverse DNS (Record type A).
    • SPF (Record type TXT)
    • DMARC (Record type TXT)
  • Reverse DNS du VPS configuré.

Installation des paquets

  • Installation de Postfix est ses dépendances.
apt-get install postfix sasl2-bin libsasl2-modules
  • Sélectionner Internet Site

  • Utiliser le nom configuré dans le reverse DNS du VPS.

Authentification SASL

L’authentification SASL va être gérée par le daemon saslauthd, avec une base d’identifiants sasldb.

Éditer le fichier /etc/default/saslauthd et remplacer ces lignes :

  • Autoriser le daemon à démarrer.
START=no
START=yes
  • Forcer l’authentification via la DB SASL plutôt que PAM.
MECHANISMS="pam"
MECHANISMS="sasldb"
  • Utiliser l’environnement de Postfix.
OPTIONS="-c -m /var/run/saslauthd"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
  • Faire un lien symbolique pour l’utilisation de l’environnement Postfix chrooté.
cd /var/run
mv saslauthd saslauthd.bak
ln -s /var/spool/postfix/var/run/saslauthd /var/run/saslauthd
  • Démarrer le service saslauthd.
service saslauthd start
  • Créer un compte utilisateur qui sera autorisé à relayer, à utiliser plus tard sous la forme « [email protected] ».
saslpasswd2 -u domain user

Configuration de postfix

Le daemon SMTP de Postfix écoute par défaut sur le port 25, hors pour l’authentification nous allons le passer sur le port 587 (submission).

  • Editer le fichier /etc/postfix/master.cf et retirer le # au début de la ligne « submission » et l’ajouter au début de « smtp ».
  • S’assurer aussi que la ligne utilise les 4 tirets, pour autoriser l’environnement chrooté.
#smtp inet n - - - - smtpd
#smtp inet n - - - 1 postscreen
#smtpd pass - - - - - smtpd
#dnsblog unix - - - - 0 dnsblog
#tlsproxy unix - - - - 0 tlsproxy
#submission inet n - - - - smtpd
  • Ajouter ces lignes à la fin du fichier /etc/postfix/main.cf pour forcer Postfix à utiliser SASL en rejetant les requêtes non authentifiées.
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = no
smtpd_recipient_restrictions = permit_sasl_authenticated,reject
  • Créer le fichier /etc/postfix/sasl/smtpd.conf, pour activer communication entre Postfix et saslauthd.
pwcheck_method: saslauthd
saslauthd_path: /var/run/saslauthd/mux
mech_list: PLAIN LOGIN
  • Permettre à Postfix de communiquer avec le daemon saslauthd en ajoutant l’utilisateur au groupe.
adduser postfix sasl
  • Redémarrer le service Postfix pour prendre les modification en compte.
service postfix restart

Génération des certificats SSL

  • Afin d’exploiter le SSL, il va falloir générer des certificats pour Postfix.
mkdir /etc/postfix/ssl
cd /etc/postfix/ssl/
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr
  • Les réponses ne sont pas très importantes sauf pour le CN.
Common Name (CN) : <FQDN_Reverse_DNS>
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
  • Répondre aux questions de la même façon qu’à l’étape précédente.
  • Activation de TLS dans Postfix via /etc/postfix/main.cf.
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes

smtpd_use_tls = yes
smtpd_tls_loglevel = 1 
smtpd_tls_auth_only = no
smtpd_recipient_limit = 100 
smtpd_tls_received_header = yes 
smtpd_tls_session_cache_timeout = 3600s
smtpd_helo_restrictions = reject_invalid_hostname 
smtpd_sender_restrictions = reject_unknown_address

smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt

tls_random_source = dev:/dev/urandom


Cependant début 2018, la RFC 83146 a finalement affecté officiellement le port 465 au protocole SMTP avec TLS implicite.

  • Il est donc possible d’éditer le fichier /etc/postfix/master.cf  et de modifier « submission » par « smtps ».
#smtp inet n - - - - smtpd
#smtp inet n - - - 1 postscreen
#smtpd pass - - - - - smtpd
#dnsblog unix - - - - 0 dnsblog
#tlsproxy unix - - - - 0 tlsproxy
smtps inet n - - - - smtpd
  • Redémarrer le service Postfix pour prendre les modifications en compte.
service postfix restart

Configuration du Firewall (UFW)

  • Installation des paquets.
apt-get install ufw
  • Vérifier les règles en place.
ufw status
  • Bloquer les ports en entrée (Incoming).
ufw default deny incoming
ufw default allow outgoing
  • Autoriser des ports en entrée (ex. SSH/SMTP)
ufw allow 22/tcp
ufw allow 587/tcp
ufw allow 465/tcp
  • Activer le Firewall UFW.
ufw enable

Configuration des Record DNS

Ci-dessous un récapitulatif des différents Record DNS à configurer sur la zone mondomaine.fr, avec des exemples.

VPS Name : vps
VPS Domain : mondomaine.fr 
VPS FQDN : vps.mondomaine.fr
VPS IP : 1.2.3.4
IP Publique serveur d'envoi (ex. Exchange) : 2.3.4.5
  • Reverse DNS (Type A)
<VPS_NAME> IN A <VPS_IP>
vps IN A 1.2.3.4
  • SPF (Type TXT)
 IN TXT "v=spf1 +ip4:<SOURCE_IP> +ptr:<DOMAIN_VPS> +mx ip4:<VPS_IP> ~all"
IN TXT "v=spf1 +ip4:2.3.4.5 +ptr:mondomaine.fr +mx ip4:1.2.3.4 ~all"
  • DMARC (Type TXT)
_dmarc IN TXT "v=DMARC1; p=none"

Configuration du serveur mail

Le but est maintenant de dire au Mail Server de router ses mails en sortie vers notre VPS.

  • Pour Exchange il faut configurer le Send Connector pour utiliser le FQDN du VPS en Smart Host (Route mail through smart hosts).

 

Test de la configuration

Pour les tests de la configuration je vous conseille d’utiliser MXToolbox et Mail Tester, sans oublier de specifier le port (ex. vps.mondomaine.fr:587)

http://www.mail-tester.com

https://mxtoolbox.com



...BofBienTrès BienTop ! (Soit le premier à voter)
Loading...

Mathieu

Je suis actuellement Ingénieur Système spécialisé dans le design d'environnements cloud virtualisés. Adepte des technologies de VMware, Nutanix, Citrix ou Microsoft je propose à travers ce blog diverses astuces de troubleshooting.

Laisser un commentaire

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