Le but du MTA-STS est de ne pas faire confiance et augmenter sa résilience au détournement de dns. Le serveur de mail du destinataire sait qu’il doit interroger un sous-domaine précis avec une arborescence bien définie : https://mta-sts.[votre-domaine.net]/.well-known/mta-sts.txt
. Cela joue un rôle important pour la sécurité mail.
Création du fichier mta-sts
La première chose à faire est de récupérer vos champs MX, pour cela :
dig @1.1.1.1 -t mx monlinux.net
Prenez la réponse, ici mta-gw.infomaniak.ch
monlinux.net. 300 IN MX 5 mta-gw.infomaniak.ch.
Ensuite créer le fichier mta-sts.txt en format UTF8 linux avec les données suivantes, si vous avez plusieurs entrées mx, ajouter autant de ligne « mx: votre-2e-serveur"
que nécessaire :
version: STSv1
mode: testing
mx: mta-gw.infomaniak.ch
max_age: 2592000
- la version est actuellement
STSv1
- le mode
testing
permet à des serveurs non encore prêts de communiquer avec vous, il est possible d’être strict en utilisant le modeenforce
pour que seuls des serveurs supportant TLS n’échange avec vos serveurs mails - max_age est le temps en secondes de validité de l’autorisation. Au début partez sur 1h et une fois tout en place, vous pouvez mettre 1jour ou 1 mois si vous ne changez pas vos MX souvent.
Un article complet avec des détail sur dmarcadvisor en parle.
Création du docker
Le plus light étant de faire un container docker sur votre serveur ou votre cluster. Voici un exemple pour un docker simple avec nginx derrière un reverse proxy Traefik. Ce nginx est donc configuré en http étant donné que c’est Traefik qui gère la partie TLS HTTPS.
Créé l’arborescence nécessaire :
mkdir -p mta-sts.monlinux.net/src/.well-known
cd mta-sts.monlinux.net
vim src/.well-known/mta-sts.txt
vim docker-compose.yml
Le contenu du fichier docker-compose.yml
:
Suite à mon article sur Traefik, je rappelle que le réseau partagé pour toutes les applications webs externes sont sur proxy-net
. Sans cluster, je lui donne un nom et une limite de mémoire et ensuite des règles Traefik avec le resolver let’s encrypt.
version: '3.7'
networks:
proxy-net:
external: true
services:
nginx:
image: nginx:latest
mem_limit: 100m
container_name: mta_sts_monlinux
networks:
- proxy-net
labels:
- traefik.enable=true
- "traefik.http.routers.mta_sts_monlinux.rule=Host(`mta-sts.monlinux.net`)"
- traefik.http.routers.mta_sts_monlinux.tls.certresolver=le
- traefik.http.routers.mta_sts_monlinux.entrypoints=websecure
- traefik.frontend.passHostHeader=true
volumes:
- ./src:/usr/share/nginx/html
restart: unless-stopped
Création des noms de domaine
Ne pas oublier de créer le domaine mta-sts.monlinux.net
et de faire pointer sur votre Traefik ou autre hébergement web.
Ensuite il faut tester l’accessibilité via curl :
$ curl https://mta-sts.monlinux.net/.well-known/mta-sts.txt
version: STSv1
mode: testing
mx: mta-gw.infomaniak.ch
max_age: 2592000
Maintenant il faut créer un record DNS de type TXT « _mta-sts.monlinux.net » avec comme valeur la version et un id unique qui s’incrémentera au moment d’un changement de politique. Personnellement je prend le même format que pour les dns, la date et 2 chiffres YYYYMMDDNN. Dans mon cas la valeur sera « v=STSv1;id=2024050601;
«
Vérification du champ mta-sts
Vérifiez que tout est correcte avec votre outil favori. Dans mon cas, j’utilise mxtoolbox. Vous mettrez votre domaine et vous choisissez le type « MTA-STS Lookup
«
Vous aurez droit à un rapport complet sur votre champ dns, le contenu de votre fichier et les vérifications des serveurs MX présents.
Voici l’exemple sur mon domaine :
Laisser un commentaire