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
- 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)