## 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 패키지 제거:
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 (프록시 비활성화). 인증서 발급:
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.
사용자 생성 및 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
아직 댓글이 없습니다.