홈으로 돌아가기

Postfix DKIM Docker: 발송 전용 서버 설정

Ubuntu 22.04에서 Docker 컨테이너로 발송 전용 Postfix와 DKIM 배포 가이드. Docker 설치, Certbot, SPF/DKIM DNS 레코드, rDNS 및 전달 가능성 테스트 포함. 중급/시니어 개발자 적합.

개발자를 위한 Docker Postfix DKIM: 완전 가이드
Advertisement 728x90

## Ubuntu에서 Docker로 DKIM을 사용한 송신 전용 Postfix 배포

이 가이드는 Ubuntu 22.04(1 GB RAM, 1 vCPU)에서 OpenDKIM과 TLS를 포함한 boky/postfix Docker 컨테이너를 배포합니다. 서버는 인증된 세션 또는 로컬호스트의 587 포트에서만 메일을 보냅니다. 자동 DKIM 키 생성과 Let's Encrypt 인증서 마운트를 지원합니다. 사전 요구사항: Cloudflare에서 관리하는 도메인과 호스팅 업체에서 아웃바운드 25 포트가 허용된 VPS입니다.

서버 준비

패키지 업데이트:

apt update && apt upgrade -y

기존 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

공식 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

Certbot 설치:

apt install certbot

Cloudflare에 A 레코드 추가: mail → VPS IP (프록시 비활성화). 인증서 발급:

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

컨테이너 재시작을 위한 갱신 훅 생성:

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

내용:

#!/bin/bash
docker restart postfix

실행 가능하게 설정: chmod +x /etc/letsencrypt/renewal-hooks/post/restart-postfix.sh.

Google AdInline article slot

사용자 생성 및 docker-compose

권한이 없는 사용자 생성:

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

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"

실행: docker compose up -d. 키 생성 후 DKIM_AUTOGENERATE 제거.

DNS 설정

./dkim 디렉토리에서 공개 키가 포함된 .txt 파일을 찾으세요. 다음과 같은 줄을 추출하세요:

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

(괄호나 따옴표 없이 키 부분을 연결). Cloudflare에 TXT 레코드 추가:

  • Name: mail._domainkey
  • Content: 키 문자열

도메인에 대한 SPF 레코드:

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

rDNS 및 25 포트

호스팅 업체에 문의:

  • 아웃바운드 25 포트 열기.
  • mail.yourdomain.com에 대한 rDNS를 VPS IP로 설정.

테스트

mail-tester.com 또는 appmaildev.com에서 테스트하세요. 컨테이너에 접속:

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

예상 결과: 테스터에서 10/10 점수, Gmail 받은편지함에 도착.

  • DKIM: 2048비트 키 자동 생성.
  • SPF: IP로 송신 제한.
  • TLS: Let's Encrypt 자동 갱신.
  • Auth: 중계용 SMTP_USER.

주요 사항

  • boky/postfix 컨테이너는 Postfix + OpenDKIM을 기본 포함.
  • 보안을 위해 키와 인증서 볼륨을 :ro로 마운트.
  • RELAY_NETWORKS=127.0.0.1/32로 인증되지 않은 외부 송신 차단.
  • DKIM 생성 후 AUTOGENERATE 비활성화.
  • 주요 제공업체 배송을 위해 rDNS 필수.

— Editorial Team

Advertisement 728x90

다음 읽기