· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Linuxdoc Sgml/Qmail_Install-KLDP

QMAIL로 메일서버 구축하기 ( 메일 forwarding 과 pop3설정까지..)

QMAIL로 메일서버 구축하기 ( 메일 forwarding 과 pop3설정까지..)

정계옥 -qmail-설치 hook7346@hsd.hackerslab.org

문상준 -qmail-pop3설치 dakeshi@hsd.hackerslab.org

2001.2.5
이미 실력있는 많은 분들이 qmail에 관한 문서를 쓰셨지만, 나 같은 초보자에게는 너무 어려운 말이 많고, 따라하기 힘든 면이 많았다. ( http://kldp.org 에 가면, qmail 설치관련 문서를 구할 수 있다.) 그래서, 나는 그간의 경험을 기반으로 하여, 따라하기만 하면 바로 될 수 있는 qmail 설치 매뉴얼을 쓰기로 했다. 이 문서는 충분한 검증을 받았다고 할 수는 없지만, 여러 대의 i386계열 컴퓨터상에서 실험되었다. 실험한 리눅스배포판은 "와우리눅스 6.2 업데이트" 와 "영문 RedHat 7.0"이다. 이 문서를 보고, 다른 종류의 리눅스 배포판에서 성공하였다면, 필자에게 이메일로 알려주기 바란다. 또는, 버그나 수정사항이 있다면 역시 이메일로 알려주기 바란다. 그러한 사항들은 이 문서를 새롭게 만드는데 추가될 것이다.(공헌자의 이름과 함께..) 또 하나, 참고사항이 있는데, 어디까지나 이 문서는 qmail을 설치하고 동작하는 것에만 주안점을 두었다. 여러 가지로 자기사정에 맞게 변환하는 문제에 대해서는 충분한 설명을 하지 않고 있다는 것이다. 이 문서를 보고 qmail 메일서버를 만드는 것에 성공하고 나서 자신의 환경에 맞게 설정하는 것에 대해서는, kldp.org에 있는 다른 qmail 관련문서들을 참고하기 바란다. 필자는 이 문서에 대한 충분한 덧붙임을 계획하고 있지만, 언제쯤 만들어질지는 본인도 약속을 못하겠다. 그럼,따라하기만 하면 성공할 수 있는 qmail 설치를 시작해 보자 !! 반드시 필요한 것 : DNS 등록 호스트 (DNS에 이름이 등록되어진 호스트가 반드시 필요하다. 만약 없다면, 메일서버를 만들 수가 없다. 이 점은 누구나 다 알고 있으리라 생각한다.)

1. qmail 소스 받아오기

qmail을 설치하고, pop3 까지 설정하기 위해서 필요한 패키지는 다음과 같다.

qmail , ucspi-tcp , daemontools , rblsmtpd , qmail-103.patch , checkpassword

위의 것들은 모두 http://www.qmail.org 에서 받을 수 있거나 링크를 찾을 수 있다.

http://www.qmail.org/top.html

http://cr.yp.to/rblsmtpd.html

http://cr.yp.to/ucspi-tcp/install.html

http://cr.yp.to/daemontools/install.html

ftp://ftp.dti.ad.jp/pub/FreeBSD/ports/distfiles/qmail-103.patch

ftp://ftp.fujitsu.co.jp/pub/FreeBSD-jp/ports-jp/LOCAL_PORTS/checkpassword-0.81.tar.gz

위의 사이트에도 없으면 ftp search를 해주는

http://filewatcher.org에 가서 찾아보길 바란다. 자주 링크가 깨어지는 문제로 하여, 필자가 직접 파일들을 올려놓았다. http://hsd.hackerslab.org/~hook7346/qmail.html (DeadLink ?)에 가면 받을 수 있다.

현재의 버전들은 다음과 같다. qmail-1.03.tar.gz rblsmtpd-0.70.tar.gz ucspi-tcp-0.88.tar.gz daemontools-0.70.tar.gz qmail-103.patch checkpassword-0.81.tar.gz

2. 루트권한으로 변경한 뒤, (이후과정은 계속 루트권한이어야 한다.) 임의의 디렉토리에서 소스를 푼다. 내 경우는 /root/temp/ 디렉토리이다.

$ su
password:
# cd /root/temp/
# cp [소스를 다운받은 디렉토리]/qmail-1.03.tar.gz  /root/temp/
# cp [소스를 다운받은 디렉토리]/rblsmtpd-0.70.tar.gz  /root/temp/
# cp [소스를 다운받은 디렉토리]/ucspi-tcp-0.88.tar.gz  /root/temp/
# cp [소스를 다운받은 디렉토리]/daemontools-0.70.tar.gz  /root/temp/

# tar -zxf qmail-1.03.tar.gz
# tar -zxf rblsmtpd-0.70.tar.gz
# tar -zxf ucspi-tcp-0.88.tar.gz
# tar -zxf daemontools-0.70.tar.gz
그러면, 각각의 qmail-1.03 rblsmtpd-0.70 ucspi-tcp-0.88 daemontools-0.70 라는 하위 디렉토리가 생긴다.
  • 여기서, 왜 checkpassword 는 소스를 풀지 않는지 궁금해 할 수도 있는 사람이 있을 것이다.
  • 이유는 일단 qmail 이 성공해야 pop3를 만들 수 있다는 것이다. pop3 의 설치는 아주 간단하므로,
  • qmail 설치 성공이후에 다룰 것이다.

3. qmail 설치를 위한 디렉토리를 생성한다.

필요한 하위디렉토리는 qmail이 자동으로 만들기 때문에, qmail의 홈디렉토리만 만들어 주면 됩니다.

# mkdir /var/qmail

참고사항 : qmail을 /var가 아닌 다른 곳에 놓고 싶으시면, /var/qmail 디렉토리에
        그곳을 가리키는 심볼릭 링크를 만드시면 됩니다. 
        예를 들면, 다음과 같이 하시면 됩니다.

        mkdir /var/qmail
        ln -s /usr/man /var/qmail/man                   -->  man DIR을 /usr/man 으로 링크
        mkdir /etc/qmail
        ln -s /etc/qmail /var/qmail/control                -->  control DIR을 /etc/qmail 로 링크
        ln -s /usr/sbin /var/qmail/bin                    -->  bin DIR을 /usr/sbin 으로 링크

4. qmail 실행을 위한 유저와 그룹을 생성한다.

/root/temp/qmail-1.03/INSTALL.ids 파일을 편집한다. 다음과 같이 리눅스 항목들만 남기고 나머지는 깨끗하게 지운다.

groupadd nofiles
useradd -g nofiles -d /var/qmail/alias alias
useradd -g nofiles -d /var/qmail qmaild
useradd -g nofiles -d /var/qmail qmaill
useradd -g nofiles -d /var/qmail qmailp
groupadd qmail
useradd -g qmail -d /var/qmail qmailq
useradd -g qmail -d /var/qmail qmailr
useradd -g qmail -d /var/qmail qmails 

#cd /root/temp/qmail-1.03
# sh INSTALL.ids 
해주면 필요한 유저와 그룹이 생성된다.
  • groupadd useradd 라는 명령어가 없다고 나오는 경우가 있는데, 그 경우에는 다음과 같이 PATH 변수를 갱신해 주면 된다.
# PATH=/usr/sbin:$PATH
# export PATH
이번에는 oversize DNS 패치를 적용한다. 이 패치는 RFC의 권고안을 무시하고 512바이트보다 큰 UDP DNS 응답을 되돌려주는 일부 ISP업체들(AOL, hanmail.net 같은 곳) 때문에 필요한 것이다. qmail의 DNS resolve 라이브러리는 RFC와 호환되도록 되어있으므로 RFC와 호환되지 않게 전달되는 메시지에는 응답하지 못한다. 다음의 패치는 qmail이 그러한 불법적인 DNS의 응답에 정확하게 수행하도록 한다. 패치는 다음과 같이 한다.(반드시 qmail의 소스 디렉토리에서 할 것.)
#patch -p1 < ./qmail-103.patch

5. qmail 과 연관 프로그램들을 컴파일한다.

# cd /root/temp/qmail-1.03/
# make
# make setup check
qmail을 위한 다른 프로그램들도 컴파일하고 설치한다. (ucspi-tcp , daemontools , rblsmtpd)
# cd /root/temp/ucspi-tcp-0.88/
# make
# make setup check

# cd /root/temp/daemontools-0.70/
# make
# make setup check

# cd /root/temp/rblsmtpd-0.70/
# make
# make setup check

6. 기본 control 파일들의 설정을 위하여, qmail config 하기

# cd /root/temp/qmail-1.03/
# ./config
정상적인 실행결과는 다음과 같다.
[root@chsd qmail-1.03]# ./config
Your hostname is chsd.
Your host's fully qualified name in DNS is chsd.chonnam.ac.kr.
Putting chsd.chonnam.ac.kr into control/me...
Putting chonnam.ac.kr into control/defaultdomain...
Putting ac.kr into control/plusdomain...
Checking local IP addresses:
127.0.0.1: Adding localhost to control/locals...
168.131.34.167: Adding chsd.chonnam.ac.kr to control/locals...
If there are any other domain names that point to you,
you will have to add them to /var/qmail/control/locals.
You don't have to worry about aliases, i.e., domains with CNAME records.
Copying /var/qmail/control/locals to /var/qmail/control/rcpthosts...
Now qmail will refuse to accept SMTP messages except to those hosts.
Make sure to change rcpthosts if you add hosts to locals or virtualdomains!
[root@chsd qmail-1.03]#
만약, 위와 같은 메시지가 나오지 않는다면, 당신의 Network 설정 및 DNS 설정에 문제가 있는 경우이다. DNS 서버에 이름이 정상적으로 등록되어 있다면, Network 설정을 잘 살펴보아야 한다.

잘 살펴보아야 할 설정파일은 다음과 같다.

/etc/resolv.conf
search chonnam.ac.kr       <--- 특히, 이 줄이 없어서, 문제를 겪은 경우가 있다. 
nameserver 168.126.63.1                  필자는 이것때문에 무척 고생을 했었다.
nameserver 168.126.63.2
특히, search [domain name] 라인이 반드시 있어야 한다.
/etc/hosts
127.0.0.1        localhost       localhost.localdomain
123.234.123.234  chsd.chonnam.ac.kr  chsd
123.234.123.231  other.chonnam.ac.kr  other
위 파일의 내용을 확인하고, 내용에 맞추어 수정한다.
/etc/sysconfig/network
..........
..........
HOSTNAME=chsd
DOMAINNAME=chonnam.ac.kr
..........
..........
위의 라인을 확인하여, 없으면 추가한다.

위의 수정사항을 다 적용하였는데도, 정상적인 config 가 수행되지 않는다면, 그때는 이렇게 한다.

[root@chsd qmail-1.03]# ./config-fast chsd.chonnam.ac.kr
config-fast 다음에 서버의 DNS 등록 호스트네임을 다 써주면 된다. 그러면, 정상적으로 다음 설치가 가능하다.

7. qmail 데몬을 위한 디렉토리와 파일들을 생성.

# mkdir -p /var/qmail/supervise/qmail-send/log
# mkdir -p /var/qmail/supervise/qmail-smtpd/log
# chmod +t /var/qmail/supervise/qmail-send
# chmod +t /var/qmail/supervise/qmail-smtpd

# vi /var/qmail/supervise/qmail-send/run 
-----------------------------------
#!/bin/sh
exec /var/qmail/rc
-----------------------------------

# vi /var/qmail/supervise/qmail-send/log/run 
---------------------------------------------------------------
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail
---------------------------------------------------------------

# vi /var/qmail/supervise/qmail-smtpd/run 
--------------------------------------------------------
#!/bin/sh
exec /usr/local/bin/softlimit -m 2000000 \
        /usr/local/bin/tcpserver -v -p -x/etc/tcp.smtp.cdb \
        -u 505 -g 506 0 25 /var/qmail/bin/qmail-smtpd 2>&1
--------------------------------------------------------
위의 "-u 505 -g 506" 에서 505는 alias 의 UID (user ID)이고, 506은 GID (group ID)이다. 컴퓨터마다 등록되는 alias 의 UID와 GID는 다르므로, /etc/passwd 파일을 참조하라. 그리고, 위에서 보이는 "\"기호는 라인이 바뀌었음을 나타내는 기호이다. 원래 위의 파일을 한 줄로 만들어야 하지만, 그러면 보기가 어렵기 때문에 여러 줄로 만들기 위해서 추가된 것이다.
# vi /var/qmail/supervise/qmail-smtpd/log/run 
----------------------------------------------------------------------
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd
----------------------------------------------------------------------
이렇게 편집한 파일들에 실행 권한을 준다.
# chmod 755 /var/qmail/supervise/qmail-send/run
# chmod 755 /var/qmail/supervise/qmail-send/log/run
# chmod 755 /var/qmail/supervise/qmail-smtpd/run
# chmod 755 /var/qmail/supervise/qmail-smtpd/log/run

8. qmail의 log파일을 위한 디렉토리 만들기

# mkdir -p /var/log/qmail/smtpd
# chown qmaill /var/log/qmail /var/log/qmail/smtpd

9. root 와 postmaster를 위한 alias 설정

관리자 계정으로 수신되는 메일을 일반계정으로 포워딩하도록, alias를 설정해 준다. 여기서 silver 는 root, postmaster 등으로 오는 메일을 받을 일반 계정이다. (여러분이 원하는 계정을 만들어서 바꾸어주면 된다.)

# cd ~alias
# echo silver > .qmail-mailer-daemon
# echo silver > .qmail-postmaster
# echo silver > .qmail-root

10. qmail 부트파일 만들기

아래의 스크립트를 그대로 복사, 저장하거나 새로 받는다. http://kltp.kldp.org/tmp/qmail.txt 이 파일을 /etc/rc.d/init.d/ 에 qmail 이라는 이름으로 저장한 후, 실행 퍼미션을 준다.

# cp [다운로드받은 디렉토리]/qmail.txt /etc/rc.d/init.d/qmail
# chmod 755 qmail
다음 ntsysv를 실행시키면 qmail 이라는 새로운 항목이 보일 것이다. 리부팅할 때, qmail 데몬이 실행되도록 체크해준다. 당연히 sendmail 은 체크된 것을 제거한다. (레드햇 리눅스의 경우이다.)

다음은 qmail 데몬의 부트 스크립트이다.

#!/bin/sh
# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 80 80
# description: 겁나게 빠르며, 안정적이고, 유연한 MTA

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH

case "$1" in
  start)
    echo -n "Starting qmail: svscan"
    cd /var/qmail/supervise
    env - PATH="$PATH" svscan &
    echo $! > /var/run/svscan.pid
    echo "."
    ;;
  stop)
    echo -n "Stopping qmail: svscan"
    kill `cat /var/run/svscan.pid`
    echo -n " qmail"
    svc -dx /var/qmail/supervise/*
    echo -n " logging"
    svc -dx /var/qmail/supervise/*/log
    echo "."
    ;;
  stat)
    cd /var/qmail/supervise
    svstat * */log
    ;;
  doqueue|alrm)
    echo "Sending ALRM signal to qmail-send."
    svc -a /var/qmail/supervise/qmail-send
    ;;
  queue)
    qmail-qstat
    qmail-qread
    ;;
  reload|hup)
    echo "Sending HUP signal to qmail-send."
    svc -h /var/qmail/supervise/qmail-send
    ;;
  pause)
    echo "Pausing qmail-send"
    svc -p /var/qmail/supervise/qmail-send
    echo "Pausing qmail-smtpd"
    svc -p /var/qmail/supervise/qmail-smtpd
    ;;
  cont)
    echo "Continuing qmail-send"
    svc -c /var/qmail/supervise/qmail-send
    echo "Continuing qmail-smtpd"
    svc -c /var/qmail/supervise/qmail-smtpd
    ;;
  restart)
    echo "Restarting qmail:"
    echo "* Stopping qmail-smtpd."
    svc -d /var/qmail/supervise/qmail-smtpd
    echo "* Sending qmail-send SIGTERM and restarting."
    svc -t /var/qmail/supervise/qmail-send
    echo "* Restarting qmail-smtpd."
    svc -u /var/qmail/supervise/qmail-smtpd
    ;;
  cdb)
    tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
    chmod 644 /etc/tcp.smtp*
    echo "Reloaded /etc/tcp.smtp."
    ;;
  help)
    cat <<HELP
   stop -- stops mail service (smtp connections refused, nothing goes out)
  start -- starts mail service (smtp connection accepted, mail can go out)
  pause -- temporarily stops mail service (connections accepted, nothing leaves)
   cont -- continues paused mail service
   stat -- displays status of mail service
    cdb -- rebuild the tcpserver cdb file for smtp
restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it
doqueue -- sends qmail-send ALRM, scheduling queued messages for delivery
 reload -- sends qmail-send HUP, rereading locals and virtualdomains
  queue -- shows status of queue
   alrm -- same as doqueue
    hup -- same as reload
HELP
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|doqueue|reload|stat|pause|cont|cdb|queue|help}"
    exit 1
    ;;
esac

exit 0

11. 액세스 컨트롤 파일 작성하기

qmail smtpd를 구동하기 전에, 액세스 컨트롤이 실행되도록 하여야 한다. 이 간단한 작업은 /etc/tcp.smtp 파일을 이용한다. /etc/tcp.smtp 에 다음 한 줄을 작성한다.

# vi /etc/tcp.smtp
--------------------------------
:allow
--------------------------------
로컬호스트이외에 어떠한 메일 릴레이도 허락하지 않는 기본적인 configuration이다.

로컬호스트와 당신의 로컬네트웍에게만 메일 릴레이를 허락하는 configuration은 다음과 같다.

-------------------------------------
127.0.0.1:allow,RELAYCLIENT=""
192.168.1.:allow,RELAYCLIENT=""
:allow
-------------------------------------
액세스 컨트롤에 대한 자세한 설명을 보려면, 다음의 파일을 받아서, 압축을 푼 후에, tcprules에 대한 man 파일을 참조하면 된다. ftp://ftp.innominate.org/pub/pape/djb/ucspi-tcp-0.88-man.tar.gz

rule 파일을 만들었으면 tcpserver가 cdb(데이터베이스)로부터 읽어서 활성화할 필요가 있다. /etc/tcp.smtp 파일로부터 tcprules 프로그램을 이용하여 데이터베이스를 생성한다. 다음의 명령을 수행하면 된다.

# /etc/rc.d/init.d/qmail cdb
또는,
# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

12. sendmail 죽이기

우리는 이제 qmail로 모든 메일을 처리할 것이므로, 구형의 sendmail을 제거한다. 우선 당신의 sendmail 데몬을 찾아서 그것을 죽인다. 리눅스에서는

# ps ax | grep sendmail               <--- sendmail 데몬이 있는지를 확인한다.
# killall -TERM sendmail              <--- sendmail 데몬을 제거한다.

# ps ax | grep sendmail               <--- 다시 sendmail 데몬이 살아있는지를 확인한다.
위의 명령은 현재 실행중인 sendmail만을 제거할 뿐이다. 컴퓨터가 재시동되면, 다시 sendmail도 재시동되므로, 다음과 같은 명령어로 qmail로 모든 sendmail을 대체한다.
# mv /usr/lib/sendmail /usr/lib/sendmail.old
# mv /usr/sbin/sendmail /usr/sbin/sendmail.old
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

13. /var/qmail/rc 생성하기

/var/qmail/rc 파일은 qmail 파일중에서 가장 중요한 파일중의 하나이다. 이것은 qmail을 책임지고 시작하게 한다. 보다 중요한 것은 qmail이 항상 메일을 수신할 수 있도록 한다. rc 의 내용은 qmail을 위한 기본적인 전송 명령으로 되어 있다. /var/qmail/boot 디렉토리에 가면, 여러 경우에 대한 rc 파일의 예제가 파일별로 준비되어 있다. 우리는 procmail을 이용하여, 메일을 처리할 것이기 때문에, 다음과 같이 명령을 내린다.

# cp /var/qmail/boot/proc /var/qmail/rc
파일의 내용은 다음과 같다.
---------------------------------------------------

#!/bin/sh
# Using splogger to send the log through syslog. 
# Using dot-forward to support sendmail-style ~/.forward files. 
# Using procmail to deliver messages to /var/spool/mail/$USER by default.

exec env - PATH="/var/qmail/bin:$PATH" \
           qmail-start '|preline procmail' splogger qmail 
---------------------------------------------------
그리고나서, 약간의 수정을 한다. 다음 14. 에서도 나오지만, 우리가 메일 수신을 각자의 홈 디렉토리밑의  /Maildir/ 디렉토리로 하기 때문이다. 다음과 같이 수정한다.
# vi /var/qmail/rc
-------------------------------------------------------------------
#!/bin/sh
# Using splogger to send the log through syslog. 
# Using dot-forward to support sendmail-style ~/.forward files. 
# Using procmail to deliver messages to /var/spool/mail/$USER by default.

exec env - PATH="/var/qmail/bin:$PATH" \
           qmail-start '|preline procmail ./Maildir/' splogger qmail 
-------------------------------------------------------------------
./Maildir/ 이것만 추가한 것이다.

14. 각 사용자별로 메일 송수신을 위한 디렉토리 만들기.

우리는  /Maildir 디렉토리에 모든 송수신 메일을 저장할 것이다. 사용자별로 디렉토리를 만들기 위해서는, 반드시 그 사용자가 되어야 한다. qmail 을 설치하기 전에 존재하는 모든 사용자에게 대해서, 그 사용자 로그인상태에서 다음의 명령을 내려야 한다. root는 일반계정으로 메일이 포워딩되므로, 해 줄 필요가 없다. 대신에 root계정의 메일을 받을 일반계정(앞에서 알리아스를 해 준 계정 "silver")에는 반드시 해 주어야 한다.

# su silver
$ /var/qmail/bin/maildirmake $HOME/Maildir
$ echo ./Maildir/ > ~/.qmail
$ exit

# su hook
$ /var/qmail/bin/maildirmake $HOME/Maildir
$ echo ./Maildir/ > ~/.qmail
$ exit
# ................
....................등등...
앞으로 추가되는 사용자마다 일일이 이런 명령을 내린다면 엄청난 시간낭비일 것이다. 그러므로, 사용자가 추가될 때마다 자동으로 이런 과정이 되도록 다음과 같이 한다.
# cd /etc/skel
# /var/qmail/bin/maildirmake Maildir
# echo ./Maildir/ > .qmail
이제부터는 추가되는 모든 사용자에게 자동으로 Maildir 디렉토리와 .qmail 파일이 생기게 될 것이다.

15. 리부팅하고, qmail의 정상적인 동작을 확인하기

시스템을 리부팅시킨다.

15.1 리부팅되고나서, /var/log/maillog 파일내용을 살펴보면, 끝부분에서 다음과 같은 라인이 보여야 한다.

           
qmail: status: local 0/10 remote 0/20
그렇지 않다면, qmail 설정에 문제가 있는 것이므로, 앞의 과정들을 다시 한번 꼼꼼히 살펴보고, 설정파일들을 자세히 검토해야만 한다.

15.2 ps ax 명령을 내리고나서, 다음과 같은 라인들이 보이는 지를 확인하다.

#ps ax
 562 ? S 0:00 svscan
 563 ? S 0:00 supervise qmail-send
 564 ? S 0:00 supervise log
 565 ? S 0:00 supervise qmail-smtpd
 566 ? S 0:00 supervise log
 567 ? S 0:00 qmail-send
 568 ? S 0:00 /usr/local/bin/multilog t /var/log/qmail
 569 ? S 0:00 /usr/local/bin/multilog t /var/log/qmail/smtpd
 570 ? S 0:00 /usr/local/bin/tcpserver -v -p -x/etc/tcp.smtp.cdb
  -u 501 -g 501 0 25 /var/qmail/bin/qmail-smtpd
 576 ? S 0:00 splogger qmail
 577 ? S 0:00 qmail-lspawn |preline procmail
 578 ? S 0:00 qmail-rspawn
 579 ? S 0:00 qmail-clean
모양이나 숫자들이 약간씩 틀리더라도, 반드시 13개의 프로세서가 동작하고 있어야 한다. 위와 동일한 프로세서가 없다면, qmail 설정에 문제가 있는 것이다.
  • 위의 1) 2)와 같은 메시지와 프로세서들이 보이지 않는다면, 문서 앞의 과정 7.부터 14.에서 만든 설정파일들을 잘못 만들 것이다. 대표적으로 자주 하는 실수는 /var/qmail/supervise/qmail-send/log/run 파일과 /var/qmail/supervise/qmail-smtpd/log/run 파일을 만들 때, qmaill을 qmail 로 잘못 쓰는 것이다. 이 문서에 쓰여진 설정파일의 내용은 절대로 오타나 탈자가 없으므로, 잘 보고 틀린 곳을 찾아내기 바란다.

16. 메일 송신 테스트하기 (여기서부터는 시스템 root 가 아니어도 된다.)

16.1 host 내부에서 사용자간의 메일 송수신을 확인해 본다.

silver는 호스트안에 계정이 있는 사용자이어야 한다.

      % echo to: silver | /var/qmail/bin/qmail-inject
그러면, 내용은 없고 메일헤더만 있는 메일이 바로 silver에게 송신되어 있어야 하고, 새로이 도착되는 메일은  silver/Maildir/new/ 밑에 수신메일마다 개개의 파일로 저장된다. /var/log/maillog 파일안의 끝부분에는 다음과 같은 줄들이 보여야 한다.
           qmail: new msg 53 
           qmail: info msg 53: bytes 246 from <me@domain> qp 20345 uid 666
           qmail: starting delivery 1: msg 53 to local me@domain 
           qmail: status: local 1/10 remote 0/20
           qmail: delivery 1: success: did_1+0+0/
           qmail: status: local 0/10 remote 0/20
           qmail: end msg 53 
   ( 53은 inode 숫자이고, 20345 는 프로세서 ID이다. 여러분한테는 이 번호들이 다를 것이다.

16.2 메일전송 에러를 확인해 본다.

none은 호스트의 메일사용자계정이 아니어야 한다.

      % echo to: none | /var/qmail/bin/qmail-inject
/var/log/maillog 파일안의 끝부분
       
           qmail: new msg 53 
           qmail: info msg 53: bytes 246 from <me@domain> qp 20351 uid 666
           qmail: starting delivery 2: msg 53 to local nonexistent@domain
           qmail: status: local 1/10 remote 0/20
           qmail: delivery 2: failure: No_such_address.__#5.1.1_/
           qmail: status: local 0/10 remote 0/20
           qmail: bounce msg 53 qp 20357
           qmail: end msg 53 
           qmail: new msg 54 
           qmail: info msg 54: bytes 743 from <> qp 20357 uid 666
           qmail: starting delivery 3: msg 54 to local me@domain
           qmail: status: local 1/10 remote 0/20
           qmail: delivery 3: success: did_1+0+0/
           qmail: status: local 0/10 remote 0/20
           qmail: end msg 54 
아마 여러분은 전송되지 못하고, 되돌아온 메일을 보게 될 것이다.

16.3 호스트 외부로의 메일 송신 확인

me@wherever 는 hook@hanmail.net 과 갈은 어떤 유효한 메일 주소이어야 한다.

      % echo to: me@wherever | /var/qmail/bin/qmail-inject
/var/log/maillog 파일안의 끝부분
           qmail: new msg 53 
           qmail: info msg 53: bytes 246 from <me@domain> qp 20372 uid 666
           qmail: starting delivery 4: msg 53 to remote me@wherever
           qmail: status: local 0/10 remote 1/20
           qmail: delivery 4: success: 1.2.3.4_accepted_message./...
           qmail: status: local 0/10 remote 0/20
           qmail: end msg 53 
라인``starting delivery''와 ``success'' 사이에는 얼마간의 시간적 지연이 있을 수 있다. me@wherever 라는 메일 계정으로 온 메일을 확인해 보아라.

16.4 호스트의 root 또는 postmaster 에게 메일을 전송하기.

우리는 앞에서 root, postmaster, mailer-daemon의 alias 를 설정하였다. 그 alias가 정상적으로 동작하는지를 확인한다.

      % echo to: POSTmaster | /var/qmail/bin/qmail-inject
POSTmaster의 alias 를 설정한 계정 (앞에서는 silver)으로 온 메일을 확인한다.

17. 메일 수신 테스트하기

(제일 중요한 부분이다. 메일이 송신은 잘되어도, 수신이 안되는 경우가 허다하다.)

17.1 SMTP 서버가 정상적으로 동작하는지를 검사한다.

dude 는 호스트의 유효한 계정이어야 한다. me@domain 은 hook@hanmail.net 과 같은 유효한 메일주소이어야 한다.

       $ telnet 127.0.0.1 25
       Trying 127.0.0.1...
       Connected to 127.0.0.1.
       Escape character is '^]'.
       220 domain ESMTP
       helo dude
       250 domain
       mail <me@domain>
       250 ok
       rcpt <me@domain>
       250 ok
       data
       354 go ahead
       Subject: testing
       
       This is a test.
       .
       250 ok 812345679 qp 12345
       quit
       221 domain
       Connection closed by foreign host.
       $
메일이 정상적으로 도착했는지를 확인하다.

축하합니다. 여러분이 여기까지 성공적으로 도달하였다면, qmail 설치는 이미 끝난 것이나 다름없다. 이 다음의 내용은 메일서버를 아주 잘 동작하도록 하는 부수적인 것이다. 그래도 꼭 읽어보아야 한다.

18. 메일을 다른 호스트의 메일계정으로 포워딩하기

근래는 대부분의 사용자가 여러 개의 메일계정을 가지는 경우가 많다. 굳이 서버의 용량을 낭비하고, 서버의 성능에 부하를 주면서까지 메일을 직접 서버에 남겨둘 필요가 없는 경우가 많다. 그렇기 때문에, 도착하는 메일을 바로 다른 호스트의 메일계정으로 포워딩시키는 방법을 쓴다. qmail에서는 각 사용자가 아주 간단하게 메일 포워딩을 할 수 있는데, 자신의 계정 디렉토리의 .qmail 파일에 포워딩되어질 메일계정을 써주면 된다.

$ cd
$ vi .qmail
---------------------------------------------
@hanmail.net
---------------------------------------------
메일주소앞에 &기호는 넣어도 되고, 싫으면 넣지 않아도 무관하다.

너무 단순하지 않은가?? 모든 계정을 이렇게 포워딩되게 설정하면, 호스트자체에 전혀 부하를 주지 않고, 좋은 도메인을 가진 훌륭한 메일 서버가 되는 것이다.

19. pop3 설치하기

이제 pop3를 위한 설정을 해보자. 메일 서버에 있는 메일을 자신의 컴퓨터 메일 클라이언트로 가져오기 위해서는 반드시 메일서버가 pop3를 지원해야 한다. 이를 위한 설치와 설정은 다음과 같다.

먼저 checkpassword를 설치한다. 이것은 사용자명과 암호를 인증하는데 사용된다. 다른 소스도 /root/temp 디렉토리에 풀었으니 이것도 거기에다 풀어보자.

#cd /root/temp
#tar -zxvf checkpassword-0.81.tar.gz
checkpassword를 컴파일하고 설치한다.
#cd checkpassword-0.81
#make 
#make setup check
이제 checkpassword가 제대로 설치되었는지 확인해보자.
# /var/qmail/bin/qmail-popup chsd.chonnam.ac.kr /bin/checkpassword pwd
+ok <1311.955932232@hsd.chonnam.ac.kr>
user dakeshi
+ok
pass foryou
-ERR authorization failed
제대로 password를 입력하지 않는다면, 위와 같은 결과가 나타난다.

제대로 된 password를 입력하면,

# /var/qmail/bin/qmail-popup hsd.chonnam.ac.kr /bin/checkpassword pwd
+ok <1311.955932232@hsd.chonnam.ac.kr>
user dakeshi
+ok
pass forme
/home/dakeshi
라고 나올 것이다.

이제는 호스트가 부팅될 때마다 자동적으로 pop3가 동작하도록 /etc/rc.d/rc.local 파일의 마지막에 다음의 내용을 추가한다.

#start qmail POP3 server
/usr/local/bin/tcpserver 0 110 /var/qmail/bin/qmail-popup FQDN \
/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &

( FQDN에는 호스트네임과 도메인 네임을 써준다. 여기서는 chsd.chonnam.ac.kr )
이제 호스트를 리부팅시켜서 pop3가 제대로 동작하는지 확인해보자.
  • 호스트에 계정이 있는 사용자에게 메일을 보낸다.
  • 호스트에 그 계정으로 접속하여 메일이 들어왔는지 확인한다.
  • 자신이 사용하고 있는 메일서비스에 pop설정을 해준 다음 메일을 가져온다.
  • 메일이 정상적으로 읽혀지는지를 확인한다.

이렇게 함으로써, 완벽한 qmail 서버가 구축되었을 것이다. kldp에 qmail 관련문서를 써 주었던 선배 리눅서들에게 감사하며, 메일 테스트를 위해서 위험할지도 모르는 메일서버를 사용해준 광주,전남 해커즈랩 동호회 회원들에게도 역시 감사의 말을 전한다. 이 문서는 앞으로도 계속 업데이트될 것이다. 이 문서에 대한 어떠한 조언이나 충고도 감사히 받아들이겠다. 궁금한 점이 있으면 앞에서 나왔던 필자의 이메일주소로 보내주면 감사하겠다.

이 문서를 만들면서, 참고로 했던 문서들은 다음과 같다.

http://kldp.org 의 / 네트워킹 / 전자우편(E-Mail) / 메일 서버 / Qmail 분류에 있는

        Qmail+vpopmail   임 은재      
        Qmail HOWTO   방 창현      
        Life with Qmail   윤 주영      
                                이상 3개의 문서들.
http://cr.yp.to/checkpwd/install.html 에 있는 How to install checkpasswork 문서

http://www.netia.or.kr 에 있는 호남대 리눅스 동호회 유성균님이 쓴 Qmail + POP3 문서

qmail-1.03.tar.gz 의 안에 포함되어 있는 INSTLL, REMOVE, TEST 관련 문서들

------------------------------------------------------------------------------------

"QMAIL 로 메일서버 구축하기" 제 2탄을 준비하면서.................... 전남대학교 전자계산소에서 2001년 2월 5일에.................................... 정계옥, 문상준............

HSD 만세!! 광주,전남 해커즈랩 동호회 만세!! 리눅스 만세!!


ID
Password
Join
Show your affection, which will probably meet with pleasant response.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2003-10-31 20:04:34
Processing time 0.0053 sec