메일서버등록제(SPF) 인증기능적용안내서 (SunOS - postfix) OS Mail Server SPF 적용모듈 (Perl 기반) 작성기준 SunOS 5.10 32bit Postfix 2.4.6 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 설치 4 3. postfix-policyd-spf-perl 설치및연동 4 III. SPF 적용여부확인및차단 6 1. SPF pass 인경우 6 2. SPF fail/softfail 인경우 6 3. procmail 을이용한스팸차단방법 8
I. 개요 1. SPF( 메일서버등록제) 란? 메일서버등록제 (SPF: Sender Policy Framework) 는메일서버정보를사전에 DNS 에공개등록함으로써수신자로하여금이메일에표시된발송자정보가 실제메일서버의정보와일치하는지를확인할수있도록하는인증기술이다. 대다수스팸발송자가자신의신원을감추기위하여발송자주소나전송경로를 허위로표기하거나변경하는경우가많다는데착안되었다. SPF를 DNS에설정하는방법은 http://www.kisarbl.or.kr > White Domain 등록작성도우미메뉴를참고한다. > SPF SPF를이용하여스팸메일을차단하기위해서는메일서버에 적용되어있어야한다. SPF 인증기능이 SunOS 환경에서기본적으로설치된메일서버에는 SPF 인증기능이적용되어 있지않으므로 SPF 모듈설치및패치를해야한다. 본안내서는메일수신 서버에 SPF 인증기능을쉽게적용하는방법을소개한다. 2. SPF 를이용한이메일인증절차 발신자 : 자신의메일서버정보와정책을나타내는 SPF 레코드를해당 DNS에등록 수신자 : 이메일수신시발송자의 DNS에등록된 SPF 레코드를확인하여 해당이메일에표시된발송IP와대조하고그결과값에따라수신여부를결정 ( 메일서버나스팸차단솔루션에 SPF 인증기능이설치되어있어야함) [ 그림 1] SPF 인증흐름도 - 1 -
II. postfix, SPF 인증모듈설치 본안내서는운영체제및메일서버를처음구축하는것을기준으로작성하였다. 설치과정에서사용하는모든명령어는 root 권한으로실행해야한다. 1. postfix 설치 SunOS에는 sendmail이기본적으로설치되어있다. postfix 를설치하면 tcp/25 번 포트충돌이발생하므로제거하도록한다. 아래와같이 svcadm 명령어를이용하여 sendmail 서비스를종료하고패키지 관리도구인 pkgrm을이용하여 sendmail 을삭제한다. bash-3.00# svcadm disable sendmail bash-3.00# pkgrm SUNWsndmu bash-3.00# pkgrm SUNWsndmr (sendmail 서비스종료) (sendmail 패키지삭제) (sendmail 패키지삭제) 1.1 pkg-get 설치 아래와같이 pkgadd 를이용하여 pkg-get 을설치한다. bash-3.00# pkgadd -d http://www.opencsw.org/pkg_get.pkg all packages). (default: all) [?,??,q]: ( 엔터) 이디렉토리를지금만들겠습니까? [y,n,?,q] y ## setuid/setgid 프로그램점검 <CSWpkgget>( 을) 를계속설치하겠습니까 [y,n,?] y <CSWpkgget>( 이) 가성공적으로설치되었습니다 - 2 -
1.2 다운로드및설치 아래와같이 pkg-get을이용하여 postfix 를설치한다. -i 옵션은다운로드와동시에설치하는옵션이다. bash-3.00# pkg-get -i postfix No existing install of CSWpostfix found. Installing... http://mirrors.ibiblio.org/pub/mirrors/opencsw/current/i386/5.10/postfix-2.4.6,rev= 2008.05.28-SunOS5.8-i386-CSW.pkg.gz [following] HTTP request sent, awaiting response... 200 OK Length: 9846280 (9.4M) [application/x-gzip] Saving to: `postfix-2.4.6,rev=2008.05.28-sunos5.8-i386-csw.pkg.gz' Linking /usr/lib/sendmail to /opt/csw/sbin/postfix Linking /usr/bin/newaliases to /opt/csw/bin/newaliases Linking /usr/bin/mailq to /opt/csw/bin/mailq Installation of <CSWpostfix> was successful. - 3 -
2. pm_mailspf 모듈설치 postfix 에서 SPF 인증기능을적용할수있는라이브러리로는 perl 스크립트로 작성된 postfix-policyd-spf-perl 이있다. 이모듈을사용하기위해서는 Mail::SPF perl 모듈이설치되어있어야한다. 해당모듈은 pm_mailspf 패키지에포함되어있으므로아래와같이 패키지관리도구인 pkg-get 을이용하여설치한다. bash-3.00# pkg-get -i pm_mailspf No existing install of CSWperl found. Installing... Removing invalid local file perl-5.10.1,rev=2009.12.15-sunos5.8-i386-csw.pkg.gz /opt/csw/share/perl/csw/mail/spf/v2/record.pm [ verifying class <none> ] Installation of <CSWpmmailspf> was successful. 3. postfix-policyd-spf-perl 설치및연동 3.1 다운로드및압축해제 아래와같이 wget 압축을해제한다. 명령어를이용하여 postfix-policyd-spf-perl 을 다운로드한후 bash-3.00# wget \ http://launchpad.net/postfix-policyd-spf-perl/trunk/2.007/download/postfix-policy d-spf-perl-2.007.tar.gz bash-3.00# gunzip postfix-policyd-spf-perl-2.007.tar.gz bash-3.00# tar xf postfix-policyd-spf-perl-2.007.tar - 4 -
3.2 policyd-spf-perl 모듈설치 아래와같이 postfix-policyd-spf-perl 스크립트를 /usr/loc al/lib 디렉토리에복사한다. bash-3.00# cd postfix-policyd-spf-perl-2.007 bash-3.00# cp postfix-policyd-spf-perl-2.007 /usr/local/lib/policyd-spf-perl 3.3 master.cf 설정변경 postfix를구동할때사용되는 master 프로세스의설정파일인 master.cf 파일의마지막라인에아래와같이추가한다. bash-3.00# vi /etc/postfix/master.cf policy unix - n n - 0 spawn ( 엔터) ( 한칸공백)user=nobody argv=/usr/sbin/postfix-policyd-spf-perl 주의) user=nobody 로시작하는라인의첫한칸을공백으로둔다. 3.4 main.cf 설정변경 postfix 의설정파일인 서비스를재시작한다. main.cf 의마지막라인에 아래와같은설정을추가하고 postfix bash-3.00# vi /etc/opt/csw/postfix/main.cf... smtpd_recipient_restrictions = reject_unauth_destination check_policy_service inet:127.0.0.1:9998 bash-3.00# svcadm restart cswpostfix - 5 -
III. SPF 적용여부확인및차단 SPF 인증결과, 메일발송 IP와 SPF 레코드에지정된 IP의일치여부에따라서 SPF pass 와 SPF fail/softfail 로구분된다. 확인방법은다음과같다. 1. SPF pass 인경우 아래와같이 /var/log/syslog 파일에서 SPF 인증이통과(pass) 된로그의 내용을확인할수있다. 해당메일은정상적으로수신되었다. bash-3.00# cat /var/log/syslog grep pass Jul 15 15:09:22 spf postfix/policy-spf[4463]: q1234: Policy action=prepend Received-SPF: pass (kisarbl.or.kr: x.x.x.x is... ( 중략) helo=test.com; client-ip=x.x.x.x 2. SPF fail/softfail 인경우 아래는 telnet 명령어를이용하여 SPF 인증기능이적용된메일서버로 접속하여메일발송을테스트하는과정이다. 메일발송 IP와 SPF 레코드의 IP가일치하지않기때문에 것을확인할수있다. 메일수신주소를입력하는단계에서차단된 표시된 URL 에서 SPF 인증이실패 (fail/softfail) 하여거부된상세사유를확인할수있다. bash-3.00# telnet mail.yourdomain.com 25 Connected to your (1.2.3.4). 220 mail.yourdomain.com ESMTP Postfix ehlo kisarbl.or.kr 250 mail.yourdomian.com Hello mail.funix.net [1.2.3.5], 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=9.8.7.6-6 -
2.1 reject 사유페이지확인 http://spf.pobox.com/why.html?sender=kisa%40kisarbl.or.kr&ip=x.x.x.x&receiver=0 페이지에서거부 (reject) 사유와해결방법을확인할수있다. [ 그림 2] SPF fail/softfail 시차단확인페이지 - 7 -
3. procmail 을이용한스팸차단방법 3.1 procmail 이란? 유닉스계열에서는메일을수신한후메일박스에전달할때마지막처리를 담당하는 MDA(Mail Delivery Agent) 프로그램으로서 procmail 이가장널리 사용되고있다. procmail 을 spfmilter 와연동하여 SPF fail/softfail 발생시메일을차단하는 대신에메일의제목에 [SPAM] 태그를추가하여스팸분류를하도록한다. 메일사용자들이 아웃룩익스프레스 등의메일클라이언트(MUA) 를이용하여 스팸으로자동분류를할수있게된다. 3.2 procmail 설치 아래와같이 wget 명령어를이용하여 procmail 을다운로드한다. 파일압축해제후패키지관리도구인 pkgadd 를이용하여설치한다. bash-3.00# wget \ ftp://ftp.sunfreeware.com/pub/freeware/intel/10/procmail-3.22-sol10-x86-local.gz bash-3.00# gunzip procmail-3.22-sol10-x86-local.gz bash-3.00# pkgadd -d `pwd`/procmail-3.22-sol10-x86-local 3.3 main.cf 설정변경 postfix 의설정파일인 재시작한다. main.cf 에아래와같은설정을추가하고 postfix 서비스를 bash-3.00# vi /etc/opt/csw/postfix/main.cf #mailbox_command = /some/where/procmail -a "$EXTENSION" mailbox_command = /usr/local/bin/procmail -a "$EXTENSION" # The mailbox_transport specifies the optional transport in master.cf bash-3.00# /etc/init.d/postfix restart - 8 -
3.4 procmail 룰셋작성 메일의제목에 [SPAM] 태그를추가하기위한룰셋을아래와같이 /etc/mail/procmailrc 파일에작성한다. /etc/mail/procmailrc 는모든사용자에게적용되는필터를정의할때사용하며, 만약특정사용자만적용하려면, 해당사용자의 ~/.procmailrc 파일에아래의설정을추가한다. bash-3.00# 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 } - 9 -
3.5 스팸차단확인 다음과같이 /var/log/procmail 파일에서 procmail 의로그를확인할수있다. SPF 인증결과가 fail/softfail 인경우에해당메일제목에 [SPAM] 태그가 추가되었으며사용자의메일박스(/var/mail/kisa) 에저장되었다. bash-3.00# 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-10 -