Comment configurer les rapports MTA-STS et TLS pour votre domaine à l’aide d’Apache sur Ubuntu 18.04

L'auteur a sélectionnéElectronic Frontier Foundation Inc pour recevoir un don dans le cadre du programmeWrite for DOnations.

introduction

Mail Transport Agent Strict Transport Security (MTA-STS) est une nouvelle norme Internet qui vous permet d'activer la force-TLS stricte pour les e-mails envoyés entre les fournisseurs de messagerie pris en charge. Il est similaire àHTTP Strict Transport Security (HSTS), où une stratégie force-TLS est définie puis mise en cache pendant un laps de temps spécifié, ce qui réduit le risque d'attaques d'intermédiaire ou de rétrogradation.

MTA-STS est complété par la génération de rapports TLS SMTP (TLSRPT), qui vous permet de savoir quels courriers électroniques sont correctement transmis via TLS et lesquels ne le sont pas. TLSRPT est similaire àDMARC reporting, mais pour TLS.

La principale raison d'implémenter MTA-STS pour votre domaine est de s'assurer que le courrier électronique confidentiel qui vous est envoyé est transmis de manière sécurisée via TLS. D'autres méthodes d'encouragement de TLS pour les communications par courrier électronique, telles que STARTTLS, sont toujours susceptibles d'attaques par interception, car la connexion initiale n'est pas cryptée. MTA-STS aide à garantir qu’une fois qu’au moins une connexion sécurisée aura été établie, TLS sera utilisé par défaut à partir de là, ce qui réduit considérablement le risque de ces attaques.

Un exemple de cas d'utilisation pour les rapports MTA-STS et TLS consiste à aider à créer un système de messagerie électronique de service client sécurisé pour votre entreprise. Les clients peuvent envoyer des tickets de support par courrier électronique contenant des informations personnelles confidentielles, nécessitant une connexion TLS sécurisée. MTA-STS contribue à assurer la sécurité de la connexion et TLSRPT fournira des rapports quotidiens identifiant tous les e-mails qui n'ont pas été envoyés en toute sécurité, donnant un aperçu crucial de toute attaque en cours ou précédente contre votre système de messagerie.

Dans ce didacticiel, vous apprendrez à configurer MTA-STS et TLSRPT pour votre nom de domaine, puis à interpréter votre premier rapport TLS. Bien que ce tutoriel couvre les étapes à suivre pour utiliser Apache sur Ubuntu 18.04 avec un certificat Let’Secrypt, la configuration MTA-STS / TLSRPT fonctionne également sur des alternatives, telles que Nginx sur Debian.

Conditions préalables

Avant de commencer ce guide, vous aurez besoin de:

  • Un nom de domaine déjà configuré pour recevoir des e-mails, en utilisant soit votre propre serveur de messagerie, soit un service de messagerie hébergé, tel queG Suite ouOffice 365. Ce tutoriel utiliserayour-domain tout au long, mais cela doit être remplacé par votre propre nom de domaine. Il vous sera demandé de configurer un sous-domaine dans le cadre du didacticiel. Assurez-vous donc de pouvoir accéder aux paramètres DNS de votre domaine.

  • Un serveur Ubuntu 18.04 configuré en suivant lesInitial Server Setup with Ubuntu 18.04, y compris un utilisateur sudo non root.

  • Un serveur Web Apache installé et configuré en suivantHow to Install the Apache Web Server on Ubuntu 18.04.

  • Un client Certbot configuré afin d’acquérir un certificat Let’s Encrypt, en suivantHow To Secure Apache with Let’s Encrypt on Ubuntu 18.04.

Une fois que vous avez ces éléments prêts, connectez-vous à votre serveur en tant qu'utilisateur non root pour commencer.

[.note] #Note: Une fois que vous avez terminé les étapes d'implémentation pour MTA-STS et TLSRPT, vous devrez peut-être attendre jusqu'à 24 heures pour recevoir votre premier rapport TLS. En effet, la plupart des fournisseurs de messagerie envoient des rapports une fois par jour. Vous pouvez reprendre le didacticiel à partir de l'étape 5 une fois que vous avez reçu votre premier rapport.
#

[[step-1 -—- creating-an-mta-sts-policy-file]] == Étape 1 - Création d'un fichier de stratégie MTA-STS

MTA-STS est activé et configuré à l'aide d'un fichier de configuration en texte brut que vous hébergez sur votre site Web. Les serveurs de messagerie pris en charge se connecteront alors automatiquement à votre site Web pour récupérer le fichier, ce qui activera MTA-STS. Dans cette première étape, vous allez comprendre les options disponibles pour ce fichier et choisir celle qui convient le mieux à votre fichier.

Tout d’abord, ouvrez un nouveau fichier texte dans votre répertoire personnel afin d’avoir un endroit où écrire la configuration souhaitée:

nano mta-sts.txt

Nous allons d'abord passer en exemple, puis vous allez écrire votre propre fichier de configuration.

Voici un exemple de fichier de configuration MTA-STS:

Exemple de fichier de configuration MTA-STS

version: STSv1
mode: enforce
mx: mail1.your-domain
mx: mail2.your-domain
max_age: 604800

Cet exemple de fichier de configuration spécifie que tous les e-mails remis àmail1.your-domain etmail2.your-domain par des fournisseurs pris en charge doivent être remis via une connexion TLS valide. Si une connexion TLS valide ne peut pas être établie avec votre serveur de messagerie (par exemple, si le certificat a expiré ou est auto-signé), le courrier électronique ne sera pas remis.

Cela rendra beaucoup plus difficile pour un attaquant d'intercepter et de surveiller votre courrier électronique / de le modifier dans une situation similaire à une attaque interceptée. En effet, si MTA-STS est activé correctement, le courrier électronique ne peut être transmis que sur une connexion TLS valide, ce qui nécessite un certificat TLS valide. Il serait difficile pour un attaquant d’acquérir un tel certificat, car cela nécessite généralement un accès privilégié à votre nom de domaine et / ou site Web.

Comme indiqué dans l'exemple précédent dans cette étape, le fichier de configuration est composé d'un certain nombre de paires clé / valeur:

  • version:

    • Purpose: pour spécifier la version de la spécification MTA-STS à utiliser.

    • Accepted Values: actuellement, la seule valeur acceptée estSTSv1.

    • Example:version: STSv1

  • mode:

    • Purpose: spécifiez dans quel mode MTA-STS doit être activé.

    • Accepted Values:

      • enforce: force tous les e-mails entrants provenant de fournisseurs pris en charge à utiliser un TLS valide.

      • testing: mode de rapport uniquement. le courrier électronique ne sera pas bloqué, mais les rapports TLSRPT sont toujours envoyés.

      • none: désactivez MTA-STS.

    • Example:mode: enforce

  • mx:

    • Purpose: pour spécifier les serveurs de messagerie autorisés à gérer les e-mails pour votre domaine. Cela doit correspondre aux serveurs spécifiés dans vos enregistrementsmx.

    • Accepted Values: nom de domaine complet d'un serveur de messagerie ou d'un hôte générique. Plusieurs valeursmx: doivent être utilisées pour spécifier plusieurs serveurs de messagerie.

    • Example:mx: mail1.your-domain,mx: mail2.your-domain,mx: *.example.org

  • max_age:

    • Purpose: pour spécifier la durée de vie maximale de la stratégie MTA-STS, en secondes.

    • Accepted Values: tout entier positif jusqu'à 31557600.

    • Example:max_age: 604800 (1 semaine)

Vous pouvez également afficher la spécification officielle des paires clé / valeur enSection 3.2 of the MTA-STS RFC.

[.warning] #Warning: L'activation de MTA-STS en modeenforce pourrait entraîner de manière inattendue le fait que certains e-mails ne vous soient pas livrés. Au lieu de cela, il est recommandé d'utilisermode: testing et une valeur demax_age: faible dans un premier temps, afin de s'assurer que tout fonctionne correctement avant d'activer complètement MTA-STS.
#

En utilisant le fichier exemple plus tôt dans l'étape, ainsi que les exemples précédents de paire clé / valeur, écrivez le fichier de stratégie souhaité pour MTA-STS et enregistrez-le dans le fichier que vous avez créé au début de l'étape.

Le fichier d'exemple suivant est idéal pour tester MTA-STS, car il ne bloquera pas de manière inattendue les e-mails et a unmax_age de seulement 1 jour, ce qui signifie que si vous décidez de le désactiver, la configuration expirera rapidement. Notez que certains fournisseurs de messagerie n'enverront des rapports TLSRPT que si lemax_age est supérieur à 1 jour, c'est pourquoi 86401 secondes est un bon choix (1 jour et 1 seconde).

Exemple de test du fichier de configuration MTA-STS

version: STSv1
mode: testing
mx: mail1.your-domain
mx: mail2.your-domain
max_age: 86401

Au cours de cette étape, vous avez créé le fichier de configuration MTA-STS de votre choix et l’avez sauvegardé dans votre région. Dans l'étape suivante, vous allez configurer un serveur Web Apache pour qu'il serve le fichier au format correct.

[[step-2 -—- configuring-apache-to-serve-your-mta-sts-policy-file]] == Étape 2 - Configuration d'Apache pour servir votre fichier de stratégie MTA-STS

Au cours de cette étape, vous allez configurer un hôte virtuel Apache pour qu'il serve votre fichier de configuration MTA-STS, puis ajouter un enregistrement DNS pour permettre l'accès au site à partir d'un sous-domaine.

Pour que votre fichier de configuration MTA-STS soit automatiquement découvert par les serveurs de messagerie, il doit être servi exactement au bon chemin:https://mta-sts.your-domain/.well-known/mta-sts.txt. Vous devez utiliser le sous-domainemta-sts sur HTTPS et le chemin/.well-known/mta-sts.txt, sinon votre configuration ne fonctionnera pas.

Cela peut être réalisé en créant un nouvel hôte virtuel Apache pour le sous-domainemta-sts, qui servira le fichier de stratégie MTA-STS. Cette étape s'appuie sur la configuration de base que vous aurez définie à l'étape préalableHow to Install the Apache Web Server on Ubuntu 18.04.

Tout d’abord, créez un répertoire pour votre hôte virtuel:

sudo mkdir /var/www/mta-sts

Si vous hébergez plusieurs domaines différents sur votre serveur Web, il est recommandé d’utiliser un hôte virtuel MTA-STS différent pour chacun, par exemple/var/www/mta-sts-site1 et/var/www/mta-sts-site2.

Ensuite, vous devez créer le répertoire.well-known, dans lequel votre fichier de configuration MTA-STS sera stocké. .well-known est un répertoire standardisé pour les fichiers «bien connus», tels que les fichiers de validation de certificat TLS,security.txt, etc.

sudo mkdir /var/www/mta-sts/.well-known

Vous pouvez maintenant déplacer le fichier de stratégie MTA-STS que vous avez créé à l'étape 1 dans le répertoire du serveur Web que vous venez de créer:

sudo mv ~/mta-sts.txt /var/www/mta-sts/.well-known/mta-sts.txt

Vous pouvez vérifier que le fichier a été copié correctement si vous le souhaitez:

cat /var/www/mta-sts/.well-known/mta-sts.txt

Cela affichera le contenu du fichier que vous avez créé à l'étape 1.

Pour qu'Apache puisse servir le fichier, vous devez configurer le nouvel hôte virtuel et l'activer. MTA-STS fonctionne uniquement sur HTTPS, vous utiliserez donc exclusivement le port443 (HTTPS), plutôt que d'utiliser également le port80 (HTTP).

Tout d'abord, créez un nouveau fichier de configuration d'hôte virtuel:

sudo nano /etc/apache2/sites-available/mta-sts.conf

Comme avec le répertoire de l'hôte virtuel, si vous hébergez plusieurs domaines différents sur le même serveur Web, il est recommandé d'utiliser un nom d'hôte virtuel différent pour chacun.

Ensuite, copiez l'exemple de configuration suivant dans le fichier et remplissez les variables si nécessaire:

~/etc/apache2/sites-available/mta-sts.conf



    ServerName mta-sts.your-domain
    DocumentRoot /var/www/mta-sts

    ErrorDocument 403 "403 Forbidden - This site is used to specify the MTA-STS policy for this domain, please see '/.well-known/mta-sts.txt'. If you were not expecting to see this, please use https://your-domain instead."

    RewriteEngine On
    RewriteOptions IgnoreInherit
    RewriteRule !^/.well-known/mta-sts.txt - [L,R=403]

    SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
    Include /etc/letsencrypt/options-ssl-apache.conf

Cette configuration créera l'hôte virtuelmta-sts, qui sera servi àmta-sts.your-domain. Il redirigera également toutes les requêtes, sauf celles vers le fichiermta-sts.txt lui-même, vers une page d'erreur403 Forbidden personnalisée, avec une explication conviviale de ce à quoi sert le site du sous-domaine. Cela permet de garantir que les visiteurs qui rencontrent accidentellement votre site MTA-STS ne sont pas confondus par inadvertance.

Actuellement, un certificat TLS auto-signé est utilisé. Ce n’est pas idéal, puisqu’un certificat entièrement valide / de confiance est requis pour que MTA-STS fonctionne correctement. À l'étape 3, vous obtiendrez un certificat TLS à l'aide de Let’s Encrypt.

Ensuite, assurez-vous que les modules Apache requis sont activés:

sudo a2enmod rewrite ssl

Après cela, activez le nouvel hôte virtuel:

sudo a2ensite mta-sts

Ensuite, lancez une vérification de la syntaxe des fichiers de configuration Apache pour vous assurer qu’il n’ya pas d’erreurs inattendues:

sudo apachectl configtest

Lorsque le test réussit sans erreur, vous pouvez redémarrer Apache pour activer complètement le nouvel hôte virtuel:

sudo service apache2 restart

Maintenant que l'hôte virtuel Apache a été configuré et configuré, vous devez créer le ou les enregistrements DNS requis pour lui permettre d'être accessible à l'aide du nom de domaine completmta-sts.your-domain.

La façon dont cela est fait dépend du fournisseur d'hébergement DNS que vous utilisez. Toutefois, si vous utilisez DigitalOcean en tant que fournisseur DNS, accédez simplement à votre projet, puis cliquez sur votre domaine.

Enfin, ajoutez les enregistrements DNS requis pour le sous-domainemta-sts. Si votre Droplet utilise uniquement IPv4, créez un enregistrementA pourmta-sts, pointant versyour-server-ipv4-address. Si vous utilisez également IPv6, créez un enregistrementAAAA pointant versyour-server-ipv6-address.

A screenshot of the DigitalOcean DNS control panel

Au cours de cette étape, vous avez créé et configuré un nouvel hôte virtuel Apache pour votre sous-domaine MTA-STS, puis ajouté les enregistrements DNS requis pour faciliter son accès. À l’étape suivante, vous obtiendrez un certificat de sécurité Let’s Encrypt pour votre sous-domaine MTA-STS.

[[step-3 -—- acquiring-a-let-39-s-encrypt-certificate-for-your-mta-sts-subdomain]] == Étape 3 - Acquisition d'un certificat Let’s Encrypt pour votre sous-domaine MTA-STS

Au cours de cette étape, vous allez acquérir un certificat TLS auprès de Let’s Encrypt, pour permettre à votre sitemta-sts.your-domain d’être diffusé correctement via HTTPS.

Pour ce faire, vous allez utilisercertbot, que vous configurez dans le cadre de l’étape préalableHow To Secure Apache with Let’s Encrypt on Ubuntu 18.04.

Tout d'abord, exécutezcertbot pour émettre un certificat pour votre sous-domainemta-sts en utilisant la méthode de vérification du plugin Apache:

sudo certbot --apache -d mta-sts.your-domain

Cela émettra automatiquement un certificat approuvé et l'installera sur votre serveur Web Apache. Lorsque l'assistant Certbot vous demande de configurer une redirection HTTP → HTTPS, sélectionnez «Non», car cela n'est pas nécessaire pour MTA-STS.

Pour terminer, testez votre nouvel hôte virtuel pour vous assurer qu'il fonctionne correctement. Utilisez un navigateur Web pour visiterhttps://mta-sts.your-domain/.well-known/mta-sts.txt, ou utilisez un outil de ligne de commande tel quecurl:

curl https://mta-sts.your-domain/.well-known/mta-sts.txt

Le fichier de stratégie MTA-STS que vous avez créé à l’étape 1 sera généré:

Outputversion: STSv1
mode: testing
mx: mail1.your-domain
mx: mail2.your-domain
max_age: 86401

Si une erreur se produit, assurez-vous que la configuration de l'hôte virtuel de l'étape 2 est correcte et que vous avez ajouté un enregistrement DNS pour le sous-domainemta-sts.

Au cours de cette étape, vous avez émis un certificat Let’s Encrypt TLS pour votre sous-domainemta-sts et vous avez vérifié qu’il fonctionnait. Ensuite, vous allez configurer certains enregistrements TXT DNS pour activer complètement MTA-STS et TLSRPT.

[[step-4 -—- configuration-the-dns-records-required-to-enable-mta-sts-and-tlsrpt]] == Étape 4 - Configuration des enregistrements DNS requis pour activer MTA-STS et TLSRPT

Au cours de cette étape, vous allez configurer deux enregistrements TXT DNS, ce qui activera entièrement la stratégie MTA-STS que vous avez déjà créée et activera également la génération de rapports TLS (TLSRPT).

Ces enregistrements DNS peuvent être configurés à l'aide de n'importe quel fournisseur d'hébergement DNS, mais dans cet exemple, DigitalOcean est utilisé en tant que fournisseur.

Tout d’abord, connectez-vous à votre panneau de configuration DigitalOcean et accédez à votre projet, puis cliquez sur votre domaine.

Vous devez ensuite ajouter les deux enregistrements TXT suivants:

_mta-sts.your-domain IN TXT "v=STSv1; id=id-value"
_smtp._tls.your-domain IN TXT "v=TLSRPTv1; rua=reporting-address"

id-value est une chaîne utilisée pour identifier la version de votre stratégie MTA-STS en place. Si vous mettez à jour votre politique, vous devrez également mettre à jour la valeur deid pour vous assurer que la nouvelle version est détectée par les fournisseurs de messagerie. Il est recommandé d'utiliser l'horodateur actuel commeid, par exemple20190811231231 (23:12:31 le 11 août 2019).

reporting-address est l'adresse à laquelle vos rapports TLS seront envoyés. Il peut s'agir d'une adresse e-mail avec le préfixemailto: ou d'un URI Web, par exemple pour une API qui collecte des rapports. Il n'est pas nécessaire que l'adresse de rapport soit une adresse suryour-domain. Vous pouvez utiliser un domaine complètement différent si vous le souhaitez.

Par exemple, les deux exemples d'enregistrements suivants sont tous les deux valides:

_mta-sts.your-domain IN TXT "v=STSv1; id=20190811231231"
_smtp._tls.your-domain IN TXT "v=TLSRPTv1; rua=mailto:tls-reports@your-domain"

Ajustez les variables selon vos besoins, puis définissez ces enregistrements DNS TXT dans votre panneau de configuration de DigitalOcean (ou le fournisseur DNS que vous utilisez):

A screenshot of the DigitalOcean control panel

A screenshot of the DigitalOcean control panel

Une fois que ces enregistrements DNS ont été définis et propagés, MTA-STS sera activé avec la stratégie créée à l'étape 1 et commencera à recevoir des rapports TLSRPT à l'adresse que vous avez spécifiée.

Au cours de cette étape, vous avez configuré les enregistrements DNS requis pour que MTA-STS soit activé. Ensuite, vous recevrez et interpréterez votre premier rapport TLSRPT.

[[step-5 -—- interpreting-your-first-tlsrpt-report]] == Étape 5 - Interprétation de votre premier rapport TLSRPT

Maintenant que vous avez activé MTA-STS et TLSRPT (Reporting TLS) pour votre domaine, vous allez commencer à recevoir des rapports des fournisseurs de messagerie pris en charge. Ces rapports indiqueront le nombre de courriels qui ont été ou n'ont pas été livrés avec succès sur TLS, ainsi que les raisons des erreurs éventuelles.

Différents fournisseurs de messagerie envoient leurs rapports à des moments différents. Par exemple, Google Mail envoie leurs rapports tous les jours vers 10h00 UTC.

Selon la manière dont vous avez configuré l'enregistrement DNS TLSRPT à l'étape 5, vous recevrez vos rapports par courrier électronique ou via une API Web. Ce tutoriel se concentre sur la méthode de messagerie, car il s’agit de la configuration la plus courante.

Si vous venez de terminer le reste de ce didacticiel, attendez que vous receviez votre premier rapport pour pouvoir le reprendre.

Votre rapport quotidien TLSRPT par courrier électronique aura généralement une ligne d'objet semblable à celle-ci:

Report Domain: your-domain Submitter: google.com Report-ID: <[email protected]>

Cet e-mail aura une pièce jointe au format.gz, qui est une archive compressée Gzip, avec un nom de fichier similaire au suivant:

google.com!your-domain!1565222400!1565308799!001.json.gz

Pour le reste de ce didacticiel, ce fichier sera appeléreport.json.gz.

Enregistrez ce fichier sur votre ordinateur local et extrayez-le à l'aide de l'outil de votre choix.

Si vous utilisez un système Linux basé sur Debian, vous pourrez exécuter la commandegzip -d pour décompresser l'archive:

gzip -d report.json.gz

Cela se traduira par un fichier JSON appeléreport.json.

Ensuite, vous pouvez afficher le rapport directement sous forme de chaîne JSON brute ou utiliser votre préimprimeur JSON préféré pour le placer dans un format plus lisible. Dans cet exemple,jq sera utilisé, mais vous pouvez également utiliser lesjson.tool de Python si vous le souhaitez.

[.note] #Note: Si vous n’avez pas installé jq, vous pouvez l’installer en utilisantapt install jq. Ou, pour d'autres systèmes d'exploitation, utilisez lesinstallation instructions nécessaires de jq.
#

jq . report.json

Cela produira quelque chose de similaire à ce qui suit:

Prettified report.json{
    "organization-name": "Google Inc.",
    "date-range": {
        "start-datetime": "2019-08-10T00:00:00Z",
        "end-datetime": "2019-08-10T23:59:59Z"
    },
    "contact-info": "[email protected]",
    "report-id": "2019-08-10T00:00:00Z_your-domain",
    "policies": [
        {
            "policy": {
                "policy-type": "sts",
                "policy-string": [
                    "version: STSv1",
                    "mode: testing",
                    "mx: mail1.your-domain",
                    "mx: mail2.your-domain",
                    "max_age: 86401"
                ],
                "policy-domain": "your-domain"
            },
            "summary": {
                "total-successful-session-count": 230,
                "total-failure-session-count": 0
            }
        }
    ]
}

Le rapport indique le fournisseur qui a généré le rapport et la période de rapport, ainsi que la stratégie MTA-STS qui a été appliquée. Cependant, la section principale qui vous intéressera estsummary, en particulier le nombre de sessions réussies et échouées.

Cet exemple de rapport indique que 230 e-mails ont été correctement envoyés via TLS par le fournisseur de messagerie qui a généré le rapport et que 0 envois d'e-mails n'ont pas réussi à établir une connexion TLS correcte.

En cas d'échec (par exemple, si un certificat TLS expire ou s'il y a un attaquant sur le réseau), le mode d'échec sera documenté dans le rapport. Voici quelques exemples de modes de défaillance:

  • starttls-not-supported: si le serveur de messagerie de réception ne prend pas en charge STARTTLS.

  • certificate-expired: si un certificat a expiré.

  • certificate-not-trusted: si un certificat auto-signé ou non approuvé est utilisé.

Dans cette dernière étape, vous avez reçu et ensuite interprété votre premier rapport TLSRPT.

Conclusion

Dans cet article, vous avez configuré et configuré les rapports MTA-STS et TLS pour votre domaine et interprété votre premier rapport TLSRPT.

Une fois que MTA-STS a été activé et fonctionne de manière stable pendant un certain temps, il est recommandé d'ajuster la stratégie, en augmentant la valeur demax_age, et éventuellement en le basculant en modeenforce une fois que vous êtes sûr que tous les e-mails de les fournisseurs pris en charge sont livrés avec succès via TLS.

Enfin, si vous souhaitez en savoir plus sur les spécifications MTA-STS et TLSRPT, vous pouvez consulter les RFC pour les deux:

Related