서버/Linux III 2016. 5. 18. 11:31

Linux III - 16. Mail 서버 (Sendmail & Dovecot)

 

 

@SMTP&POP3 캡처 내용.pcap

 

 

1. main, clone1에서 다음과 같이 DNS 테스트를 실시한다.

 

[root@clone1 /root]# vi /etc/resolv.conf

  1 # Generated by NetworkManager
  2
  3
  4 # No nameservers found; try putting DNS servers into your
  5 # ifcfg files in /etc/sysconfig/network-scripts like so:
  6 #
  7 # DNS1=xxx.xxx.xxx.xxx
  8 # DNS2=xxx.xxx.xxx.xxx
  9 # DOMAIN=lab.foo.com bar.foo.com
 10 nameserver 172.20.1.1
 11 nameserver 168.126.63.1 

 

: wq!

 

 

[root@main /root]# nslookup mail.test.com
Server:         172.20.1.1
Address:        172.20.1.1#53

Name:   mail.test.com
Address: 172.20.1.1

 

 

[root@main /root]# ping -c 3 mail.test.com
PING mail.test.com (172.20.1.1) 56(84) bytes of data.
64 bytes from test.com (172.20.1.1): icmp_seq=1 ttl=64 time=0.102 ms
64 bytes from test.com (172.20.1.1): icmp_seq=2 ttl=64 time=0.044 ms
64 bytes from test.com (172.20.1.1): icmp_seq=3 ttl=64 time=0.045 ms

--- mail.test.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.044/0.063/0.102/0.028 ms

 

 

 

2. Sendmail

 

 - Postfix 이메일 서비스를 종료한다.

 

[root@main /root]# service postfix stop

 

 

 

 - Sendmail 관련 패키지 설치 유무 확인 및 설치 실시

 

[root@main /root]# rpm -q sendmail sendmail-cf
sendmail-8.14.4-9.el6_8.1.x86_64
sendmail-cf 패키지가 설치되어 있지 않습니다

 

 

[root@main /root]# yum -y install sendmail sendmail-cf

 

 

[root@main /root]# rpm -q sendmail sendmail-cf
sendmail-8.14.4-9.el6_8.1.x86_64
sendmail-cf-8.14.4-9.el6_8.1.noarch

 

 

 

 - Sendmail 관련 파일은 '/etc/mail' 디렉토리에서 관리한다.

 

[root@main /root]# ls /etc/mail
Makefile   aliasesdb-stamp  helpfile          mailertable.db  sendmail.mc  trusted-users
access     domaintable      local-host-names  make            submit.cf    virtusertable
access.db  domaintable.db   mailertable       sendmail.cf     submit.mc    virtusertable.db

 

   - sendmail.mc : 'sendmail.cf' 설정 보조 파일

   - sendmail.cf : Sendmail 설정 파일

 

 

 

 - 'sendmail.mc' 파일을 vi 편집기를 이용하여 다음과 같이 설정을 변경하도록 한다.

 

[root@main /root]# vi /etc/mail/sendmail.mc

 ~ 중간 생략 ~

 

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

// SMTP 인증 기능이며, 이 설정을 주석으러 처리해놓으면 아무나 메일을 전송하는 문제가 발생한다.

 

~ 중간 생략

 

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

// Addr=127.0.0.1로 되어있으면, 로컬 호스트(서버 자신)만 SMTP 접속을 허가하고 메일을 발송하게 된다.

그렇기 때문에 Addr=0.0.0.0로 변경하여 다른 호스트로부터 수신하는 메일도 받아서 처리할 수 있도록 해야 한다.


117 dnl #

 

: wq!

 

 

 

 - 'm4' 명령어를 이용하여 'sendmail.mc' 설정 내용을 'sendmail.cf' 파일로 이전시킨다.

 

[root@main /root]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

 

 

 

 - 'sendmail.cf' 파일을 vi 편집기를 이용하여 다음과 같이 설정을 변경하도록 한다.

 

[root@main /root]# vi /etc/mail/sendmail.cf

~ 중간 생략 ~

  88 
  89 Cwtest.com   <- Cw도메인 이름으로 변경한다.
  90 # file containing names of hosts for which we receive email
  91 Fw/etc/mail/local-host-names
  92  

~ 중간 생략 ~

 

 263
 264 # SMTP daemon options
 265 O DaemonPortOptions=Port=smtp,Addr=0.0.0.0, Name=MTA
 266

 

: wq!

 

 

 

 - 메일 릴레이를 위해서 'access' 파일을 vi 편집기를 이용하여 다음과 같이 설정을 변경하도록 한다.

 

[root@main /root]# vi /etc/mail/access

  1 # Check the /usr/share/doc/sendmail/README.cf file for a description
  2 # of the format of this file. (search for access_db in that file)
  3 # The /usr/share/doc/sendmail/README.cf is part of the sendmail-doc
  4 # package.
  5 #
  6 # If you want to use AuthInfo with "M:PLAIN LOGIN", make sure to have the
  7 # cyrus-sasl-plain package installed.
  8 #
  9 # By default we allow relaying from localhost...
 10 Connect:localhost.localdomain       RELAY
 11 Connect:localhost           RELAY
 12 Connect:127.0.0.1           RELAY
 13 Connect:test.com            RELAY  <- 지정된 RELAY 대상은 메일서버를 이용하여 메일 송수신 가능
 14 Connect:172.20.             RELAY       만약, 거부하려면 'REJECT'로 변경한다.

 

: wq!

 

 

 

- 'makemap' 명령어를 이용하여 Sendmail이 인식할 수 있는 access.db를 생성한다.

 

[root@main /root]# makemap hash /etc/mail/access < /etc/mail/access

 

 

[root@main /root]# ls /etc/mail/access*
/etc/mail/access  /etc/mail/access.db

 

 

[root@main /root]# strings /etc/mail/access.db
RELAY
connect:localhost.localdomain
RELAY
connect:172.20.
RELAY
connect:test.com
RELAY
connect:localhost
RELAY
connect:127.0.0.1

 

 

 

 - 'local-host-names' 파일에 메일을 수신할 도메인 이름을 추가한다.

 

[root@main /root]# vi /etc/mail/local-host-names

  1 # local-host-names - include all aliases for your machine here.
  2 test.com   <- 메일을 수신할 로컬 호스트 도메인 이름을 설정한다.
 

: wq!

 

 

 

 - SMTP 인증이 성공되어야 메일을 보낼수 있는 인증 모듈을 시작한다.

 

[root@main /root]# service saslauthd start


[root@main /root]# chkconfig saslauthd on

 

 

[root@main /root]# service sendmail restart
sm-client을 종료하고 있습니다:                             [  OK  ]
sendmail 종료 중:                                          [  OK  ]
sendmail (을)를 시작 중:                                   [  OK  ]
sm-client을 시작하고 있습니다:                             [  OK  ]

 

 

 

 - SMTP 테스트 실시


Ex1) Telnet을 이용한 SMTP 동작 테스트

 

[root@main /root]# telnet localhost 25    
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 test.com ESMTP Sendmail 8.14.4/8.14.4; Tue, 22 Nov 2016 12:07:59 +0900
HELP
214-2.0.0 This is sendmail
214-2.0.0 Topics:
214-2.0.0       HELO    EHLO    MAIL    RCPT    DATA
214-2.0.0       RSET    NOOP    QUIT    HELP    VRFY
214-2.0.0       EXPN    VERB    ETRN    DSN     AUTH
214-2.0.0       STARTTLS
214-2.0.0 For more info use "HELP <topic>".
214-2.0.0 To report bugs in the implementation see
214-2.0.0       http://www.sendmail.org/email-addresses.html
214-2.0.0 For local information send email to Postmaster at your site.
214 2.0.0 End of HELP info
EHLO localhost
250-test.com Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN
250-DELIVERBY
250 HELP
quit
221 2.0.0 test.com closing connection
Connection closed by foreign host.
[root@main /root]#

 

 

 

Ex2) netstat 상태 확인을 이용한 SMTP 동작 여부 확인

 

[root@main /root]# netstat -nlp | grep 25
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      4123/sendmail      
tcp        0      0 0.0.0.0:47325               0.0.0.0:*                   LISTEN      1893/rpc.statd     
udp        0      0 172.20.255.255:137          0.0.0.0:*                               2729/nmbd          
udp        0      0 192.168.2.255:137           0.0.0.0:*                               2729/nmbd          
udp        0      0 172.20.255.255:138          0.0.0.0:*                               2729/nmbd          
udp        0      0 192.168.2.255:138           0.0.0.0:*                               2729/nmbd          
unix  2      [ ACC ]     STREAM     LISTENING     21639  3516/gdm-user-switc /tmp/orbit-root/linc-dbc-0-61ef8aca18256
unix  2      [ ACC ]     STREAM     LISTENING     19252  3268/gconfd-2       /tmp/orbit-root/linc-cc4-0-26a82bdc7941d
unix  2      [ ACC ]     STREAM     LISTENING     14047  2554/saslauthd      /var/run/saslauthd/mux

 

 

 

Ex3) 'ps' 명령어를 이용한 Sendmail 동작 상태 확인

 

[root@main /root]# ps -ef | grep sendmail
root      4123     1  0 12:07 ?        00:00:00 sendmail: accepting connections
smmsp     4132     1  0 12:07 ?        00:00:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue
root      4155  3031  0 12:08 pts/0    00:00:00 grep sendmail

 

 

 

 

3. Pop3 관련 설정

 

 - Pop3 서비스를 구현하기 위해서 'dovecot' 패케지가 설치하도록 한다.

 

[root@main /root]# yum -y install dovecot

 

[root@main /root]# rpm -qa | grep dovecot
dovecot-2.0.9-22.el6.x86_64

 

 

 

 - 'dovecot.conf' 파일을 vi 편집기를 이용하여 다음과 같이 설정을 변경하도록 한다.

 

[root@main /root]# vi /etc/dovecot/dovecot.conf

~ 중간 생략 ~


 19 # Protocols we want to be serving.
 20 protocols = imap pop3 lmtp  <- pop3 사용이 가능하도록 주석 처리를 삭제한다.
 21
 22 # A comma separated list of IPs or hosts where to listen in for connections.
 23 # "*" listens in all IPv4 interfaces, "::" listens in all IPv6 interfaces.
 24 # If you want to specify non-default ports or anything more complex,
 25 # edit conf.d/master.conf.
 26 listen = *  <- 메일을 수신할 수 있도록 주석 처리를 삭제하고 *(ANY) 로 변경한다. 
 27

 

: wq! 

 

 

 

 - 사용자 메일 박스를 지정한다.

 

[root@main /root]# vi /etc/dovecot/conf.d/10-mail.conf

 ~ 중간 생략 ~

 

 29 #
 30 mail_location = mbox:~/mail:INBOX=/var/spool/mail/%u
 31

 

: wq!

 

 

 

 - SSL 사용 설정을 실시한다.

 

[root@main /root]# vi /etc/dovecot/conf.d/10-ssl.conf

~ 중간 생략 ~


  5 # SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
  6 ssl = yes
  7

 

: wq! 

 

 

 

 - SSL를 사용하므로 암호화된 텍스트 사용 여부를 'no'로 변경한다.

 

[root@main /root]# vi /etc/dovecot/conf.d/10-auth.conf

 ~ 중간 생략 ~

 

  8 # connection is considered secure and plaintext authentication is allowed.
  9 disable_plaintext_auth = no
 10 
 

: wq!

 

 

 

 - 'dovecot' 서비스를 재시작한다. 

 

[root@main /root]# service dovecot start
Dovecot Imap (을)를 시작 중:


[root@main /root]# service dovecot restart
Dovecot Imap 를 정지 중:                                   [  OK  ]
Dovecot Imap (을)를 시작 중:                               [  OK  ]


[root@main /root]# chkconfig dovecot on

 

 

 

 

 

4. 테스트

 

 - 이-메일 계정으로 사용할 사용자 계정을 메일 그룹으로 변경한다.

 

[root@main /root]# usermod -G mail user1

[root@main /root]# usermod -G mail user2

 

 

 

main에서 에볼루션을 실행하여 user1 계정을 등록하도록 한다.

 

 

밑에 편지 봉투 아이콘 클릭

 

 

 

앞으로(F) 클릭

 

 

 

앞으로(F) 클릭

 

 

 

user1에 대한 필요 정보 및 추가 정보 입력 -> 앞으로(F) 클릭

 

 

 

서버 종류 : POP 선택 -> 설정 내용 입력 -> 앞으로(F)

 

 

 

앞으로(F) 클릭

 

 

 

서버 종류 : SMTP 선택 -> 서버 설정 내용 입력 -> 앞으로(F) 클릭

 

 

 

이름(N) 내용 입력 -> 앞으로(F) 클릭

 

 

 

적용(A) 클릭

 

 

 

이러한 방식으로 clone1에서 user2 계정을 등록하도록 한다.

 

 

 

 

 

main 에볼루션 -> '새로 만들기' 클릭

 

 

 

받는 사람 : user2@test.com -> 제목 및 내용 입력 -> '보내기' 클릭

 

 

clone1 에볼루션 -> '보내고 받기' 클릭 -> 수신 메일 및 내용 확인

 

Posted by 김정우 강사(카카오톡 : kim10322)
,


Q