Powrót do strony głównej

Postfix DKIM Docker: konfiguracja serwera send-only

Przewodnik po wdrożeniu send-only Postfix z DKIM w kontenerze Docker na Ubuntu 22.04. Obejmuje instalację Docker, Certbot, rekordy DNS SPF/DKIM, rDNS i testowanie dostarczalności. Nadaje się dla deweloperów middle/senior.

Docker Postfix z DKIM: pełny przewodnik dla deweloperów
Advertisement 728x90

# Wdrożenie Postfixa tylko do wysyłania z DKIM w Dockerze na Ubuntu

Na Ubuntu 22.04 z 1 GB RAM i 1 vCPU uruchamiany jest kontener boky/postfix z OpenDKIM i TLS. Serwer wysyła maile tylko z autoryzacją lub z localhost na port 587. Automatyczna generacja kluczy DKIM, montowanie certyfikatów Let's Encrypt. Wymagania: domena w Cloudflare, VPS z otwartym portem 25 u hostera.

Przygotowanie serwera

Zaktualizuj pakiety:

apt update && apt upgrade -y

Usuń stare pakiety 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

Zainstaluj oficjalny Docker:

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

Zainstaluj Certbot:

apt install certbot

Dodaj rekord A w Cloudflare: mail → IP VPS, proxying wyłączone. Wyemituj certyfikat:

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

Utwórz hook do restartu kontenera przy odnowieniu:

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

Zawartość:

#!/bin/bash
docker restart postfix

Nadaj prawa wykonywalne: chmod +x /etc/letsencrypt/renewal-hooks/post/restart-postfix.sh.

Google AdInline article slot

Tworzenie użytkownika i docker-compose

Utwórz użytkownika bez uprawnień administratora:

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

Utwórz 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"

Uruchom: docker compose up -d. Po wygenerowaniu kluczy usuń DKIM_AUTOGENERATE.

Konfiguracja DNS

W folderze ./dkim znajdź plik .txt z kluczem publicznym. Wyodrębnij ciąg w formie:

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

(połącz części klucza bez nawiasów/cytatów). Dodaj TXT w Cloudflare:

  • Name: mail._domainkey
  • Content: ciąg klucza

Rekord SPF dla domeny:

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

rDNS i port 25

Skontaktuj się z hostingiem:

  • Otwórz wychodzący port 25.
  • Skonfiguruj rDNS dla mail.yourdomain.com → IP VPS.

Testowanie

Sprawdź na mail-tester.com lub appmaildev.com. Wejdź do kontenera:

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

Oczekiwany wynik: 10/10 na testerach, maile w skrzynce odbiorczej Gmail.

  • DKIM: automatyczna generacja kluczy 2048-bitowych.
  • SPF: ograniczenie wysyłki po IP.
  • TLS: Let's Encrypt z autoaktualizacją.
  • Auth: SMTP_USER do relay.

Co ważne

  • Kontener boky/postfix zawiera Postfix + OpenDKIM od razu po wyjęciu z pudełka.
  • Montuj wolumeny dla kluczy i certów z :ro dla bezpieczeństwa.
  • RELAY_NETWORKS=127.0.0.1/32 blokuje zewnętrzne wysyłki bez autoryzacji.
  • Po generacji DKIM wyłącz AUTOGENERATE.
  • rDNS jest kluczowe dla dostarczalności u dużych dostawców.

— Editorial Team

Advertisement 728x90

Czytaj dalej