직접 이메일 서버 운영은 메일링 리스트, 뉴스레터, 이메일 인증 API 등의 자동화 작업에 유용함 기본적으로 포트 25를 개방하고, Postfix와 OpenDKIM만 설치 및 설정하면 기본 SMTP 서버 구성 가능함 SSL 인증서는 SMTP 서버와의 데이터 전송을 암호화하기 위해 필요함 DKIM은 메일이 진짜 본인 도메인에서 온 것임을 증명해 메일 신뢰도 확보에 이용 PTR 레코드(역방향 DNS) 는 메일 서버 신뢰도를 높여 대형 서비스(Gmail 등)에 메일이 차단되지 않을 확률을 높임 sendmail 명령으로 Gmail로 테스트 메일(HTML 메시지) 발송 다음 글에서는 Python으로 이메일 응용 프로그램 만드는 방법 소개 예정
개요
그러나 가장 큰 현실적 과제는 메일 전송 신뢰도로, 제대로 메일이 도착하지 않거나 수신에 실패할 수 있는 위험이 존재함
운영자는 이러한 리스크를 받아들이는 조건에서 개인 프로젝트에 이 방식을 적용하고 있음
직접 운영의 장점은 거의 추가 비용이 들지 않는다는 점인데, 기존 웹사이트에 소프트웨어만 설치하면 되고, 저장공간이나 에너지 소모도 매우 적음
이메일 서버 운영이 너무 어렵다고 생각했지만, 실제로 SaaS형 이메일 서비스 구성과 난이도가 크게 다르지 않음
설정 편의와 단순화를 위해 웹메일, 멀티유저 환경은 우선 생략하여 사용자 계정, 데이터베이스, 웹 인터페이스 구성이 필요없게 만듦
이번 설정에서는 단일 계정 운영에 적합하고, 필요시 SSH 및 mailx, sendmail, mutt 등을 통해 메일 송수신 가능함
향후 필요에 따라 확장 및 웹메일 추가도 고려할 수 있음Postfix
대부분의 메일 서비스(Gmail 등)에 메일을 안정적으로 전달하려면 OpenDKIM(메일 인증)이 필요함
운영자는 master.cf는 기본값을 그대로 두었고, 메인 설정(main.cf) 예시에서는 TLS 암호화, DKIM 연동 등 핵심 설정만 나타남
POP3/IMAP은 설정하지 않고, 필요시 SSH로 직접 서버에 접속해 mailx 등 명령어로 메일 송수신 가능하도록 단순화함TLS(전송 암호화)
여러 도메인마다 인증서를 발급할 필요 없이, 메일 서버가 위치한 단일 호스트(MX 레코드용)만 인증서 있으면 충분함
예를 들어, MX 레코드가 mx.example.com이면, 해당 도메인에만 Let’s Encrypt에서 무료 인증서를 받아 적용하면 됨
TLS는 서버 간 송수신 구간만 암호화하며, 실제 송신 도메인명 인증과는 별개임
따라서 이메일 주소의 From 헤더에는 원하는 값을 자유롭게 설정 가능함DKIM, SPF, DMARC
OpenDKIM으로 각 도메인별 키 쌍을 만들고, 공개키를 DNS TXT 레코드로 등록함
키는 자동 만료되지 않으나, 주기적 교체 권장
SPF, DMARC TXT 레코드도 DNS에 추가해, 어떤 호스트가 메일 발송 가능한지 및 DMARC 정책(예: 인증 실패시 거부) 설정
예시 설정 파일(opendkim.conf, KeyTable, SigningTable, TrustedHosts)에서 각 항목 설정법 명확히 확인 가능
DNS에는 MX, SPF, DKIM, DMARC 관련 레코드만 추가하면 됨역방향 DNS(PTR)
ISP에 연락해 메일 서버용 PTR 레코드 설정 요청 필요
실제 배포 환경에서는 PTR 레코드가 없어도 Gmail, GMX, Outlook 등에서 정상적으로 수신되었고, mail-tester.com에서 10/10 점수를 받음
PTR 미설정으로 감점 요인이 있었지만 "trusted relay"로 가산점 획득
블랙리스트에도 등록되지 않아 송신 IP 신뢰도도 양호함Gmail 전송 테스트
Gmail에서 즉시 메일이 도착하고, TLS 암호화 확인됨
"Show original"로 원본 메일 보면 SPF, DKIM, DMARC 인증 통과
mailx를 이용해 로컬(서버)에서 메일 수신 내용 확인 가능
설정 문제가 있으면 DNS, 인증서, DKIM 키 접근 권한 등을 재확인 필요, 특히 OpenDKIM의 설정 파일은 오타에 예민다음 단계
문의나 의견이 있다면 max@idx.cy로 연락 가능

1 month ago
12








![닷컴 버블의 교훈[김학균의 투자레슨]](https://www.edaily.co.kr/profile_edaily_512.png)
English (US) ·