DATA 전문가로 가는 길

[Unix/Linux] Sendmail 8.14.4 구축 및 메일 전송 테스트 본문

OS/Server Admin

[Unix/Linux] Sendmail 8.14.4 구축 및 메일 전송 테스트

EstenPark 2010. 11. 23. 18:34

작성자 : 박상수
작성일자 : 2010.11.22
작업환경 : VMware7 [ Redhat Enterprise 4 ]


1. Sendmail 이란

sendmail은 인터넷 전자 메일의 표준규약인 SMTP(Simple Mail Transfer Protocol) 프로토콜을 통해서 메일 서비스 기능을 한다. 즉, Sendmail은 메일 서버간에 메일을 주고 받는 역할을 합니다.


2. 다운로드 및 관련 사이트

Sendmail의 최신 소스와 자세한 정보는 http://www.sendmail.org에서 구할 수 있으며 rpm패키지는 http://rpmfind.net에서 구하면 됩니다.


3. 이전버전 체크 및 설치

[설명] 다운로드 및 압축 해제
[2010-11-24 20:14:48]-[root@server102:/usr/local/src]
# wget ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.14.4.tar.gz

--20:14:53--  ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.14.4.tar.gz
           => `sendmail.8.14.4.tar.gz'
Resolving ftp.sendmail.org... 209.246.26.22
Connecting to ftp.sendmail.org|209.246.26.22|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD /pub/sendmail ... done.
==> PASV ... done.    ==> RETR sendmail.8.14.4.tar.gz ... done.
Length: 2,080,472 (2.0M) (unauthoritative)

100%[====================================>] 2,080,472    196.24K/s    ETA 00:00

20:15:08 (160.86 KB/s) - `sendmail.8.14.4.tar.gz' saved [2080472]

[2010-11-24 20:19:32]-[root@server102:/usr/local/src]
# tar zxf sendmail.8.14.4.tar.gz

[2010-11-24 20:20:36]-[root@server102:/usr/local/src]
# cd sendmail-8.14.4/

[설명] smtp의 항목이 주석처리 되어있다면 모두 없애 주시기 바랍니다.
[2010-11-24 20:27:11]-[root@server102:/usr/local/src/sendmail-8.14.4]
# grep smtp /etc/services
smtp            25/tcp          mail
smtp            25/udp          mail

[설명] RPM 설치된 내역을 확인 하여 있을 경우 제거 합니다.
[2010-11-25 00:26:45]-[root@server102:/usr/local/src/sendmail-8.14.4]
# rpm -qa |grep sendmail                      // 패키지 설치 확인
# rpm -e --nodeps [패키지명]               // 패키지 제거

[설명] make 설치시 디렉토리가 없어서 에러가 날 수도 있습니다. 그럴때 에러 메시지를 확인하여 아래와 같이 디렉토리를 생성 해주시기 바랍니다.
Error 예) make는 정상적으로 실행 되며, make install 할 경우 아래와 같은 에러가 발생 됩니다.
install: cannot create regular file `/usr/man/man8/smrsh.8': 그런 파일이나 디렉 토리가 없음
install: cannot create regular file `/usr/man/man1/vacation.1': 그런 파일이나 디렉토리가 없음
install: cannot create regular file `/usr/man/man5/aliases.5': 그런 파일이나 디 렉토리가 없음


해결 방법) 
# mkdir -p /usr/man/man8
# mkdir -p /usr/man/man1
# mkdir -p /usr/man/man5


[2010-11-25 00:26:45]-[root@server102:/usr/local/src/sendmail-8.14.4]
# make; make install;



4. Sendmail 설정 파일 생성

[설명] 설정파일이 있는 디렉토리로 이동
[2010-11-25 01:39:55]-[root@server102:/usr/local/src/sendmail-8.14.4]
# cd cf/cf

[설명] 리눅스 버전이므로 generic-linux.mc파일을 sendmail.mc파일로 변경 합니다.
[2010-11-25 01:40:37]-[root@server102:/usr/local/src/sendmail-8.14.4/cf/cf]
# mv generic-linux.mc sendmail.mc

[설명] access.db, domainaliases.db 등등 자동으로 생성하기 위해서 아래 내용을 추가하세요.
[2010-11-25 01:40:37]-[root@server102:/usr/local/src/sendmail-8.14.4/cf/cf]
# vi sendmail.mc
..
생략
..
FEATURE(access_db)dnl
FEATURE(virtusertable, btree /etc/mail/domainaliases.db)dnl
FEATURE(genericstable, btree /etc/mail/useraliases.db)dnl
FEATURE(accept_unqualified_senders)dnl


[설명] 설정파일을 빌드하여 파일을 생성 합니다.
[2010-11-25 01:43:13]-[root@server102:/usr/local/src/sendmail-8.14.4/cf/cf]
# sh Build sendmail.cf
[2010-11-25 01:44:31]-[root@server102:/usr/local/src/sendmail-8.14.4/cf/cf]
# ls sendmail.cf
sendmail.cf

[설명] 설정파일을 Install 하면  /etc/mail 디렉토리로 이동하게 됩니다.
[2010-11-25 01:46:02]-[root@server102:/usr/local/src/sendmail-8.14.4/cf/cf]
# make install-cf
[2010-11-25 01:46:02]-[root@server102:/usr/local/src/sendmail-8.14.4/cf/cf]
# ls /etc/mail
helpfile     sendmail.cf     submit.cf     statistics




5. Sendmail 중요 설정파일 생성 및 설정

[설명] access는 sendmail의 접근을 제어 하는 파일입니다. 호스트나 도메인을 허용하는 의미는 "RELAY" 이며 반대로 호스트나 도메인을 허용하지 않겠다고 하는 것은 "REJECT" 입니다.
설정 예) [호스트, 도메인, 아이피, 이메일주소]      [RELAY, REJECT]

[2010-11-25 01:48:57]-[root@server102:/etc/mail]
# cat access
192.168.245.5           RELAY
127.0.0.1               RELAY
localhost               RELAY
localhost.localdomain   RELAY


[설명] aliases 설정파일은 특정 계정으로 메일을 보냈을 경우 그 계정으로 메일이 도착하지 않고, 이 파일에 지정된 다른 게정으로 메일이 전송될 수 있게 합니다. 특정 사용자에게 온 메일을 다른 사람에게 보내주거나, 메일링 리스트를 작성해야 하는 경우에 사용되는 파일 입니다.
설정 예 1) admin 계정에게 보내는 메일
admin : posein@korea.com, xitem@ordknfod.com 
설정 예 2) manager계정으로 오는 메일을 webmaster와 root로 전달
manager : root, webmaster
설정 예 3) manager라는 계정으로 오는 메일을 /etc/mailist/manager라는 파일에 계정들에게 전달한다.
manager:: include:/etc/maillist/manager 

[2010-11-25 01:49:00]-[root@server102:/etc/mail]
# cat aliases
webmaster: root


[설명] 사용하고자 할 도메인 이름을 입력하면 사용할 수 있으나 여기에서는 빈 파일로 생성 하겠습니다.

[2010-11-25 01:58:50]-[root@server102:/etc/mail]
# touch local-host-names

[설명] access.db를 생성 합니다.

[2010-11-25 01:58:50]-[root@server102:/etc/mail]
# makemap hash access < access
[2010-11-25 01:58:50]-[root@server102:/etc/mail]
# ls access.db
access.db


[설명] aliases.db 파일을 생성하기 위해서 작업을 진행 합니다.

[2010-11-25 02:08:02]-[root@server102:/etc/mail]
# mkdir -p /var/spool/mqueue
[2010-11-25 02:08:02]-[root@server102:/etc/mail]
# chmod 755  /var/spool/mqueue
[2010-11-25 02:08:02]-[root@server102:/etc/mail]
# newaliases
/etc/mail/aliases: 1 aliases, longest 4 bytes, 13 bytes total
[2010-11-25 02:10:32]-[root@server102:/etc/mail]
# ls aliases.db
aliases.db



6. Sendmail 데몬 시작

[설명] sendmail 명령어 확인
[2010-11-24 13:53:40]-[root@server102:/etc/mail]
# which sendmail
/usr/sbin/sendmail

[설명
] 중계용 데몬 
[2010-11-25 02:12:58]-[root@server102:/etc/mail]
# /usr/sbin/sendmail -Ac -q1h

[설명] 제출용 데몬
[2010-11-25 02:14:26]-[root@server102:/etc/mail]
# /usr/sbin/sendmail -bd -q1h

[설명] sendmail 프로세스 확인
[2010-11-25 02:15:39]-[root@server102:/etc/mail]
# ps -ef |grep -v grep |grep sendmail
smmsp     8479     1  0 00:09 ?        00:00:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue
root      8510     1  0 00:09 ?        00:00:00 sendmail: accepting connections


7. Sendmail을 이용하여 메일 전송 하기

[설명] 메일 보내기 테스트입니다 아래와 같이 차례대로 테스트를 진행하시기 바랍니다. 참고로 네이버와 다음은 스펨메일로 처리하여 반환해버립니다. 가급적이면 google을 이용하시기 바랍니다. 주항색 굵은 글씨는 직접 입력 하는 부분이며 최종 완료 되면 ".(점)"을 이용해서 메일 편집을 완료 합니다.
[2010-11-25 02:12:58]-[root@server102:/etc/mail]
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 localhost.localdomain ESMTP Sendmail 8.14.4/8.14.4; Thu, 25 Nov 2010 02:18:33 +0900
mail from : calm----@gmail.com
250 2.1.0 estenpark@gmail.com... Sender ok
rcpt to : calm----@gmail.com
250 2.1.5 estenpark@gmail.com... Recipient ok
subject : Test Mail
500 5.5.1 Command unrecognized: "subject : Test Mail "
data
354 Enter mail, end with "." on a line by itself
i'm crazy about musicals. the other day, I went to see "MamaMia", the most popular musical this year.
I had a great time listening to the wonderful songs.
bye bye
.
250 2.0.0 oAOHIXeh011965 Message accepted for delivery
quit
221 2.0.0 localhost.localdomain closing connection
Connection closed by foreign host.

[설명] 메일 로그 확인
[2010-11-25 02:26:41]-[root@server102:/var/log]
# tail -f maillog
Nov 25 02:18:51 linux sendmail[11965]: oAOHIXeh011965: Authentication-Warning: localhost.localdomain: server102 [127.0.0.1] didn't use HELO protocol
Nov 25 02:23:44 linux sendmail[11965]: oAOHIXeh011965: from=estenpark@gmail.com, size=164, class=0, nrcpts=1, msgid=<201011241719.oAOHIXeh011965@localhost.localdomain>, proto=SMTP, daemon=MTA, relay=server102 [127.0.0.1]
Nov 25 02:23:55 linux sendmail[12097]: oAOHIXeh011965: to=estenpark@gmail.com, delay=00:04:47, xdelay=00:00:11, mailer=esmtp, pri=120164, relay=gmail-smtp-in.l.google.com. [72.14.213.27], dsn=2.0.0, stat=Sent (OK 1290532604 x15si16776042wfd.63)

[설명] 실제로 아래와 같은 로그 파일을 확인하여 어떻게 전송이 되었는지 확인이 가능합니다.
[2010-11-25 02:29:35]-[root@server102:/var/spool/clientmqueue]
# ls /var/spool/clientmqueue/
sm-client.pid
[2010-11-25 02:29:58]-[root@server102:/var/spool/clientmqueue]
# ls /var/spool/mqueue/
dfoAOFEToF008658  dfoAOG9IQJ010123  qfoAOFU8uq009097  qfoAOG9IQJ010125
dfoAOFU8uq009097  dfoAOG9IQJ010125  qfoAOG9EQJ010121  qfoAOG9IQJ010129
dfoAOG9EQJ010121  dfoAOG9IQJ010129  qfoAOG9HQJ010127
dfoAOG9HQJ010127  qfoAOFEToF008658  qfoAOG9IQJ010123

[설명] 인증 샷... 참고로 gmail일 경우에는 스펨메일 항목에 보면 메일을 확인 하실 수 있습니다.




sendmail 8.14버전을 RHEL4 환경에서 사용해봤습니다. rpm이나 yum으로 설치하면 어려운 점이 없을 테지만 소스 컴파일을 하게 되면 일일이 파일을 만들고 편집 과정을 거쳐야 합니다.


Comments