kkamagi's story

IT, 정보보안, 포렌식, 일상 공유

OS

sendmail , POP3 서버 구축하기

까마기 2014. 9. 28. 18:47
반응형

CentOS 에서 MAIL, POP3 서버 구축하기

* 데몬 별 실행 서비스

httpd -> web
named-> dns
dovecot ->pop3, imap
saslauthd -> smtp 인증
sendmail -> smtp

# yum -y install caching-nameserver
# yum -y install sendmail
# yum -y install dovecot

리눅스를 이용해  메일 서버와 POP3 서버를 구축해 보기로 하자.

전제조건
DNS 에 MX 레코드를 등록해야한다..
I
IN MX 10 mail.bann.com.

mail IN A 192.168.0.100


1. MAIL 서버 구축하기 - Sendmail을 이용

리눅스에서는 많이 사용하는 MTA(Mail Transfer Agent)로는 Sendmail, qmail 그리고 postfix가 있다.
여기서는 가장 일반적으로 사용하는 sendmail을 이용해서 간단하게 메일 서버를 구축해 보기라 하자.

sendmail은 yum으로 간단하게 설치 할 수 있다.
# yum -y install sendmail

sendmail 환경 설정 파일을 쉽게 생성할 수 있는 sendmail-cf를 같이 설치한다.
# yum -y install sendmail-cf

sendmail의 설치는 이게 끝이다. 이제 메일을 보내고 받기 위해서 약간의 준비가
필요하다.

<sendmail에서 자주 사용하는 환경 설정 파일>

- sendmail.mc


- sendmail.cf

--> 이 두파일은 sendmail의 환경 설정파일이다. sendmail.cf의 설정이 까다로워

sendmail.mc 파일을 편집후 sendmail.cf 파일로 변환한다.


# vi /etc/hosts

192.168.100.150 mail.itbank.com

#vi /etc/mail/local-host-names
bann.com
mail.bann.com 같이 등록을 해주어야 한다.

도메인 정보가 들어간다. test@bann.com 라는 메일 주소를 사용하고 싶으면
@뒤의 bann.com 을 이 파일에 설정한다.

# cd /etc/mail

access, access.db

이 메일 서버에 접속할 아이피를 적어 준다. 여기에 허용한 아이피는

이 메일서버를 이용해서 메일을 마음대로 보낼 수 있다.


virtusertable, virtusertable.db
가상 유저를 생성할때 사용한다. 하나의 서버에서 두개이상의 도메인을 운영하고
있을때 같은 아이디를 공유하고자 할 때 필요하다.


# vi /etc/mail/sendmail.mc

TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN)dnl

앞에 dnl주석을 제거한다. 주석을 제거하면 sendmail의 SMTP AUTH기능이 활성화 된다. 즉 아이디와 패스워드가 맞으면 이서버를 통해서 메일을 보낼 수가 있다.



DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl 

-> 기본적으로 샌드메일은 릴레이를 모두 허용하지 않기 때문에 아래와 같이 에서 다음과 같이 127.0.0.1을 제거한다. 

-> Addr=0.0.0.0 으로 변경하면 웹메일 사용시 모든 네트워크에서 편지 릴레이가 가능합니다.



DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl 

-> 변경해주면 모든 네트워크의 릴레이를 허용합니다.



DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl

127.0.0.1은 서버 자기 자신을 가리킨다. 즉 위의 설정은 127.0.0.1 아이피만 MTA로서 동작을 하게 하는 것이고 결국, 이 

옵션을 놔두면 외부에서 메일 자체를 발송 할수 없게된다. 옵션을 지우던지 아니면 127.0.0.1을 서버 공인아이피로 변경하

면 된다.


** 관련된 데몬으로는  saslauthd 데몬이 있다. 인증기능이 활성화 되더라도 아이디와
패스워드가 맞는지 수행할 프로그램이 필요하다. saslauthd가 바로 그러한 역할을 한다. saslauthd 는 다음과 같은 명령으로 실행한다.

# /etc/init.d/saslauthd start

/

관련된 설정으로 access, access.db를 들 수 있다. 차이점이라면 위의 설정(saslauthd)이

아이디와 패스워드를 통한 인증이라면 access, access.db은 아이피별로 메일 발신을

제한 한다는 것이다. 설정 방법은 다음과 같다. 파일을 열면

# vi /etc/mail/access
Connect:localhost.localdomain        RELAY
Connect:localhost                           RELAY
Connect:127.0.0.1                            RELAY

bann.com   RELAY ->bann.com에서 보낸 편지는 릴레이한다.
192.168.100   RELAY->192.168.100 대역에서 보내는 편지를 릴레이 한다.

RELAY를 허용할 아이피를 바로 밑에 같은 형식으로 적어주고 저장한다.

# makemap hash /etc/mail/access < /etc/mail/access

이렇게 해주면 access파일의 내용이 access.db에 저장이 되고 sendmail을

재시작하면 적용이 된다.

# /etc/init.d/sendmail restart

우선 간단하게 인증기능을 활성화 하고 외부 ip에서도 메일을 발송 할수 있게 설정을 하였다. 이렇게 설정한 파일을 sendmail.cf 파일로 변환한다.

--> # m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

이제 모든 설정이 끝났다.

sendmail을 시작하면 메일서버로 이용 할 수 있다.

#/etc/init.d/sendmail start

다음 명령으로 데몬이 정상적으로 올라와 있는지 확인 할 수 있다.

#netstat -nlp | grep 25 ->STMP 포트

tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      24276/sendmail: acc 

-> 위의 결과가 도출이 안되면 service sendmail restart

보이면 정상적으로 설정이 된것이다.


3. Sendmail 설정하기

sendmail은 많은 설정과 기능을 가지고 있습니다. 여기에선 꼭 필요하고 중요한 부분만 언급하도록 하겠습니다.

1) /etc/mail/submit.cf 혹은 /etc/mail/sendmail.cf

가장 중요한 파일로 수많은 설정사항을 담고 있습니다. 


중요한 몇가지 설정을 다뤄보면

 

Fw/etc/mail/local-host-names

--------> 메일을 수신할 호스트 이름을 명시한 파일의 위치를 설정합니다.

FR-o /etc/mail/relay-domains

---------> relay-domains파일에는 Relay를 허용할 호스트의 이름을 설정합니다. 주석으로 처리하면 모든 IP에 대해서 Relay가 허용되므로 스팸메일과 같은 문제가 발생할 수도 있으므로 주의하시기 바랍니다.

DnMAILER-DAEMON

-------------> Sendmail 서버가 에러메시지를 보내야 할 경우 보낸 사람의 이름을 결정합니다. 잘못된 메일이 되돌아 온 경우 FROM : Mail Delivery Subsystem <MAILER-DAEMON>과 같은 메시지를 보신적이 있을 것입니다.

Kaccess hash /etc/mail/access

-------> Relay를 허용하거나 거부할 특정 IP와 도메인을 설정하는 파일입니다. relay-domains보다 사용이 편리하므로 많이 사용됩니다.

ForwardPath=$z/.forward.$w:$z/.forward

------>여러 개의 메일을 가진 경우, 특정 메일계정으로 들어온 메일을 다른 메일로 곧바로 보내주는 포워딩파일을 설정합니다. 사용자의 홈 디렉토리에 .forward라는 파일을 만들고 포워딩시킬 메일 주소를 입력하면 됩니다.

MaxMessageSize=1000000 

------------> 메일의 최대 크기를 결정합니다. 주석을 제거하면 설정한 크기(Byte단위)보다 큰 메일은 전송할 수 없게 됩니다. 지금 써준 1000000은 1메가로 제한한 메일 용량입니다.

QueueDirectory=/var/spool/mqueue

---------> 큐 디렉토리를 설정합니다.

Timeout.queuereturn=5d

---------------> 메일을 보내려는 호스트에 문제가 생기면 메일은 큐 디렉토리에 저장됩니다. Sendmail 서버는 쌓인 메일을 상대방 호스트에 보내기 위해 주기적으로 접속을 시도하며, 일정한 기간이 지나면 메일을 다시 발송한 사람에게 되돌려 보냅니다. Sendmail이 메일을 보내려고 시도하는 기간을 설정하는 옵션으로 5d는 5일을 의미합니다.

Timeout.queuewarn=4h

----------------> 큐 디렉토리에 쌓인 메일이 지정한 시간안에 전송되지 못할 경우 메일을 보낸 사람에게 경고 메일을 보냅니다. 기본값은 4h로 4시간안에 전송되지 못하면 보낸 사람에게 경고의 메일을 보냅니다.


2) /etc/mail/access


스팸메일을 방지하기 위해 Relay를 허용할 호스트의 IP와 도메인을 설정하는 매우 중요한 파일입니다. Sendmail 은 기본적으로 ip기반으로 relay를 결정합니다.

  127.0.0.1  RELAY 

  211.0.0.0 REJECT 


위와 같이 허용,거부를 설정후에 make 명령을 통해 db파일을 생성합니다.




3) /etc/mail/local-host-names

메일을 수신할 호스트의 이름을 입력합니다. 여러개일 경우 모두 입력합니다. 메일서버는 이곳에 적힌 호스트의 메일만 수신합니다.

4) /etc/aliases

특정 사용자에게 온 메일을 다른 사람에게 보내주거나, 메일링리스트를 작성해야 하는 경우에 사용되는 파일로 보안에 주의하여 사용해야 합니다. aliases 파일을 열어보면 시스템 계정들이 아래와 같이 root로 alias되어 있습니다. 또한 특정 사용자를 다른 사용자로 alias 시킬 수도 있습니다.

- aliases 리스트 작성 예 : admin: master sorin suse

위와같이 작성하면 admin으로 보내진 메일은 master, sorin, suse 가 모두 받게됩니다. aliases 리스트 작성 후엔 DB를 생성( newaliases )합니다.



2. POP3 서버 세팅하기

아웃룩을 통해서 메일을 발송하고 받는 경우를 생각해 보자.
지금까지 세팅으로는 아웃룩을 통해 메일을 발송 할 수 있는 서버를 설치한것이다.
수신된 메일을 받을 수 있도록 하려면 POP3나 IMAP 세팅이 되어 있어야 한다.

다양한 pop3 데몬들이 있지만 CentOS에는 dovecot을 이용해 pop3와 imap을 세팅 할 수 있다. 물론 기호에 따라 다른 pop3 데몬을 사용 할 수도 있다.
여기서는 dovecot을 이용해 pop3을 세팅 하려고 한다. 설치는 다음과 같이 쉽게 할 수 있다.

# yum install dovecot
환경을 설정한다.

# vi /etc/dovecot.conf

20번째 줄에
#protocols = imap imaps pop3 pop3s
protocols = imap imaps pop3 pop3s
로 수정한다.
39번째 줄에
#listen = [::]
listen = *
수정하여 모든 ip에서 접속 가능 하도록 설정한다.

85번째 줄
#ssl_disable = no
ssl_disable = yes
설정한다

825번째 줄
#args = dovecot
주석을 해제한다. pam인증을 dovecot이라는 이름으로 사용하겠다는
설정이다.

이제 설정이 모든 끝났다.
# /etc/init.d/dovecot start
로 서버를 시작한다.

# netstat -nlp | grep 110 ->pop3 포트
tcp        0      0 0.0.0.0:110                 0.0.0.0:*                   LISTEN      9101/dovecot

110포트가 리슨되고 있는 것을 확인한다.

이제 아웃룩(MUA)을 통해 메일을 보내거나 받을 수 있는 모든 준비가 되었다.

마지막으로 메일 서버와 관련된 몇가지 용어를 짚고 넘어가도록 하자.

MTA(Mail Transfer Agent): 메일을 보내고 받을 수 있는 메일 서버 프로그램이다. 대표적인 MTA로는 리눅스에서 sendmail, qmail, postfix, exim등이 있고 윈도우에서는 익스체인지서버가 있다.

MUA(Mail User Agent): MTA에서 수신된 메일을 서버에서 찾아와 볼수 있는 프로그램이다. 대표적인 MUA로는 MS아웃룩이나, 아웃룩 익스프레스, 썬더버드 elm, pine등이 있다.

MDA(Mail Delivery Agent): MTA에서 수신된 메일을 유저의 메일박스나 MAILDIR로 옮겨주는 역할을 한다. procmail이나 maildrop등이 있다.

요약 정리하자면  MTA로 메일을 보내고 받고 MDA로 받은 메일을 서버에 저장하며 MUA로 서버에 저장된 메일을 내 PC로 가지고 온다.




반응형

'OS' 카테고리의 다른 글

dovecot 설치  (0) 2014.09.28
Windows 기본  (0) 2014.09.28
Bind 패키지 설치 후 named 데몬 올리기 중 에러  (0) 2014.09.28
Bind 서버 구축 ( CentOS 5.x )  (0) 2014.09.28
Netstat 연결 상태 정의  (0) 2014.09.27