Ubuntu24.04에서 Postfix,OpenDKIM,Dovecot 연동

Linux와 Ai

그동안 Ai를 이용해 vmware에 우분투2404를 설치하고
1개서버에 8개도메인 가상계정 세팅을 완료하고
Outlook,Thunderbird,Nine mail,roundcube에서
구글,마소,네이버 모두 dkim,spf,dmarc=pass,
ptr=ok, Let's Encrypt인증서90일 자동갱신 까지 완료하고,
보안은 ssh key로그인(패스워드 필요)
패스워드 로그인 차단, root로그인 차단
fail2ban설치 후 jail세팅 완료.
그리고 hugo로 블로그세팅 운영 까지 ai의 도움을 받았습니다.
그동안 느낀 점은
ai는 신기술 구기술을 망라한 모든 답을 나열한다는 것입니다.
결국 사용자가 원하는 답을 얻기 위해서는
나의 환경을 ai에게 인지시키고 문맥을 유지시키고
질문의 범위를 최대한 좁혀야
원하는 답을 얻을 수 있다는 것입니다.
ChatGPT와 Gemini(둘다 무료버전 사용) 둘을 상호검증 해가며 진행 했습니다.
중급 이상의 엔지니어들은
보다 쉽게 ai로부터 답을 얻을 수 있겠죠.
제 글은 초보자가 ai와 무한 루프에 빠지는 것을
조금이나마 피할 수 있기를 바라는 마음으로 작성한 것입니다.
초보자 분들께 많은 도움이 되길 바랍니다.

Mail-tester 10점을 위한 조건

SPF 통과
DKIM 통과
DMARC 적용
PTR 설정 완료
HELO = PTR 동일
TLS 적용
서버 IP 블랙리스트 제거

Ubuntu24.04,Postfix,OpenDKIM,Dovecot

Ubuntu 24.04는 보안 정책이 강화되면서
Postfix, OpenDKIM 소켓 권한 문제가 자주 발생합니다.
이 가이드는 다음을 목표로 합니다

  • DKIM 정상 서명
  • Mail-tester 10점
  • Gmail / Outlook 정상 수신
  • SPF / DMARC 완전 적용
  • PTR + HELO 일치
  • Dovecot SASL 인증
  • TLS 보안 강화

패키지 설치

sudo apt update
sudo apt install postfix dovecot-core dovecot-imapd opendkim opendkim-tools -y

openDKIM 권한 및 소켓 설정 (Ubuntu 24.04 핵심)

Postfix는 기본적으로 chroot 환경에서 동작합니다.
따라서 소켓을 /var/spool/postfix/ 아래에 생성해야 합니다.
sudo mkdir -p /var/spool/postfix/opendkim
sudo mkdir -p /etc/opendkim/keys
sudo gpasswd -a postfix opendkim
sudo chown -R opendkim:postfix /var/spool/postfix/opendkim
sudo chmod 750 /var/spool/postfix/opendkim
이 단계 안 하면 Permission denied 발생

openDKIM 설정

sudo nano /etc/opendkim.conf
아래 내용 추가/수정
Syslog yes
UMask 002
UserID opendkim
Socket local:/var/spool/postfix/opendkim/opendkim.sock
Canonicalization relaxed/simple
Mode sv
SubDomains no
KeyTable refile:/etc/opendkim/key.table
SigningTable refile:/etc/opendkim/signing.table
ExternalIgnoreList refile:/etc/opendkim/trusted.hosts
InternalHosts refile:/etc/opendkim/trusted.hosts

DKIM 키 생성(example.com)

sudo opendkim-genkey -b 2048 -d example.com -s mail -D /etc/opendkim/keys/
sudo chown -R opendkim:opendkim /etc/opendkim/keys
sudo chmod 700 /etc/opendkim/keys
sudo chmod 600 /etc/opendkim/keys/mail.private

테이블 등록

KeyTable
echo "mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/mail.private" | sudo tee /etc/opendkim/key.table
SigningTable
echo "*@example.com mail._domainkey.example.com" | sudo tee /etc/opendkim/signing.table
TrustedHosts
echo -e "127.0.0.1\nlocalhost\nexample.com" | sudo tee /etc/opendkim/trusted.hosts

Postfix 필수 설정

sudo postconf -e "myhostname = mail.example.com"
sudo postconf -e "smtp_helo_name = mail.example.com"
sudo postconf -e "smtpd_tls_cert_file = /etc/letsencrypt/live/example.com/fullchain.pem"
sudo postconf -e "smtpd_tls_key_file = /etc/letsencrypt/live/example.com/privkey.pem"
sudo postconf -e "smtpd_sasl_auth_enable = yes"
sudo postconf -e "smtpd_sasl_type = dovecot"
sudo postconf -e "smtpd_sasl_path = private/auth"
sudo postconf -e "smtpd_sasl_security_options = noanonymous"
sudo postconf -e "smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination"
sudo postconf -e "disable_vrfy_command = yes"
sudo postconf -e "smtpd_helo_required = yes"
sudo postconf -e "milter_protocol = 6"
sudo postconf -e "milter_default_action = accept"
sudo postconf -e "smtpd_milters = unix:opendkim/opendkim.sock"
sudo postconf -e "non_smtpd_milters = unix:opendkim/opendkim.sock"

Dovecot SASL 소켓 설정

파일 수정
sudo nano /etc/dovecot/conf.d/10-master.conf
아래 부분 확인/수정
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660m
user = postfix
group = postfix
}
}
재시작
sudo systemctl restart dovecot

SPF / DKIM / DMARC DNS 설정 (10점 필수)

SPF (TXT)
v=spf1 mx ip4:서버IP -all
DKIM
sudo cat /etc/opendkim/keys/mail.txt
mail.txt 파일에 생성된 공개키를
"v= 부터 "끝 까지 복사해서 메모장에 옮긴 후
줄 바꿈을 끄고 p=뒤에 있는 "와 공백을 제거하고
end키로 끝으로 이동 후
delete연타(복붙하는 중에 혹시 모르게 삽입되는 노이즈 문자 제거)
home키로 맨 앞으로 이동 후
backspace연타(복붙하는 중에 혹시 모르게 삽입되는 노이즈 문자 제거)후에
DNS TXT 레코드에 그대로 추가 합니다.
mail._domainkey.example.com
값 = 공개키
DMARC (TXT 레코드)추가
_dmarc.example.com
값 = v=DMARC1; p=quarantine; adkim=s; aspf=s; rua=mailto:postmaster@example.com;
p=none 쓰면 10점 거의 안 나옵니다.

PTR (Reverse DNS) 설정

PTR은 고정IP인 경우에만 해당 됩니다.
유동IP인 경우 A 레코드만 세팅하시면 됩니다.
DNS 관리자 페이지에서
정방향
mail.example.com → 서버IP(A 레코드)
역방향
서버IP → mail.example.com(PTR-고정아이피 임대업체에 요청)
( Gmail,Outlook 매우 중요하게 봄 )
서비스 재시작
sudo systemctl restart opendkim
sudo systemctl restart postfix

검증 방법

DKIM 확인
sudo opendkim-testkey -d example.com -s mail -vvv
key OK 확인
DNS 확인
dig +short TXT mail._domainkey.example.com

로그 실시간 확인

journalctl -u opendkim -f
journalctl -u postfix -f

Ubuntu 24.04에서 가장 많이 발생하는 오류

Permission denied (DKIM)
원인은
postfix가 opendkim 그룹에 없음
소켓 경로를 절대경로로 설정
해결
sudo gpasswd -a postfix opendkim
Socket local:/var/spool/postfix/opendkim/opendkim.sock