관리 메뉴

드럼치는 프로그래머

[Linux] 리눅스 Fedora Core 3 메일서버(Sendmail) 구축 본문

★─Programing/☆─Linux

[Linux] 리눅스 Fedora Core 3 메일서버(Sendmail) 구축

드럼치는한동이 2007. 9. 28. 02:12

자료제공 : 강남 국제공인시험센터(리눅스 레드햇교육 LPIC 자격증)


추천모임 : 리눅스관련 공유자료 최다 카페 확인하기!!


Fedora Core 3 메일서버(Sendmail) 구축



  지금 써 내러 가는 강좌는 Fedora Core 3 기반으로 써 내려갑니다. 물론 다른 버전과 어느정도 호환성은 가지고 있겠지만, 충분한 테스트 해보지 않고 써내려 갑니다. 혹시 본 강좌만 보고 설치하시다 문제가 발생한다면, 한번쯤 시간 내어 보기를 바랍니다.
 서버 설치후 메일 서버설치는 옵션이 아닌 필수가 되었습니다. E-mail 은 오래전부터 사용되었습니다. 개인적으로 메일서버는 qmail이 더 좋다고 생각합니다. 모든 면에서.. 하지만, qmail은 간단하게 설치 할 수 없고 배포판에 딸려 나오지 않았기 때문에 , 대부분의 유닉스에 포함된 sendmail을 사용하는 방법을 강좌로 써 보겠습니다.


1. 설치
  센드메일은 앞의 설치 강좌데로 설치했다면, 이미 설치되었을 것입니다.
하지만 설치가 되었는지 확인할 필요가 있습니다.  확인하는 법은 다음과 같습니다.

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

 위와같은 결과가 나왔다면 배포판과 함께 이미 설치된 것입니다.
만약 위의 2개의 패키지중 sendmail-cf-8.13.1-2 이 패키지가 설치 되지 않았다면, 걱정하실 필요 없이 다음에 설명하는 방법으로 설치하면 패치된 버전을 설치 할 수 있습니다.


2. 패치된 버전 업그래이드 설치
 sendmail은 보안에 취약하여, 항상 최신버전을 사용하라고 합니다. 하지만 소스를 다운로드받고 컴파일 하기엔 너무 설치 작업이 오래 걸리기 때문에,.. 커널 처럼 패치판을 받아서 설치하도록 하겠습니다.
 금번 강좌를 따라서 설치하고 2. Fedora Core 3 설치후 기본 셋팅강좌를 보셨다면, yum을 사용하여 쉽게 업데이트 할 수있는 방법이 있습니다.

[root@study ~]# yum update sendmail*
Setting up Update Process
Setting up Repos
base 100% |=========================| 1.1 kB 00:00
updates-released 100% |=========================| 951 B 00:00
Reading repository metadata in from local files
base : ################################################## 2622/2622
updates-re: ################################################## 910/910
Could not find update match for sendmail*
No Packages marked for Update/Obsoletion

앞단계에서 yum 으로 업데이트를 하였다면, 위와같은 메시지가 나오며, 하지 않았다면, 새로운 패키지가 나왔다면, 업그래이드 하겠느냐고 묻게 됩니다. 그때, y 를 눌러 주시기 바랍니다.


3. /etc/mail/sendmail.mc 파일 편집
  sendmail의 환경설정 파일인 sendmail.cf파일을 직접 건드려서 설정하면 보다 더 정확하고 상세 정보를 수정하고 성능 향상에 도움이 되겠지만, 하나의 언어를 익히는 것만큼의 노력과 시간이 필요합니다. 다행히 sendmail의 환경 설정 파일은 메크로처리기를 이용해서 어느 부분만 설정하면, 간단하게 sendmail.cf파일을 작성할 수 있습니다.
  고급 설정을 원하시는 분들은 sendmail을 공부하시는 것 보다 qmail 에 시간을 더 투자 하시는게 좋을 것 같습니다.^^

/etc/mail/sendmail.mc 파일을 편집기를 이용해서 열어야 합니다.
 48, 49번째 줄의 내용을 편집합니다. 이는 smtp 인증 기능 사용을 위해서입니다. 이 smtp 인증기능을 사용하는 이유는 smtp 프로토콜은 아주 오래전에 만들어진 것입니다. 그 때는 스팸메일을 보내는 사람들도 없었기 때문에 모두 open relay이었습니다. 하지만 시간이 지나면서 이 open relay를 이용해 스패머들이 스팸메일을 뿌리기 시작했습니다. 이를 막기위해 인가된 사용자의 메일만 relay(중계)하는 방법이 필요했고, 이 방법을 smtp 프로토콜 위에 얹은 것 정도로 보시면 됩니다. 이 smpt 인증 방법이전에는 사용자의 ip로 인증하곤 했었습니다.

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

위의 내용에서 빨간 부분을 지우시기 바랍니다.

TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
위와같이 되죠^^;

105번재 줄을 편집합니다. 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.mc 파일로 sendmail.cf 파을을 만들어야 합니다.

[root@study mail]# pwd
/etc/mail
[root@study mail]# make
예전에는 m4명령어를 직접사용하여 sendmail.cf파일을 만들었지만, 요즘은 make 명령어로 만들기를 권장하고 있습니다.
확인 하는 방법은 명령어를 내린 다음 파일의 변경 시간을 확인하므로 알수 있습니다. 다음과 같이 확인했습니다.
[root@study mail]# ll sendmail.*
-rw-r--r-- 1 root root 58109 3월 24 17:07 sendmail.cf
-rw-r--r-- 1 root root 6743 3월 24 17:07 sendmail.mc
위와같이 작업한 시간으로 변경되어 있다면, 정상적으로 변경된것입니다.

위와같이 한줄로 sendmail.cf파일은 생성됩니다. 이렇게 생성 하였다면,반드시 sendmail을 재 시작해야 합니다. sendmail은 시작할 때 환경설정파일(sendmail.cf )을 로드 하기 때문입니다.
[root@study mail]# /etc/rc.d/init.d/sendmail restart
sendmail를 종료하고 있습니다:                              [  확인  ]
sm-client을 종료하고 있습니다:                             [  확인  ]
sendmail (을)를 시작합니다:                                [  확인  ]
sm-client을 시작하고 있습니다:                             [  확인  ]

4. /etc/mail/access 파일 편집
  이 파일을 잘 사용하면 조금의 스팸 필터링을 할 수 있습니다. 하지만 기본 설정만 하도록 하겠습니다.
이 서버에서 사용할 도메인을 다음과 같이 넣어줘야 합니다. 예를 들어 도메인이 gnux.co.kr 이라면,

gnux.co.kr                    RELAY
이렇게 relay가 가능하게 합니다. 이 설정은 메일을 보낼 때 위 도메인으로 메일을 보내면 relay를 하겠단 설정입니다. 반드시 도메인과 RELAY사이에는 tab키로 띄워야 합니다.
이렇게 설정하고 다음과같이 db를 만둘어 주어야 합니다. 이또한 make 명령만으로 가능합니다.
[root@study mail]# make


5. /etc/mail/local-host-names
  이 파일은 쉽게 설명하면 메일을 받을 도메인을 넣어두는 파일입니다.. 예를들어 도메인이 gnux.co.kr이라면,

gnux.co.kr
위와같이 도메인을 달랑 적어주면 됩니다. 물론 다중 도메인이면 한 도메인에 한줄씩 줄~줄~ 적으면 됩니다.
위 파일설정을 바꾼 다음엔 반드시 sendmail을 재 시작해 줘야합니다.~


6. /etc/mail/virtusertable 파일 이용한 가상 유저 셋팅
 sendmail은 기본적으로 시스템(리눅스)의 계정을 사용합니다. 그래서 도메인이 다르다고 하더라도 계정의 계정이 같으면 같은 사람으로 취급합니다. 예를 들면, 셋팅한 서버에 2개의 도메인(gnux.co.kr, hyung.co.kr)이 설정되어있다고 가정합니다. 모두 홈페이지를 운영하고 있다면, webmaster@gnux.co.kr 과 webmaster@hyung.co.kr 이라는 메일 주소가 존재 할 것입니다. 그렇다면 서버에서 webmaster이라는 계정을 생성한 다음 메일을 받아보면, 위 2 주소로 보낸 메일 모두 webmaster라는 계정으로 들어오게 됩니다. 이런 경우 두 메일을 분리해 주기 위해 사용하는 것이 virtusertable입니다.
  webmaster@gnux.co.kr 이라는 계정으로 오는 메일은 gnux 라는 계정으로
  webmaster@hyung.co.kr 으로 오는 메일은 hyung 라는 계정으로 받아보게 설정하는 것입니다.

webmaster@0link.co.kr             gnux
webmaster@hyung.co.kr           hyung
위와같이 설정하면 가능합니다.
(주의) 메일 계정과 linux 계정 사이에는 <TAB>키로 띄워 주시기 바랍니다. 그렇게 하지 않으면 인식하지 못합니다.

이렇게 설정하고 다음과같이 db를 만둘어 주어야 합니다.
[root@test mail]# make



7. pop3 서버 설치
 지금까지 mail 서버를 설치하였습니다. 물론 지금까지 설치로 메일서버의 기능을 할 수 있습니다. 서버내에서 mutt등 메일 클라이언트를 사용하여 메일을 보내고 받을 수 있습니다. 하지만 모두다 outlook같은 프로그램으로 pc에서 받아보길 원할 것입니다. outlook에서 메일을 받아 보기 위해서는 imap 또는 pop3 서버를 설치해야 합니다. 대 부분의 사람들이 imap 보다는 pop3 서버를 많이 사용합니다. imap은 webmail에서 많이 사용합니다. pop3 서버는 개인적으로 qpopper이 더 좋다고 생각하지만. 그 프로그램을 컴파일 하여 설치하기엔 시간이 너무 많이 걸립니다. 간단하게 rpm으로 설치할 수 있는 pop3서버를 설치 해 보도록하겠습니다. 제가 쓴 설치 강좌데로 설치 했다면 아래의 패키지가 설치 되어있을것입니다. 예전에는 imap-2002d 를 많이 사용하였지만, 이 패키지는 어느순간 없어지고, dovecot패키지가 있더군요~ dovecot 패키지를 설치하면, mysql특정 라이브러리를 사용하기 때문에 mysql-3.23.58-16.FC3.1 패키지가 함께 설치됩니다. 참고 하시기 바랍니다.~ >..<;

[root@study mail]# rpm -qa | grep dovecot
dovecot-0.99.13-3.FC3

위와같이 설치되어 있지 않다면 다음 방법으로 설치하시기 바랍니다.

yum install dovecot
이렇게 설치 하게 되면, imap, imaps , pop3, pop3s 이렇게 4개의 프로토콜을 지원하게 됩니다. 설정파일은 /etc/dovecot.conf 파일이며, 다음과 같이 수정하여 pop3서비스만 사용하도록 합니다.

/etc/dovecot.conf 파일을 열어 8번째 라인에서

protocols = imap imaps pop3 pop3s
이렇게 된것을
protocols = pop3
이렇게 편집하고 dovecot을 재시작 합니다.

[root@study etc]# /etc/init.d/dovecot restart
Dovecot Imap 를 정지함:                                     [  확인  ]
Dovecot Imap (을)를 시작합니다:                             [  확인  ]

그런다음 다음과 같이 접속 테스트를 합니다.

[root@study etc]# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK dovecot ready.
user 사용자계정
+OK
pass 비밀번호
+OK Logged in.
list
+OK 0 messages:

위와같이 접속되며, 모두 OK메시지가 떨어진다면 모두 정상적인것입니다.

이젠 서버 리부팅시에도 자동으로 시작되게 초기실행스크립트를 조정합니다.

[root@study etc]# chkconfig dovecot on
이렇게 하므로 다음부팅시 자동 실행하게 한것입니다.



모두들 아실 것이라고 믿고 outlook설정은 설명하지 않겠습니다. 단지 설정하시고,
도구 -> 계정 -> 속성 -> 서버 -> 인증필요(채크) -> 적용위와같이 설정하시기 바랍니다.(smtp 인증법)




8. 서버 데몬 확인 및 서비스 확인
  이렇게 설치 하셨다면, 간단한 메일 서버는 셋팅은 끝입니다.  이제 서비스를 확인해야 합니다.

[root@test mail]# netstat -an | grep LISTENtcp        0      0 0.0.0.0:32769               0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:631                 0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:5335              0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN
tcp        0      0 :::110                      :::*                        LISTEN
tcp        0      0 :::22                       :::*                        LISTEN

현재 열려있는 포트입니다. 다른 것들은 서비스에 따라 다를 수 있으니 신경쓰지 마시구요, 110 포트(pop3),  25번 포트(smtp 그러니까 sendmail)입니다. 위와같아야 합니다.



9. 메일큐 내용 확인하기
  홈페이지 운영하다 메일링 리스트에서 메일을 보내게 되면, 정상적인 메일주소로는 메일이 가지만, 정상적인 메일주소가 아닌 경우 가지도 않고 메일큐(/var/spool/mqueue)에 쌓여서 서버의 부하를 주는 경우가 있습니다.. sendmail은 기본설치된 것이 1시간마다 메일큐를 비우게 되어 있고, 한 번 보낸 메일은 7일동안 메일을 보내려고 시도하게 됩니다.. 메일큐에 보내지 못한 메일이 많으면 서버에 부하만 늘어납니다.  이런 경우 mailq라는 명령어로 큐 내용을 확인하여 지워줘야 합니다..

[root@study root]# mailq/var/spool/mqueue is empty
                Total requests: 0
 위와 같은 경우 메일큐가 비어있는 상태입니다.
큐를 지우는 방법은
[root@study root]# rm -rf /var/spool/mqueue/* 
이렇게 해서 메일큐를 비울 수 있습니다.. 모두 지웠다면 반드시 sendmail을 재시작 해 주기 바랍니다.



10. 도메인 셋팅 스크립트
  서버를 많이 관리하다보면 파일 하나 하나 열어서 셋팅하는 일이 귀찮고도 시간이 많이 걸립니다. 항상 스크립트를 작성해두고 설정하는 것이 실수를 줄이고, 작업 시간도 줄일 수 있습니다. 다음과 같이 간단 한 스크립트를 작성해서 저장합니다.

#!/bin/bash
echo "간단한 메일 셋팅 프로그램 by doly엣superuser.co.kr "
if [ "$1" == "" -o "$2" == "" ] ; then
        echo -e "\n ############ 사용법 ############## "
        echo -e "$0 아이디 도메인 \n"
        exit 0
fi

echo "webmaster@$2 으로 들어오는 메일은 $1@$2 메일계정으로 받습니다."
echo -e "$2 \t\t\t RELAY" >> /etc/mail/access
echo "$2" >> /etc/mail/local-host-names
echo -e "webmaster@$2 \t\t\t $1" >> /etc/mail/virtusertable
echo "1. db 생성중.."
cd /etc/mail
make
echo "2. 센드메일 재 시작중 "
/etc/rc.d/init.d/sendmail restart


파일을 만들어서 위 내용을 붙여 넣은 다음에 실행 권한을 줍니다. 그리구 아래와같이 실행하면,
[root@test root]# ./mailsetup.sh
간단한 메일 셋팅 프로그램 by doly엣superuser.co.kr

 ############ 사용법 ##############
./mailsetup.sh 아이디 도메인

위와같이 실행시키면 간단한 사용법이 나옵니다.

[root@test root]# ./mailsetup.sh doly gnux.co.kr
간단하 메일 셋팅 프로그램 by doly엣superuser.co.kr
webmaster@gnux.co.kr 으로 들어오는 메일은 doly@gnux.co.kr 메일계정으로 받습니다.
1. db 생성중..
2. 센드메일 재 시작중
sendmail를 종료하고 있습니다:                              [  확인  ]
sm-client을 종료하고 있습니다:                             [  확인  ]
sendmail (을)를 시작합니다:                                [  확인  ]
sm-client을 시작하고 있습니다:                             [  확인  ]

위와같이 id : doly , gnux.co.kr으로 입력하면 위와같이 자동 셋팅됩니다.
/etc/mail/access 파일, /etc/mail/local-host-names, /etc/mail/virtusertable 파일이 변경되고, db 갱신되며, sendmail 재시작 됩니다.

Comments