Zurück zur Startseite

Postfix DKIM Docker: Einrichtung eines send-only Servers

Anleitung zur Bereitstellung eines send-only Postfix mit DKIM in einem Docker-Container auf Ubuntu 22.04. Umfasst Docker-Installation, Certbot, SPF/DKIM-DNS-Einträge, rDNS und Zustellbarkeitstests. Geeignet für Middle-/Senior-Entwickler.

Docker Postfix mit DKIM: vollständige Anleitung für Entwickler
Advertisement 728x90

Send-Only Postfix mit DKIM in Docker auf Ubuntu bereitstellen

Diese Anleitung stellt den boky/postfix Docker-Container mit OpenDKIM und TLS auf Ubuntu 22.04 bereit (1 GB RAM, 1 vCPU). Der Server sendet E-Mails ausschließlich über authentifizierte Sitzungen oder von localhost auf Port 587. Er unterstützt automatische DKIM-Schlüsselgenerierung und mountet Let's Encrypt-Zertifikate. Voraussetzungen: Eine in Cloudflare verwaltete Domain und ein VPS, bei dem der Hoster den ausgehenden Port 25 freigegeben hat.

Servervorbereitung

Pakete aktualisieren:

apt update && apt upgrade -y

Alte Docker-Pakete entfernen:

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

Offizielles Docker installieren:

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

Certbot installieren:

apt install certbot

Einen A-Record in Cloudflare hinzufügen: mail → VPS-IP, mit deaktiviertem Proxying. Zertifikat ausstellen:

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

Einen Renewal-Hook zum Neustarten des Containers erstellen:

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

Inhalt:

#!/bin/bash
docker restart postfix

Ausführbar machen: chmod +x /etc/letsencrypt/renewal-hooks/post/restart-postfix.sh.

Google AdInline article slot

Benutzer und docker-compose erstellen

Einen unprivilegierten Benutzer erstellen:

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

docker-compose.yml erstellen:

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"

Ausführen: docker compose up -d. Nach der Schlüsselgenerierung DKIM_AUTOGENERATE entfernen.

DNS-Konfiguration

Im Verzeichnis ./dkim die .txt-Datei mit dem öffentlichen Schlüssel finden. Die Zeile wie folgt extrahieren:

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

(Schlüssel-Teile ohne Klammern/Anführungszeichen zusammenfügen). TXT-Record in Cloudflare hinzufügen:

  • Name: mail._domainkey
  • Inhalt: Schlüssel-String

SPF-Record für die Domain:

  • Name: yourdomain.com
  • Inhalt: v=spf1 a mx ip4:YOUR_VPS_IP -all

rDNS und Port 25

Den Hoster kontaktieren:

  • Ausgehenden Port 25 freigeben.
  • rDNS für mail.yourdomain.com → VPS-IP einrichten.

Testen

Auf mail-tester.com oder appmaildev.com testen. In den Container einloggen:

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

Erwartetes Ergebnis: 10/10 bei den Testern, E-Mails landen im Gmail-Posteingang.

  • DKIM: Automatische Generierung von 2048-Bit-Schlüsseln.
  • SPF: Beschränkt das Senden auf IP.
  • TLS: Let's Encrypt mit automatischer Verlängerung.
  • Auth: SMTP_USER für Relay.

Wichtige Punkte

  • Der boky/postfix-Container enthält Postfix + OpenDKIM out of the box.
  • Volumes für Schlüssel und Zertifikate mit :ro für Sicherheit mounten.
  • RELAY_NETWORKS=127.0.0.1/32 blockiert unauthentifizierte externe Sends.
  • AUTOGENERATE nach DKIM-Generierung deaktivieren.
  • rDNS ist entscheidend für die Zustellbarkeit bei großen Anbietern.

— Editorial Team

Advertisement 728x90

Weiterlesen