CentOS 운영체제 적용, Sendmail > server

본문 바로가기
사이트 내 전체검색

server

CentOS 운영체제 적용, Sendmail

페이지 정보

작성자 서방님 댓글 0건 조회 164회 작성일 17-02-15 16:20

본문

출처 : https://www.kisarbl.or.kr/use/spfUse.jsp



icon.gif개요
dot.gifSPF(메일서버 등록제)란?
메일서버등록제(SPF: Sender Policy Framework)는 메일서버 정보를 사전에 DNS에 공개 등록함으로써 수신자로 하여금 이메일에 표시된 발송자 정보가 실제 메일서버의 정보와 일치하는지를 확인할 수 있도록 하는 인증 기술이다.

대다수 스팸발송자가 자신의 신원을 감추기 위하여 발송자 주소나 전송 경로를 허위로 표기하거나 변경하는 경우가 많다는데 착안되었다.

※ SPF를 DNS에 설정하는 방법은 http://www.kisarbl.or.kr > White Domain 등록 > SPF 작성도우미 메뉴를 참고한다.

SPF를 이용하여 스팸메일을 차단하기 위해서는 메일서버에 SPF 인증 기능이 적용되어 있어야 한다.

Ubuntu 환경에서 기본적으로 설치된 메일서버에는 SPF 인증 기능이 적용되어 있지 않으므로 SPF 모듈 설치 및 패치를 해야 한다. 본 안내서는 메일 수신 서버에 SPF 인증 기능을 쉽게 적용하는 방법을 소개한다.
dot.gifSPF를 이용한 이메일 인증 절차
발신자 :자신의 메일서버 정보와 정책을 나타내는 SPF 레코드를 해당 DNS에 등록
수신자 :이메일 수신시 발송자의 DNS에 등록된 SPF 레코드를 확인하여 해당 이메일에 표시된 발송IP와 대조하고 그 결과 값에 따라 수신여부를 결정
(메일서버나 스팸차단솔루션에 SPF 인증 기능이 설치되어 있어야 함)
[그림 1] SPF 인증 흐름도
icon.gifsendmail, SPF 인증 기능 모듈설치
본 안내서는 운영체제 및 메일서버를 처음 구축하는 것을 기준으로 작성하였다. 설치 과정에서 사용하는 모든 명령어는 root 권한으로 실행해야 한다.
dot.gifsendmail 설치 여부 확인
CentOS에는 sendmail이 기본적으로 설치되어 있다. 아래는 telnet 명령어를 이용하여 tcp/25번 포트에 접속하여 메일 전송 프로그램(MTA: Mail Transfer Agent)이 동작하고 있는 상태를 확인하는 것으로써 sendmail이 동작하고 있음을 알 수 있다.
[root@spf ~]# telnet 0 25
Trying 0.0.0.0...
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
dot.gifsendmail-devel 설치
sendmail에는 SPF 인증 기능이 포함되어 있지 않으므로 libspf 라이브러리를 통합하여 구성해야 한다. libspf를 컴파일하기 전에 아래와 같이 패키지 설치/삭제 도구인 yum을 이용하여 'sendmail-devel' 패키지를 설치한다.
[root@spf ~]# yum install -y sendmail-devel
Loaded plugins: fastestmirror
................. (중략)
Installing : sendmail-devel 1/1
Installed:
sendmail-devel.i386 0:8.13.8-8.el5
dot.gifgcc 설치
1. gcc 설치 여부 확인
추가적으로 libspf2, spfmilter 라이브러리를 설치하기 위해서 소스코드를 컴파일 해야 한다. 아래와 같이 gcc 설치 여부를 확인한다.
※ libspf2, spfmilter는 sendmail에서 제공하는 기본적인 '메일 필터 플러그인 채널(milter)'을 통해서 SPF 인증 기능을 수행하는 라이브러리이다.
[root@spf ~]# gcc --version
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. 
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
2. 설치
gcc가 설치되어 있지 않다면 아래와 같이 yum을 이용하여 설치한다.
[root@spf ~]# yum install -y gcc 
Loading mirror speeds from cached hostfile
* addons: mirror.khlug.org
* base: mirror.khlug.org
................. (중략)
Running Transaction
Installing : gcc 1/1
Installed:
gcc.i386 0:4.1.2-48.el5
dot.giflibspf2 설치
'libspf2'는 spfmilter를 이용하여 SPF 인증 기능을 적용하기 위한 필수 라이브러리이다.
1. 다운로드 및 압축 해제
아래와 같이 wget 명령어를 이용하여 'libspf2-1.0.4' 라이브러리를 다운로드 한 후 압축을 해제한다.
[root@spf ~]# wget http://www.libspf2.org/spf/libspf2-1.0.4.tar.gz
http://www.libspf2.org/spf/libspf2-1.0.4.tar.gz
................. (중략)
`libspf2-1.2.5.tar.gz' saved [517945/517945]
[root@spf ~]# tar xzf libspf2-1.0.4.tar.gz
2. 설치
아래와 같이 libspf2를 설치한다.
[root@spf ~]# cd libspf2-1.0.4
[root@spf libspf2-1.0.4]# ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
................. (중략)
config.status: executing depfiles commands
[root@spf libspf2-1.0.4]# make && make install
make all-recursive
................. (중략)
※ '/usr/local/bin' 디렉토리에 프로그램이 설치된다.
dot.gifspfmilter 설치
spfmilter는 sendmail 기반에서 사용되는 오픈소스 기반의 'mail filter' 프로그램이다.
1. 다운로드 및 압축 해제
아래와 같이 'spfmilter-0.97'을 다운로드 한 후 압축을 해제한다.
[root@spf ~]# wget http://www.acme.com/software/spfmilter/spfmilter-0.97.tar.gz
Resolving www.acme.com... 
................. (중략)
`spfmilter-0.97' saved [56280/56280]
[root@spf ~]# tar xzf spfmilter-0.97.tar.gz
2. 설치
아래와 같이 spfmilter를 설치한다.
[root@spf ~]# cd spfmilter-0.97
[root@spf spfmilter-0.97]# ./configure
checking for gcc... gcc
checking for C compiler default output... a.out
................. (중략)
configure: creating ./config.status
config.status: creating Makefile
[root@spf spfmilter-0.97]# make && make install
make[1]: Entering directory `/root/spfmilter-1.0.8'
/bin/sh ./mkinstalldirs /usr/local/sbin
  /usr/bin/install -c spfmilter /usr/local/sbin/spfmilter
/bin/sh ./mkinstalldirs /usr/local/man/man8
  /usr/bin/install -c -m 644 ./spfmilter.8 /usr/local/man/man8/spfmilter.8
make[1]: Leaving directory `/root/spfmilter-1.0.8'
※ '/usr/local/bin' 디렉토리에 프로그램이 설치된다.
dot.gifspfmilter 연동
1. MILTER 설치 여부 확인
sendmail과 spfmilter를 연동하기 위해서는 MILTER가 설치되어 있어야 한다. 아래와 같이 MILTER의 설치 여부를 확인한다.
[root@spf ~]# sendmail -d0.1 -bt < /dev/null | grep MILTER
MATCHGECOS MILTERMIME7TO8 MIME8TO7 NAMED_BIND NETINET NETINET6
2. sendmail.cf 설정 변경
sendmail과 spfmilter의 연동을 위해서 아래와 같이 sendmail의 설정 파일인 sendmail.cf의 마지막 라인에 설정을 추가한다.
[root@spf ~]# cd /etc/mail
[root@spf ~]# vi sendmail.cf
................. (중략)
dnl MAILER(cyrusv2)dnl
INPUT_MAIL_FILTER(`spfmilter',`S=unix:/var/run/spfmilter.sock, T=S:4m;R:4m') 
[root@spf mail]# m4 < sendmail.mc > sendmail.cf
3. spfmilter 실행 및 sendmail 재시작
spfmilter가 sendmail보다 먼저 실행되어야 정상적으로 동작하므로 아래와 같이 순서에 맞게 데몬을 구동한다.
[root@spf ~]# /usr/local/sbin/spfmilter unix:/var/run/spfmilter.sock -d
[root@spf ~]# serivce sendmail restart
※ 주의)spfmilter 실행시 'spfmilter: error while loading shared libraries: libspf2.so.1: cannot open shared object file: No such file or directory' 과 같은 에러가 발생하게 될 경우 아래와 같이 환경변수를 설정한다.
[root@spf ~]# export LD_LIBRARY_PATH=/usr/local/lib
icon.gifSPF 적용 여부 확인 및 차단
SPF 인증 결과, 메일 발송 IP와 SPF 레코드에 지정된 IP의 일치 여부에 따라서 'SPF pass'와 'SPF fail/softfail'로 구분된다. 확인 방법은 다음과 같다.
dot.gifSPF pass인 경우
아래와 같이 '/var/log/syslog' 파일에서 SPF 인증이 통과(pass)된 로그의 내용을 확인할 수 있다. 해당 메일은 정상적으로 수신되었다.
Jul 19 17:28:50 spf sendmail[5447]: o6L8SoeM005447: Milter add: header: Received-SPF: pass (kisarbl.or.kr: domain of test.com designates x.x.x.x as permitted sender) receiver=kisarbl.or.kr; client-ip=x.x.x.x; helo=example.com; envelope-from=xxx@kisarbl.or.kr; x-software=spfmilter 0.93 http://www.acme.com/software/spfmilter/;
dot.gifSPF 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).
Escape character is '^]'.
220 mail.yourdomian.com ESMTP Sendmail 8.13.8; Wed, 28 Jul 2010 15:56:42 +0900
ehlo test.com
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= 9.8.7.6&receiver=spf.kisa.or.kr (차단되었음을 확인 할 수 있음)
quit (접속종료)
reject 사유 페이지 확인
'http://spf.pobox.com/why.html?sender=kisa%40kisarbl.or.kr&ip=x.x.x.x&receiver=0' 페이지에서 거부(reject) 사유와 해결 방법을 확인할 수 있다.
spfuse_img_reject.jpg
[그림 2] SPF fail/softfail 시 차단 확인 페이지
dot.gifprocmail을 이용한 스팸 차단 방법
1. procmail이란?
유닉스 계열에서는 메일을 수신한 후 메일 박스에 전달할 때 마지막 처리를 담당하는 MDA(Mail Delivery Agent) 프로그램으로서 procmail이 가장 널리 사용되고 있다.

procmail을 spfmilter와 연동하여 'SPF fail/softfail' 발생 시 메일을 차단하는 대신에 메일의 제목에 [SPAM] 태그를 추가하여 스팸 분류를 하도록 한다.

메일 사용자들이 '아웃룩 익스프레스' 등의 메일 클라이언트(MUA)를 이용하여 스팸으로 자동 분류를 할 수 있게 된다.
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 porcmail
3. sendmail.cf 설정 확인
sendmail의 설정 파일인 sendmail.cf에 아래와 같은 설정이 존재하는지 확인한다.
[root@spf log]# 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
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
}
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==?= =?ks_c_5601-1987?B?sdfD37Ch?=
procmail: Skipped "| $SPAM_SPF_LOG"

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

댓글목록

등록된 댓글이 없습니다.

Total 356건 6 페이지
게시물 검색

회원로그인

접속자집계

오늘
92
어제
84
최대
1,347
전체
154,463
Latest Crypto Fear & Greed Index

그누보드5
Copyright © 서방님.kr All rights reserved.