Linux Mail

sendmail로 메일서버 구축하기

2008.05.15 00:42

sylee 조회 수:40434

Sendmail로 메일 서버 설정하기

내가 갖고 있는 도메인(hostway.co.kr)으로 내가 소유한 서버에서 메일을 보내고 받을 수 있게 설정해 보자.
제일먼저 확인해야 할 것은 도메인이 사용하는 네임서버의 zone 파일에서 mx 레코드가 내 서버의 ip로 연결되어 있어야 한다.

hostway.co.kr 도메인의 MX레코드가 아래와 같이 설정 되어있다.

                 MX      10 mail
mail            A       192.168.0.16

그럼 이제부터 192.168.0.16의 서버에서 xxx@hostway.co.kr의 주소로 들어오는 메일을 받을수 있게 설정해 보자.

* 받는 메일서버 설정

메일을 받기 위해서는 우선 pop3 데몬이 떠 있어야 한다. xinetd.d 디렉토리내에 ipop3d 를 사용한다면 별 어려움 없이 pop3데몬을 띄울수 있다.
기본적으로 제공되는 ipop3 데몬을 띄우기 위해서 /etc/xinetd.d/ipop3d 파일을 편집기로 열고 disable = yes 부분만 disable = no로 변경시키고 xinetd 데몬을 리스타트 하면 된다.

1. /etc/xinetd.d/ipop3d 파일 수정.

[root@localhost root]# cat /etc/xinetd.d/ipop3d
service pop3
{
        disable = no
        socket_type     = stream
        wait    = no
        user    = root
        server  = /usr/sbin/ipop3d
        log_on_success  += USERID
        log_on_failure  += USERID
}

2. xinetd 데몬 리스타트

[root@localhost root]# /etc/rc.d/init.d/xinetd restart
Stopping xinetd:                                           [  OK  ]
Starting xinetd:                                           [  OK  ]

3. 110번 포트 확인

[root@localhost root]# netstat -nat | grep LISTEN | grep 110
tcp        0      0 0.0.0.0:110            0.0.0.0:*               LISTEN

4. /etc/mail/local-host-names 파일에 메일을 사용할 도메인 추가한 후 sendmail 데몬 리스타트

[root@localhost root]# cat /etc/mail/local-host-names
hostway.co.kr
[root@localhost root]# /etc/rc.d/init.d/sendmail restart
Shutting down sendmail:                                    [  OK  ]
Shutting down sm-client:                                   [  OK  ]
Starting sendmail:                                         [  OK  ]
Starting sm-client:                                        [  OK  ]

이상의 설정만 하면 메일을 받을수 있게 된다. useradd명령으로 계정을 추가하고 메일을 사용하면 된다.


* 보내는 메일서버 설정

위의 설정은 메일을 받기만 할수 있도록 설정한 것이다.
내 서버(192.168.0.16) 에서 메일을 보낼수 있도록 설정을 하는것 역시 별 어려움 없이 할수 있다.
sendmail 설정파일(/etc/sendmail.cf)에는 기본적으로 smtp가 닫혀 있도록 설정이 되어 있다.
smtp를 열어놓기 위해서는 sendmail.cf 파일에서 한줄만 수정하면 된다.

1. sendmail.cf 수정

sendmail.cf 파일에서 아래부분을 찾아 주석(#)을 제거하고 sendmail을 리스타트 하면 smtp가 열리게 된다. 그런데 아래에서 주석만 제거할 경우는 localhost, 즉 서버내에서만 mail command로 메일을 발송할수 있고 원격에서 아웃룩 등으로 연결해서 사용할수가 없게 된다. 아웃룩 등으로 서버에 접속해서 메일을 보낼수 있게 설정하려면 Addr=127.0.0.1 부분을 삭제 하면 된다.

#O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA
--->  O DaemonPortOptions=Port=smtp, Name=MTA  (수정)

2. sendmail 리스타트

[root@localhost root]# /etc/rc.d/init.d/sendmail restart
Shutting down sendmail:                                    [  OK  ]
Shutting down sm-client:                                   [  OK  ]
Starting sendmail:                                         [  OK  ]
Starting sm-client:                                        [  OK  ]

"Addr=127.0.0.1"을 삭제하지 않고 localhost만 smtp가 열렸을때는 아래와 같이 127.0.0.1의 주소에 대해서만 LISTEN 된다.
[root@localhost mail]# netstat -nat | grep LISTEN | grep 25
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN

"Addr=127.0.0.1"을 삭제하여 smtp가 완전히 열렸을때는 아래와 같이 모든주소(0.0.0.0)에 대해서 LISTEN 된다.
[root@localhost mail]# netstat -nat | grep LISTEN | grep 25
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN

위와 같이 smtp가 완전히 허용된 경우, 아웃룩등의 메일 클라이언트 프로그램을 이용해서 메일을 발송할 수 있게 된다.
그런데 위와 같이 smtp를 열어놓을 경우는 어디에서나 smtp를 이용할수 있게 되기 때문에 spam 메일이 릴레이가 될 가능성이 높다.
spam 릴레이를 방지하기 위해서 서버내에 존재하는 계정으로 인증을 거쳐서 메일을 발송하도록, auth-smtp설정을 하면 된다.
이 또한 간단하게 수정이 가능하다.
sendmail.cf 파일에서 MD5 가 들어가는줄을 찾아서 주석을 제거해 주면 서버내에 존재하는 계정으로 인증을 거쳐야만 메일을 발송할 수 있도록 설정된다.

3. auth-smtp 설정

#O AuthMechanisms=GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5
---> O AuthMechanisms=GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5

sendmail.cf를 수정했을 경우는 반드시 sendmail 데몬을 리스타트 해야 적용되게 된다. 마찬가지로, auth-smtp 설정을 했을때도 sendmail데몬을 리스타트 하면 적용되게 된다.
auth-smtp를 설정한 경우는 아웃룩을 사용할때, 보내는 서버의 "인증 필요" 부분을 체크하고 사용하면 된다.




* 보내는 메일 서버 설정시 sendmail.cf 파일을 수정하지 않고 /etc/mail/sendmail.mc 파일을 이용해서 sendmail.cf 파일을 새로 생성해서 사용할 수도 있다.  sendmail.cf 파일을 수정해서 sendmail을 재 구동했을때, 정상적으로 동작하지 않는다면 아래의 방법을 이용해 보기 바란다.

/etc/sendmail.cf 파일을 /etc/sendmail.cf.old로 변경해 놓고 작업을 시작한다.

1. /etc/mail/sendmail.mc에서 아래와 같이 수정한다.

  - auth-smtp 설정부분

dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
-> TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl    (앞의 dnl 삭제)

dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
-> define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl   (앞의 dnl 삭제)

- mail 릴레이 설정 부분

dnl # DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
-> DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl      (주석 제거 및 Addr 부분 수정)


2. m4 명령으로 sendmail.cf 파일 다시 생성한다.

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

3. sendmail 리스타트

[root@localhost root]# /etc/rc.d/init.d/sendmail restart
Shutting down sendmail:                                    [  OK  ]
Shutting down sm-client:                                   [  OK  ]
Starting sendmail:                                         [  OK  ]
Starting sm-client:                                        [  OK  ]

마지막으로 auth-smtp 설정을 했을때 saslauthd 데몬이 떠 있는지를 확인해 보아야 한다.
saslauthd 데몬이 떠 있지 않으면, SMTP 인증이 되지 않아 계속 인증 확인창이 뜨게된다.
ntsysv 명령을 실행시켜 saslauthd 항목을 찾아 자동시작 데몬으로 체크하고 saslauthd 데몬을 띄우면, 모든 작업이 완료되게 된다. redhat 7.3 버전의 경우는 saslsuthd 데몬이 존재하지 않으며, 띄우지 않아도 된다.