스펨메일 차단을 위해 HOWTO문서가 아니라, 전체적인 로직을 설명한 문서입니다.

스펨메일때문에, 스펨어쎄신, PROCMAIL, rcpthosts, tcp.smtp 화일등을 다 동원해서 스펨메일을 차단해 보려고 해도 결론적으로는 tcp.smtp 차단으로 답이 나올 것입니다.

스펨어쎄신과 procmail 등은 pop에 관련된 항목이라, 메일을 이용하는 User에게나 유용한 내용이지, 서버에서 메일로 인해 부하가 걸리는 것에는 아무런 효과를 주지 못합니다.

기본적인 사용법으로 tcp.smtp. rcpthosts를 이용해서 기본적으로 메일 발송에 관련해서 차단할 수는 있습니다. 즉, 메일서버를 통해 허용되지 않은 IP에 대해서는 특정 호스트로만 메일 발송이 가능하게 할 수 있습니다.

문제는 일반 사용자들은 이렇게 해서 별 문제가 없습니다만, 어떻게든 뚫고 들어와서 내 메일서버를 통해 타 사이트로 메일을 보내려고 시도하는 스펨메일이 있다는 것입니다. 물론 메일은 날아가지 않을 것입니다. rcpthosts에서 허용한 호스트외에는 말이죠.

문제는 queue에 mess가 계속 쌓인다는 것입니다.
mess가 계속 늘어 난다는 것은 스펨메일이 계속 들어오고 있다는 것입니다. 즉, 메일 서버가 감당하지 못하는 양이 계속해서 들어오고 있다는 것입니다.

이것을 막기 위한 방법에 대해 지금 부터 간략하게 설명하려 합니다.

=================== ===========================
tcp.smtp 화일은 다음과 같은 용도로 사용합니다.
(1) 인증된 IP에 대해서는 어떤 호스트로도 메일발송이 가능하게 합니다.
      방법 : 고정IP에서만 사용된다면 간단하지만, 유동 IP도 고려 하려면, 약간의 트릭이 필요합니다. 저희 같은 경우는 Intranet에 로그인을 하게 되면, 해당 사용자의 IP가 Database에 허용IP로 등록이 됩니다. Crontab을 이용하여 1분 단위로 새로 추가된 IP가 있으면 tcm.smtp에 등록하는 형태로 만들어 두었습니다.  즉, 유동IP에서 메일을 보내려면, 인트라넷 로그인후 1분후에 메일을 보낼 수 있는 것이죠.

(2) Deny된 IP에 대해서는 메일 송/수신 자체가 불가하게 만듭니다.
    사이트를 검색해보면 spamiplist 같은 화일이 있습니다.  일차적으로 이 아이피 리스트를 구해 전부 등록합니다. 물론 Database에 DenyIP로 등록합니다.  추가될때마다 Database에 등록하면 crontab이 1분단위로 tcp.smtp 화일을 생성할 것입니다.
   

(3) 그외 IP는 허용된 호스트로만 메일을 발송할 수 있도록 합니다.
    rcpthots에 허용된 호스트를 등록합니다.


========= 기타 Util ===============

제 경우에는 1분단위로 위의 작업을 하는 crontab 실행 화일과 매일 1회 crontab 실행하는 화일을 만들었습니다.

1분단위는 IP에 대한 block, allow 검사만 합니다.
매일단위는 queue에 쌓여 있는 mess를 삭제하는데 사용합니다.

1분 단위로 잔존해있는 mess를 검색하여, 해당 mess화일을 열어 파싱하여 어떤 IP에서 발송한 메일인지 확인하여 동일 IP에 대해 counting합니다. 몇회 이상이 발생하면 deny로 IP를 추가합니다.

뭐, 기타 웹페이지에서 mess를 읽을 수 있는 곳으로 복사하였다가, 메시지 확인후 ip deny 여부를 판단하는 것을 구현하기도 하였습니다.


==================================

결론은 이렇습니다.
(1) tcp.smtp 화일에 allow, deny IP를 수작업으로 일일이 등록하지 않고, crontab을 이용하여 IP를 등록한다.

(2) crontab으로 실행되는 프로그램이 쉽게 IP리스트를 관리하기 위한 database를 구축한다. 또한, 주기적으로 queue에 쌓여 있는 mess를 삭제하는 루틴을 만든다. 아무거나 삭제하면 안되겠죠? 이건 재량것..

(3) 등록된 database와 메일서버내에 잔존해 있는 queue에 쌓인 mess를 함께 관리할 수 있는 웹페이지를 구성한다.

이런 환경을 만들어 두니, 이젠 메일서버가 말썽을 일으키지 않네요.

============ 서비스 도중 발생한 추가항목 ===============

tcp.smtp에 IP를 Deny해 두어도, qmail-remote 데몬을 이용해서 계속해서 deny한 IP가 접속을 하는군요. ㅡ.ㅡ 도대체 tcp.smtp는 정상적인 메일인 경우에만 적용되는것 같습니다.

예를 들어
From xxx@메일서버IP 형태로 발신자가 잡히면 그냥 통과해 버린다는게 문제입니다.
물론, 다양한 qmail patch를 이용하면 relay되긴 하겠지만... 자신없습니다.ㅡ.ㅡ
그래서 iptables를 사용할수 밖에 없다는 결론에 이르렇습니다.

결론은 tcp.smtp도 하고, iptables를 이용하여 해당 IP를 25, 110 포트 자체를 막아버렸더니, 더이상 들어오지 않네요.  물론, 간혹 특정IP에서 스팸메일을 보내긴 하나, 1,2통 정도는 애교로 봐주고 있습니다. 다 막아 버릴수도 있지만, 거래처 메일이 스팸으로 잡힐지 몰라서.. 3일에 20통의 메일이 걸리면 차단입니다. ^^

iptables 잘못 사용하면 곤란한 일이 생길수도 있으니, 잘 학습해 보고 사용하세요.
2010/06/01 09:56 2010/06/01 09:56

Trackback Address :: https://youngsam.net/trackback/1177