sendmail로 메일 서버 세팅하기

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

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

MX      10 mail
mail            A       192.168.0.16

그럼 이제부터 192.168.0.16의 서버에서 xxx@jook.pe.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
jook.pe.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 데몬을 띄우면, 모든 작업이 완료되게 된다.