그레이리스팅
그레이리스팅(Greylisting)은 스팸 발송자가 메일 발송을 실패할 경우 다시 시도하지 않는다는 점을 이용해, 의심되는 발송자의 경우 일시적(15분)으로 메일 수신을 거부하고 정상적인 발송자의 재 발송 시도를 수용하게 되는 스팸 방지 기술이다.
기술의 특성에서 알 수 있겠지만, 이미 화이트리스트에 등록되어 있는 발송자가 아니라면 1차적으로는 메일 수신이 되지 않아 메일에 지연이 발생한다.
분명 개인 메일 서버 운영에서 스팸 차단에 매우 효과적인 기술이긴 하지만, 지연 시간이 너무 답답하여 나는 이 기술을 비활성화하기로 마음 먹었다.
방법
Mail-in-a-Box에서는 postfix의 그레이리스팅 데몬 ‘postgrey’를 사용하여 그레이리스팅을 구성한다.
처음에는 postgrey를 비활성화하는 방법을 고민해보았지만 최대한 Mail-in-a-Box의 구성을 수정하지 않는 방법에서 찾은 방법이 바로 Whitelist 파일이 정규식을 지원하는 것을 이용한, 전체 Whitelisting이다.
기존 지연 확인하기
Jun 1 22:41:34 mail postfix/smtpd[5373]: connect from cvsmtppost31.nm.naver.com[114.111.35.166]Jun 1 22:41:34 mail postfix/smtpd[5374]: connect from cvsmtppost35.nm.naver.com[114.111.35.167] Jun 1 22:41:34 mail postfix/smtpd[5373]: warning: restriction `reject_authenticated_sender_login_mismatch' ignored: no SASL supportJun 1 22:41:34 mail postfix/smtpd[5374]: warning: restriction `reject_authenticated_sender_login_mismatch' ignored: no SASL supportJun 1 22:41:34 mail postgrey[849]: action=greylist, reason=new, client_name=cvsmtppost35.nm.naver.com, client_address=114.111.35.167/32, sender=anon@naver.com, recipient=anon@anon.anonJun 1 22:41:34 mail postgrey[849]: action=greylist, reason=new, client_name=cvsmtppost31.nm.naver.com, client_address=114.111.35.166/32, sender=anon@naver.com, recipient=anon@anon.anonJun 1 22:41:34 mail postfix/smtpd[5374]: NOQUEUE: reject: RCPT from cvsmtppost35.nm.naver.com[114.111.35.167]: 450 4.2.0 <me@doda.dev>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/anon.html; from=<anon@anon.anon> to=<anon@anon.anon> proto=ESMTP helo=<cvsmtppost35.nm.naver.com>Jun 1 22:41:34 mail postfix/smtpd[5373]: NOQUEUE: reject: RCPT from cvsmtppost31.nm.naver.com[114.111.35.166]: 450 4.2.0 <anon@anon.com>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/anon.html;from=<anon@anon.anon> to=<anon@anon.anon> proto=ESMTP helo=<cvsmtppost31.nm.naver.com>
/var/log/mail.log
파일을 열어보면 내가 테스트로 보낸 메일(네이버)가 신규 발송자라는 이유로 거부되었다. 그레이리스팅되었다는 450 에러 반환과 함께 메세지도 친절하게 알려준다.
Whitelist 파일에 추가하기
/etc/postgrey/whitelist_clients
파일에 다음과 같은 내용을 추가한다:
/.*/
Whitelist 결과 확인
아까와 같이 /var/log/mail.log
파일을 확인하면
Jun 1 22:51:34 mail postgrey[965]: action=pass, reason=client whitelist, client_name=cvsmtppost31.nm.naver.com, client_address=114.111.35.166/32, sender=anon@anon.anon, recipient=anon@anon.anonJun 1 22:51:34 mail postgrey[965]: action=pass, reason=client whitelist, client_name=cvsmtppost35.nm.naver.com, client_address=114.111.35.167/32, sender=anon@anon.anon, recipient=anon@anon.anon
postgrey가 client whitelist에 존재한다는 이유로 pass시킨 것을 확인 가능하다.
주의할 점
- 당연하겠지만, Greylisting으로 인해 걸려졌던 이메일 스팸들이 유입될 수 있다.
- 발송 서버의 아이피를 안다면 해당 아이피만 Whitelist에 등록하는 것이 좋을 수도 있다.
- 메일 서버를 이미 오래 사용했다면, 자주 수신되는 메일 발송자들은 이미 자동으로 Whitelist에 등록되어 관리되고 있을 수 있다.