BBUWOO'S [ LIKE UNIX ] WORLD Home > Lecture > Sendmail > Sendmail-9  

HOME
WHAT's BBUWOO?
LInux AnNyung
Open Source
    GitHUB
    GitHUB (for PHP)
LECTURE
MINI LECTURE
QnA BOARD
ENGLISH POEM


WARNNING

강좌의 모든 권리는 본인 김정균에게 있으며 이 강좌를 상업적 목적 으로 이용
하거나 다른 곳으로 옮길시에는 본인의 허락이 있어야 한다. 이글의 가장 최신글은
http://oops.org 에서 확인할수 있다.



12. SPF Configuration

이번 파트에서는 새로운 SPAM 정책인 SPF (Sender Policy Framework) 에 대하여 알아 보
도록 한다.

얼마 전, 기사에 정통부가 10대 포털과 함께 "메일 서버 등록제" 라는 것을 한다는 발표
가 났었다. 그렇다면, 다음의 우표제와 같이 돈을내고 또 등록을 해야 하는가 하는 생각
이 들 것 같은 제목이다. (기사 보기)

어디서 메일 서버 등록제라는 제목이 나왔는지는 모르겠지만, 각설하고, 이 기사에서 말
하는 것이 SPF (Sender Policy Framework) 을 적용하겠다는 내용이다.

그럼 Sender Policy Framework 가 무엇인지 부터 알아보자.


1. SPF (Sender Policy Framework) 란?

SPF 기술은 메일 헤더에서, 발송한 서버의 IP 와 From: 헤더의 메일 주소의 도메인에 등
록된 TXT 레코드 값을 비교하여 매치가 되는지 여부를 확인 해 보내는 이의 메일 주소를
속이지 하지 못하도록 하는 방법이다.

rfc 규약 상에서 From 헤더가 믿을 수 없는 정보를 가져도 되게되어 있는 점을 스패머들
이 악용하는 것을 방지하는 것으로,  완전하게 막을 수는 없겠지만 유동 IP 에서 발송이
되거나, PC 에서 spam 발송기로 발송이 되는 메일들, 그리고 악의적으로 자신의 메일 주
소가 스패머들에게 악용 되어지는 현상을 막을 수 있다.

좀 더 자세하게 알아보자.

메일은 헤더와 메일 본문으로 나뉘며, 메일의 헤더에는 Recieved: 라는 헤더가 존재하여
메일이 전송되어진 경로를 나타내게 된다.  여기서 최종 발송된 SMTP 의 IP 를 SPF 에서
체크를 한다.  또한, From: 에 등록된 보내는 사람의 메일 주소의 domain 의 TXT 레코드
를 체크하여, 발송된 SMTP 의 IP 가 등록이 되어 있는지를 확인을 하여, 보내는 이를 속
이는 것을 방지하는 기술이다.

procmail manual page 에 나와있는 간단한 자동 응답 처리법이다. 이것을 처리하기 전에
메일링 리스트로 부터 오는 메일이나 bouncing mail 같은 데몬으로 부터 오는 메일 또는
자동응답으로 인하여 내가 받게되는 메일을 제외 하도록 처리를 해야 한다. 만약 이것을
주의하지 않으면, 예상치 못한 결과를 가지고 올수 있다. (무한루프가 될수 있다는 얘기
이다.) 들어오는 모든 메일에 자동응답 처리를 하기 위해서는, rcfile 의 다른 모든처리
이전에 다음의 처리를 넣어야 한다. 그러나 mailinglist 신청이 진행되는 과정의 어떠한
처리 이후에 오는 것이 좋다. 일반적으로 mailinglist 에 자동 응답하게 하는 것은 좋은
생각이 아니기 때문이다. (물론 !^FROM_DAEMON 정규표현식에서 이것을 미리 처리를 하면
신경쓸 필요는 없다.)

일단 계정의 홈디렉토리에 .procmailrc 라는 파일과 autoreply.txt 라는 파일을 생성 하
도록 한다. 두 파일의 내용은 아래를 참고 하도록 한다. .procmailrc 에서는 자동응답이
구현되도록 설정을 하게 되며, autoreply.txt 에는 응답 메세지를 작성하게 된다.


2. SPF (Sender Policy Framework) 설정

여기서 SPF 설정이란, 2 가지의 의미가 있다. 즉, 내 서버에서 포털로 메일을 발송할 때
메일이 거부 되지 않도록 하는 설정의 의미와,  내 서버에서도 SPF 를 체크를 하여 원하
지 않는 메일을 거부 하는 설정의 의미가 있다.

이 섹션에서는 전자,  즉 내 서버에서 발송되는 메일이 포털에서 거부가 되지 않도록 하
는 설정을 설명 한다.

SPF 의 원리는 DNS 에서 잘 사용이 되지 않는 레코드를 재활용을 하는 것이다. 즉, SPF
설정을 하기 위해서는 dns 설정을 할 줄 알아야 한다는 것이다. 여기서는 DNS 설정을 할
줄 안다는 가정 하에 설명을 계속 한다. (모르면, DNS 강좌를 먼저 보기 바란다.)

SPF 는 DNS 의 TXT record 를 이용한다. 아래의 예제를 보도록 하자.


 Hanterm - cat oops.zone
 [oops@oops oops]# cat oops.zone

  $TTL 86400
  @               IN      SOA     ns.oops.org. admin.oops.org.  (
                                  2002062110 ; Serial
                                  10800      ; Refresh
                                  3600       ; Retry
                                  432000     ; Expire
                                  86400      ; Minimum (TTL)
                                  )
  ; Name Server
  ;
                  IN      NS      ns.oops.org.
                  IN      MX 10   mail.oops.org.
                  IN      TXT     "v=spf1 mx ip4:210.24.154.2 ~all"
                  IN      A       210.24.154.2
  ;
  ; Host name & Infomations
  ns              IN      A       210.24.154.2
  ;
  ; VirtualHost
  ftp             IN      A       210.24.154.155
  mail            IN      A       210.24.154.156
  webadmin        IN      A       210.24.154.158

 [oops@oops oops]#


상단의 붉은색 부분이 SPF 설정을 의미한다. 위의 설정의 의미를 간단하게 표현을 해 보
도록 하자.

보내는 이의 메일 주소가 @oops.org 라면, 이 메일의 발송지 IP 가 oops.org 의 mx 레코
드에 등록이 되어 있는 주소의 IP 이거나 또는 210.24.154.2 와 매치가 되지 않으면, 메
일은 거절이 된다는 의미이다.

그럼 SPF 의 매커니즘에 대하여 살펴 보도록 하자.

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 와 문법이 동일 함.
exists 해당 도메인의 A record 가 조회가 된다면, 일치하든 상관 없이 통과가 됨. 조회된 IP 주소가 구라여도 상관이 없이 통과가 된다. 이 매커니즘은 거의 사용하지 않는다.
include 지정된 도메인의 TXT 레코드의 값을 가져와 비교. 만약 지정된 도메인의 TXT 레코드가 존재하지 않을 경우 에러로 처리 됨.

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


그럼, 간단하게 예를 들어 보도록 하겠다.


 Hanterm - cat test.zone
 [oops@oops oops]# cat test.zone
  ; Name Server
  ;
           IN      NS      ns.test.org.
           IN      MX 10   mail.test.org.
           IN      TXT     "v=spf1 mx:a.org mx:b.com/24 ip4:210.24.154.2 ~all"
           IN      A       210.24.154.2
  mail     IN      A       211.122.122.122

 [oops@oops oops]#


위와 같이 설정이 되어 있다고 가정을 하면 위의 경우는 mail.oops.org 서버를 이용하여
메일을 발송할 경우 사용할 수 있는 From 의 주소는 다음과 같다.

test.org
a.org의 mx record로 등록되어 있는 host의 IP를 가진 도메인 주소
b.com의 mx record로 등록되어 있는 host가 포함되어 있는 c class로 등록된 도메인 주소
210.24.154.2 IP로 설정된 도메인 주소

를 사용을 하여 메일을 발송을 할 수 있다는 얘기이다.


3. 참고

어차피 10 대 포탈들이 SPF 를 지원하기 시작하면, 국내의 smtp 서버들은 SPF 설정을 하
지 않고는 메일 서버를 운영을 할 수가 없게 된다. 그러므로 미리 미리 설정을 해 놓고,
메일이 반송이 되는 일이 없도록 한다.  아마도 이 방법은 전세계적으로 통용이 될 가능
성이 상당히 높다. 이미 gmail, hotmail 등은 지원을 하고 있으며, 국내의 경우 sayclub
의 경우에는 이미 SPF 가 적용이 되어 있어, 설정이 되어 있지 않은 메일 서버들은 메일
을 보낼 수가 없게 되어 있다.

더 많은 정보를 위해서는,

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

* SPF
 http://spf.pobox.com/ (Deprecated/Archive.org)
 http://spf.pobox.com/faq.html (Deprecated/Archive.org)

* SPF Mechanisms
 http://spf.pobox.com/mechanisms.html (Deprecated/Archive.org)

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

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

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

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

* 그 외 기타 유용한 SPF 도구들
  https://www.getmailbird.com/what-spf-resources-are-available-now-that-openspf-org-is-gone/

  안녕 리눅스에서 SPF 를 메일 서버에 적용하려면 pkgadd 에서 spfmilter 를 설치하여
  사용을 할 수 있다.

를 참고 하도록 한다.



>> 이전 : AUTO REPLY (자동응답 메세지) 구현



    



 Home > Lecture > Sendmail > Sendmail-9

Copyright 1997-2024 JoungKyun Kim 
LAST MODIFIED: 2019/05/18