MTA는 "우체국 간 트럭 운송", MDA는 "집배원이 우편함에 넣는 일", MUA는 "사람이 편지를 쓰고 읽는 일"이다. MTA끼리는 SMTP로 대화하고, MDA가 사서함에 넣은 뒤, MUA는 POP3/IMAP으로 그 사서함을 들여다본다. 이 분업이 메일 구조의 뼈대다.
핵심 구분: MTA와 MDA는 단계가 다르다. MTA는 서버에서 서버로 메일을 옮기는 전송 단계이고, MDA는 그 메일을 로컬 사용자 사서함에 떨어뜨리는 최종 배달 단계다. SMTP는 MTA의 언어, POP3/IMAP은 사서함을 읽는 MUA의 언어다.
25는 MTA 간 릴레이 표준, 587은 사용자가 메일을 "제출(submission)"하는 인증 포트
⚠️ 함정: 465와 587을 헷갈리는 문제가 있다. 465는 처음부터 SSL로 감싸는 SMTPS, 587은 평문으로 시작해 STARTTLS로 암호화하는 메일 제출(submission) 포트다. 또 "수신 = 110/143, 발송 = 25"라는 방향을 뒤집은 보기는 오답이다. POP3에 25를 붙인 보기도 마찬가지다.
핵심 구분: POP3 vs IMAP — POP3는 메일을 클라이언트로 다운로드하고 서버에서 삭제(기본)하므로 한 기기에서만 쓸 때 적합하다. IMAP은 메일을 서버에 그대로 두고 동기화하므로 여러 기기에서 같은 사서함을 보는 데 적합하다. "여러 기기 동기화 = IMAP"이 정답 신호다.
# 메일 관련 포트가 LISTEN 중인지 확인ss -tlnp | grep -E ':(25|110|143|465|587|993|995)'# /etc/services에서 표준 포트 정의 확인grep -E '^(smtp|pop3|imap|submission|imaps|pop3s)\b' /etc/services# 로컬 메일 전송 테스트 (telnet으로 SMTP 대화)telnet localhost 25# 응답: 220 mail.example.com ESMTP Postfix
SMTP가 25번 포트인 이유는 1982년 RFC 821 시절 지정된 역사적 번호다. 이후 ISP들이 스팸 차단을 위해 25번 외부 발신을 막으면서, 인증된 사용자 메일 제출용으로 587(RFC 4409)이 분리되었다. 그래서 오늘날 "메일은 보내지는데 받기만 된다"는 장애의 상당수가 25번 차단이 원인이다.
Postfix가 Sendmail을 대체한 이유는 "하나의 거대 프로세스"가 보안의 약점이었기 때문이다. Postfix는 수신·큐·배달을 각각 다른 권한의 작은 프로세스로 쪼개, 한 부분이 뚫려도 전체로 번지지 않게 설계했다. "보안·모듈형 = Postfix"가 핵심이다.
# /etc/postfix/main.cf — 핵심 설정 항목myhostname = mail.example.com # 이 서버의 호스트명mydomain = example.com # 도메인명myorigin = $mydomain # 발신 메일의 도메인(보내는 주소 보정)inet_interfaces = all # 수신 대기 인터페이스(all=모든 NIC)mydestination = $myhostname, localhost, $mydomain # 로컬 배달로 처리할 도메인mynetworks = 127.0.0.0/8, 192.168.0.0/24 # 릴레이 허용 신뢰 네트워크relayhost = [smtp.isp.com]:587 # 외부 발신을 거치는 중계 서버home_mailbox = Maildir/ # 사서함 형식(Maildir/ vs mbox)
설정을 바꾼 뒤에는 반드시 다시 읽혀야 한다.
postconf -n # 기본값과 다른 설정만 출력(점검용)postfix check # 설정 문법 검사systemctl reload postfix # 무중단 설정 재적용newaliases # /etc/aliases 변경 후 DB 재생성
⚠️ 함정: inet_interfaces를 localhost로 두면 외부에서 메일을 못 받는다. 또 mynetworks 범위를 너무 넓게(예: 0.0.0.0/0) 열면 누구나 이 서버로 메일을 중계하는 오픈 릴레이가 되어 스팸 발송지로 악용된다. "받기 안 됨 = inet_interfaces, 오픈 릴레이 위험 = mynetworks"로 짝지어진다.
핵심 구분: 사서함 저장 방식 mbox vs Maildir — mbox는 한 파일에 모든 메일을 이어 붙여 잠금 충돌이 잦고, Maildir는 메일 한 통을 파일 하나로 디렉터리에 저장해 동시 접근에 안전하다. home_mailbox = Maildir/처럼 슬래시(/)로 끝나면 Maildir 형식이라는 신호다.
# /etc/aliases — 수신 주소 재지정(별칭)root: admin@example.com # root로 온 메일을 admin에게 전달webmaster: root # 다단계 별칭도 가능# 수정 후 반드시newaliases# 메일 큐 확인·처리mailq # 대기 중인 메일 큐 조회 (postqueue -p와 동일)postqueue -f # 큐 즉시 플러시(재전송 시도)postsuper -d ALL # 큐의 모든 메일 삭제
메일이 즉시 안 가고 큐에 쌓이는 일은 흔하다. 수신 서버 일시 다운, DNS MX 조회 실패, 그레이리스팅 등으로 MTA는 메일을 버리지 않고 큐에 두고 주기적으로 재시도한다. 그래서 "메일이 지연된다"는 신고가 오면 가장 먼저 mailq로 큐 상태를 본다. 이것이 메일 관리자의 첫 진단 명령이다.