1단계: master.cf 수정 (서비스 활성화)
/etc/postfix/master.cf 파일을 열어 기존의 smtp 서비스를 비활성화하고, postscreen을 활성화해야 합니다.
-
기존 smtp 주석 처리:
기존에 25번 포트를 열고 있던 줄을 찾아 앞에#을 붙여 비활성화합니다.#smtp inet n - y - - smtpd -
Postscreen 및 관련 서비스 활성화:
아래 내용의 주석(#)을 해제하거나 새로 추가합니다.- smtp: 이제 Postscreen이 25번 포트를 담당합니다.
- smtpd: Postscreen을 통과한 접속을 처리할 내부 서비스입니다.
- dnsblog: DNS 블랙리스트 조회를 비동기로 처리합니다.
- tlsproxy: Postscreen 단계에서 STARTTLS 지원을 위해 필요합니다.
# Postscreen이 25번 포트 수신 smtp inet n - y - 1 postscreen # Postscreen 검사를 통과한 연결을 넘겨받을 smtpd smtpd pass - - y - - smtpd # DNS 조회 및 TLS 처리를 위한 보조 서비스 dnsblog unix - - y - 0 dnsblog tlsproxy unix - - y - 0 tlsproxy
2단계: main.cf 수정 (정책 설정)
/etc/postfix/main.cf 파일을 열어 Postscreen이 어떤 테스트를 수행하고 어떻게 차단할지 설정합니다.
아래 설정을 파일 하단에 추가합니다.
1. 기본 설정 및 화이트리스트
# === Postscreen 설정 === # 내 네트워크(mynetworks)는 검사에서 제외 (즉시 통과) postscreen_access_list = permit_mynetworks # 캐시 유지 시간 (검증된 IP를 기억하는 시간) postscreen_cache_map = proxymap:btree:$data_directory/postscreen_cache postscreen_cache_cleanup_interval = 12h
2. 좀비 PC 탐지 (Pre-greet, Protocol)
스팸 봇들이 자주 하는 "인사 먼저 하기(Pre-greet)"나 "명령어 쏟아붓기(Pipelining)"를 차단합니다. enforce는 차단을 의미합니다.
# 서버 인삿말(Banner)을 보내기도 전에 떠드는 놈 차단 postscreen_greet_action = enforce # SMTP 프로토콜 위반 검사 (Pipelining, Non-SMTP command 등) postscreen_pipelining_enable = yes postscreen_pipelining_action = enforce postscreen_non_smtp_command_enable = yes postscreen_non_smtp_command_action = drop postscreen_bare_newline_enable = yes postscreen_bare_newline_action = enforce
3. DNSBL (DNS 블랙리스트) 설정 (가장 중요)
접속한 IP가 스팸 리스트에 있는지 확인합니다. 점수제를 사용하여 오탐을 줄입니다.
# DNSBL 사이트 설정 (예시: Zen Spamhaus, Barracuda) # 이름=IP주소*가중치 형식입니다. # 주의: Spamhaus 등은 상업적 이용 시 유료일 수 있으므로 라이선스 확인 필요 postscreen_dnsbl_threshold = 2 postscreen_dnsbl_sites = zen.spamhaus.org*2 b.barracudacentral.org*1 bl.spamcop.net*1 # 블랙리스트에 걸렸을 때 동작 (enforce: 거부 응답 보냄 / drop: 연결 끊음) postscreen_dnsbl_action = enforce
3단계: 적용 및 확인
-
설정 검사:
오타가 없는지 확인합니다.postfix check -
Postfix 재시작:
service postfix reload # 또는 systemctl reload postfix -
로그 확인:
/var/log/mail.log(또는/var/log/maillog)를 실시간으로 확인하여 작동 여부를 봅니다.tail -f /var/log/mail.log- PASS: 검사를 통과하여 smtpd로 넘겨진 경우 (
PASS OLD는 캐시된 IP,PASS NEW는 새로 검증된 IP). - NOQUEUE: Postscreen에 의해 차단된 경우 (예:
protocol violation,DNSBL rank ...).
- PASS: 검사를 통과하여 smtpd로 넘겨진 경우 (
팁 (주의사항)
- 초기 적용 시: 처음에는
action값들을enforce대신 **ignore**로 설정하여 며칠간 로그만 모니터링하는 것이 좋습니다. 정상적인 메일 서버가 차단되는지 확인한 후enforce로 바꾸는 것이 안전합니다. - DNSBL 사용:
zen.spamhaus.org는 매우 강력하지만, 무료 사용량 제한이 있거나 특정 DNS 서버(Google 8.8.8.8 등)를 통해 조회하면 차단될 수 있습니다. 본인의 환경에 맞는 DNSBL을 사용하세요.
