강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

== 3. CentOS 4.2 SendMail 강좌 ==

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문


||| [CentOS] 3. Sendmail 설치 및 사용하기 |||
 

재성이의 3번째 강좌, CentOS 기반에서 Sendmail 설치 및 운영하기 입니다. 처음 서버를 공부하면서 내손으로 웹을 구축하고 다른 곳의 메일이 아닌 도메인을 구입해서 그도메인으로 메일셋팅을 하고 싶었습니다. 메일의 원리가 그때는 궁금하기도 하고 언제 그런 셋팅을 해보나 하며 지냈는데 이제야 그럴수있는 환경과 기회가 주어진 것 같아 기쁩니다.
 



이전 강좌는 CentOS 설치 -> 설치후 기본셋팅 -> APM Setup 까지였습니다. 이전부분을 모르시는분은 강좌를 보시고 한번 해보시길 바라며 이번 Sendmail 강좌는 핵심적인 계념과 설치부분을 중점적으로 하고 설치 후 사용방법과 셋팅하는 파일들에 관해서 알아보도록 하겠습니다.
Sendmail 은 설치와 기본 설정파일을 다루는데는 그리 어렵지 않습니다. 물론 Sendmail도 깊게 들어가고 완전 내것으로 만들기까지는 시간을 더 투자하여야 하지만 여기서는 기본적인 계념과 설치방법 그리고 중요한 설정파일들을 알아보고 좀더 깊은 내용은 그 다음에 시간을 투자햐야 직접 테스트를 해보면서 공부하시길 바랍니다.


1. Maill Server 의 정의

기존의 배포판을 설치하면 기본적으로 설치 할수있는 가장 범국민적인 메일인 Sendmail은 Qmail보다 가벼우면서 설치도 쉽고 사용방법도 어렵지 않습니다.
그럼 SendMail이란 무엇일까요?
Linux 에서는 기본적으로 sendmail프로그램을 통해 SMTP를 완벽하게 지원합니다. SMTP(Simple Mail Transport Protocol)는 TCP/IP 메일전송 프로토콜이라고 보시면 됩니다. 그러므로 Sendmail은 메일의 발신, 수신, 중계의 역할을 하는 것입다. Sendmail에서 POP3 라는 것도 있는데 이는 Sendmail이 메일을 보내고 받고 해준다면 POP3는 메일이 오고 가고 했던것을 클라이언트에서 받아볼수있도록 하는것이며 쉬운말로 메일을 받으면 우리는 아웃룩이나 기타 메일프로그램으로 서버의 메일을 사용자가 받아 볼수있게 땡겨오는 역할을 한다고 생각하면 됩니다. 이들이 쌍으로 노는 이유는 서버에서 메일을 확인하고 보내고자 한다면 구지 POP3를 설치할 필요가 없지만 기본적으로 사용자들은 서버관리자가 아닌 일반 사람이므로 아웃룩이나 다른 메일프로그램을 쓰기때문에 서버단에서 메일을 가져오기 위해서는 POP3나 IMAP 을 설치하여야 하는 것입니다.

그럼 간단히 Sendmail 이 실행되는 순서는 다음과 같습니다. 철수가 순희에게 메일을 본낸다고 하면 철수는 아웃룩(Mail Client라고하지요)에서 편지를 써서 발송버튼을 누르는순간 DNS의 MX레코드를 참조하여 순희한테 Sendmail이 SMTP 를 이용하여 순희가 쓰는 서버쪽 으로 보내어 집니다..
그럼 아무손상없이 잘 왔다는 가정하에 서버까지 메일이 오면 역시 Sendmail이 받아서 순희한테 바로 주는것이 아니라 서버에서 /var/spool/mail/* 여기에 사용자 계정파일에 차곡차곡 쌓이게 되며 순희는 철수한테 메일이 왔는지 아웃룩을 실행하는순간 POP3에 의해 순희 PC의 아웃룩에서 철수한테 온 메일이 보이게 됩니다. 무슨내용일까하면 클리하여 내용 을 보는순간 POP3에 의해서 서버에서 메일이 사용자 순희에게로 메일이 가버리고 서버에는 더이상 그 메일이 존재하지 안습니다.
위의 내용이 무슨 말인지 이해가 안가시는 분은 그냥 메일을 보내기 위해서 Sendmail을 설치하는데 요놈은 SMTP라는 메일 프로토콜을 사용하여 메일을 전달해주는 역할을 한다고 생각하시면 됩니다. 다만 우리가 아웃룩이나 기타 메일프로그램을 쓸때 서버에서 내 PC로 메일을 가지고 와야 하므로 POP3나 Imap 을 사용하는 것이라고 생각하시면 되고 아웃룩설정하실때 보면 받는메일, 보내는메일 을 설정하고 해당서버의 계정와 아이디를 넣는 것을 보셨을것입니다. 이렇게 같단하게 계념을 잡고 넘어가셔도 되겠습니다. 그럼 설치하는 방법을 알아보겠습니다.


2. Sendmail 설치하기

먼저 sendmail 설치유무부터 확인합니다.

[root@lecture ~]# rpm -qa | grep sendmail
sendmail-8.13.1-2

기본적으로 CentOS를 설치하면 위와같이 하나의 패키지만 설치가 기본적으로 됩니다.
sendmail을 정상적으로 사용하려면 sendmail-cf-8.13.1-2 를 설치하여야 합니다
sendmail-cf-8.13.1-2설치를 아래와 같이 합니다.

[root@lecture ~]# wget http://ftp.superuser.co.kr/pub/centos/4.2/os/i386/CentOS/RPMS/sendmail-cf-8.13.1-2.i386.rpm
--11:49:42-- http://ftp.superuser.co.kr/pub/centos/4.2/os/i386/CentOS/RPMS/sendmail-cf-8.13.1-2.i386.rpm
=> `sendmail-cf-8.13.1-2.i386.rpm'
Resolving ftp.superuser.co.kr... 222.97.189.5
Connecting to ftp.superuser.co.kr|222.97.189.5|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 308,841 (302K) [text/plain]

100%[=================================================>] 308,841 262.99K/s
11:49:43 (261.87 KB/s) - `sendmail-cf-8.13.1-2.i386.rpm' saved [308841/308841]

[root@lecture ~]# ls
anaconda-ks.cfg install.log install.log.syslog sendmail-cf-8.13.1-2.i386.rpm


위와 같이 wget로 패키지 다운받고 다운바은 패키지를 확인하고 아래와 같이 설치합니다.

패키지를 받은 위치에서 설치하고 다시 rpm 설치확인합니다.

[root@lecture ~]# rpm -ivh sendmail-cf-8.13.1-2.i386.rpm
경고: sendmail-cf-8.13.1-2.i386.rpm: V3 DSA signature: NOKEY, key ID 443e1821
준비 중... ########################################### [100%]
1:sendmail-cf ########################################### [100%]

[root@lecture ~]#
[root@lecture ~]# rpm -qa | grep sendmail
sendmail-8.13.1-2
sendmail-cf-8.13.1-2

간단하지요!! sendmail은 이렇게 설치가 끝납니다.
이제 설치후 인증과정을위한 간단한 셋팅 및 중요 셋팅파일을 알아 보도록 하겠습니다.

@ RPM 설치 Tip
가장기본적으로 쓰이는것 두 개
rpm -Uvh 패키지명 ---> 하위버전이 설치되어있을때 업그레이드 하면서 설치
rpm -ivh 피키지명 ---> 보통 패키지 설치시 사용
그외 몇가지 부수적인 옵션이 있습니다.
이 부수적인 옵션들은 설치 또는 업그레이드 또는 제거 옵션뒤에 붙이게 됩니다.
(제거 옵션에서는 --nodeps , --noscripts , --test 만을 사용합니다.)

아마도 rpm을 많이 접해보지 못한 유저는 의존성으로 인한 설치가 중지되는 경우를 많이 보았을것며 이럴때 강제로 설치 및 의존성을 무시고 설치하는 등의 옵션은 종종 사용하며 특히 커널이나 중요 rpm을 설치 롤백할때 , 즉 구버전으로 다시 돌릴때는 해당 옵션을 알면 상당히 유용하게 사용 할 수 있습니다. 어떤것들이 있는지 아래와 같습니다.

rpm -Uvh test.rpm --nodeps ==> 의존성 무시하고 설치
rpm -Uvh test.rpm --force ==> 강제설치 (파일을 덥어쓰지는않음)
rpm -Uvh test.rpm --replacegkgs ==> 목숨걸고 설치해버린다.
rpm -Uvh test.rpm --nodeps ==> 실제설치가아닌 가상테스트설치


3. 설치후 설정파일 다루기

############### Sendmail 설치후 인증부분 셋팅 ###############
/etc/mail/sendmail.mc 파일을 편집기(vi, pico 등)를 이용하여 엽니다.

==>[ 47, 48번째 줄의 내용을 편집합니다. ] (vi 에서는 숫자를 치고 엔터하면 그 라인수만큼 간다.)
이는 smtp 인증 기능 사용을 위해서입니다.
이 smtpd 인증기능을 사용하는 이유는 open relay라는것을 이용해 스패머들이 스팸메일을 뿌리는것을 막기위해 인가된 사용자의 메일만 relay(중계)하는 방법을 사용하기 위함입니다.

dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
위의 내용에서 빨간 부분을 삭제 (주석을 풀어준다는 의미지요)

==>[ 104번재 줄을 편집합니다. ]
senmail은 언제부턴가 로컬(서버)에서 보내는 메일만 relay(전달)하였습니다. 하지만, 메일서버로 사용하기 위해서는 이 설정을 지워야 합니다.
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl 이 부분을 아래와 같이
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl 이렇게 편집함
적용은 아래와 같이 방금 수정한 sendmail.mc 파일로 sendmail.cf 파을을 만들고 Sendmail 재 시작하여 수정된 설정파일을 restart 되면 적용되는 것입니다.
[root@lecture ~]# cd /etc/mail
[root@lecture mail]# pwd
/etc/mail
[root@lecture mail]# m4 sendmail.mc > sendmail.cf
[root@lecture mail]#
[root@lecture mail]# /etc/rc.d/init.d/sendmail restart
sendmail를 종료하고 있습니다:        [ 확인 ]
sm-client을 종료하고 있습니다:        [ 확인 ]
sendmail (을)를 시작합니다:        [ 확인 ]
sm-client을 시작하고 있습니다:        [ 확인 ]
[root@lecture mail]#
[root@lecture mail]#


########## access, local-host-names, virtusertable 파일설정 ##########
/etc/mail/access 파일 : Relay(허용할 도메인)제안설정파일
/etc/mail/local-host-names 파일 : 최종수신지 설정파일
/etc/mail/virtusertable 파일 :가상메일 설정파일

위의 정의와 함께 이해를 돕기 위해 실제 업무에서 요청이 들어오는 내용으로 예를 들겠습니다.

요청자 : firewolf@firewolf.co.kr 로하여 메일계정은 firewolf 메일계정패스워드는 firewolf1234로
메일계정 추가 하고 webmaster@firewolf.co.kr로 오는 메일도 firewolf 가 받아볼수있도록 설정해주세요 !!

step1 메일계정으로쓸 사용자 추가하기
1-1 일반사용자이면서 메일도 사용할거라면 :
[root@lecture mail]# useradd firewolf
[root@lecture mail]# passwd firewolf
Changing password for user firewolf.
New UNIX password:


1-2 메일만 사용할수있게 홈디렉토리와 쉘권한을배고 계정과 패스워드만 등록하려면 :
[root@lecture mail]# useradd -M -s /bin/false -c firewolf firewolf1234


step2 : vi /etc/mail/access(아래와같이 허용도메인을 RELAY한다 공백은 탭으로 띄움)
# Check the /usr/share/doc/sendmail/README.cf file for a description
# of the format of this file. (search for access_db in that file)
# The /usr/share/doc/sendmail/README.cf is part of the sendmail-doc
# package.
#
# by default we allow relaying from localhost...
localhost.localdomain          RELAY
localhost          RELAY
127.0.0.1          RELAY
firewolf.co.kr          RELAY

step3 : vi /etc/mail/local-host-names(최종수신자 도메인으로 등록한다.)
# local-host-names - include all aliases for your machine here.
firewolf.co.kr

step4 : vi /etc/mail/virtusertable(webmaster은 가상유저이므로 아래와같이 설정한다.)
webmaster@firewolf.co.kr          firewolf

step5 : 모든설정이을 적용시키기위해 /etc/mail/에서 'make'하고 sendmail restart.(아래와같이 쉘이 떨이지면 적용성공)
[root@lecture mail]# pwd
/etc/mail
[root@lecture mail]# make
[root@lecture mail]#
[root@lecture mail]# /etc/rc.d/init.d/sendmail restart
sendmail를 종료하고 있습니다:        [ 확인 ]
sm-client을 종료하고 있습니다:        [ 확인 ]
sendmail (을)를 시작합니다:        [ 확인 ]
sm-client을 시작하고 있습니다:        [ 확인 ]
[root@lecture mail]#



위의 step들을 차근히 실행하면 요청자의 요청을 해결할수있습니다. 물론 실제 업무에서는 스크립트로 한줄 명령만 넣으면 모든 절차가 한번에 되지만 내부적으로는 위와같은 처리들을 합니다. 위의 예는 가장 일반적인 예이고 변칙적인 경우를 요구하는 사람도 많으므로 sendmail에 익숙해지고 셋팅파일및 RELAY의 계념이 확실해 지면 좀더 깊게 여러방향으로 문제 해결을 해보시길 바랍니다.


4. POP3 설치 및 확인

imap-2002d-3 를 설치하면 imap, pop3, pop2등 모두 설치해주는 통합패키지라고나 할까요..
아래는 같이 설치하고 가동 시키는 방법과 가동되는지 확인하는 방법을 보여줍니다.

[root@lecture ~]# rpm -Uvh http://ftp.suidc.com/pub/fedora/core1/RPMS/imap-2002d-3.i386.rpm
http://ftp.suidc.com/pub/fedora/core1/RPMS/imap-2002d-3.i386.rpm(을)를 복구합니다
경고: /var/tmp/rpm-xfer.yXrvDR: V3 DSA signature: NOKEY, key ID 4f2a6fd2
준비 중... ########################################### [100] 1:imap ########################################### [100%]
[root@lecture ~]#
[root@lecture ~]# rpm -Uvh http://ftp.suidc.com/pub/fedora/core1/RPMS/imap-devel-2002d-3.i386.rpm
http://ftp.suidc.com/pub/fedora/core1/RPMS/imap-devel-2002d-3.i386.rpm(을)를 복구합니다
경고: /var/tmp/rpm-xfer.n2zLLt: V3 DSA signature: NOKEY, key ID 4f2a6fd2
준비 중... ########################################### [100%]
1:imap-devel ########################################### [100%]
[root@lecture ~]#
[root@lecture ~]# rpm -qa | grep imap (잘 설치되었는지 확인
imap-devel-2002d-3
imap-2002d-3


[root@lecture xinetd.d]# cd /etc/xinetd.d
[root@lecture xinetd.d]# cd
[root@lecture ~]# cd /etc/xinetd.d
[root@lecture xinetd.d]# pwd
/etc/xinetd.d
[root@lecture xinetd.d]# ls -l (pop3는 수퍼데몬으로 서비스된다.)
합계 80
-rw-r--r-- 1 root root 560 3월 9 16:58 chargen
-rw-r--r-- 1 root root 580 3월 9 16:58 chargen-udp
-rw-r--r-- 1 root root 239 3월 9 16:58 cups-lpd
-rw-r--r-- 1 root root 417 3월 9 16:58 daytime
-rw-r--r-- 1 root root 437 3월 9 16:58 daytime-udp
-rw-r--r-- 1 root root 339 3월 9 16:58 echo
-rw-r--r-- 1 root root 358 3월 9 16:58 echo-udp
-rw-r--r-- 1 root root 322 3월 9 16:58 eklogin
-rw-r--r-- 1 root root 325 3월 9 16:58 gssftp
-rw-r--r-- 1 root root 370 7월 23 2003 imap
-rw-r--r-- 1 root root 365 7월 23 2003 imaps
-rw-r--r-- 1 root root 453 7월 23 2003 ipop2
-rw-r--r-- 1 root root 358 3월 24 12:03 ipop3
-rw-r--r-- 1 root root 309 3월 9 16:58 klogin
-rw-r--r-- 1 root root 322 3월 9 16:58 krb5-telnet
-rw-r--r-- 1 root root 307 3월 9 16:58 kshell
-rw-r--r-- 1 root root 335 7월 23 2003 pop3s
-rw-r--r-- 1 root root 317 3월 9 16:58 rsync
-rw-r--r-- 1 root root 495 3월 9 16:58 time
-rw-r--r-- 1 root root 515 3월 9 16:58 time-udp


[root@lecture xinetd.d]# vi ipop3 (desable = yes ---> no 바꾸어준다.)
# default: off
# description: The POP3 service allows remote users to access their mail
# using an POP3 client such as Netscape Communicator, mutt,
# or fetchmail.
service pop3
{
socket_type = stream
wait = no
user = root
server = /usr/sbin/ipop3d
log_on_success += HOST DURATION
log_on_failure += HOST
disable = no
}


[root@lecture xinetd.d]# /etc/rc.d/init.d/xinetd restart (설정을 했으니 서비스제시작해준다.)
xinetd 를 정지함: [ 확인 ]
xinetd (을)를 시작합니다: [ 확인 ]

[root@lecture xinetd.d]# netstat -anp | grep LISTEN (실제로 110포트[pop3]가 열려있는지 확인)
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 30238/xinetd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1732/portmap
tcp 0 0 0.0.0.0:661 0.0.0.0:* LISTEN 1751/rpc.statd
tcp 0 0 0.0.0.0:631 0.0.0.0:* LISTEN 2793/cupsd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 30181/sendmail: acc
tcp 0 0 :::22 :::* LISTEN 1921/sshd

여기까지 다 되었다면 pop3설치를 다 한 것이 됩니다.
아웃룩이나 기타 프로그램에서 계정및 smtp,pop3 주소 입력하시어 해당서버에서 온 파일을
받아보시면 되겠습니다.

5. 실전 응용 TIP

5-1. 콘솔에서 바로 간단히 메일보네는 방법
[root@lecture xinetd.d]# echo "안녕하십니까?" | mail -s "안부메일" mymaster@superuser.co.kr

5-2. virtusertable 설절정에서 특정메일을 다른 특정메일로 보내기
vi /etc/mail/virtusertable
webmaster@firewolf.co.kr          ohtermail@orterurl.co.kr

5-3. 서버에서 메일이 받는곳 : /var/spool/mail

5-4. 어떤오류로 메일이 나가지 못하거나 비정상적으로 왔을때 임시로 쌓이는 곳 : /var/spool/mqueue

5-5. 두개의 콘솔창을 띄워놓고 한쪽에서 보내어보고 받는쪽에서 실시간 확인하는 방법
tail -f /etc/spool/mail/메일계정명 이라고 하게되면 파일을 끝자락에서 내용이 추가되는 족족 보이게 된다.

5-6. mutt 활용하기
요거는 메일을 파일을 열어서확인하는것이 아니라 예전에 도스시길 M 과 같은 인테페이스이고 M을 잘모르시는분은 아래의 이미지를 참고하시면 됩니다. 기능은 메일을 언제왔고 내용이 무었이며 삭제할수있는 기능들이 있습니다. 메일을 좀더 편안하고 쉽게 관리할수있는 서버단에서 쓸수있는 것이지요...

01_mutt.jpg

깊게 들어가지는 못했지만 최소한의 계념과 설치방법, 사용방법을 인지하고 넘어갈수있으면하는 바램입니다. 마지막에 Tip부분은 계속해서 추가하도록 하겠습니다.
 
 
 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,042 명
  • 현재 강좌수 :  35,846 개
  • 현재 접속자 :  153 명