이메일발송포트사용제한 기타OS - Sendmail 사용설명서 OS Mail Server 작성기준 ( 최적화버전) 기타 Sendmail 8.14.8 유사 버전 기타 Unix/ Linux Sendmail 8.10 ~ Sendmail 8.14 Sendmail 8.10버전이상으로 지원하므로 SMTP-AUTH를 Sendmail 8.10버전미만의경우버 전업그레이드를해야함. 방송통신위원회 한국인터넷진흥원
악성코드에의한스팸발송( 봇넷발스팸) 을차단하기위해서는 인터넷서비스제공자(ISP) 의네트워크장비에서초고속인터넷가입 자대상으로메일전송포트인 25 포트(SMTP) 를차단하게된다. 차 단시스패머의스팸메일과정상이용자의정상메일또한같이차 단된다. 따라서정상적인사용자의메일전송을위해서는메일서버에서 대체포트인 587 포트(Submission) 를추가로제공해주어야한다. 단순히대체포트만제공해주어서는스패머역시 전송이가능하므로메일서버의 하여스패머가 587포트로메일 587포트에사용자인증기능을설정 587 포트를통한스팸발송을하지못하도록한다. 또한네트워크상도청을통한사용자의계정정보탈취가우려 되므로이를위해 SSL/TLS 통신채널을구성을권장한다.
[ 587 포트전환다이어그램] - 1 -
telnet localhost 25" 을입력하여운영중인메일서버와버전을확인한다. - 2 -
Cyrus - SASL2 Library의경우 openssl 0.9 openssl 0.9 버전이하의경우는설치를하여야한다. 버전에적용되기때문에 find / -name libssl*" 명령어를입력하여 openssl 의버전을확인한다. 검색결과파일이없을경우 openssl 을다운로드하여설치한다. wget http://www.openssl.org/source/openssl-0.9.7c.tar.gz" 를입력한다. - 3 -
다운로드디렉터리로이동후 tar zxvf openssl-0.9.7c.tar.gz" 명령어로압 축을해제한다. cd openssl-0.9.7c" 를입력하여소스디렉터리로이동후./config shared" 명령어로컴파일설정을한다. - 4 -
"make && make install" 명령어로컴파일및설치한다. PATH 설정을위해 vi /etc/profile" 을입력하여다음과같이맨아래에 PATH 설정을추가한다. - 5 -
라이브러리 다. PATH 설정을위해같은파일의맨아래에다음라인을추가한 "openssl version" 명령어를입력하여설치한버전이맞는지확인한다. - 6 -
wget --passive-ftp ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl- 2.1.23.tar.gz" 를입력하여다운로드한다. tar zxvf cyrus-sasl-2.1.23.tar.gz" 명령어로압축을해제한다. - 7 -
"cd cyrus-sasl-2.1.23" 명령어로소스디렉터리로이동후컴파일옵션을설정한다. 다음을입력한다../configure --disable-anon --enable-plain --enable-login --disable-krb 4 --with-saslauthd=/var/run/saslauthd --with-pam --with-openssl=/usr/lo cal/ssl --with-plugindir=/usr/local/lib/sasl2 --disable-cram --disable-dige st --disable-otp" /var/run/saslauthd : saslauthd 실행시임시파일들이생성될디렉터리 /usr/local/ssl : openssl이설치된디렉터리 /usr/local/lib/sasl2 : cyrus-sasl2 라이브러리가설치된디렉터리 "make && make install" 명령어로컴파일및설치한다. - 9 -
"saslauthd -v" 를입력하여버전을확인한다. - 10 -
"wget ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.14.3.tar.gz" 명령어 를입력하여 sendmail 소스를다운받는다. "tar zxvf sendmail.8.14.3.tar.gz" 명령어를입력하여압축을풀어준다. - 11 -
"groupadd -g 75 smmsp" 와 smmsp" 명령어를입력하여유저생성을한다. "useradd -c "sendmail" -u 75 -g smmsp vi./devtools/site/site.config.m4" 명령어를입력하여컴파일설정파일생 성한다. - 12 -
설정파일의내용은다음과같다. /usr/local/berkeleydb.4.7/lib : BerkeleyDB 라이브러리디렉터리 /usr/local/berkeleydb.4.7/include : BerkeleyDB 헤더파일디렉터리 /usr/local/lib/sasl2 : sasl2 라이브러리디렉터리 /usr/local/include/sasl : sasl2 헤더파일디렉터리 /usr/local/ssl/lib : openssl 라이브러리디렉터리 /usr/local/ssl/include : openssl 헤더파일디렉터리 입력시따옴표에주의한다. 왼쪽은키보드 1 왼쪽의 ( ` ) 이고, 오른쪽 은엔터키왼쪽의 ( ) 이다. - 13 -
./Build" 명령어로컴파일한다. mkdir /usr/man" "mkdir /usr/man/man1" "mkdir /usr/man/man5" "mkdir /usr/man/man8" 명령어를입력한후./Build install " 명령어로설치한다. 매뉴얼디렉터리가존재하지않으면설치가안된다. - 14 -
"cp obj.linux.2.6.27-11-generic.i686/mail.local/mail.local /usr/lib" 명령어를입력하여로컬파일을복사한다. 이파일이있어야메일이로컬에저장된다. obj 파일은 OS에따라이름이다르게생성되기때문에해당 OS에맞는 파일을복사한다. "/usr/sbin/sendmail -d0 < /dev/null" 명령어를입력하여 용중인기능들중에서 sasl2와 starttls 를확인한다. sendmail에서사 - 15 -
cd /etc/mail" 명령어를입력하여메일설정디렉터리로이동한후 vi local-host-names" 를입력한다. 다음내용을기록한다. 메일서버의로컬호스트네임을쓴다. - 16 -
"vi relay-domains" 를입력한다. 릴레이를허용할도메인을기록한다. - 17 -
"vi access" 를입력한다. 메일을릴레이할 IP 대역을설정한다. "0.0.0.0 RELAY" 를쓰면오픈릴레이가 되기때문에주의가필요하다. 서비스를할이용자의 IP 만적도록한다. - 18 -
makemap hash access < access 를입력하여 db 파일로변환한다. aliases설정을위해 "cp (sendmail 소스디렉터리)/sendmail/aliases /etc/mail/ " 을입력하여샘플 aliase 파일을복사한후, "mkdir /var/spool/mqueue" 로디 렉터리를생성한다. chown root:bin /var/spool/mqueue", chmod 750 /var/ spool/mqueue" 를입력하여권한을설정하고 newaliases" 명령어로 일을자동생성한다. aliases파 - 19 -
SMTP-AUTH를통한인증을구현시사용자아이디와패스워드를암호화 되지않고전송이된다면사용자정보의노출위험이있으므로이를보완하 기위해서는이메일서버와클라이언트사이의통신에 SSL/TLS 통신채널 을제공하는 STARTTLS (STARTTLS는 RFC2487에정의된 SMTP 프로토콜 의확장으로 SSL/TLS 채널을이용해이메일전송을암호화하는방법임) 패 키지를설치하여사용자정보노출을최소화해야한다. SSL/TLS 통신채널구성을위해서는 SSL인증서가필요하며이런 SSL인증 서는인증기관(CA) 의 SSL서버인증서를정식으로발급받거나개인이사설SS L 인증서를생성하는방법이있다. SSL 인증기관(CA) 에정식으로 SSL 서버 인증서를발급받고자하는경우한국정보인증 (www.signgate.com), 한국 전자인증(gca.crosscert.com) 등인증기관(CA) 의인증을대행해주는곳에 서연일정수수료를지불하여신청하면된다. 정식으로인증서발급후 STEP 4 부터진행하면된다. 무료로사설 SSL인 증서의생성을원하시는경우(CASE 1) SETP 6 ~ STEP 11을진행하면되 고인증서가기존에있는경우(CASE 2) STEP 7 부터진행하면된다. 혹은 SSL 채널구성을하지않을경우(CASE 3) 는 STEP 8 부터진행하면된다. 사설SSL인증서사용시사용자가메일서버를접속할할때마다 신뢰할 수없는인증서 라는메시지표시 - 20 -
인증서생성을하기전에저장할디렉터리로이동하기위해 "cd /usr/local/ ssl/certs" 를입력한다. 인증서생성을하기위해 "openssl req -newkey rs a:2048 -nodes -out req.pem -keyout req.key" 를입력한다. 아래정보에는 해당되는사항을기록하고, Common Name에는메일서버의 FQDN을입력한 다. - 21 -
openssl genrsa -des3 -out ca.key 2048" 을입력한다. Enter pass phras e for ca.key 에는사설인증서생성을위해임시패스워드를입력한다. csr, crt 파일등을생성시동일하게입력해야하므로기억해둔다. openssl req -new -x509 -days 365 -key ca.key -out ca.crt" 를입력한다. 아래정보에는해당되는사항을기록한다. - 22 -
openssl x509 -req -CA ca.crt -CAkey ca.key -days 365 -in req.pem -out signed-req.pem -CAcreateserial" 을입력하고 "chmod 600 *" 을입력 하여인증서들의권한을수정한다. - 23 -
STARTTLS 활성화를위해 sendmail 의설정파일을수정해야한다. sendmail 소스디렉터리( 여기서는 /down/sendmail-8.14.3) 로이동후 "cd cf/cf" 을 입력한다. 샘플파일을복사하여사용하기위해 "cp generic-linux.mc send mail.mc" 를입력하고 "vi sendmail.mc" 를입력한다. Unix 의경우 "cp generi c-linux.mc sendmail.mc" 대신 "cp generic-unix.mc sendmail.mc" 를실행 한다. 그외에다른 OS도알맞은 mc 파일을복사하고진행한다. - 24 -
STARTTLS 활성화를하기위해아래내용을적당한곳에추가한다. /usr/local/ssl/certs : 앞서사설인증서를저장한디렉터리 입력시따옴표에주의한다. 왼쪽은키보드 1 왼쪽의 ( ` ) 이고, 오른쪽 은엔터키왼쪽의 ( ) 이다. 수정된설정파일을적용하기위해./Build sendmail.cf" 와./Build install-c f" 를입력한다. - 25 -
sendmail 서비스를재시작한후 S 기능이활성화되었는지확인해본다. telnet locahost 25" 를입력하여 STARTTL - 26 -
SASL(Simple Authentication and Security Layer) 은 RFC2222에정의된프 로토콜로서, 이를구현한다양한라이브러리가메일서버에서 SMTP AUTH기 능을구현하기위해널리사용되고있다. 인증용 SASL 라이브러리는 PLAI N, LOGIN, ANONYMOUS, DIGEST MD5, CRAM MD5, OTP, KERVEROS V 4, GSSAPI 등의여러가지인증방법을제공하지만 Outlook Express, Thun derbird등대부분의이메일클라이언트에서는현재 LOGIN과 PLAIN 두개의 인증방법만을지원하고있다. 따라서 LOGIN과 PLAIN을사용하여인증절차 를사용해야한다. 본메뉴얼에서는 SASL를구현한대표적인라이브러리인 Cyrus-SASL 을설치하는것으로설명한다. AUTH 설정을위해 sendmail 설정파일을수정한다. "cd (sendmail 소스디렉터리 /cf/cf" 를입력하여디렉터리이동후 "vi sendmail.mc 를입력한다. - 27 -
아래와같이두줄을적당한곳에추가한다. 입력시따옴표에주의한다. 왼쪽은키보드 1 왼쪽의 ( ` ) 이고, 오른쪽 은엔터키왼쪽의 ( ) 이다. 새로운설정파일을적용하기위해./Build sendmail.cf", "./Build install-cf " 를입력한다. - 28 -
sendmail 서비스를재시작한후 "telnet locahost 25" 를입력하여 AUTH기 능이활성화되었는지확인한다. - 29 -
AUTH LOGIN을하기위해서는 pwcheck등과같은패스워드인증모듈을 사용해야된다. postfix에서는 saslauthd를많이사용하므로본매뉴얼에서는 saslauthd 기준으로설치를한다. 기존에 SMTP-AUTH check 그램에맞는설정을해야한다. 프로그램을쓰는메일서버의경우각프로 saslauthd 설정을위해 ln -s /usr/local/lib/sasl2 /usr/lib/sasl2" 를입력하여 디렉터리를링크하고, mkdir -p /var/run/saslauthd 를입력하여디렉터리 를생성한다. vi /usr/lib/sasl2/sendmail.conf" 를입력하여설정파일을수정 / 생성한다. /usr/local/lib/sasl2, /usr/lib/sasl2 : cyrus-sasl2 디렉터리 라이브러리가위치한 - 30 -
다음내용을기록한다. 제대로동작하는지확인하기위해 "/usr/local/sbin/saslauthd -a shadow" 로데몬을시작하고, "testsaslauthd -u ( 아이디) -p ( 패스워드) 명령어로동 작을확인한다. - 31 -
submission추가를위해 sendmail 설정파일을수정한다. vi /etc/mail/sendm ail.cf" 를입력한다. /etc/mail/sendmail.cf : sendmail의 cf 설정파일이위치한디렉터리 아래와같은부분을같게수정한다. 여기서는 587포트설정의 M=E를 로수정했다. a옵션이추가되어야 auth 기능이작동한다. M=Ea - 32 -
sendmail 을재시작한후 "telnet localhost 587" 명령어로작동을확인한다. - 33 -
sendmail과 saslauthd 를재시작한후동작확인을한다. telnet localhost 25" 명령어를입력한후 ehlo 도메인" 을입력한다. 250-STARTTLS 은 SSL 채널구성이된경우, 250 AUTH LOGIN PLAIN 은 SMTP-AUTH 가된경우나온다. 두가지중하나라도안되는경우는처 음부터다시확인을해야한다. - 34 -
telnet localhost 587" 명령어를입력한후 ehlo 도메인" 을 입력하여마찬 가지로확인한다. - 35 -
아래와같이 25번포트로메일을발송하였을경우인증이필요없이 발송이되는것을확인할수있다. 수신메일서버에서메일을확인할수있다. 간혹수신메일서버의스팸필터에필터링되는경우가있으니확인이필요하다. - 36 -
아래와같이 587번포트로메일을발송하였을경우인증절차를해야 발송이되는것을확인할수있다. 수신메일서버에서메일을확인할수있다. 간혹수신메일서버의스팸필터에필터링되는경우가있으니확인이필요하다. - 37 -