2026년 1월 30일 금요일

[Linux] Postfix에 PostScreen 설정

 

1단계: master.cf 수정 (서비스 활성화)

/etc/postfix/master.cf 파일을 열어 기존의 smtp 서비스를 비활성화하고, postscreen을 활성화해야 합니다.

  1. 기존 smtp 주석 처리:
    기존에 25번 포트를 열고 있던 줄을 찾아 앞에 #을 붙여 비활성화합니다.

    #smtp      inet  n       -       y       -       -       smtpd
  2. 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단계: 적용 및 확인

  1. 설정 검사:
    오타가 없는지 확인합니다.

    postfix check
  2. Postfix 재시작:

    service postfix reload
    # 또는
    systemctl reload postfix
  3. 로그 확인:
    /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 ...).

팁 (주의사항)

  • 초기 적용 시: 처음에는 action 값들을 enforce 대신 **ignore**로 설정하여 며칠간 로그만 모니터링하는 것이 좋습니다. 정상적인 메일 서버가 차단되는지 확인한 후 enforce로 바꾸는 것이 안전합니다.
  • DNSBL 사용: zen.spamhaus.org는 매우 강력하지만, 무료 사용량 제한이 있거나 특정 DNS 서버(Google 8.8.8.8 등)를 통해 조회하면 차단될 수 있습니다. 본인의 환경에 맞는 DNSBL을 사용하세요.

댓글 없음:

댓글 쓰기

참고: 블로그의 회원만 댓글을 작성할 수 있습니다.