티스토리 뷰

System/Linux

Qmail설치 및 설정

Mr.Kang 2008. 7. 26. 13:40

qmail 서버를 mysql 과 vpopmail, 바이러스 검출과 필터링을 위한
qmail-scanner와 함께 설치하는 방법입니다.

설치하기 전에 :

큐메일 서버는 모듈별로 이루어져 있습니다. 또한 각각의 모듈별로
많은 패치기 존재합니다. 따라서 정확한 동작을 위해서는 이 패치
또한 정확하게 이루어져야 합니다.
만약 설치하고 나서 정상적으로 동작하지 않는다면 패치가 정확한지.
환경설정이 정확한지를 다시 한번 확인해 봐야 합니다.
또한 큐메일 서버를 설치하기 전에 먼저 dns 설정을 해야 함을
잊어서는 안됩니다. 설치 도중에 큐메일 서버의 컴파일 전에 컴파일
환경을 잡아주는 과정이 있는데. dns 설정이 올바르지 않다면 에러를
유발하게 됩니다. 따라서 먼저 dns 설정을 해 주어야 하며 역도메인까지
설정을 해 주어야 문제없이 설치를 할수 있습니다.
지금부터 설치는 dns 설정이 되어 있다는 것을 가정합니다.

목표 :

1. 사용자 계정을 mysql 을 이용함으로써 추가나 삭제를 할수 있다.
2. vpopmail 을 설치함으로써 가상 도메인에 대한 관리를 손쉽게 할수 있다.
3. qmail-scanner 을 설치함으로써 바이러스에 대한 필터링을 한다.

필요한 파일 :

qmail-1.03.tar.gz
ucspi-tcp-0.84.tar
daemontools-0.76.tar
qmail-scanner-0.96.tgz
maildrop-1.3.4.tar.gz
// 이것도 qmail-scanner 을 설치하기 위해 필요합니다.
autorespond-1.0.0.tar.gz
qmailadmin-0.42.tar.gz
// 이것을 사용하기 위해서는 vpopmail 사용시 mysql 을 사용안함으로
하셔야 합니다.
mysql-3.22.32.tar.gz
rblssmtp.tar.gz
// ucspi-tcp 가 버젼이 0.86 이상이면 필요없습니다.
vpopmail-4.9.10.tar
Time-HiRes-01.02.tar
// qmail-scanner 을 설치할때 필요합니다.]
필요에 따라
unzip 이 필요하기도 합니다. 이는 바이러스 필터시 압축파일의 경우
압축을 풀어야 하기 때문입니다.

패치
qmail-1_03-mysql-0_6_6.patch
-> 사용자 여부를 시스템 계정이 아닌 mysql 에서 하기 위한 패치.
qmail-103.patch
-> oversize dns 을 위한 패치
checkpassword-0.81--mysql-0.6.6.patch
-> pop3 사용시 사용자에 대한 패스워드 확인을 mysql 에서 하기
위한 패치. vpopmail 을 설치한다면 필요없습니다.
qmailqueue-patch
-> qmail-scanner 를 위한 queue 패치입니다.
qmail-smtp-auth.tar.gz
-> 이것은 smtp 사용시 팝계정을 가진 사용자에 한해 smtp 를
사용하게 하자는 패치입니다. 좋더군요.
relaymailfrom.patch
-> 옵션으로 보내는 사람의 메일 주소로 smtp 릴레이를 막자는
패치입니다.

패치가 많다고 해서 한번에 다 적용하려고 하지 말고. 하나씩 설치할때마다
필요한 패치를 그때 그때 적용하고 qmail 을 재 빌드하고 컴파일 하면 됩니다.

qmail 을 패치하고 나서
소스에서
make
make install-strip

설치 :

설치 디렉토리는 기본적으로 /usr/local 이며 모든 파일은 /pds 에 있다고
가정하였습니다. 그리고 /usr/local 도 편의를 위해 /local 로 심볼릭 링크를
만들어 두었습니다. 따라서 /local 은 /usr/local 을 의미합니다.

저는 먼저 dns 설정을 다음과 같이 설정하였습니다. 본 메일 서버의 이름을
mail.com 이라고 하였고 나중을 위해 두개의 도메인을 더 추가하였습니다.
어자피 내부를 위한 것이니 아무 이름이나 상관은 없습니다.

mail.com mail1.com mail2.com

/etc/named.conf

options {
directory "/var/named";
};

zone "." IN {
type hint;
file "named.ca";
};

zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};

zone "mail.com" IN {
type master;
file "mail.com.zone";
allow-update { none; };
};

zone "mail1.com" IN {
type master;
file "mail1.com.zone";
allow-update { none; };
};

zone "mail2.com" IN {
type master;
file "mail2.com.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};

zone "1.168.192.in-addr.arpa" IN {
type master;
file "1.168.192.reverse";
allow-update { none; };
};

zone 파일 설정 : /var/named

** mail.com.zone **

@ IN SOA mail.com. root.mail.com. (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum

IN NS mail.com.
IN MX 10 @

IN A 192.168.1.55
www IN A 192.168.1.55
ftp IN A 192.168.1.55


** 1.168.192.reverse **

@ IN SOA mail.com. master.mail.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum

55 IN PTR mail.com.

대충 이정도만 설정을 했습니다... 뭐 틀린점이 있다면.. 알아서..
수정하세요... ^^ 나머지 mail1.com.zone 과 mail2.com.zone 도
설정을 해 줘야 겠지요..
핑 테스트 결과... 정상적으로 반응하는거 확인했습니다.

1. mysql 설치.

# tar xvzf mysql-3.22.32.tar.gz
# cd mysql-3.22.32
# ./configure --prefix=/usr/local/mysql
// 기본적인 mysql 환경 설정입니다.
# make
# make install
# cd /usr/local/mysql/bin
# ./mysql_install_db
# ./safe_mysqld &

: mysql 은 이정도면 간단하게 설치가 됩니다. 그러나
qmail 과 함께 사용하기 위해서는 몇가지 추가해야 할게 있습니다.
몇개의 심볼링 링크를 생성해야 합니다.
이 링크를 생성안하면 qmail 컴파일시 에러가 납니다.

# mkdir /usr/local/include
# ln -s /usr/local/mysql/include/mysql /usr/local/include/mysql
# ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
# mkdir /usr/local/lib
# ln -s /usr/local/mysql/lib/mysql /usr/local/lib/mysql
# ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql

mysql 구동은 다음과 같이 할수 있습니다.

# vi /etc/rc.d/rc.local
if [ -f /usr/local/mysql/bin/safe_mysqld ];
then
/usr/local/mysql/bin/safe_mysqld &
fi

자 이제 mysql 에 대한 설정은 끝났고.. 이제 큐메일에 대한 설치에 들어갑니다.
패치 잘 보세요..

2. qmail 설치

# tar xvzf qmail-1.03.tar.gz
# cd qmail-1.03
# cp /pds/qmail-103.patch /local/qmail-1.03
# patch -p1 < qmail-103.patch
// over size DNS 패치입니다.
patching file dns.c
# patch -p1 < qmail-1_03-mysql-0_6_6.patch
// mysql 에서 큐메일 인증을 위한 패치입니다.
patching file Makefile
patching file README.mysql.en
patching file TARGETS
patching file auto_du.sh
patching file conf-du
patching file mysql.c
patching file qmail-getpw.c
patching file qmail-local.c
patching file qmail-lspawn.c
patching file qmail-popup.c

자 이제부터 본격적으로 큐메일 서버 설치에 들어갑니다.

# mkdir /var/qmail

큐메일에 필요한 사용자와 그룹을 등록합니다. 기본적으로 INSTALL.ids 를
열어보시면 운영체제에 따라 설정이 되어 있는데 해당 OS 에 따라 나머지는
지워주시면 됩니다.
예 ) 리눅스의 경우
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

# sh INSTALL.ids
# make
# make setup check

만약 make 하는 도중에 에러가 발생한다면 mysql 과 관련하여 symbolic
링크를 잘 걸어줬는지 확인해 보세요.
자 이제 빌드와 컴파일 하는 과정이 끝났습니다. 이제는 설정에 들어갈 차례입니다.

# ./config
Your hostname is mail.com.
Your host's fully qualified name in DNS is mail.com.
Putting mail.com into control/me...
Putting mail.com into control/defaultdomain...
Putting mail.com into control/plusdomain...

Checking local IP addresses:
127.0.0.1: Adding localhost to control/locals...
192.168.1.55: Adding mail.com 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!

이렇게 나와야 합니다. 이렇게 나오지 않는다면 DNS 설정에 문제가 있는 것입니다.
( 대부분의 경우 역 도메인을 설정 안했을때 발생하더군요. ) 다시한번 확인해 보시고
DNS 에 아무 이상이 없다면.. 다음과 같은 방법을 사용해도 됩니다.

# ./config-fast mail.com(자신의 도메인명)

자 이제 큐메일이 작동하는데 필요한 프로그램을 설치하는 과정입니다. 잘 보세요..
설치할 프로그램은 ucspi-tcp-0.84.tar.gz, daemontools-0.70-man.tar.gz,
rblsmtpd-0.70.tar.gz 입니다. 이중에서 autorepond-1.0.0.tar.gz 는 직접 컴파일
해야 합니다. uscpi-tcp 는 0.86 이상부터는 rblsmtpd 를 포함하고 있으므로
rblsmtpd 를 설치 안하셔야 합니다.

ucspi-tcp-0.84 를 설치합니다.

# tar xvzf ucspi-tcp-0.84.tar.gz
# cd ucspi-tcp-0.84
# make
# make setup check

daemontools-0.76 를 설치합니다. 권장 설치 방법이 좀 다르더군요.. 그래서
그대로 설치를 했습니다. 좀 복잡하지요.. ^^ 이전 버젼은 다른거와 비슷한
방법으로 설치를 했는데.. 이번은 좀 틀리더군요..

# mkdir -p /package
# chmod 1755 /package
# cd /package
# gunzip daemontools-0.76.tar
# tar -xpf daemontools-0.76.tar
# rm daemontools-0.76.tar
# cd admin/daemontools-0.76
# package/install

rblsmtpd-0.70 을 설치합니다. ucspi-tcp 를 0.86 이상의 버젼으로
설치했다면 설치할 필요가 없습니다.

# tar xvzf rblsmtpd-0.70.tar.gz
# cd rblsmtpd-0.70
# make
# make setup check

자 이제 큐메일과 관련하여 필요한 프로그램을 모두 설치했습니다. 자 이제부터 가
장 중요한 설정 파일 편집에 들어갑니다.

# vi /var/qmail/rc
----------------------------------------------------------------
#!/bin/sh
# Using splogger to send the log through syslog.
# 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
----------------------------------------------------------------

# chmod a+x /var/qmail/rc

다음은 큐메일 데몬을 위한 디렉토리와 파일들을 생성합니다.

# 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
ALIAS_UID=`id -u alias`
ALIAS_GID=`id -g alias`
exec /usr/local/bin/softlimit -m 2000000 \
/usr/local/bin/tcpserver -v -p -x/etc/tcp.smtp.cdb \
-u $ALIAS_UID -g $ALIAS_GID 0 25 /var/qmail/bin/qmail-smtpd 2>&1

# 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

이렇게 설정 파일에 대한 것은 끝이 났습니다.
이제 큐메일 서버의 로그를 위한 디렉토리를 생성합니다.

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

릴레이를 허용케하는 주소를 가지는 파일을 만듭니다.

# vi /etc/tcp.smtp
---------------------------------------------------------
127.0.0.1:allow,RELAYCLIENT=""
192.168.1.:allow,RELAYCLIENT=""

cf) 위 파일의 내용을 잠시 살펴보면 로컬에서 보내는 메일에 대해서는 항상
릴레이를 허용합니다. 그리고 192.168.1. 에서 보내는 메일에 대해서도 항상
릴레이를 허용하지만 그밖의 smtp 접속에 대해서는 모두 거부합니다. 즉 자신과
로컬 네트웍에서만 릴레이를 허용하는 것입니다. 만약 모든 주소에 대해 릴레이를
허용하고 싶으면

:allow

라고 적어줍니다. 그러면 기본적으로 모든 접속에 대해 smtp 접속을 받아들이며
rcphosts 파일에 도메인이 적혀 있는 도메인에 대해서만 릴레이를 허용합니다.


이것은 작성된 것에 대해 새로운 내용으로 갱신하게 합니다. 먼저 qmail 부트
스크립트를 /etc/rc.d/init.d 에 qmail 이라고 생성합니다.

# /etc/rc.d/init.d/qmail cdb

마지막으로 Alias 를 설치합니다. 이는 webmaster 앞으로 메일을 오게 하는
것입니다. webmaster 는 실 계정입니다.

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

다 끝났습니다. 이제 qmail 데몬을 위한 부트 스크립트를 만드는 일입니다.


# vi /etc/rc.d/init.d/qmail
------------------------------------------------------------------------
#!/bin/sh
# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 80 80
# description: sendmail을 대체하는 빠르며, 안정적이고, 유연한 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,
nothingleaves)
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

이것으로 모든 qmail에 대한 설정이 끝이 났습니다.

이제 재 부팅을 해 봅니다.
재부팅후에 다음과 같은 프로세스가 있는지 확인해 보시기 바랍니다.

# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 456 0.0 0.1 1316 380 ? S 14:25 0:00 svscan
root 457 0.0 0.1 1272 336 ? S 14:25 0:00
supervise qmail-send
root 458 0.0 0.1 1272 336 ? S 14:25 0:00
supervise log
root 459 0.0 0.1 1272 336 ? S 14:25 0:00
supervise qmail-smtpd
root 460 0.0 0.1 1272 336 ? S 14:25 0:00
supervise log
qmails 461 0.0 0.1 1332 412 ? S 14:25 0:00 qmail-send
qmaill 462 0.0 0.1 1288 332 ? S 14:25 0:00
/usr/local/bin/multilog t /var/log/qmail
alias 463 0.0 0.1 1300 356 ? S 14:25 0:00
/usr/local/bin/tcpserver -v -p -x/etc/tcp.
qmaill 465 0.0 0.1 1288 336 ? S 14:25 0:00
/usr/local/bin/multilog t /var/log/qmail/s
qmaill 471 0.0 0.1 1296 464 ? S 14:25 0:00 splogger
qmail
root 472 0.0 0.1 1288 352 ? S 14:25 0:00
qmail-lspawn |preline procmail ./Maildir/
qmailr 473 0.0 0.1 1284 348 ? S 14:25 0:00
qmail-rspawn
qmailq 474 0.0 0.1 1280 368 ? S 14:25 0:00 qmail-clean

물론 PID 값은 시스템 마다 틀릴수 있습니다. 그러나 다음 13 개의 프로세스는
반드시 보여야 합니다. 또한 /var/log/maillog 에 다음과 같은 줄이 있는지 확인해 봅
니다.

Sep 19 14:25:04 mail qmail: 1000923904.747047 status: local 0/10 remote 0/20

자 이제 모든 설정을 마무리 했습니다.
vpopmail 를 설치하지 않으려면 몇가지 더 설정을 해야 합니다. vpopmail 을 설치한
다면
다음 과정은 넘어가셔도 됩니다.

이는 alias 를 설치하는 것과 각 사용자의 홈디렉토리에 메일을 받을 Maildir 을 설
치하는
것입니다. 이는 다음과 같은 방법으로 할수 있습니다.
alias 설치하기 - 관리자 계정으로 오는 메일을 일반계정으로 포워딩 하기 위한 것
입니다.

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

계정은 실 계정이어야 합니다.

각 사용자의 홈 디렉토리에 Maildir 을 설치합니다.
/etc/skell 에 설정하면 사용자가 추가될때마다 자동으로 Maildir 이 생기게 할수
있습니다.

# cd /etc/skel
# /var/qmail/bin/maildirmake Maildir
# echo ./Maildir/ > .qmail

자 이제 다 되었습니다.
만약 pop3 를 사용하고자 한다면 checkpasswd 를 설치하여야 합니다.
checkpasswd 를 설치하는 방법은 다음과 같습니다. 역시 vpopmail 을 설치하려
한다면 건너뛰어도 됩니다.

cf ) checkpassswd 설치

# tar xvzf checkpassword-0.81.tar.gz
# cd checkpassword-0.81
# make
# make setup check

이제 checkpasswd 를 설치하였으니 pop3를 사용할수 있습니다. 여기서 발생할수 있는
또 하나의 문제는 사용자 계정을 mysql 에 생성할 때입니다. checkpasswd 의 역활은
사용자에
대한 패스워드를 추출하는 것인데 mysql 을 사용한다면 mysql 에서 사용자의 계정을
찾고 그
계정의 패스워드를 추출해야 하므로 추가적인 checkpasswd 에 대한 패치가 필요합니다
.
그 패치가 checkpassword-0.81-mysql-0.6.6.patch 입니다.
패치 방법은 다음과 같습니다.

# tar xvzf checkpassword-0.81.tar.gz
# cd checkpassword-0.81
# patch -p1 < checkpassword-0.81-mysql-0.6.6.patch
patching file Makefile
patching file README.mysql.en
patching file auto_home.c
patching file auto_qmail.c
patching file auto_qmail.h
patching file checkpassword.c
patching file env.h
patching file envread.c
patching file mysql.c
patching file str_diffn.c
# make
# make setup check

다 정상적으로 동작하는걸 확인 할려면 pop3 를 사용해 봐야 합니다.
여기서 선택할수 있는 것이 두가지가 있습니다.
먼저 inet 을 사용한 pop3 의 사용이며 또 하나는 tcpserver 를 사용한 pop3 의 사
용입니다.
복잡하지요. 물론 tcpserver 를 사용한 pop3을 권장합니다.

# xinet 사용시 - RedHat 7.0
service pop3
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /var/qmail/bin/qmail-popup
server_args = DOMAIN.COM /bin/checkpassword
/var/qmail/bin/qmail-pop3d Maildir
log_type = FILE /var/log/xinetd.log
log_on_success = HOST
log_on_failure = HOST RECORD
}
을 /etc/xinet.d 에 만드시면 됩니다.

# tcpserver 사용시
# vi /etc/rc.d/rc.local
/usr/local/bin/tcpserver 0 110 /var/qmail/bin/qmail-popup 도메인 \
/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &

자 이제 됐습니다.
시스템을 다시 리부팅 시켜.. 정상적으로 인증이 되는지 확인해 보시기 바랍니다.

# ps -aux 에
root 479 0.0 0.1 1300 348 ? S 15:06 0:00
/usr/local/bin/tcpserver 0 110 /var/qmail/
가 있어야 합니다.

자 계정을 설정하고 메일을 보내고 받아 봅시다. 잘 됩니까 ? 속도가 좀 느린거
같다구요.
이전에 qmail 패치할때 mysql 를 연관해서 패치해서 그런거 같습니다. mysql 을 사용
하지 않고
패치하지 않았다면 속도는 빠를것이라고 생각됩니다.

아직 갈길 많이 남아 있습니다. vpopmail 을 설치하기 전에 smtp에 인증 기능을 추가
하는
qmail-smtp-auth 를 설치해 볼려고 합니다.

3. qmail-smtp-auth 설치

먼저 간단히 설명을 드리면 사용자가 smtp 를 사용할때 인증을 필요로 합니다.
이 인증은 pop 사용자의 인증을 사용합니다. 즉 pop 사용자에 한해 smtp 서버를 이용
하자는
말입니다. 따라서 비밀번호가 필요로 하며 이 필요한 비밀번호는 checkpasswd 가 수
행하게
됩니다.

아울룩 익스프레스에서는 계정을 설정시 서버탭에서 보내는 메일 서버를 체크하고
설정을
눌러 받는 사람과 동일한 설정 사용에 체크해야 합니다.

파일을 받아 압축을 풉니다. 압축을 풀면 나오는 파일을 모두 qmail source 디렉토
리로 복사합니다.

# tar xvzf qmail-smtpd-auth-0.30.tar.gz
# cd qmail-smtpd-auth-0.30
# cp * /usr/local/qmail-1.03
# cd /usr/local/qmail-1.03
# patch -p1 < auth.patch
// 만약 패치중에 경로를 찾는 프롬프트가 나오면 qmail 소스 디렉토리를 지정해 주
면 됩니다.
# make
./compile qmail-smtpd.c
qmail-smtpd.c: In function `main':
qmail-smtpd.c:646: warning: return type of `main' is not `int'
./compile base64.c
./load qmail-smtpd rcpthosts.o commands.o timeoutread.o \
timeoutwrite.o ip.o ipme.o ipalloc.o control.o constmap.o \
received.o date822fmt.o now.o qmail.o cdb.a fd.a wait.a \
datetime.a getln.a open.a sig.a case.a env.a stralloc.a \
alloc.a substdio.a error.a str.a fs.a auto_qmail.o base64.o `cat \
socket.lib`
// make setup check 하기 전에 먼저 qmail 을 중지합니다.
# make setup check
nroff -man qmail-smtpd.8 > qmail-smtpd.0
./install
./instcheck
// 이렇게 패치와 설치 모든게 끝났습니다.

cf) /etc/tcp.smtp 설정에서 192.168.1.:allow,RELAYCLIENT="' 가 지정되어 있
으면
로컬네트웍에서의 모든 메일은 qmail-smtp-auth 를 거치지 않고 바로 발송이 됩니다.
따라서 위의 것을 지워 버려야 합니다.
지우고 나서는

# /etc/rc.d/init/d/qmail cdb
Reloaded /etc/tcp.smtp.

로 tcp.smtp 를 변경된 사항으로 재 구성하는 것을 잊지 마세요.

그리고 /var/qmail/supervise/qmail-smtpd/run 에 다음을 추가합니다.

#!/bin/sh
ALIAS_UID=`id -u alias`
ALIAS_GID=`id -g alias`
exec /usr/local/bin/softlimit -m 2000000 \
/usr/local/bin/tcpserver -v -p -x/etc/tcp.smtp.cdb \
-u $ALIAS_UID -g $ALIAS_GID 0 25 /var/qmail/bin/qmail-smtpd \
/bin/checkpassword /bin/true 2>&1

자 이제 qmail 을 재 시작하고 결과를 확인하시면 됩니다.
외부 메일 계정으로 메일이 발송이 됩니까 ? 잘 되는지 테스트를 위해 아울룩
익스프레스의 서버탭에서 보내는 메일 서버의 체크한 것을 제거해 봅시다.

받는 사람 중 한 사람이 서버에서 거부되었으므로 메시지를 보낼 수 없습니다. 거
부된 전자 메일 주소는
'test@netsgo.com'입니다. 제목 'fffffffffffffffffdddddddd', 계정:
'192.168.1.55', 서버: '192.168.1.55',
프로토콜: SMTP, 서버 응답: '553 sorry, that domain isn't in my list of
allowed rcpthosts (#5.7.1)',
포트: 25, 보안(SSL): 아니오, 서버 오류: 553, 오류 번호: 0x800CCC79

이런식으로 에러메세지가 나오면 정상입니다. 체크한다면 물론 정상적으로
메일이 발송이 되겠지요. 전 메일이 발송이 되는 군요..ㅋㅋㅋㅋ 전 성공했습니다.
로컬 도메인으로는 체크여부와 관계없이 메일이 발송됩니다.

4. Vpopmail 설치

Vpopmail 은 도메인 관리와 설정 pop 유저 관리. pop 관리등을 수행합니다. 우리는
이를 위해 사용자 추가와 도메인에 대한 모든 것을 mysql 로 관리할 것이므로 먼저
다음과 같은 설정을 해 주어야 합니다.
주의 ) qmailadmin 은 설치할려면 mysql 을 같이 설치하면 안됩니다.

# vi /var/qmail/control/sqlserver
mysql_use yes
server localhost
login qmail
password qmail
db qmail
table users
check_host no

mysql 에 사용 권한을 부여합시다. 권한 부여하는 것은 다 아시죠. 모르시는 분은
해당 문서를 참조하세요.

전 다름과 같이 만들었습니다.

# ./mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL conection id is 1 to server version: 3.22.32

Type 'help' for help.
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> insert into user values ('localhost','qmail',password('qmail'),
'n','n','n','n','n','n','n','n','n','n','n','n','n','n');
Query OK, 1 row affected (0.00 sec)

mysql> insert into db values ('localhost','qmail','qmail','y','y','y',
'y','y','y','y','y','y','y');
Query OK, 1 row affected (0.00 sec)

mysql> create database qmail;
Query OK, 1 row affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

이제 mysql 도 준비가 되었으니 본격적으로 Vpopmail 설치에 들어갑니다.

vpopmail 이 사용할 유저와 그룹을 만듭니다.

# groupadd vchkpw
# useradd -g vchkpw vpopmail

vpopmail 에서 mysql 을 건들기 위해서는 vmysql.h 를 수정해 주어야 합니다.

# tar xvzf vpopmail-4.9.10.tar.gz
# cd vpopmail-4.9.10
# vi vmysql.h
--- 중략 ---
/* Edit to match your set up */
#define MYSQL_SERVER "localhost"
#define MYSQL_USER "qmail"
#define MYSQL_PASSWD "qmail"
/* End of setup section*/

/* defaults - no need to change */
#define MYSQL_DEFAULT_TABLE "vpopmail"
#define MYSQL_DATABASE "qmail"
#define MYSQL_DOT_CHAR '_'
#define MYSQL_LARGE_USERS_TABLE "users"
--- 중략 ---

자 이제 환경 설정을 합니다.

# ./configure --enable-default-domain=mail.com --enable-mysql=y

cf) 옵션에 대한 설명을 조금 하자면 첫번째 옵션은 기본 도메인을 설정해 주는
것입니다. vpopmail 의 경우 가상 도메인 계정은 pop3 에 로긴시 아이디@도메인명으로

사용자 아이디를 넣게 되어 있습니다. 그러나 기본으로 지정된 도메인에 대해서는
아이디만 넣으면 됩니다. 두번째 옵션은 mysql 을 사용하겠는가에 대한 옵션 설정입니
다.
환경 설정에 있어서 다른 사용할수 있는 옵션이 몇개 있습니다. 이중 sql 에 관련된

옵션을 소개하자면 다음과 같습니다. qmailadmin 을 사용하고자 한다면 mysql 을
사용안함으로 설정하셔야 합니다.

--enable-large-site=y

이 옵션은 하나의 도메인에 하나의 테이블을 만든다는 옵션입니다.
이는 mysql 의 속도와 최적화에 관련이 있는 옵션입니다. 따라서 많은 도메인이 있

적은 수의 유저가 있다면 n 로 설정하는 것이 좋습니다. 그러나 적은 도메인이 있고
많은
수의 유저가 있다면 y 로 설정하는 것이 좋습니다.
많은 도메인에 적은 유저가 있다면 사용시마다 테이블을 열고 닫기 때문에 속도에
있어서 시스템에 부하를 줍니다. 하지만 적은 수의 도메인에 많은 유저가 있다면 하나

테이블에서 모두 관리하므로 테이블을 열고 닫는데 큰 영향을 미치지 않습니다.

정상적으로 환경 설정이 끝나게 되면 다음과 같은 마지막 줄이 있습니다.

Current settings
---------------------------------------
vpopmail directory = /home/vpopmail
uid = 509
gid = 509
roaming users = OFF
user quota = OFF
tcpserver file = /etc/tcp.smtp
open_smtp file = /home/vpopmail/etc/open-smtp
auth module = mysql
table optimization = many domains (--enable-large-site=n
default)
auth logging = OFF
pop syslog = show only failure attempts
default domain = mail.com

자 이제 빌드하고 컴파일을 하면 됩니다.

# make
# make install-strip

모든 것이 끝나고 ~vpopmail 에는 여러 디렉토리와 필요한 바이너리가 생성이 됩니
다.
이제 vpop 를 위한 pop3 데몬 시동 파일을 만들 차례입니다. 이는 이전의 것과 좀
다릅니다. vpopmail 을 사용안할때 하고는 좀 다르니 기존의 것을 지우고 다시 추가합
니다.

/etc/rc.d/rc.local 에 다음과 같이 추가합니다.

#vi /etc/rc.d/rc.local
--- 중 략 ---
#!/bin/sh
env - PATH="/var/qmail/bin:/usr/local/bin" \
tcpserver -u $VPOPMAIL -g $VPOPMAIL 0 pop-3 /var/qmail/bin/qmail-popup
mail.com \
/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir &

$VPOPMAIL 에서 앞의 것은 계정 번호. 뒤는 그룹 번호입니다.
자 이제 시스템을 리붓을 해보고 다음으로 넘어갑니다.
지금부터 테스트를 합니다. 이 테스트를 무사히 마쳐야 합니다.

# cd ~vpopmail
# cd bin

에 보면 많은 바이너리가 있습니다. 이중 몇가지를 살펴보면..

vadddomain 도메인명

ex) # ./vadddomain mail.com
# ./vadddomain mail1.com
# ./vadddomain mail2.com

이런식으로 가상 도메인을 추가하면 됩니다. 물론 실제 도메인도 추가해야 합니다.

만약 다음과 같은 에러가 발생할수 있습니다.

# ./vadddomain: error while loading shared libraries:
libmysqlclient.so.6:
cannot open shared object file: No such file or directory

이럴경우 다음과 같이 심볼릭 링크를 만들어 주면 됩니다.

# ln -s /usr/lib/mysql/libmysqlclient.so.6.0 /usr/lib/libmysqlclient.so.6

도메인을 입력하면 패스워드를 입력하라고 나오는데. 이 패스워드는 postmaster 의
패스워드입니다. 패스워드를 함께 지정할려면 도메인 옆에 패스워드를 같이
넣어서 한번에 추가할수도 잇습니다.

vadduser id@도메인명

ex) # ./vadduser master@mail.com
# ./vadduser master@mail1.com
# ./vadduser master@mail2.com

도메인만 다르다면 같은 이름의 vpopmail 유저를 가질수 있습니다. 물론 패스워드도
같이 물어보는데.. 이도 메일 주소 옆에 패스워드를 함께 명기함으로써 한번에 추가
할수도 있습니다.

정확한 사용법은 다음과 같습니다.
/var/qmail/control/locals 에 있는 도메인에 대하여 이메일의 주소는 사용자이름@도
메인주소
이며 팝인증에 필요한 사용자 이름은 아이디뿐 입니다.

관리자 프로그램은 vadduser, vdeluser, vpasswd 입니다.

vadduser 사용자이름 패스워드(옵션) -a(apop은 옵션)
vdeluser 사용자이름
vpasswd 사용자이름 패스워드(옵션) -a(apop은 옵션)

/etc/qmail/control/virtualdomains 속의 가상 도메인에 대하여 주소의 형식은
사용자이름@가상도메인이며 팝 인증시 사용자 이름은 사용자이름%가상도메인
또는 사용자이름@가상도메인이며 이는 이메일 클라이언트에 따라 다릅니다.

관리자 프로그램으로는 vadddomain, vdeldomain, vpasswd 입니다.

vadddomain 가상도메인_이름 패스워드(옵션) -a(apop은 옵션)
vdeldomain 가상도메인
vadduser 사용자이름@가상도메인 패스워드(옵션) -a(옵션)
vdeluser 사용자이름@가상도메인 패스워드(옵션) -a(옵션)
vpasswd 사용자이름@도메인이름 패스워드(옵션)

이중 vadddomain 은 도메인을 추가하기 위한 명령으로써 이 명령은
다음과 같은 파일을 업데이트 합니다.

관리 프로그램 : vadddomain 가상도메인 패스워드(옵션)

updates /var/qmail/control/rcpthosts
updates /var/qmail/control/virtualdomains
updates /var/qmail/users/assign
updates /var/qmail/users/cdb
runs /var/qmail/bin/qmail-newu

새로운 도메인을 받아들이기 위해서는 qmail-send 에게 HUP 신호를 보내야 합니다.
이는 다음과 같은 방법으로 행해질수 있습니다.

# svc -h /service/qmail


이제 마지막으로 확인을 해 보겠습니다.

# vi /var/qmail/control/locals
localhost

만 있어야 합니다. 다른 것이 있으면 안됩니다.

# vi /var/qmail/control/rcpthosts
localhost
mail1.com
mail2.com
mail.com

추가한 도메인이 다 들어가 있는지 확인합니다.

# vi /var/qmail/control/virtualdomains
mail1.com:mail1.com
mail2.com:mail2.com
mail.com:mail.com

virtualdomains 도 이와 같이 되어 있는지 확인합니다.

# vi /var/qmail/users/assign
+mail1.com-:mail1.com:509:504:/home/vpopmail/domains/mail1.com:-::
+mail2.com-:mail2.com:509:504:/home/vpopmail/domains/mail2.com:-::
+mail.com-:mail.com:509:504:/home/vpopmail/domains/mail.com:-::

이제 모든것이 마무리 되었습니다. 아울룩 익스프레스를 사용하여 메일을 보내
보시고 잘 받는지 확인만 하시면 됩니다.

4. qmail-scanner 설치

드디어 마지막 까지 왔습니다. 이것만 설치하면 끝이 납니다. 자 그러면
설치해 볼까요..

qmail-scanner 은 바이러스 스캐너입니다. 만약 바이러스가 검출되거나 혹은 첨부파
일이
특정한 확장자를 갖는 파일이면 이를 배달하지 않습니다. 그리고 송신인에게 경고 메
일을
보내게 됩니다.

qmail-scanner 을 설치하기 전에 qmail-queue 를 먼저 패치하기로 하지요.
qmail 소스 디렉토리에 가서 다음을 실행합니다.

# patch -p0 < qmailqueue.patch
// 그러면 정상적으로 패치가 됩니다. 만약 경로를 묻는 프롬프트가 나오면
경로를
입력해 주시면 됩니다.

그런다음 다시 qmail 을 빌도하고 컴파일 합시다. 전에 큐메일을 중지시키세요.

# make
# make setup check

이것으로 큐메일의 재 인스톨은 됐습니다.

이번에는 필요한 파일들을 인스톨할 차례입니다.
먼저 maildrop 를 설치합니다.

# tar xvzf mailmaildrop-1.3.4.tar.gz
# cd maildrop-1.3.4
# ./configure
# make
# make install-strip
# make install-man

이것으로 amildrop 은 설치를 마쳤습니다.

이번은 Time:: HiRes 라는 펄 모듈입니다.
자동 설치하는 방법도 있지만 해당 사이트에 접속이 잘 안되므로
수동으로 설치하면 됩니다.

# tar xvzf Time-HiRes-01.20.tar.gz
# cd Time-HiRes-01.20
# perl Makefile.PL
# make
# make test
# make install

펄 모듈들은 이런식으로 설치를 합니다. 관련 프로그램은 모두 설치했습니다.
이제 본격적으로 qmail-scanner 를 설치하겠습니다.

# tar xvzf qmail-scanner-1.00.tar.gz
# cd qmail-scanner-1.00
# ./configure --install

이제 모든 설치가 마무리 되었습니다.

smtp 에서 메일을 걸러낼수 있게 설정을 조금 변경해 주면 됩니다.

# vi /var/qmail/supervise/qmail-smtpd/run
#!/bin/sh
QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
export QMAILQUEUE

ALIAS_UID=`id -u alias`
ALIAS_GID=`id -g alias`
exec /usr/local/bin/softlimit -m 6000000 \
/usr/local/bin/tcpserver -v -p -x/etc/tcp.smtp.cdb \
-u $ALIAS_UID -g $ALIAS_GID 0 25 /var/qmail/bin/qmail-smtpd \
/home/vpopmail/bin/vchkpw /bin/true 2>&1

이제 필터를 추가해 보고 테스트 해보면 됩니다.

필터는 다음 위치에 있습니다.
# vi /var/spool/qmailscan/quarantine-attachments.txt
-- 중략 --
EICAR.COM 69 EICAR Test Virus
Happy99.exe 10000 Happy99 Trojan
zipped_files.exe 120495 W32/ExploreZip.worm.pak virus
ILOVEYOU Virus-Subject: Love Letter Virus/Trojan

각각의 항목은 탭으로 구분됩니다. 중요합니다 탭으로 구분됩니다.

잠시 간단히 설명해 보자면 다음과 같습니다.
형식 : 3개의 항목으로 되어 있습니다.

filenamesize (in bytes)Description of virus/whatever
파일이름 크기(bytes) 설명
또는
stringHeaderDescription of virus/whatever
문자열 메일헤더 설명

단점으로는
1) 새로운 메일은 바로바로 체크를 못한다는 점이며 추가를 따로 해 주어야 합
니다.
2) 혼자 작동하는 바이러스는 체크하는데 반해 매크로 바이러스는 확인할수 없
습니다.
3) 와일드 카드를 사용할수 있습니다. 와일드 카드는 첨부파일을 확인하여 확장
자에
따라 메일을 거부하는데 사용될수 있습니다. 그럴 경우 사이즈는 무시됩니다.
예) .exe
4) SMTP 가 허용하는 사이즈를 넘는 파일은 금지합니다. 최대 크기를 설정할수
있습니다.
5) 헤더에 맞추어서 허용여부를 결정할수 있습니다. 이것은 스팸이나 다른 알지

못하는 주소로부터 오는 것을 막을수있습니다.
제목 : Subject, 송신인 : From, 등입니다. 이 문자열은 반드시 Virus- 로
시작되어야
하며 :이 나와야 합니다.

자 이제 모든 것이 설치되었으므로 테스트를 해 보면 됩니다.

정의 파일을 추가한 다음에는 반드시 다음 명령으로 적용시켜 주어야 합니다.

# /var/qmail/bin/qmail-scanner-queue.pl -g

테스트는 다음과 같이 해 보시면 됩니다.
제목을 ILOVEYOU 라고 하여 메일을 발송해 보십시요. 그러면 다음과 같은 제목
" Virus found in sent message "ILOVEYOU" "의 메일이 다음과 같은 내용으로 도착할
것입니다.

A Virus was found in an Email message you sent.
This Email scanner intercepted it and stopped the entire message
reaching it's destination.

The Virus was reported to be:

Love Letter Virus/Trojan

도착하였습니까.. 축하합니다.. 이제 모든것을 다 설치한 것입니다.

드디어 qmail, qmail-smtp-auth, qmail-scanner, vpopmail, mysql 을
모두 연동하여 설치하는데 성공한 것입니다..

'System > Linux' 카테고리의 다른 글

페도라 Subversion설치  (0) 2008.07.26
[Apache] mod_rewrite 설치  (0) 2008.07.26
스팸중계  (0) 2008.07.26
Apache와 Tomcat설치와 연동  (0) 2008.07.26
Fedora설치  (0) 2008.07.26
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함