메일서버등록제(SPF) 인증기능적용안내서 (Ubuntu - postfix) OS Mail Server SPF 적용모듈 (Perl 기반) 작성기준 Ubuntu Desktop 9.1 32bit Postfix 2.6.5 postfix-policydspf-perl 2.007 2016 년 6 월
목 차 I. 개요 1 1. SPF( 메일서버등록제) 란? 1 2. SPF 를이용한이메일인증절차 1 II. postfix, SPF 인증모듈설치 2 1. postfix 설치여부확인 2 2. libmail-spf-perl 설치 2 3. postfix-policyd-spf-perl 설치및연동 3 III. SPF 적용여부확인및차단 5 1. SPF pass 인경우 5 2. SPF fail/softfail 인경우 5 3. procmail 을이용한스팸차단방법 7
I. 개요 1. SPF( 메일서버등록제) 란? 메일서버등록제 (SPF: Sender Policy Framework) 는메일서버정보를사전에 DNS 에공개등록함으로써수신자로하여금이메일에표시된발송자정보가 실제메일서버의정보와일치하는지를확인할수있도록하는인증기술이다. 대다수스팸발송자가자신의신원을감추기위하여발송자주소나전송경로를 허위로표기하거나변경하는경우가많다는데착안되었다. SPF를 DNS에설정하는방법은 http://www.kisarbl.or.kr > White Domain 등록작성도우미메뉴를참고한다. > SPF SPF를이용하여스팸메일을차단하기위해서는메일서버에 적용되어있어야한다. SPF 인증기능이 Ubuntu 환경에서기본적으로설치된메일서버에는 SPF 인증기능이적용되어 있지않으므로 SPF 모듈설치및패치를해야한다. 본안내서는메일수신 서버에 SPF 인증기능을쉽게적용하는방법을소개한다. 2. SPF 를이용한이메일인증절차 발신자 : 자신의메일서버정보와정책을나타내는 SPF 레코드를해당 DNS에등록 수신자 : 이메일수신시발송자의 DNS에등록된 SPF 레코드를확인하여 해당이메일에표시된발송IP와대조하고그결과값에따라수신여부를결정 ( 메일서버나스팸차단솔루션에 SPF 인증기능이설치되어있어야함) [ 그림 1] SPF 인증흐름도 - 1 -
II. postfix, SPF 인증모듈설치 본안내서는운영체제및메일서버를처음구축하는것을기준으로작성하였다. 설치과정에서사용하는모든명령어는 root 권한으로실행해야한다. 1. postfix 설치여부확인 Ubuntu 에는 postfix 가기본적으로설치되어있다. 아래는 telnet 명령어를 이용하여 tcp/25번 포트에접속하여메일전송프로그램 (MTA: Mail Transfer Agent) 이동작하고있는상태를확인하는것으로써 postfix가동작하고 있음을알수있다. root@spf:~# telnet 0 25 ( 메일서버 25 번포트접속) Trying 0.0.0.0... Connected to 0. Escape character is '^]'. 220 spf.kisa.or.kr ESMTP Postfix (Ubuntu) quit ( 접속종료) 221 2.0.0 Bye 2. libmail-spf-perl 설치 postfix 에서 SPF 인증기능을적용할수있는라이브러리로는 perl 스크립트로 작성된 postfix-policyd-spf-perl 이있다. 이모듈을사용하기위해서는 Mail::SPF perl 모듈이설치되어있어야한다. 해당모듈은 패키지관리도구인 libmail-spf-perl 패키지에포함되어있으므로아래와같이 apt-get 을이용하여설치한다. - 2 -
root@spf:~# apt-get install libmail-spf-perl 패키지목록을읽는중입니다... 완료 의존성트리를만드는중입니다...( 중략) libdigest-hmac-perl libdigest-sha1-perl liberror-perl libnet-dns-perl libnet-ip-perl libnetaddr-ip-perl...( 중략) libmail-spf-perl (2.006-0ubuntu2) 설정하는중입니다... 3. postfix-policyd-spf-perl 설치및연동 3.1 다운로드및설치 아래와같이 apt-get 을이용하여 postfix-policyd-spf-perl 패키지를설치한다. root@spf:~# apt-get install postfix-policyd-spf-perl 패키지목록을읽는중입니다... 0% 패키지목록을읽는중입니다... 완료...( 중략) postfix-policyd-spf-perl 패키지를푸는중입니다 (.../postfix-policyd-spf-perl_2.007-1_all.deb 에서 )... man-db 에대한트리거를처리하는중입니다... postfix-policyd-spf-perl (2.007-1) 설정하는중입니다... 3.2 master.cf 설정변경 postfix를구동할때사용되는 master 프로세스의설정파일인 master.cf의마지막라인에아래의설정을추가한다. root@spf:~# vi /etc/postfix/master.cf...( 중략) policy unix - n n - 0 spawn ( 엔터) ( 한칸공백)user=nobody argv=/usr/sbin/postfix-policyd-spf-perl 주의) user=nobody 로시작하는라인의첫한칸을공백으로둔다. - 3 -
3.3 main.cf 설정변경 postfix 의설정파일인 재시작한다. main.cf 에아래와같은설정을추가하고 postfix 서비스를 root@spf:/etc/postfix# vi /etc/postfix/main.cf...( 중략) smtpd_recipient_restrictions = reject_unauth_destination check_policy_service unix:private/policy bash-3.00# /etc/init.d/postfix restart - 4 -
III. SPF 적용여부확인및차단 SPF 인증결과, 메일발송 IP와 SPF 레코드에지정된 IP의일치여부에따라서 SPF pass 와 SPF fail/softfail 로구분된다. 확인방법은다음과같다. 1. SPF pass 인경우 아래와같이 /var/log/syslog 파일에서 SPF 인증이통과(pass) 된로그의 내용을확인할수있다. 해당메일은정상적으로수신되었다. root@spf:/etc/postfix# cat /var/log/maillog grep pass Jul 13 13:11:33 spf postfix/policy-spf[3136] Policy action=prepend Received-SPF: pass (kisarbl.or.kr: x.x.x.x is... ( 중략) helo=test.com; client-ip=x.xx.x 2. SPF fail/softfail 인경우 아래는 telnet 명령어를이용하여 SPF 인증기능이적용된메일서버로 접속하여메일발송을테스트하는과정이다. 메일발송 IP와 SPF 레코드의 IP가일치하지않기때문에 것을확인할수있다. 메일수신주소를입력하는단계에서차단된 표시된 URL 에서는 SPF 인증이실패 (fail/softfail) 하여거부된상세사유를확인할수있다. [root@ ~]# telnet mail.yourdomain.com 25 Connected to your (1.2.3.4). 220 mail.yourdomain.com ESMTP Postfix (Ubuntu) ehlo kisarbl.or.kr 250 mail.yourdomian.com Hello example.com, pleased to meet you mail from: test@kisarbl.or.kr 250 2.1.0 Ok rcpt to: root@kisarbl.or.kr 550 5.7.1 <root@kisarbl.or.kr>: Recipient address rejected: Please see http://www.openspf.org/why?s=mfrom;id=test@%40kisarbl.or.kr;ip=1.2.3.5-5 -
2.1 reject 사유페이지확인 http://spf.pobox.com/why.html?sender=kisa%40kisarbl.or.kr&ip=x.x.x.x&receiver=0 페이지에서거부 (reject) 사유와해결방법을확인할수있다. [ 그림 5] SPF fail/softfail 시차단확인페이지 - 6 -
3. procmail 을이용한스팸차단방법 3.1 procmail 이란? 유닉스계열에서는메일을수신한후메일박스에전달할때마지막처리를 담당하는 MDA(Mail Delivery Agent) 프로그램으로서 procmail 이가장널리 사용되고있다. procmail 을 spfmilter 와연동하여 SPF fail/softfail 발생시메일을차단하는 대신에메일의제목에 [SPAM] 태그를추가하여스팸분류를하도록한다. 메일사용자들이 아웃룩익스프레스 등의메일클라이언트(MUA) 를이용하여 스팸으로자동분류를할수있게된다. 3.2 procmail 설치 아래와같이패키지관리도구인 dpkg를이용하여 procmail의설치여부를 확인한후설치되어있지않으면 apt-get 을이용하여설치한다. root@spf:~# dpkg -l grep procmail procmail 3.22-16ubuntu5 root@spf:~# apt-get install porcmail 3.3 main.cf 설정변경 postfix 의설정파일인 재시작한다. main.cf 에아래와같은설정을추가하고 postfix 서비스를 root@spf:~# vi /etc/postfix/main.cf #mailbox_command = /some/where/procmail -a "$EXTENSION" mailbox_command = procmail -a "$EXTENSION" # The mailbox_transport specifies the optional transport in master.cf root@spf:~# /etc/init.d/postfix restart - 7 -
3.4 procmail 룰셋작성 메일의제목에 [SPAM] 태그를추가하기위한룰셋을아래와같이 /etc/mail/procmailrc 파일에작성한다. /etc/mail/procmailrc 는모든사용자에게적용되는필터를정의할때사용하며, 만약특정사용자만적용하려면, 해당사용자의 ~/.procmailrc 파일에아래의설정을추가한다. [root@spf log]# vi /etc/mail/procmailrc LOGFILE=/var/log/procmail VERBOSE=no PATH=/usr/bin:/usr/local/bin:/bin SHELL=/bin/sh SPAM_SPF_LOG = "/var/log/spam_spf.log" :0 : * ^Received-SPF: \/(fail softfail) { STAT = "$MATCH" # From :0 * ^From: \/.* { FROM = "$MATCH" } # Subject :0 * ^Subject: \/.* { SUBJECT = "$MATCH" } LOG="=====SPF_filter($STAT) F=$FROM, S=$SUBJECT" :0fwh * ^Subject: \/.* formail -I "Subject: [SPAM] $SUBJECT" $SPAM_SPF_LOG } - 8 -
3.5 스팸차단확인 다음과같이 /var/log/procmail 파일에서 procmail 의로그를확인할수있다. SPF 인증결과가 fail/softfail 인경우에해당메일제목에 [SPAM] 태그가 추가되었으며사용자의메일박스(/var/mail/kisa) 에저장되었다. [root@spf log]# cat /var/log/procmail procmail: Extraneous locallockfile ignored =====SPF_filter(softfail) F="TESTER" <webmaster@kisarbl.co.kr>, S==?ks_c_5601-1987?B?xde9usauIF8gc3BmIHNvZnQgZmFpbLfOIMDOx9EgU1BBTS DFwg==?= procmail: Skipped " $SPAM_SPF_LOG" =?ks_c_5601-1987?b?sdfd37ch?= From webmaster@kisarbl.or.kr Wed Jul 21 18:24:46 2010 Subject: [SPAM] =?ks_c_5601-1987?b?xde9usauif8gc3bmihnvznqgzmfpblfoimdox9egu1b Folder: /var/mail/kisa 2295 procmail: Extraneous locallockfile ignored procmail: Skipped " $SPAM_SPF_LOG" From webmaster@kisarbl.or.kr Wed Jul 21 18:25:49 2010 Subject: 테스트 SPF pass인경우 Folder: /var/mail/kisa 766-9 -