| 스팸필터링을 위한 SPF 설정과 운영 | 작성일 : 2006/07/27 19:15 |
| 조회수 : 25225 |
|
제 목 : 스팸필터링을 위한 SPF 설정과 운영 작성자 : 좋은진호(truefeel, http://coffeenix.net/ ) 작성일 : 2006.4.27(목) 정리일 : 2006.5.30(화) 수정일 : 2006.12.9(토) whitelist IP 목록 추가 스팸방지기술인 SPF(Sender Policy Framework)가 무엇인지는 '메일주소 변조는 no, SPF기술에 대해' (2005.8.3, 글 좋은진호) http://coffeenix.net/board_view.php?bd_code=1123 을 읽어보기 바란다. SPF를 이용하기 위해서는 1) 메일주소를 속였는지 판단할 수 있는 정보를 제공하는 송신측과 2) 판단정보에 따라 스팸을 필터링하는 수신측 등 2가지 부분으로 나눠 생각해볼 수 있다. 첫째, 송신측에서는 지정한 IP에서 메일을 보내는 경우는 메일주소를 속이지 않고 정상적으로 발송한 것으로 판단하도록 DNS의 SPF 레코드(SPF record) 설정을 통해 정보를 제공한다. 둘째, 수신측에서는 From 메일주소에서 도메인, IP를 알아낸 후 송신측이 제공한 SPF 레코드 정보와 대조를 해서 일치하면 정상메일, 그렇지 않으면 메일주소를 위변조한 것으로 판단하고 필터링을 한다. hanmail.net, naver.com, empas.com(empal.com), paran.com, nate.com, dreamwiz.net(dreamwiz.com) 등의 포털사이트와 gmail.com, hotmail.com(msn.com) 등의 메일서비스 등에서 이미 SPF 레코드 설정이 되어 있다. 이것은 가짜 ID@hanmail.net 메일주소를 갖고 실제 hanmail서버를 통해 보내지지 않은 메일에 대해서는 수신 측의 SPF 필터링 설정을 통해 쉽게 걸러낼 수 있다는 것을 의미한다. 상당수의 스팸 메일이 대형 포털에서 보낸 것처럼 주소를 속이기 때문에 큰 효과가 있을 것이다. 뒤에서 자세히 살펴보겠지만 hanmail.net의 경우 는 211.43.197.0/24에서 메일을 발송하면 정상적인 것으로 판단하라고 설정되어 있다. 이글은 수신측의 sendmail에서 spfmilter를 이용해서 스팸필터링하는 방법을 설명한다. 1. libspf2 설치 spfmilter는 SPF library인 libspf2를 사용한다. libspf2 라이브러리는 sendmail이나 postfix 등의 메일 서버에서 SPF 레코드를 검사하고 인증된 IP, 도메인을 통해서 메일이 보내진 것인지 확인하는 라이브러리 이다. http://www.libspf2.org/ 에 다운받을 수 있으며 RPM 패키지도 제공을 한다.
[ RPM 패키지 ]
2. spfmilter 설치 http://www.acme.com/software/spfmilter/ 에서 C언어로된 spfmilter 소스를 내려받아 설치한다.
spfmilter를 부팅시 자동실행하기 위한 Gentoo, Redhat 배포판과 FreeBSD용 rc 스크립트를 제공한다. 레드햇 배포판의 경우를 설명하면 - 소스내 rc_scripts/redhat_sysconfig 를 /etc/sysconfig/spfmilter 로 복사한다. - rc_scripts/redhat 은 /etc/rc.d/init.d/spfmilter 로 복사한다. init.d/spfmilter 파일에서 spfmilter 경로를 수정한다. (기본 제공 스크립트에는 /usr/sbin/spfmilter로 되어 있으나 configure 시 옵션없이 실행했다면 /usr/local/sbin/ 아래에 install될 것이다.) 이제 spfmilter 실행하는 spfmilt ID를 생성하고 socket 파일이 위치할 디렉토리를 생성한다.
3. sendmail.cf 설정과 spfmilter 운영 sendmail MilterAPI를 통해서 spfmilter을 사용하도록 설정해보자. /etc/mail/sendmail.mc에
을 저장한 후에 다음명령을 실행한다.
또는 sendmail.cf 에 직접 다음 줄을 넣어줘도 된다. 기존에 이미 ClamAV나 SpamAssassin 과 같은 다른 Filter를 사용중이라면 O InputMailFilters=clamav, spfmilter 처럼 기존 설정에 콤마(,)로 구분해서 추가 하면 된다.
SPF 레코드 검사없이 허용할 IP들은 /etc/mail/spfmilter-whitelist 에 적어주면 된다. 서버의 IP목록이나 사무실의 IP 목록 등을 적어주면 될 것이다.
수신된 메일 중 정상 메일인데, 스팸으로 처리되는 경우가 있다. 대표적인 예가 jobkorea다. 구직자가 입사 희망 업체를 선택하고 구직신청할 때 구인업체에 메일이 발송되는데, From 주소가 jobkorea 메일주소 가 아닌 구직자의 메일주소를 사용한다. 구직자는 주로 @hanmail.net, @naver.com, @gmail.com 등의 메일 주소를 사용하고, jobkorea 메일 서버 IP에서 저 메일주소를 From으로 하여 발송하니 메일주소를 위조한 것으로 판단하여 필터링하게 되는 것이다. 이외 incruit.com, kr.ibm.com 등도 그런 경우가 있었다. [ 정상메일이 필터링되는 과정 예 ]
따라서 jobkorea 서버 IP를 포함한 다음 목록을 spfmilter-whitelist에 추가해주면 정상메일이 필터링되는 경우를 막을 수 있다. (경험에 의해 하나씩 추가한 것이다. 이외도 발생하게 되면 추가해주면 된다.)
이제 설정은 다 되었으니 spfmilter를 실행하자. spfmilter같이 MilterAPI를 통해 운영되는 프로그램은 sendmail보다 먼저 실행이 되어야 한다. 여기에는 언급하지 않은 clamav, antivir Milter 같은 안티바이러스 툴도 마찬가지다. 이미 sendmail이 동작중이면 재실행해주면 된다. 검사 결과에 따라 Received-SPF: 메일 헤더가 붙게 된다. rc 스크립트로 spfmilter 실행하지 않고 수동으로 실행하는 예는 다음과 같다.
만약 정상메일인데, spfmilter가 softfail(또는 fail. 이 상태에 대해서는 뒤에서 설명한다.)로 판단했다면 /etc/mail/spfmilter_whitelist에 발송지 IP를 추가해주고 spfmilter 재실행해주면 된다. 물론 sendmail도 재실행해야 한다. 4. 주요 사이트의 SPF 레코드의 설정 확인 SPF 레코드 설정이 되어있는지 확인하는 방법은 DNS lookup툴인 dig 명령을 이용해서 확인할 수 있다. hanmail.net 의 SPF 레코드 설정을 확인한 예이다. 네임서버의 TXT레코드에 설정되어 있는 것이 확인됐다.
아래 목록은 필터링된 메일로그를 토대로 해당주소를 dig 명령으로 확인해서 작성한 것이다. 각 설정의 의미는 'SPF 기술에 대해 (글 좋은진호)' http://coffeenix.net/board_view.php?bd_code=1123 를 읽어보기 바란다. 1) hanmail.net(daum.net) v=spf1 ip4:211.43.197.0/24 ptr ~all 2) naver.com v=spf1 ip4:220.95.234.208 ip4:61.74.70.0/23 ip4:222.122.16.0/24 ip4:220.73.156.0/24 ip4:211.218.150.0/24 ip4:211.218.151.0/24 ip4:211.218.152.0/24 ip4:218.145.30.0/24 ~all 3) empas.com(empal.com) v=spf1 ip4:220.95.223.0/24 ip4:220.90.209.0/24 ip4:220.90.208.0/24 ptr -all 4) paran.com v=spf1 ip4:211.41.82.0/24 a mx ptr ~all 5) nate.com v=spf1 ip4:203.226.253.0/24 ip4:203.226.255.0/24 ~all 6) dreamwiz.net(dreamwiz.com) v=spf1 ip4:211.39.128.0/24 ip4:211.39.129.0/24 ip4:222.122.42.0/25 ~all 7) gmail.com v=spf1 redirect=_spf.google.com 8) hotmail.com(msn.com) v=spf1 include:spf-a.hotmail.com include:spf-b.hotmail.com include:spf-c.hotmail.com include:spf-d.hotmail.com ~all 9) hanmir.com v=spf1 ip4:211.41.82.0/24 a mx ptr ~all 10) chol.com v=spf1 ip4:203.252.1.0/24 ip4:203.252.3.0/24 ip4:164.124.191.0/24 ip4:210.120.128.23 ~all 11) korea.com v=spf1 mx ip4:211.49.224.0/24 ip4:211.109.1.0/24 ip4:211.49.227.32 ip4:211.49.227.33 ~all 12) freechal.com v=spf1 a:mail101.freechal.com a:mail102.freechal.com a:mail103.freechal.com a:mail104.freechal.com a:mail105.freechal.com a:mail106.freechal.com mx:mx01.freechal.com ~all 13) sayclub.com(sayclub.co.kr) v=spf1 ip4:211.234.215.240/32 ip4:211.233.85.225/32 ~all 14) lycos.co.kr v=spf1 ip4:203.226.253.0/24 ip4:203.226.255.0/24 ~all 15) nownuri.net v=spf1 a:mail.nownuri.net a:nowmail01.nownuri.net a:lion4.nownuri.net ~all 16) nhncorp.com v=spf1 ip4:220.95.234.208 ip4:220.73.156.0/24 ip4:211.218.150.0/24 ip4:220.73.146.0/24 ip4:220.73.158.0/24 ip4:220.73.159.0/24 ip4:220.95.235.0/24 ip4:220.95.234.0/24 ip4:220.95.236.0/24 ip4:211.218.152.0/24 ip4:218.145.30.0/24 ~all 17) hankooki.com v=spf1 ip4:211.40.221.201 ip4:211.40.221.202 ip4:211.40.221.203 ip4:211.40.221.198 ip4:211.40.221.250 ip4:211.233.68.69 ip4:211.40.221.200 ptr a:mailling.hankooki.com a:smtp.hankooki.com mx:211.40.221.200 ~all 18) hani.co.kr v=spf1 mx a:mail2.hani.co.kr a:news.hani.co.kr mx:mail2.hani.co.kr mx:news.hani.co.kr ~all 19) interpark.com v=spf1 ip4:218.144.89.0/24 ip4:211.233.74.0/24 ~all 20) auction.co.kr v=spf1 ip4:211.233.17.0/24 ip4:211.115.78.0/24 ip4:222.231.5.55 ip4:210.182.155.153 ip4:210.182.155.154 ip4:210.182.155.155 ~all 21) jobkorea.co.kr v=spf1 ip4:61.250.87.0/24 a mx -all 22) hostway.co.kr v=spf1 ip4:66.232.144.48 ip4:66.232.139.0/24 ip4:211.239.150.30 ip4:211.115.223.215 ~all 23) microsoft.com v=spf1 mx include:_spf-a.microsoft.com include:_spf-b.microsoft.com include:_spf-c.microsoft.com ~all 24) aol.com spf2.0/pra ip4:152.163.225.0/24 ip4:205.188.139.0/24 ip4:205.188.144.0/24 ip4:205.188.156.0/23 ip4:205.188.159.0/24 ip4:64.12.136.0/23 ip4:64.12.138.0/24 ptr:mx.aol.com ?all v=spf1 ip4:152.163.225.0/24 ip4:205.188.139.0/24 ip4:205.188.144.0/24 ip4:205.188.156.0/23 ip4:205.188.159.0/24 ip4:64.12.136.0/23 ip4:64.12.138.0/24 ptr:mx.aol.com ?all 25) paypal.com spf2.0/pra mx include:s._sid.ebay.com include:m._sid.ebay.com include:p._sid.ebay.com include:c._sid.ebay.com ~all v=spf1 mx include:s._spf.ebay.com include:m._spf.ebay.com include:p._spf.ebay.com include:c._spf.ebay.com ~all 26) sohu.com v=spf1 ip4:61.135.130.0/23 ip4:61.135.132.0/23 ip4:61.135.134.0/23 ip4:61.135.145.0/23 ip4:61.135.150.0/23 ip4:220.181.26.0/24 ip4:222.28.152.128/25 ip4:218.206.87.0/25 ip4:221.236.12.128 ip4:203.184.141.0/24 ip4:61.152.234.0/24 ~all 27) 163.com v=spf1 ip4:220.181.12.0/22 ip4:202.108.5.0/24 -all 5. spfmilter가 남기는 메일헤더와 procmailrc 설정 maillog에 남은 spfmilter관련 메시지의 일부분이다. (※ 일부 IP와 도메인, 메일주소는 수정)
pass, fail, softfail, neutral, none, unknown, error 등의 결과를 확인할 수 있을 것이다. - pass : 100% 확실한 메일로 판단한 경우이다. SPF 레코드나 whitelist에 포함된 IP이다. - fail : 메일주소를 위변조한 것으로 판단한 경우. 해당 메일은 필터링처리하면 된다. SPF 레코드에 -all 로 설정한 경우임 - softfail : 100%는 아니지만 fail쪽에 가깝고, fail과 neutral의 중간정도에 해당한다. SPF 레코드에 ~all 로 설정한 경우임 위 사이트에서 empas.com, jobkorea.co.kr, 163.com을 제외한 대부분이 ~all로 설정되어 있으니 이 판정 상태에 대해서도 필터링해야 SPF 사용에 효과가 있다. - neutral : 메일주소의 위변조 판단하는 것을 원치 않음을 나타낸다. 따라서 none과 같은 형태로 처리해주면 된다. SPF 레코드에 ?all 로 설정한 경우임 - none : SPF 레코드를 제공하지 않는 경우 - unknown : lookup한 결과를 알 수 없을(완벽하게 처리되지 못한) 경우 - error : lookup할 때 에러가 발생한 경우 메일주소 위변조가 높은 순서로 나열하면 fail > softfail > neutral > none > pass 순으로 볼 수 있다. SPF의 판정 상태를 알았으니 이제 procmail을 통하여 필터링 적용을 해보자. - 'Received-SPF: fail'일때와 'Received-SPF: softfail' 인 경우에는 procmail에 로그를 남기고 - 수신된 메일을 스팸메일함(var/log/SPAM_SPF.log, 메일을 버리려면 /dev/null 지정)으로 보내기 위한 procmailrc 설정 예는 다음과 같다. - 아래 설정에서 LOG= 다음줄에 큰따옴표(")는 줄바꿈을 위해서 표시한 것으로, 잘 못 표기한게 아니다. [ /etc/procmailrc ]
* 다운로드 : http://coffeenix.net/truefeel/files/spf_procmailrc.txt /var/log/procmail 에는 다음과 같이 기본 로그 외에 '==='로 시작하는 한줄짜리 로그가 추가로 남게된댜. (메일주소 xxxxx로 변경)
DomainKeys를 사용하는 야후를 제외한 대부분의 포털에서는 SPF 레코드 설정이 되어 있으므로 보다 깨끗해진 메일함으로 상큼한 아침을 맞이하게 될 것이다. 6. 참고자료(관련자료) * 스팸필터링 기술 SPF에 대한 SPF 레코드의 설치와 운영 http://coffeenix.net/doc/security/SPF설치및운영지침서.pdf 출처 : 불법스팸대응센터( http://www.spamcop.or.kr/ ) * spfmilter Installation http://www.acme.com/software/spfmilter/ * Received-SPF: a new header http://www.openspf.org/newheader.html * Sender Policy Framework (SPF) for Authorizing Use of Domains in E-MAIL, version 1 http://www.schlitt.net/spf/spf_classic/draft-schlitt-spf-classic-02.html * SPF Softfail http://www.micheldonais.com/archives/17 * SPF Configuration (글 김정균) http://oops.org/?t=lecture&sb=sendmail&n=9 |
||||||||||||||||||||||||||||||||||||||||||||||
|
|