리눅스

Total 331
Today 0
profile_image
관리자
05-04-13 11:35 0개 21회
설치문서
정계옥 님의 qmail 완벽 설치 매뉴얼
이미 실력있는 많은 분들이 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를 해주는 filewatcher.org에 가서 찾아보길 바란다.
자주 링크가 깨어지는 문제로 하여, 필자가 직접 파일들을 올려놓았다.
http://hsd.hackerslab.org/~hook7346/ 에 가면 받을 수 있다.

현재의 버전들은 다음과 같다.
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 < 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의 정상적인 동작을 확인하기
시스템을 리부팅시킨다.

1) 리부팅되고나서, /var/log/maillog 파일내용을 살펴보면, 끝부분에서 다음과 같은 라인이 보여야 한다.
qmail: status: local 0/10 remote 0/20
그렇지 않다면, qmail 설정에 문제가 있는 것이므로, 앞의 과정들을 다시 한번 꼼꼼히 살펴보고, 설정파일들을 자세히 검토해야만 한다.

2) # 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 가 아니어도 된다.)

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 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이다. 여러분한테는 이 번호들이 다를 것이다.

2) 메일전송 에러를 확인해 본다.
none은 호스트의 메일사용자계정이 아니어야 한다.

% echo to: none | /var/qmail/bin/qmail-inject

/var/log/maillog 파일안의 끝부분
qmail: new msg 53
qmail: info msg 53: bytes 246 from 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

아마 여러분은 전송되지 못하고, 되돌아온 메일을 보게 될 것이다.

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 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 라는 메일 계정으로 온 메일을 확인해 보아라.

4) 호스트의 root 또는 postmaster 에게 메일을 전송하기.
우리는 앞에서 root, postmaster, mailer-daemon의 alias 를 설정하였다.
그 alias가 정상적으로 동작하는지를 확인한다.

% echo to: POSTmaster | /var/qmail/bin/qmail-inject

POSTmaster의 alias 를 설정한 계정 (앞에서는 silver)으로 온 메일을 확인한다.

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
250 ok
rcpt
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
---------------------------------------------
&mine@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가 제대로 동작하는지 확인해보자.

1) 호스트에 계정이 있는 사용자에게 메일을 보낸다.
2) 호스트에 그 계정으로 접속하여 메일이 들어왔는지 확인한다.
3) 자신이 사용하고 있는 메일서비스에 pop설정을 해준 다음 메일을 가져온다.
4) 메일이 정상적으로 읽혀지는지를 확인한다.


이렇게 함으로써, 완벽한 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월 2일에.................................... 정계옥, 문상준............

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




< [자료] MRTG 이용 시스템 모니터링 예제 파일 및 설 | 새로운 개념의 창관리자, TWIN >
qmail 완벽 설치 매뉴얼 | 답장: 17개(RSS) | 본문에 답장 | 답장 검색
정렬 : NestedThreadedFlatUnthreaded 최근 것부터이전 것부터


yasgur (2003년 04월 19일 오전 11:25)
rblsmtpd-0.70를 make하면 다음과 같은 에러가 발생합니다.
어떻게 해결 하면 좋겠습니까?

./load rblsmtpd txt.o commands.o ip.o getopt.a strerr.a \
substdio.a stralloc.a alloc.a error.a case.a env.a str.a \
fs.a `cat dns.lib` `cat socket.lib`
rblsmtpd.o: In function `main':
rblsmtpd.o(.text+0x3e1): undefined reference to `res_init'
txt.o: In function `txt':
txt.o(.text+0xd1): undefined reference to `__res_query'
txt.o(.text+0x141): undefined reference to `__dn_expand'
txt.o(.text+0x19d): undefined reference to `__dn_expand'
collect2: ld returned 1 exit status
[ 이글에 답장 | 본문에 답장 | 책갈피 ]

공훈식 (2001년 12월 10일 오후 12:11)
안녕하세요.. 저는 지금 막~~~ 리눅스를 배우고자 하는 사람입니다.
근데 사무실에 메일서버를 설치하고자해서 님께서 올리신
"QMAIL로 메일서버 구축하기 ( 메일 forwarding 과 pop3설정까지..)"로
해서 메일서버를 구축하고 있는데요.....
몇가지 님께서 올려놓으신 내용과 다른 점이 있고 실행이 안되는 부분이
있어서~~~ 도와주세요.....ㅠㅠ

먼저......
15.1번까지는 에러없이 님께서 올려놓으신 내용하고 똑같이 실행이 되구요..
15.2번에서 ps ax의 명령을 하면 13개의 프로세서가 전부 동작을 하는게 아니라
562 ? s 0:00 klogd -2
577 ? s 0:00 portmap 이거 두개만 실행이 되네요... ㅠㅠ
분명 몇번을 거듭해서 다시하고 심지어는 리눅스도 다시 설치해서 몇번을 다시
해봤는데.. 계속해서 그러네요.. 제가 뭘 잘못한거죠.. 가르쳐주세요...네~~~^^

거기서 에러가 나서 인지...
그냥 16번으로 넘어가서 내용에 맞쳐서 따라해봤는데요..
내부에서 사용자간의 메일 송수신을 확인하는 부분에서는 내용에 적혀있는데로
실행이 되는데요(16.1하구 16.2)
외부로의 메일 송신 확인 부분에서는 내용하고 다르게 나오네요..
"success"나오는 부분이 틀리게 나오네요.. 결과는요~~~~
new msg 48216
info msg 48216 bytes 201 from qp 1116 uid 0
starting delivery 7 : vsg 48216 to remote kongyber@hanmaill.net
status : local 0/10 remote 2/20
delivery 7 : deferral : connected_to_211.233.30.153_but_sender_was_rejected ./
Remode_host_said : _45
status : local 0/10 remote 1/20

요렇게 나오네요.... 어떤 부분이 잘못된거지요... 너무나도 아주~~
초보라서 어떤 내용이 문제가 되는지 알 수가 없어요.. 주위에 물어볼만한 사람두
없구요..
부디~~~ 구찮구 번거로우시더라도 잠깐 시간내서 내용좀 확인 부탁드립니다.
[ 이글에 답장 | 본문에 답장 | 책갈피 ]

공훈식 (2001년 12월 10일 오후 12:27)
위의 내용 질문했던 사람입니다.
외부로의 메일 송신 확인후 /var/log/maillog 파일안 부분의
내용이 좀 다른게 있어서 다시 보냅니다.....

new msg 48217
info msg 48217 bytes 199 from qp 1157 uid 0
starting delivery 10 : vsg 48216 to remote kongyber@naver.com
status : local 0/10 remote 2/20
delivery 9 : deferral : connected_to_211.233.30.153_but_sender_was_rejected ./
Remode_host_said : _451_4.1.8_sender_domail_must_reslove
(up2up.co.kr)/
status : local 0/10 remote 1/20
delivery 10 : success : 211.218.150.14_accepted_message./Remote_host_said_200_ok_100795472_qp_23882/
status local 0/10 remote 0/20
end msg 48217

요렇게 나옵니다.... 뭐가 잘못된건지 도와주세요.....
[ 이글에 답장 | 본문에 답장 | 책갈피 ]


n2soo (2001년 11월 08일 오전 11:11)
도메인을 바꾸는 방법입니다.

./config-fast를 해서 다시 컴파일 할필요가 없습니다.

예를들자면 root@mail.com으로 보내고 잡다면

/var/qmail/control/me를 편집해 주세요

안의 도메인을

mail.com

이런식으로 어떤 도메인으로 보낼수 있는거 같네요
[ 이글에 답장 | 본문에 답장 | 책갈피 ]

plpl (2001년 10월 19일 오후 12:09)
현재 qmail 로 그냥 메일을 보내는 기능만 사용하고 있습니다. 그런데 멜을 보내면 도메인이 찍히거든여..

예를 들어 root@mail.com 이런식으로. 근데 저 뒤에 도메인을 제가 바꿀수는 엄나요?

./config-fast 인가에서 다시 잡고 다시 컴팔해야 함미까?
[ 이글에 답장 | 본문에 답장 | 책갈피 ]

peang (2001년 10월 08일 오후 04:01)
안녕하십니까? 다 세팅하고 나서 확인하는 과정에서 문제가 발생
했습니다.

telnet localhost 110

Trying 127.0.0.1...
Connected to
Escape character is '^]'.
+OK <1104.1002523817@localhost>
user peang
+OK
pass password
-ERR authorization failed
Connection closed by foreign host.

그런데 이것이 이상한것이 root 계정에서 된다는 것입니다.
허거...이 눔의 시키때문에....

고수님들 부탁합니다.
참고로... 메일은 오고 가는것 같습니다. mail디렉토리에
메일이 오는것을 확인할 수 있고 보내면 오는 것을 확인했습니다.
[ 이글에 답장 | 본문에 답장 | 책갈피 ]

리눅스보이 (2001년 09월 06일 오후 05:39)
근데 Mysql을 통한 포워딩 방법에 대한 자세한 글좀 올려주시면
어떨런지요???
고걸 구현해 보려고 하는데 잘 안되네용~!!

글구 기존에 깔았던 qmail외 관련프로그램을 삭제하려면
어떻게 해야되나요???

리눅서가 되고픈 너석인데...잘 안되네용...!!
^^님의 글 도움은 되긴 했는뎅...

음...위 문제 봉착하다보닝~!! ㅠ.ㅜ
고수님들의 답글이나 메일 감솨드립니다...
[ 이글에 답장 | 본문에 답장 | 책갈피 ]

정우성 (2001년 09월 05일 오후 06:46)
설치가이드 문서 잘 보았음다
근데 난 설치 실패했음다
이유는 잘 모르겠음다
리눅스를 첨 깔아봐서리.......

먼저 한컴리눅스2.0 에서 실패했음다
daemontools 하고 rblsmtp 폴더에서 오류가 발생했음다
그래서 알짜리눅스 6.2로 버전을 내려서 깔아봤음다
혹시나 버전이 맞지않아서 그런가 하는 유아적 발상으로
오늘까지 3일째 깔고 있는데 딱 죽고싶읍니다
회사에서 눈치보이고 깔리진 않고......

말씀드린데로 리눅스는 완전초보라 에러메세지도 잘 읽을줄
모릅니다

질문좀 드릴께요
먼저 문서데로 qmail을 깔기위한 최선의 리눅스 버전을
알려주세요
글구 혹시 위에서 말씀드린 컴파일 오류를 피할수 있는
방법도 알려주시면 감솨하겠음다

수고하시고요
[ 이글에 답장 | 본문에 답장 | 책갈피 ]

정계옥 (2001년 08월 27일 오전 09:59)
참고 : 레드햇 7.1 계열에서 설치할 때,

레드햇 7.1에서 설치할 때에는 아마 에러를 만나게 될 것입니다.

먼저, rblsmtpd 패키지는 설치하지 않으셔도 됩니다. 레드햇 7.1 에서는 이미 내장된 기능입니다.

다음, daemontools 패키지를 설치할 때, 꼭 tai64nlocal.c 파일에서 에러가 납니다. 이 문제는 직접 그 파일로 가서,
#include 라고 되어있는 부분을

#include 로 고쳐주면 됩니다.

꼭, 참고 하시기를....
[ 이글에 답장 | 본문에 답장 | 책갈피 ]

정수진 (2001년 07월 27일 오후 02:34)
안녕하세요 님의 문서를 이용해서 qmail를 설치를 했습니다.
그런데 문제가 좀 있습니다.
제가 설치한 환경은 레드헷 6.0이 거든요

그래서 문제가 있는 건지???
부트파일에서 에러가 나네요
에러 내용은 아래와 같구요

:command not found
:No such file or directoryctions
:command not found
:No such file or directoryrk
:command not found
qmail:[:=:unary operator expected
:command not found
:not a legal variable name
:command not found
'mail:sysntax error near unexpected token 'in
'mail:qmail:line 22:'case "$1" in

그리고요 제 시스템에는 /var/run/svscan.pid란 파일이 없습니다.
[ 이글에 답장 | 본문에 답장 | 책갈피 ]

박소현 (2001년 05월 08일 오전 12:51)
좋은 자료 너무 감사합니다. 그대로 잘 따라했는데여..

15. 리부팅하고, qmail의 정상적인 동작을 확인하기 까지는 모두 같게 됬습니다.

그리고 16.에서 일반 계정으로

# echo to : berny | /var/qmail/bin/qmail-inject 하면

qmail-inject: fatal: qq trouble creating files in queue (#4.3.0)

이라고 나오네요.
그래서 여기 저기 문서들 검색해보니 같은 질문이 여러번 있는데 답글이 모두
퍼미션 확인하라 해서

# find / -name queue
해서 나오는 폴더들의 상위 폴더들의 퍼미션을 755로 모두 설정했지만
결과는 같습니다.

해답좀 주셨으면...

sendmail 설정하다 너무 지쳐서 qmail 설정해봤는데..
왜 이렇게 풀리질 않는지...
지금 머리는 김 풀풀.. 의욕은 완전 잃었습니다...
제발 부탁드립니다.
[ 이글에 답장 | 본문에 답장 | 책갈피 ]

김영린 (2001년 04월 01일 오후 12:07)
그대로 해서 큐메일을 설치하였습니다.
근데 어찌된 일인지 서버에서 밖에 있는 곳으로 메일
을 보내면 잘 나갑니다.
하지만 밖에서 서버로 메일을 보내면 메일 정보가
어디론가 사라져 버립니다.
그리고 또 서버에 있는 사용자에게 매일을 보내면
이것도 마찮가지로 정보가 어디론가 사라져 버립니다.
도대체 어디가 잘 못된 것입니까.
아참! 그전에 프럼프트가 I have no name 이 생김니다.
이것 때문 일까요..
계정을 내서 사용자 아이디로 접속을 하면 I have no name
라고 뜨던데요..
하지만 루트는 별이상없이 잘 되거든요..
뭐가 잘못된 건지 제발 좀 알려주세요.
[ 이글에 답장 | 본문에 답장 | 책갈피 ]

꼬막이 (2001년 03월 09일 오후 05:43)
sendmail에서 qmail로 전환할려고 합니다.
전환 이유는 log 분석 때문입니다. 로그를 체계적으로 분석하고 싶습니다. 즉, 몇개의 메일이 return된건지 그 return된 이유는 무엇인지(서버 full, 메일주소 잘못), 그리고 그걸.. 1일단위로 로그를 짜르고 암튼..mail log에 대한.체계적인 분석이 가능하다고
해서.qmail를 설치하고 log 분석 툴도 .설치하고
많은 노력을 기울려 봤지만..log 분석이 잘 되지가 않는 군요...
그기에 대한.....설명 부탁드립니다.
[ 이글에 답장 | 본문에 답장 | 책갈피 ]

익명 (2001년 03월 01일 오전 10:22)
qmail를 웹브라우저에서 확인 활용하는 방법은 없나여...
그것까정 해주셨으면 좋을텐데...
헤헤...
정말 고맙습니다..
전에 몇번이고 시도하다 포기했는디..
다시 시도할까 생각 중입니다.
[ 이글에 답장 | 본문에 답장 | 책갈피 ]

antiwerther (2001년 03월 01일 오전 02:02)
자료 너무 너무 거맙씁니다... 정말 좋네여~!



큐 멜에 관한 자료는 마니 볼수 있는데,,, 쩝쩝,,

쎈드멜 자료는 버젼에 맞는 게 넘 없어여...

괄리자님... 쎈드멜 자료 업 플리즈...
[ 이글에 답장 | 본문에 답장 | 책갈피 ]

옛날에 qmail 실패했던 사람 (2001년 02월 28일 오전 09:28)
이글을 보고

다시 시도 할까 합니다.

그런데

qmail에 대해서

체계적으로 배울 수 있는 책은 없나요

혹시 있을까 해서요?

댓글목록

등록된 댓글이 없습니다.