https://www.kisarbl.or.kr/whiteip/whiteip_tutorial2.jsp
메일서버등록제(SPF: Sender Policy Framework)
메일서버 정보를 사전에 DNS에 공개 등록함으로써 수신자로 하여금 이메일에 표시된 발송자 정보가 실제 메일서버의 정보와 일치하는지를 확인할 수 있도록 하는 인증기술

* 대다수 스팸발송자가 자신의 신원을 감추기 위하여 발송자 주소나 전송경로를 허위로 표기하거나 변경하는 경우가 많다는데 착안
 
SPF를 이용한 이메일 인증절차:
발신자 : 자신의 메일서버 정보와 정책을 나타내는 SPF 레코드를 해당 DNS에 등록
수신자 : 이메일 수신시 발송자의 DNS에 등록된 SPF 레코드를 확인하여 해당 이메일에 표시된 발송IP와 대조하고 그 결과값에 따라 수신여부를 결정
(메일서버나 스팸차단솔루션에 SPF 확인기능이 설치되어 있어야 함)
 
SPF 개발 및 도입현황:
1998년 Paul Vixie의 ‘Repudiating Mail From'에서 처음으로 아이디어가 제안된 이후 Pobox.com의 Meng Weng Wong에 의해 SPF가 개발됨
2004년 2월 IETF(Internet Engineering Task Force)에 공식 RFC(Request For Comments)로 제안되었으며, 2004년 12월 SPF의 모든 기술적 내용들이 최종 완성됨
SPF는 타 인증기술에 비해 적용이 용이하고 호환성이 좋으며 오픈소스를 기반으로 하므로 전 세계적으로 폭넓은 지지기반을 확보하고 있음
한국을 비롯한 미국, 캐나다, 일본 등 여러 국가들이 정부차원에서 사업자들을 대상으로 SPF 레코드 출판 및 확인기능 도입을 통한 스팸차단 활용을 적극 권고하고 있음
 

http://www.sefaq.com/bbs/view.php?id=mail&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=7


네임서버에 이제 spf 잡아보자.


spf는 네임서버의 해당 도메인의 zone파일에 셋팅한다.


[sefaq@sefaq]# cat sefaq.com

  $TTL 86400
  @               IN      SOA     ns.sefaq.com. admin.sefaq.com.  (
                                  2002062110 ; Serial
                                  10800      ; Refresh
                                  3600       ; Retry
                                  432000     ; Expire
                                  86400      ; Minimum (TTL)
                                  )
  ; Name Server
  ;
                  IN      NS      ns.sefaq.com.
                  IN      MX 10   mail.sefaq.com.
                  IN      TXT     "v=spf1 mx ip4:192.168.2.2 ~all"
                  IN      A       192.168.2.2
  ;
  ; Host name & Infomations
  ns              IN      A       192.168.2.2  ;
  ; VirtualHost
  ftp             IN      A       192.168.2.2
  mail            IN      A       192.168.2.3
  www        IN       A       192.168.2.2

위의 설정에서 IN      TXT     "v=spf1 mx ip4:192.168.2.2 ~all"     이 부분이 spf 설정이다.
왜 mx 외에 IP도 있는가 생각해 보자.
메일서버에서 메일이 나가지만, 웹서버에서도 회원 가입, 패스워드 문의, 각종 정보 전송등 메일이 발송되기 때문에 자기 도메인에서 외부로 발송되는 모든 IP에 대한  spf 등록이 이루어져야 한다.


이제 ~all 과 같은 규칙을 확인해보자.


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 정보와 매칭을 비교 


셋팅이 완료되었다면, 네임서버 재시작 또는 reload 후에
check-auth@verifier.port25.com 으로   spf 적용된 도메인의 계정에서 메일을 보내면 적용 결과가 메일로 돌아온다.

아니면, http://www.openspf.org/wizard.html 에서 도메인을 입력하면, 내가 작성한 SPF에 대한 내용과 설명이 나온다.
한번씩 들어가보시길...


SPF 설정하면서 한가지는 확인하자.
포탈로 메일을 보내기 위해서 SPF 설정 하는 것도 좋지만, SPF를 설정한다는 것은 내가 설정한 서버에서 나간 메일에 대한 책임도 같이 진다는 것이다.    그러니 서버관리에 더 신경을 써야 하는 부분이다.

첨부파일은 kisa에서 제공하는 spf 관련 자료이다.


더 많은 정보를 위해서는,

http://coffeenix.net/board_view.php?cata_code=0&bd_code=1123&bpage=

* 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


http://faq.kr.dnsever.com/viewtopic.php?p=39

기존에 직접 DNS서비스를 운영하고 있거나, 타사의 호스팅회사에서 호스팅서비스를 받고 있는 경우에
DNS설정을 DNS에버에서 하기 위한 방법을 알려드립니다.

예를 들어 회원님의 도메인명이 mydomain.com 이고,
어떤 호스팅 회사에서 호스팅을 받으려면 아래와 같이 DNS설정을 하라는 요청이 있었다고 가정을 합니다. 
(BIND와 같은 DNS서비스를 운영하는 경우에 Zone 파일의 일부분에 해당합니다. ) 

코드: 모두 선택
@         IN    A    10.10.10.10
www       IN    A     10.10.10.10
@         IN    MX  10  mail.hosting.com.
mail      IN   CNAME  app.hosting.com.
@         IN  TXT  "v=spf1 ip4:1.2.3.4  ip4:5.6.7.8 ~all"


위와 같은 DNS Zone 파일을 읽는 방법은
@ 는 회원님이 설정하고자 하는 도메인명 그 자체(예: mydomain.com) 를 의미하는 것이며
각줄에 있는 IN 이라는 단어는 원래 INTERNET이라는 단어의 약자인데, 이는 무시하시면 되고
그 담에 나오는 MX, CNAME, A, CNAME, TXT 는 DNS의 레코드종류를 의미하는 것이고
그 레코드 구분 다음에 나오는 것이 각 레코드의 값에 해당합니다.
( MX 레코드의 경우에는 MX 단어 다음에 10 mail.hosting.com. 과 같이 2개가 연속으로 나오는데, 첫번째 값은 우선순위를 말하는 것이고 두번째 값은 받을 메일서버명을 의미하는 것입니다. ) 



각 레코드설정하는 방법을 하나씩 살펴보면

** 위의 설정파일 예제의 1번째 줄에서
코드: 모두 선택
@     IN  A    10.10.10.10

는 mydomain.com 에 대한 A레코드(IP주소)를 10.10.10.10 으로 설정한다는 것이며
DNS에버에서 A레코드 설정은 "호스트IP(A)관리" 메뉴에서 설정을 하시면 됩니다.
"호스트IP(A) 관리"메뉴의 입력란에서 
코드: 모두 선택
------------------------------------------------------------
도메인명            |      IP주소
------------------------------------------------------------
_____.mydomain.com  |   10.10.10.10
------------------------------------------------------------

와 같이 
"도메인명" 입력란에서 mydomain.com 앞부분(서브도메인명 입력란) 을 공백으로 두고 
"IP주소" 입력란을 10.10.10.10 으로 입력을 하면 됩니다. 


** 위의 설정파일 예제의 2번째 줄에서
코드: 모두 선택
www               IN  A     10.10.10.10

는 http://www.mydomain.com 에 대한 A레코드(IP주소)를 10.10.10.10 으로 설정한다는 것이므로

"호스트IP(A) 관리"메뉴의 입력란에서 
코드: 모두 선택
------------------------------------------------------------
도메인명          |     IP주소
------------------------------------------------------------
www.mydomain.com  |   10.10.10.10
------------------------------------------------------------

과 같이 
"도메인명" 입력란에서 mydomain.com 앞부분에 www를 입력하고 
"IP주소" 입력란을 10.10.10.10 으로 입력을 하면 됩니다. 


** 위의 설정파일 예제의 3번째 줄에서
코드: 모두 선택
@      IN  MX  10  mail.hosting.com.

는 mydomain.com 에 대한 MX레코드의 값을 우선순위는 10으로, 받은메일서버는 mail.hosting.com 으로 설정한다는 것입니다.
위에서 설명한 것과 같이 @는 도메인명 그 자체(예: mydomain.com)을 의미하는 것이며
값으로 입력하는 mail.hosting.com. 의 맨 마지막에 있는 . 은 DNS설정파일에서는 필요한 것이나, 
DNS에버에서는 입력하지 않아도 됩니다. 
DNS에버에서 MX레코드를 설정하기 위해서는 "메일서버(MX) 관리" 메뉴에서
코드: 모두 선택
------------------------------------------------------------
도메인명           |     메일서버       | 우선순위
------------------------------------------------------------
____.mydomain.com  |  mail.hosting.com  |  10
------------------------------------------------------------

과 같이
"도메인명" 입력란의 mydomain.com 앞부분은 공란으로 나두고, 
"메일서버" 입력란에 mail.hosting.com을 입력하고(마지막에 . 은 입력하지 않아도 됩니다. )
"우선순위" 입력란에 10을 입력하면 됩니다. 


** 위의 설정파일 예제의 4번째 줄에서
코드: 모두 선택
mail     IN  CNAME  app.hosting.com.

는 mail.mydomain.com 에 대한 CNAME 레코드의 값을 app.hosting.com 으로 설정한다는 것입니다.
"도메인별명(CNAME) 관리" 메뉴에서
코드: 모두 선택
------------------------------------------------------------
도메인명별명       |   목적지 도메인   
------------------------------------------------------------
mail.mydomain.com  |  app.hosting.com  
------------------------------------------------------------

과 같이
"도메인 별명" 입력란의 mail.mydomain.com 과 같이 mail을 입력하시고
"목적지 도메인" 입력란에 app.hosting.com을 하시면 됩니다. 


** 위의 설정파일 예제의 5번째 줄에서
코드: 모두 선택
@        IN  TXT  "v=spf1 ip4:1.2.3.4  ip4:5.6.7.8 ~all"

는 mydomain.com 에 대한 TXT 레코드의 값을 v=spf1 ip4:1.2.3.4 ip4:5.6.7.8 ~all 으로 설정한다는 것입니다.

"도메인 설명 텍스트(TXT) 관리" 메뉴에서
코드: 모두 선택
------------------------------------------------------------
도메인명       |   설명 텍스트   
------------------------------------------------------------
mydomain.com   |  "v=spf1 ip4:1.2.3.4  ip4:5.6.7.8 ~all"
------------------------------------------------------------

과 같이
"도메인 별명" 입력란의 mydomain.com 앞부분을 공란으로 나두고,
"설명 텍스트" 입력란에 v=spf1 ip4:1.2.3.4 ip4:5.6.7.8 ~all 을 입력하면 됩니다. 
( 양쪽에 큰 따음표는 자동으로 붙으므로, 입력하지 않도록 합니다. ) 


위와 같이 DNS설정파일을 기반으로 하여, DNS에버에서 설정하는 방법을 배워봤습니다. 
외부 호스팅회사와의 연동 또는 DNS 서버 이전에 도움이 되기 바랍니다.

+ Recent posts