TP07 - bpatureau/admin-2-TP GitHub Wiki
TP7 : Sécurisation du service mail
Noms des auteurs : Guillaume Ladrière, Bastien Patureau, Maxime Bongartz Date de réalisation : 7/04/2025
Introduction
Environnement de travail et organisation
Le dns est hébergé sur le vps de Maxime, le www est sur celui de Bastien et le service mail est sur celui de Guillaume.
1. Mise en place du service mail
Etapes principales de configuration
Tout d'abord, on créer une directory dédiée au mail. Ensuite on récupère les fichiers du serveur mail :
(DMS_GITHUB_URL="https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master"
wget "${DMS_GITHUB_URL}/compose.yaml"
wget "${DMS_GITHUB_URL}/mailserver.env").
Voici le configuration du compose.yaml :
services:
mailserver:
image: ghcr.io/docker-mailserver/docker-mailserver:latest
container_name: mailserver
hostname: mail.l1-2.ephec-ti.be
env_file: mailserver.env
ports:
- "25:25" # SMTP (explicit TLS => STARTTLS, Authentication is DISABLED => use port 465/587 instead)
- "143:143" # IMAP4 (explicit TLS => STARTTLS)
- "465:465" # ESMTP (implicit TLS)
- "587:587" # ESMTP (explicit TLS => STARTTLS)
- "993:993" # IMAP4 (implicit TLS)
volumes:
- ./docker-data/dms/mail-data/:/var/mail/
- ./docker-data/dms/mail-state/:/var/mail-state/
- ./docker-data/dms/mail-logs/:/var/log/mail/
- ./docker-data/dms/config/:/tmp/docker-mailserver/
- /etc/localtime:/etc/localtime:ro
- /etc/letsencrypt:/etc/letsencrypt:ro
restart: always
stop_grace_period: 1m
environment:
- SSL_TYPE=letsencrypt
- LETSENCRYPT_DOMAIN=mail.l1-2.ephec-ti.be
healthcheck:
test: "ss --listening --tcp | grep -P 'LISTEN.+:smtp' || exit 1"
timeout: 3s
retries: 0
Ainsi que du mailserver.env.
SSL_TYPE=letsencrypt
ENABLE_SPAMASSASSIN=1
On génère les certificats avec un certbot qui seront dans /etc/letsencrypt
puis on démarre le serveur avec docker compose up
. Enfin on créer les utilisateurs avec la commande docker exec -ti mailserver setup email add [email protected]
. On peut aussi installer thunderbird pour tester la connectivité et analyser les informations des mails.
Réponses aux questions
- Comment sont gérés les utilisateurs? Via les utilisateurs Unix, un fichier, une DB?
- Les utilisateurs sont gérés via des utilisateurs Unix de façon à ce que chaque utilisateur ait une boite mail dédié ainsi qu'un répertoire maildir.
- Quel est le format de mailbox utilisé?
- Le format utilisé est Maildir pour une meilleure compatibilité et gestion.
2. Sécurisation du service mail
2.1. Analyse du chiffrement TLS
Réponses aux questions
- Indiquez et analyser les ports ouverts pour le chiffrement du mail :
Ports utilisés :
- 25 (SMTP) : STARTTLS
- 465 (SMTPS) : TLS implicite
- 587 (Submission) : STARTTLS
- 993 (IMAPS) : TLS implicite
- 143 (IMAP) : STARTTLS
Analyse Wireshark :
Le client (192.168.68.60) initie une connexion vers 54.36.180.122 sur le port 465 (64205 → 465, puis handshake TLS). C’est du TLS implicite, car la session TLS commence immédiatement dès le début de la connexion sans commande STARTTLS. Les deux connexions utilisent le TLS implicite, ce qui est conforme à l'usage sécurisé habituel.
2.2. Authentification du domaine
2.2.1. L'alignement des records MX-PTR-A
Résultat de MXToolbox à cette étape :
- Résolution correcte entre le nom du MX, le record A et le PTR.
- Le nom mail.l1-2.ephec-ti.be est aligné avec l’IP publique via une configuration auprès de l’hébergeur (OVH).
2.2.2. SPF
@ IN TXT "v=spf1 mx ip4:54.36.180.122 -all"
Résultat de MXToolbox à cette étape :
- SPF valide : seuls les mails émis par le MX sont acceptés.
Résultats de l'envoi d'un mail vers une adresse extérieure :
- Le mail passe désormais les filtres anti-spam, car SPF est correctement configuré.
2.2.3. DKIM
Notre configuration :
mail._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; "
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtRWJ0Z18yS7wKxbXyyWpBCbe8mE3jnBNjPAh1kduM9bZFhczPXEqBcelIKpuAV/ZQygXfIlFJeI977pLnk8pXNeIw7irqbyZdooYkOXYkjGiaU8OvI9ZPeoGg8BhXfeeQd5IcqEaTSerMHb/quHF3Ak1HmEnU2JRr+PFOuuD6/mukwUU4qCOyidQYvGQ+0ZaH43a/SoAmuRrWL"
"0QfhDZKeJPVWiWPjp/Jq1Ka9gXH5YTkNokV7Vts85QjsnNN1vcNXZSG6wPVZBG/jbvM7dzeaLFCdU6zawHVNNDu/nkyoXk5KYC8qf/DkCtSj/PZiRIwnDiiRBSqdon2J8UkUXXdwIDAQAB" )
Etapes de mise en place du DKIM
Pour la configuration des clés DKIM, on a dû générer des clés DKIM avec la commande setup config DKIM. Ensuite on a du afficher la clé public pour l'inscrire dans notre zone DNS.
- Validez cette configuration en montrant un en-tête de mail
2.2.4. DMARC
_dmarc.l1-2.ephec-ti.be. IN TXT "v=DMARC1; p=quarantine; adkim=s; aspf=s; rua=mailto:[email protected]; ruf=mailto:[email protected]; sp=quarantine; ri=86400; pct=100; fo=1; rf=afrf"
Nous avons fait le record DMARC avec l'aide d'un site puis nous l'avons ajouté au fichier zone du DNS. Voici les résultats :
- Montrez le score SpamAssassin et commentez-le. Comment l'optimiser?
On peut l'optimiser en ajoutant un p=quarantine ou reject.
2.3. Filtrage du spam
- Documentez brièvement l'activation et la configuration de SpamAssassin.
- Validez son fonctionnement via la réception d'un email valide
Email valide :
+02:00 mail amavis[1036]: (01036-02) Passed CLEAN {RelayedInbound}, [209.85.167.44]:49237 [209.85.167.44] <[email protected]> -> <[email protected]>, Queue-ID: E782E6A887, Message-ID: <CAMtVapOka3grmxSG=8hy8fidBQBA3SKMh2KVxjL6SiCmkw641g@mail.gmail.com>, mail_id: LDO_-EQnv4hN, Hits: -4.664, size: 3611, queued_as: C1B346A88E, 684 ms
Email suspect :
02:00 mail amavis[1035]: (01035-01) Passed SPAM {RelayedTaggedInbound,Quarantined}, [209.85.167.49]:43126 [209.85.167.49] <[email protected]> -> <[email protected]>, quarantine: Z/spam-Z9Sq0kzf46zg.gz, Queue-ID: 806246A887, Message-ID: <CAMyTHa8E48-aTZZhJ45yLnZ483bOndTHO1yGBWz_4H9y3Gx0DQ@mail.gmail.com>, mail_id: Z9Sq0kzf46zg, Hits: 997.682, size: 3646, queued_as: ECA8E6A88E, 1290 ms
2025-04-14T15:29:54.013657+02:00 mail postfix/smtp-amavis/smtp[1951]: 806246A887: to=<[email protected]>, relay=127.0.0.1[127.0.0.1]:10024, delay=1.8, delays=0.48/0.01/0.02/1.3, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as ECA8E6A88E)