메일서버등록제(SPF) 인증기능적용안내서 (SunOS - Sendmail) OS Mail Server SPF 적용모듈 (C 언어기반) 작성기준 SunOS 5.10 32bit sendmail 8.13.8 spfmilter 0.98 2016
목 차 I. 개요 1 1. SPF( 메일서버등록제) 란? 1 2. SPF 를이용한이메일인증절차 1 II. sendmail, SPF 인증모듈설치 2 1. sendmail 설치여부확인 2 2. libspf2 설치 2 3. spfmilter 설치 3 4. spfmilter 연동 4 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 인증기능이 SunOS 환경에서기본적으로설치된메일서버에는 SPF 인증기능이적용되어 있지않으므로 SPF 모듈설치및패치를해야한다. 본안내서는메일수신 서버에 SPF 인증기능을쉽게적용하는방법을소개한다. 2. SPF 를이용한이메일인증절차 발신자 : 자신의메일서버정보와정책을나타내는 SPF 레코드를해당 DNS에등록 수신자 : 이메일수신시발송자의 DNS에등록된 SPF 레코드를확인하여 해당이메일에표시된발송IP와대조하고그결과값에따라수신여부를결정 ( 메일서버나스팸차단솔루션에 SPF 인증기능이설치되어있어야함) [ 그림 1] SPF 인증흐름도 - 1 -
II. sendmail, SPF 인증모듈설치 본안내서는운영체제및메일서버를처음구축하는것을기준으로작성하였다. 설치과정에서사용하는모든명령어는 root 권한으로실행해야한다. 1. sendmail 설치여부확인 SunOS 에는 이용하여 sendmail 이기본적으로설치되어있다. 아래는 telnet 명령어를 tcp/25번 포트에접속하여메일전송프로그램 (MTA: Mail Transfer Agent) 이동작하고있는상태를확인하는것으로써 sendmail 이 있음을알수있다. 동작하고 bash-3.00# telnet 0 25 ( 메일서버 25 번포트접속) Trying 0.0.0.0... Connected to 0. Escape character is '^]'. 220 spf.kisa.or.kr ESMTP Sendmail 8.13.8+Sun/8.13.8; Mon, 5 Jul 2010 02:05:28 +0900 (KST) quit ( 접속종료) 221 2.0.0 spf closing connection 2. libspf2 설치 libspf2 는 spfmilter 를이용하여 SPF 인증기능을적용하기위한필수라이브러리이다. 아래와같이 SunOS 프리웨어다운로드사이트인 http://www.sunfreeware.com 으로부터 wget 명령어를이용하여 libspf2-1.2.9 파일을다운로드한후압축을 해제한다. SunOS 패키지관리도구인 pkgadd 를이용하여 libspf2 를설치한다. - 2 -
bash-3.00# wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/\ libspf2-1.2.9-sol10-x86-local.gz bash-3.00# gunzip libspf2-1.2.9-sol10-x86-local.gz bash-3.00# pkgadd -d libspf2-1.2.9-sol10-x86-local The following packages are available: 1 SMClspf2 libspf2... (x86) 1.2.9 <SMClspf2>( 이) 가성공적으로설치되었습니다. 3. spfmilter 설치 spfmilter 는 sendmail 기반에서사용되는오픈소스기반의 mail filter 프로그램이다. 아래와같이 SunOS 프리웨어다운로드사이트인 http://www.sunfreeware.com 으로부터 wget 명령어를이용하여 spfmilter-0.98gwh 해제한다. pkgadd 를이용하여 spfmilter 를설치한다. 파일을다운로드한후압축을 bash-3.00# wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/ \ spfmilter-0.98gwh-sol10-x86-local.gz bash-3.00# gunzip spfmilter-0.98gwh-sol10-x86-local.gz bash-3.00# pkgadd -d spfmilter-0.98gwh-sol10-x86-local The following packages are available: 1 SMCspfm spfmilter... (x86) 0.98gwh <SMCspfm>( 이) 가성공적으로설치되었습니다. /usr/local/sbin 에실행파일이설치된다. - 3 -
4. spfmilter 4.1 MILTER 연동 설치여부확인 sendmail 과 spfmilter 를연동하기위해서는 MILTER 가설치되어있어야한다. 아래와같이 MILTER 의설치여부를확인한다. bash-3.00# sendmail -d0.1 -bt < /dev/null grep MILTER Compiled with: DNSMAP LDAPMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 4.2 sendmail.cf 설정변경 sendmail 과 spfmilter 의연동을위해서아래와같이 sendmail 의설정파일인 sendmail.cf 의마지막라인에설정을추가한다. bash-3.00# cd /etc/mail bash-3.00# vi sendmail.cf... ( 중략) O InputMailFilters=spfmilter Xspfmilter, S=unix:/var/run/spfmilter.sock, T=S:4m;R:4m 4.3 spfmilter 실행및 sendmail 재시작 spfmilter 가 sendmail 보다먼저실행되어야정상적으로동작하므로아래와같이 순서에맞게데몬을구동한다. bash-3.00# /usr/local/sbin/spfmilter unix:/var/run/spfmilter.sock -d bash-3.00# cd /etc/init.d bash-3.00# svcadm restart sendmail - 4 -
III. SPF 적용여부및차단확인 SPF 인증결과, 메일발송 IP와 SPF 레코드에지정된 IP의일치여부에따라서 SPF pass 와 SPF fail/softfail 로구분된다. 확인방법은다음과같다. 1. SPF pass 인경우 아래와같이 /var/log/syslog 파일에서 SPF 인증이통과(pass) 된로그의 내용을확인할수있다. 해당메일은정상적으로수신되었다. Jul 29 13:23:26 spf sendmail[5474]: [ID 801593 mail.info] o6t4mrbd005474: Milter insert (0): header: Received-SPF: pass (spf: domain of example.com d o e s n o t designate x.x.x.x as permitted sender) receiver=kisarbl.or.kr; client-ipx.x.x.x; helo=kisarbl.or.kr; envelope-from=xxx@kisarbl.or.kr; x-software=spfmilter 0.98-gwh with libspf2-1.2.9; 2. SPF fail/softfail 인경우 아래는 telnet 명령어를이용하여 SPF 인증기능이적용된메일서버로 접속하여메일발송을테스트하는과정이다. 메일발송 IP와 SPF 레코드의 IP가일치하지않기때문에 것을확인할수있다. 메일수신주소를입력하는단계에서차단된 표시된 URL 에서는 SPF 인증이실패 (fail/softfail) 하여거부된상세사유를확인할수있다. bash-3.00# telnet 메일서버IP 25 ( 공인 IP 만가능하며, 127.0.0.1 은확인불가) Connected to your (1.2.3.4). Escape character is '^]'. 220 mail.yourdomian.com ESMTP Sendmail 8.13.8+Sun/8.13.8; Mon, 5 Jul 2010 02:05:28 +0900 (KST) 250 mail.yourdomian.com Hello example.com [1.2.3.5], pleased to meet you mail from: test@kisarbl.or.kr 250 ok rcpt to: test@yourdomain.com 550 5.7.1 test@kisarbl.or.kr... ( 메일발신주소) ( 메일수신주소) Please see http://spf.pobox.com/why.html?sender=test@kisarbl.or.kr&ip= 1.1.1.1&receiver=spf.kisa.or.kr( 차단되었음을확인할수있음) quit ( 접속종료) - 5 -
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 시차단확인페이지 - 6 -
3. procmail 을이용한스팸차단방법 3.1 procmail 이란? 유닉스계열에서는메일을수신한후메일박스에전달할때마지막처리를 담당하는 MDA(Mail Delivery Agent) 프로그램으로서 procmail 이가장널리 사용되고있다. procmail 은 spfmilter 와연동하여 SPF fail/softfail 발생시메일을차단하는 대신에메일의제목에 [SPAM] 태그를추가하여스팸분류를하도록한다. 메일사용자들이 아웃룩익스프레스 등의메일클라이언트(MUA) 를이용하여 스팸으로자동분류를할수있게된다. 3.2 procmail 설치 아래와같이 wget 명령어를이용하여 procmail 패키지를다운로드한다. 파일압축해제후패키지관리도구인 bash-3.00# wget \ pkgadd 를이용하여설치한다. 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 sendmail.cf 설정변경 sendmail 의설정파일인 sendmail.cf 에아래와같은설정을추가하고 sendmail 서비스를재시작한다. bash-3.00# vi /etc/mail/senmail.cf Mprocmail, P=/usr/bin/procmail, F=DFMSPhnu9, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP/HdrFromSMTP, T=DNS/RFC822/X-Unix, A=procmail -Y -m $h $f $u bash-3.00# svcadm restart sendmail - 7 -
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: \/.* { } # 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 - 8 -
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-9 -