본문 바로가기

Java

(SPF)Sender Policy Framework

제  목 : 메일주소 변조는 no, SPF(Sender Policy Framework)기술에 대해
작성자 : 좋은진호(truefeel, http://coffeenix.net/ )
작성일 : 2005.8.3(수) 오후


상쾌한 아침에 스팸메일로 가득찬 메일함을 열 때 마다 클릭과 삭제의 반복으로 짜증난 하루를 시작한 적은 없는지?

- Antivirus
- RBL, SURBL
- procmail, byspam통한 스팸필터링
- joe job attack에 대한 방어 설정
- spamassassin활용한 점수제 메일 필터링

등 다양한 방법들로 메일 필터링을 하는데 오늘은 SPF에 대해 알아보겠다.

1. SPF(Sender Policy Framework)란

10개의 포털사이트가 SPF기술을 통해서 스팸메일을 필터링할 계획이라는 오늘자 기사를 봤다.
Meng Weng Wong에 의해 2003년에 시작된 SPF기술은 메일의 헤더를 보고 실제 해당 메일서버에서 보내진
것인지를 판단하여 메일 수신을 막는 방법이다.

예를 들어
메일의 From 헤더에 foo@spammer.com 라고 적혀있으면
spammer.com 을 관리하는 DNS를 통해서
해당 메일이 실제 spammer.com에서 설정한 IP와 수신된 메일헤더의 IP와 비교해서 다르면 수신을 거부하게
된다. 즉, 실제로 hanmail.net에서 보내지 않지 않았으면서 메일주소는 @hanmail.net 로 속여서 발송되는
메일은 필터링이 가능하게 되는 것이다.

사진출처 : http://pm-lib.sourceforge.net/


2. SPF 기술 적용위한 DNS 설정

SPF 기술을 적용하기 위해서는 메일서버를 운영중인 사이트의 DNS에는 TXT 레코드 설정이 필요하다.
이 설정은 다른 메일수신서버들에게 SPF정책을 통해 메일을 필터링하도록 도움을 주기위한 설정이지
본인의 메일서버로 수신된 메일이 필터링되도록 설정하는 것이 아니니, DNS 설정했다고 '어~ 필터링이
안되지'하고 헛삽집하지 말기 바란다.

SPF 기술을 적용하겠다고 보도된 10개의 포털 사이트에 대해 DNS 설정을 확인한 결과 5곳의 DNS에는
이미 TXT 설정이 되어 있었다.

※ 10개 포털 사이트
   nownuri.net, hanmail.net, chol.com, dreamwiz.com, empas.com(empal.com),
   korea.com, hotmail.com, paran.com, naver.com, nate.com

 
# dig txt 도메인
 


 
;; ANSWER SECTION:
korea.com.              1759    IN      TXT     "v=spf1 mx ip4:210.117.14.85 ip4:211.109.1.111
ip4:211.109.1.113 ip4:211.109.1.114 ip4:211.109.1.115 ip4:211.109.1.151 ip4:211.109.1.152
ip4:211.109.11.35 ip4:211.109.11.40 ip4:211.109.2.50 ip4:211.109.2.51 ~all"

;; ANSWER SECTION:
nownuri.net.            10800   IN      TXT     "v=spf1 a:203.238.128.57 a:203.238.128.90 ~all"

;; ANSWER SECTION:
chol.com.               3600    IN      TXT     "v=spf1 ip4:203.252.3.0/24 ~all"

;; ANSWER SECTION:
dreamwiz.com.           900     IN      TXT     "v=spf1 ip4:211.39.128.0/24 a mx ptr ~all"

;; ANSWER SECTION:
hotmail.com.            3600    IN      TXT     "v=spf1 include:spf-a.hotmail.com include:spf-b.hotmail.com

include:spf-c.hotmail.com include:spf-d.hotmail.com ~all"

;; ANSWER SECTION:
spf-a.hotmail.com.      2590    IN      TXT     "v=spf1 ip4:209.240.192.0/19 ip4:65.52.0.0/14
ip4:131.107.0.0/16 ip4:157.54.0.0/15 ip4:157.56.0.0/14 ip4:157.60.0.0/16 ip4:167.220.0.0/16
ip4:204.79.135.0/24 ip4:204.79.188.0/24 ip4:204.79.252.0/24 ip4:207.46.0.0/16 ip4:199.2.137.0/24 ~all"
 


저 설정을 보고 어떻게 TXT를 설정해야하는지 눈치를 챘을 것이다.

----------  ---------------------------------------------------------------------------
methods     설  명
----------  ---------------------------------------------------------------------------
v=spf1      SPF의 버전
ip4         메일을 송신하는 IP주소들. 211.39.128.0/24처럼 CIDR형태로 표시 가능
a           DNS의 A  레코드로 설정한 IP주소를 sender로 설정
            예를 들어 dreamwiz.com라면
            dreamwiz.com의 IP 211.39.128.129와 211.39.128.129을 sender로 판단함을 의미
            a:foo.com 처럼 도메인을 지정할 수도 있다.
mx          MX 레코드에 지정한 IP주소들을 sender로 판단하라는 의미
ptr         IP에 대해 lookup을 하여 PTR 레코드에 지정되어 있으면 sender로 판단하라는 의미
include     지정한 도메인의 TXT 레코드에서 설정을 찾는다.
~all        이 method는 TXT 레코드의 끝에 넣어주기 바란다.
----------  ---------------------------------------------------------------------------

all all 은 레코드 값의 가장 뒤에 지정을 한다. all 의 의미는 앞의 설정 이 외의 나머지를의미한다. all 앞의 기호는 4 가지의 표현이 있으며 각각 다음의 의미를 지닌다. all 앞의 -,~,+,? 기호는 아래의 모든 설정에서 사용이 가능하며, 생략시에는 + 가 기본값으로사용이 됨을 의미한다.

-all (fail) 앞의 조건과 맞지 않다면 거부
~all (softfail) 앞의 조건과 맞지 않다면, 특정 헤더를 남기고 통과
+all (pass) 무조건 통과. 만약 아무런 기호가 없을 경우에는 + 가 기본값
?all (neutral) 신경쓰지 않음

a a 레코드에 지정된 IP 와의 매칭을 비교 한다.

v=spf1 a -all
FROM 에 지정된 주소의 도메인의 a 레코드에 등록된 IP 와 비교

v=spf1 a:exmaple.com -all
exmaple.com 의 A record 에 등록된 IP 와 비교

v=spf1 a:exmaple.com/24 -all
example.com 의 A record 에 등록된 IP 의 c class subnet 과 비교

mx mx 레코드에 지정된 IP 외 매칭을 비교한다.

v=spf1 mx -all
FROM 에 지정된 주소의 도메인의 mx 레코드에 등록된 호스트의 IP 와 비교

v=spf1 mx:exmaple.com -all
exmaple.com 의 mx record 에 등록된 호스트의 IP 와 비교

v=spf1 mx:exmaple.com/24 -all
example.com 의 mx record 에 등록된 호스트의 IP 의 c class subnet 과 비교

ptr ptr 레코드에 지정된 IP 와 매칭을 비교한다.

v=spf1 ptr -all
FROM 에 지정된 주소의 도메인과 이 도메인의 IP 의 ptr 레코드에 등록된 IP 와 비교

v=spf1 ptr:exmaple.com -all
exmaple.com 의 ptr record 에 등록된 호스트의 IP 와 비교

ip4 ipv4 규약의 ip 주소와 비교한다.

v=spf1 ipv4:192.168.0.1/16 -all
From 의 도메인의 IP 가 192.168.0.1/16 subnet 에 매칭이 되는지 비교

v=spf1 ipv4:192.168.0.1 -all
From 의 도메인의 IP 가 192.168.0.1 과 매칭이 되는지 비교

ip6 ipv6 규약의 ip 주소와 비교. ipv4 와 문법이 동일 함.
include 지정된 도메인의 TXT 레코드의 값을 가져와 비교. 만약 지정된 도메인의 TXT레코드가 존재하지 않을 경우 에러로 처리 됨.

v=spf1 include:example.com -all
exmaple.com 의 TXT record 정보와 매칭을 비교

보다 자세한 사항은 http://spf.pobox.com/mechanisms.html 를 참조하기 바란다.

3. 관련 사이트

* SPF
  http://spf.pobox.com/
  http://spf.pobox.com/faq.html

* SPF Mechanisms
  http://spf.pobox.com/mechanisms.html

* An Overview of the Sender Policy Framework
  http://www.msexchange.org/tutorials/Sender-Policy-Framework.html

* SPF기술을 위한 DNS 설정
  http://www.petri.co.il/sender_policy_framework.htm

* SPF Council (SPF 기술, 표준에 대해 논의)
  http://spf.mehnle.net/Home_Page

* SPF 테스트
  http://www.schlitt.net/spf/tests/

* Domain Registrars and DNS Providers that Support SPF
  http://www.kitterman.com/spf/txt.html

* sendmail에서 SPF를 위한 설정(Milter-SPF 설치 방법)
  http://spf.pobox.com/sendmail-milter-INSTALL.txt
  http://www.brandonhutchinson.com/Installing_Milter-SPF_with_Sendmail.html