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.

image

Réponses aux questions

  1. 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.
  1. 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 :

ebcb7539-f464-4139-84f3-7d4f8e44f6b5

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

image

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 :

image

  • 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 :

image

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

image

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

image

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 :

image

  • Montrez le score SpamAssassin et commentez-le. Comment l'optimiser?

image

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.

image

  • Validez son fonctionnement via la réception d'un email valide

Email valide :

image

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