Retour à l'accueil

Postfix DKIM Docker : configuration de serveur d'envoi uniquement

Guide pour déployer Postfix d'envoi uniquement avec DKIM dans un conteneur Docker sur Ubuntu 22.04. Couvre l'installation de Docker, Certbot, enregistrements DNS SPF/DKIM, rDNS et tests de délivrabilité. Convient aux développeurs middle/senior.

Docker Postfix avec DKIM : guide complet pour les développeurs
Advertisement 728x90

Déploiement de Postfix en mode envoi uniquement avec DKIM dans Docker sur Ubuntu

Ce guide déploie le conteneur Docker boky/postfix avec OpenDKIM et TLS sur Ubuntu 22.04 (1 Go RAM, 1 vCPU). Le serveur n'envoie des e-mails que via des sessions authentifiées ou depuis localhost sur le port 587. Il inclut la génération automatique de clés DKIM et monte les certificats Let's Encrypt. Prérequis : un domaine géré dans Cloudflare et un VPS avec le port sortant 25 autorisé par votre hébergeur.

Préparation du serveur

Mettre à jour les paquets :

apt update && apt upgrade -y

Supprimer les anciens paquets Docker :

Google AdInline article slot
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

Installer Docker officiel :

apt update
apt install ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update && apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Installer Certbot :

apt install certbot

Ajouter un enregistrement A dans Cloudflare : mail → IP du VPS, avec le proxying désactivé. Émettre le certificat :

Google AdInline article slot
certbot certonly --standalone -d mail.yourdomain.com

Créer un hook de renouvellement pour redémarrer le conteneur :

nano /etc/letsencrypt/renewal-hooks/post/restart-postfix.sh

Contenu :

#!/bin/bash
docker restart postfix

Le rendre exécutable : chmod +x /etc/letsencrypt/renewal-hooks/post/restart-postfix.sh.

Google AdInline article slot

Création de l'utilisateur et docker-compose

Créer un utilisateur non privilégié :

useradd -m emailuser -G docker -s /bin/bash
passwd emailuser
su emailuser

Créer docker-compose.yml :

services:
  postfix:
    image: boky/postfix
    container_name: postfix
    restart: unless-stopped
    ports:
      - "587:587"
    volumes:
      - ./dkim:/etc/opendkim/keys
      - /etc/letsencrypt/live/mail.yourdomain.com/fullchain.pem:/etc/opendkim/keys/mail.crt:ro
      - /etc/letsencrypt/live/mail.yourdomain.com/privkey.pem:/etc/opendkim/keys/mail.key:ro
    environment:
      HOSTNAME: mail.yourdomain.com
      DOMAIN: yourdomain.com
      DKIM_SELECTOR: mail
      DKIM_DOMAINS: yourdomain.com
      DKIM_KEY_LENGTH: 2048
      ENABLE_DKIM: 1
      ENABLE_TLS: 1
      TLS_KEY: /etc/opendkim/keys/mail.key
      TLS_CERT: /etc/opendkim/keys/mail.crt
      SMTP_USER: [email protected]|password
      RELAY_NETWORKS: 127.0.0.1/32
      FORCE_HELO: 1
      LOG_TO_STDOUT: 1
      ALLOWED_SENDER_DOMAINS: mail.yourdomain.com
      DKIM_AUTOGENERATE: "true"

Lancer : docker compose up -d. Après la génération de la clé, supprimer DKIM_AUTOGENERATE.

Configuration DNS

Dans le répertoire ./dkim, trouver le fichier .txt avec la clé publique. Extraire la ligne comme :

v=DKIM1; h=sha256; k=rsa; s=email; p=MNOGO_SIMVOLOV

(joindre les parties de la clé sans crochets/guillemets). Ajouter un enregistrement TXT dans Cloudflare :

  • Nom : mail._domainkey
  • Contenu : chaîne de la clé

Enregistrement SPF pour le domaine :

  • Nom : yourdomain.com
  • Contenu : v=spf1 a mx ip4:YOUR_VPS_IP -all

rDNS et port 25

Contacter votre hébergeur :

  • Ouvrir le port sortant 25.
  • Définir rDNS pour mail.yourdomain.com → IP du VPS.

Tests

Tester sur mail-tester.com ou appmaildev.com. Entrer dans le conteneur :

docker exec -it postfix bash
echo -e "Subject: DKIM Test\n\nThis is a test message" | sendmail -f [email protected] [email protected]

Résultat attendu : 10/10 sur les testeurs, les e-mails arrivent dans la boîte de réception Gmail.

  • DKIM : génération automatique de clés 2048 bits.
  • SPF : restreint l'envoi par IP.
  • TLS : Let's Encrypt avec renouvellement automatique.
  • Auth : SMTP_USER pour le relais.

Points clés

  • Le conteneur boky/postfix inclut Postfix + OpenDKIM prêt à l'emploi.
  • Monter les volumes pour les clés et certificats avec :ro pour la sécurité.
  • RELAY_NETWORKS=127.0.0.1/32 bloque les envois externes non authentifiés.
  • Désactiver AUTOGENERATE après la génération DKIM.
  • rDNS est critique pour la délivrabilité auprès des grands fournisseurs.

— Editorial Team

Advertisement 728x90

Lire ensuite