메일서버등록제(SPF) 인증기능적용안내서 (CentOS - postfix) OS Mail Server SPF 적용모듈 (Perl 기반) 작성기준 CentOS 5.4 32bit Postfix 2.3.3 postfix-policydspf-perl 2.007 2010. 9
목 차 I. 개요 1 1. SPF( 메일서버등록제) 란? 1 2. SPF 를이용한이메일인증절차 1 II. postfix, SPF 인증모듈설치 2 1. postfix 설치 2 2. Mail::SPF 모듈설치 3 3. postfix-policyd-spf-perl 설치및연동 6 III. SPF 적용여부확인및차단 7 1. SPF pass 인경우 7 2. SPF fail/softfail 인경우 7 3. procmail 을이용한스팸차단방법 9
I. 개요 1. SPF( 메일서버등록제) 란? 메일서버등록제 (SPF: Sender Policy Framework) 는메일서버정보를사전에 DNS 에공개등록함으로써수신자로하여금이메일에표시된발송자정보가 실제메일서버의정보와일치하는지를확인할수있도록하는인증기술이다. 대다수스팸발송자가자신의신원을감추기위하여발송자주소나전송경로를 허위로표기하거나변경하는경우가많다는데착안되었다. SPF를 DNS에설정하는방법은 http://www.kisarbl.or.kr > White Domain 등록작성도우미메뉴를참고한다. > SPF SPF를이용하여스팸메일을차단하기위해서는메일서버에 적용되어있어야한다. SPF 인증기능이 CentOS 환경에서기본적으로설치된메일서버에는 SPF 인증기능이적용되어 있지않으므로 SPF 모듈설치및패치를해야한다. 본안내서는메일수신 서버에 SPF 인증기능을쉽게적용하는방법을소개한다. 2. SPF 를이용한이메일인증절차 발신자 : 자신의메일서버정보와정책을나타내는 SPF 레코드를해당 DNS에등록 수신자 : 이메일수신시발송자의 DNS에등록된 SPF 레코드를확인하여 해당이메일에표시된발송IP와대조하고그결과값에따라수신여부를결정 ( 메일서버나스팸차단솔루션에 SPF 인증기능이설치되어있어야함) [ 그림 1] SPF 인증흐름도 - 1 -
II. postfix, SPF 인증모듈설치 본안내서는운영체제및메일서버를처음구축하는것을기준으로작성하였다. 설치과정에서사용하는모든명령어는 root 권한으로실행해야한다. 1. postfix 설치 CentOS 에는 sendmail 이기본적으로설치되어있다. postfix 를설치하면 tcp/25 번 포트충돌이발생하므로제거하도록한다. 아래는 telnet 명령어를이용하여 tcp/25번포트에접속하여메일전송 프로그램(MTA: Mail Transfer Agent) 이동작하고있는상태를확인하는 것으로써 sendmail 이동작하고있음을알수있다. [root@spf ~]# telnet 0 25 ( 메일서버 25 번포트접속) Connected to 0 (0.0.0.0). Escape character is '^]'. 220 spf.kisa.or.kr ESMTP Sendmail 8.13.8/8.13.8; Thu, 1 Jul 2010 21:20:22 +0900 quit ( 접속종료) 221 2.0.0 spf.kisa.or.kr closing connection Connection closed by foreign host. 아래와같이패키지관리도구인 rpm 을이용하여기존에설치된 sendmail 을삭제한다. [root@spf ~]# rpm -e sendmail --nodeps --nodeps 는패키지의의존성을무시하고해당패키지를삭제하는옵션이다. 아래와같이패키지설치/ 삭제도구인 yum을이용하여 postfix를설치한다. [root@spf ~]# yum install -y postfix Loaded plugins: fastestmirror Installed: postfix.i386 2:2.3.3-2.1.el5_2-2 -
2. Mail::SPF 모듈설치 postfix 에서 SPF 인증기능을적용할수있는라이브러리로는 perl 스크립트로 작성된 postfix-policyd-spf-perl 이있다. 이모듈을사용하기위해서는 Mail::SPF perl 모듈이설치되어있어야한다. Mail::SPF 모듈을컴파일을하기위해서는아래의조건을만족해야한다. * 컴파일조건: Perl 5.6 이상 * 필요모듈: Module-Build 0.2805, Test-More, Net-DNS-Resolver-Programmable 0.002.1, version, Error, NetAddr-IP 4, Net-DNS 0.58, URI 1.13 해당모듈은 http://search.cpan.org 에서다운로드할수있다. 설치도중다른 perl 모듈을요구하는경우가있으므로수동으로해당모듈을설치하는 대신에 CPAN 자동설치유틸리티를사용하는것을권장한다. CPAN 은모듈의 의존성을자동으로확인하므로 perl 모듈을쉽게설치할수있다. 2.1 CPAN 설치 먼저 CPAN 을설치하도록한다. 아래와같이설정값과디렉토리를선택하는 단계에서엔터(enter) 를입력하여기본값으로설치한다. [root@spf ~]# perl -MCPAN -e shell /usr/lib/perl5/5.8.8/cpan/config.pm initialized. Are you ready for manual configuration? [yes] CPAN build and cache directory? [/root/.cpan] Where is your tar program? [/bin/tar] CPAN: LWP::UserAgent loaded ok Fetching with LWP: ( 엔터) ftp://ftp.perl.org/pub/cpan/mirrored.by ( 엔터) ( 엔터) - 3 -
아래와같이 perl 모듈을다운로드할미러사이트를선택한다. (2) Asia (3) Australasia (4) Central America (5) Europe (6) North America (7) Oceania (8) South America Select your continent (or several nearby continents) [] 2 (6) Republic of Korea (7) Russia (8) Singapore (9) Taiwan (10) Thailand (11) Turkey Select your country (or several nearby countries) [] 6 Sorry! since you don't have any existing picks, you must make a geographic selection. (1) ftp://cpan.mirror.cdnetworks.com/cpan/ (2) ftp://cpan.sarang.net/cpan/ (3) ftp://ftp.kaist.ac.kr/pub/cpan Select as many URLs as you like (by number), put them on one line, separated by blanks, e.g. '1 4 5' [] 1 2 3 cpan> install Bundle::CPAN CPAN: Storable loaded ok Fetching with LWP: Running make install cpan> quit - 4 -
2.3 CPAN을이용한 Mail::SPF 자동설치 아래와같이 CPAN 을실행한후 install Mail::SPF 를입력하면의존성 문제로인하여모듈이설치되지않고경고문구가나타난다. [root@spf ~]# cpan cpan> install Mail::SPF...( 중략) Make had some problems, maybe interrupted? Won't test Running make install Make had some problems, maybe interrupted? Won't install Mail::SPF 설치에필요한모듈이 /root/.cpan 디렉토리에다운로드되어있으므로 아래와같이디렉토리를이동하여설치하도록한다. [root@spf ~]# cd /root/.cpan/build/mail-spf-v2.007 [root@spf Mail-SPF-v2.007]#./Build installdeps Checking optional dependencies: Install NetAddr::IP? [y] y...( 중략) /usr/bin/make install NetAddr::IP is up to date. -- OK [root@spf Mail-SPF-v2.007]#./Build install Building Mail-SPF...( 중략) Installing /usr/bin/spfquery Writing /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/mail/spf/.packlist - 5 -
3. postfix-policyd-spf-perl 설치및연동 3.1 다운로드및압축해제 아래와같이 perl 기반의 SPF 인증모듈인 postfix-policyd-spf-perl 을다운로드한후 압축을해제한다. 3.2 policyd-spf-perl 모듈설치 아래와같이 postfix-policyd-spf-perl 스크립트를 /usr/loc al/lib 디렉토리에복사한다. [root@spf ~]# cd postfix-policyd-spf-perl-2.007 [root@spf ~]# cp postfix-policyd-spf-perl /usr/local/lib/policyd-spf-perl 3.3 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.4 main.cf 설정변경 postfix 의설정파일인 서비스를재시작한다. main.cf 의마지막라인에 아래와같은설정을추가하고 postfix [root@spf ~]# vi /etc/postfix/main.cf...( 중략) smtpd_recipient_restrictions = reject_unauth_destination check_policy_service unix:private/policy [root@spf ~]# /etc/init.d/postfix restart - 6 -
III. SPF 적용여부확인및차단 SPF 인증결과, 메일발송 IP와 SPF 레코드에지정된 IP의일치여부에따라서 SPF pass 와 SPF fail/softfail 로구분된다. 확인방법은다음과같다. 1. SPF pass 인경우 아래와같이 /var/log/maillog 파일에서 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 helo=example.com; client-ip=x.x.x.x (kisarbl.or.kr: x.x.x.x is... ( 중략) 2. SPF fail/softfail 인경우 아래는 telnet 명령어를이용하여 SPF 인증기능이적용된메일서버로 접속하여메일발송을테스트하는과정이다. 메일발송 IP와 SPF 레코드의 IP가일치하지않기때문에 것을확인할수있다. 메일수신주소를입력하는단계에서차단된 표시된 URL 에서는 SPF 인증이실패 (fail/softfail) 하여거부된상세사유를확인할수있다. [root@ ~]# telnet 메일서버IP 25 ( 공인 IP 만가능하며, 127.0.0.1 은확인불가) Connected to your (1.2.3.4). 220 mail.yourdomain.com ESMTP Postfix ehlo example.com 250 mail.yourdomian.com Hello mail.yourdomain.com [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=1.2.3.5;r=unknown quit ( 접속종료) - 7 -
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 시차단확인페이지 - 8 -
3. procmail 을이용한스팸차단방법 3.1 procmail 이란? 유닉스계열에서는메일을수신한후메일박스에전달할때마지막처리를 담당하는 MDA(Mail Delivery Agent) 프로그램으로서 procmail 이가장널리 사용되고있다. procmail 을 spfmilter 와연동하여 SPF fail/softfail 발생시메일을차단하는 대신에메일의제목에 [SPAM] 태그를추가하여스팸분류를하도록한다. 메일사용자들이 아웃룩익스프레스 등의메일클라이언트(MUA) 를이용하여 스팸으로자동분류를할수있게된다. 3.2 procmail 설치 아래와같이 rpm을이용하여 있지않다면패키지관리도구인 procmail의설치여부를확인한후설치되어 yum 을이용하여설치한다. [root@spf log]# rpm -qa grep procmail procmail-3.22-17.1.el5.centos [root@spf log]# yum install -y procmail 3.3 main.cf 설정변경 postfix 의설정파일인 재시작한다. main.cf 에아래와같은설정을추가하고 postfix 서비스를 [root@spf log]# 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 log]# /etc/init.d/postfix restart - 9 -
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: \/.* { } # Subject :0 * ^Subject: \/.* { } FROM = "$MATCH" SUBJECT = "$MATCH" LOG="=====SPF_filter($STAT) F=$FROM, S=$SUBJECT" :0fwh * ^Subject: \/.* formail -I "Subject: [SPAM] $SUBJECT" $SPAM_SPF_LOG - 10 -
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-11 -