사이트 내 전체검색
검색목록
Qmail + Vpopmail(with mysql) + Qmailadmin + Dovecot Imap [testing]
로빈아빠
https://cmd.kr/server/959 URL이 복사되었습니다.

본문

출처: http://newsirin.tistory.com/55

 

 

드디어 큐메일 설치에 성공해서 메뉴얼로 정리할 수 있게 되었네요.
 큐메일은 설치 방법이 무척이나 다양합니다. 처음 설치 도전하려는 사람들은 어떻게 시작해야될 지 막막하죠.
 가장 무난한 방법이 각종 메뉴얼에 자주 등장하는 버전이자 표준(?)과도 같이 되어 버린 qmail-1.03에 임은재님의 칵테일 패치를 적용하는 방법입니다.
 큐메일 설치 방법이 다양하게 존재하는 가장 큰 이유는 SMTP 인증 방식을 다양하게 지원하기 때문이 아닌가 싶습니다. vpopmail을 연동하여 시스템 계정과는 별도로 관리되는 메일 전용 계정들을 생성하여 관리할 수도 있고 checkpassword를 연동하면 시스템 계정과 동일하게(sendmail + saslauthd 조합과 비슷한 방식) 메일 계정을 관리할 수 있습니다. 게다가 이 2가지 방식 모두 메일 계정을 mysql db에 적재하여 관리하는 방법까지 지원합니다.

 나열하면 할수록 더 복잡해지기에... 개인적으로 무난하다고 생각되는 조합인 qmail + vpopmail (with mysql) 로 설치 메뉴얼을 작성해 보았습니다. 사실 큐메일 설치법이라고 하면 거의 대부분의 문서에서 vpopmail과 연동하는 것을 '표준'과도 같이 다루고 있는데 이 방식이 가장 각광을 받을 수 밖에 없는 이유가 qmailadmin과 함께 사용하면 웹상에서 간편하게 메일 계정을 관리할 수 있다는 장점 때문이죠.


qmail 소스를 받아 놓을 디렉토리 생성

cd /usr/local/src
mkdir qmail


ucspi-tcp를 설치합니다. 뭐하는 놈인지 궁금하다면 아래 링크 참고하시고...
http://ejlabs.net/txt/ucspi-tcp.html
cd qmail
wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
tar xvfz ucspi-tcp-0.88.tar.gz
cd ucspi-tcp-0.88

gcc버전이 3.4.5 이므로 파일의 최상단에 #include <errno.h>를 추가
vi error.h
#include <errno.h>
#ifndef ERROR_H
#define ERROR_H
...
...
굳이 패치를 따로 찾아 적용하는 수고를 덜 필요 없이 위와 같은 방법으로 gcc 상위 버전과의 충돌 문제가 해결 가능합니다.

이 제 설치합니다.
make
make setup check


 다음으로 daemontools를 설치합니다. daemontools는 xinetd보다 진보된 수퍼데몬이라고 각종 메뉴얼에서 소개하고 있습니다. 자세한 정보는 아래 링크 참고...
http://ejlabs.net/txt/daemontools.html
 qmail 의 실행 파일을 daemontools가 설치되는 /services 디렉토리에 링크를 걸어 두어 사용하는 방식을 취합니다. 그러면 daemontools가 알아서 프로세스를 감시하며 최적의 실행 상태를 유지해 줍니다. qmail이 느닷없이 죽으면 daemontools가 다시 살리기도 한다는군요.
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
mkdir /package
chmod 1755 /package
tar xfz daemontools-0.76.tar.gz -C /package
cd /package/admin/daemontools-0.76

gcc버전이 3.4.5라면 파일의 최상단에 #include <errno.h>를 추가합니다.
vi src/error.h
/* Public domain. */
#include <errno.h>
#ifndef ERROR_H
#define ERROR_H
...
...

설 치합니다. package라는 서브디렉토리 안의 install 파일을 실행합니다.
package/install

설 치되었으면 /command 디렉토리가 생성되며 안에 관련 파일들이 위치하게 됩니다.
레드햇 계열의 경우 /etc/inittab 파일 최하단부에 아래와 같은 행이 추가됩니다.
tail -n 1 /etc/inittab
SV:123456:respawn:/command/svscanboot

우 분투 7.x 이상 버전부터는 /etc/inittab 파일이 사라지고 /etc/event.d 디렉토리 안에 런레벨 차원에서 구동할 프로그램들을 등록하게 되어 있습니다. 그래서 아래와 같이 작업해 줍니다.
vi /etc/event.d/svscanboot
# svscanboot
# start on runlevel 2

start on runlevel 3
start on runlevel 4
start on runlevel 5 
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6 

respawn
exec /command/svscanboot

※ 참고 링크: http://fxp0.org.ua/2007/apr/21/svscanboot-and-upstart-ubuntu-feisty

 
 이 제 qmail 1.0.3 설치 순서입니다.
 본 문서에서는 전통적인 방법(?)인 오리지날 qmail-1.03에 칵테일패치를 적용하는 방법을 쓰지 않고 knetqmail-1.06을 적용하는 방법을 설명합니다. 이 방법을 적용하려는 이유가 중요한데 칵테일 패치에는 chkuser 패치가 포함되어 있지 않기 때문입니다. qmail의 chkuser 패치는 메일서버에 존재하지 않는 메일 계정으로 메일이 도착할 경우 바로 반송처리하는 기능을 수행하는데 큐메일의 특성상 한 번 메일이 도착하게 되면 수신자 주소가 존재하지 않는 메일 계정일지라도 일단 받아 처리를 시도하게 되며 이렇게 될 경우 'double bounce' 현상을 초래하여 메일서버에 부하를 증가시켜 성능 저하를 유발하기 때문에 chkuser는 없어서는 안 될 아주 중요한 기능 중의 하나입니다. 특히 대다수 스패머들이 존재하지 않는 메일 계정으로 무작위 발송을 시도하기 때문에 더더욱 그렇죠. 그 외에도 knetqmail에는 칵테일 패치에 포함되지 않은 유용한 패치들이 여럿 되기 때문에 통합패키지인 knetqmail을 이용할 것을 적극 추천합니다.

 아, 참고로 중요한 점이 knetqmail-1.06을 사용하려면 반드시 vpopmail이 설치되어 있어야 한다는 점입니다.
 qmail + checkpassword 조합으로 쓰시려는 분들은 본 문서의 방법을 적용할 수 없다는 점에 유의하시기 바랍니다.

 이 미 칵테일 패치를 적용한 qmail + vpopmail 조합으로 메일서버를 운영중이신 분들은 그 위에 knetqmail을 그대로 덮어씌우면 됩니다.

 knetqmail-1.06에 포함된 패치 정보는 아래 링크 참고 바랍니다.
http://qmail.kldp.org/phpbb/viewtopic.php?t=7694&start=0&postdays=0&postorder=asc&highlight


큐 메일 소스를 받아 압축을 풀고 gcc 버전과의 호환 문제 해결을 위해 error.h 파일 최상단에 #include <errno.h> 구문을 삽입하고 설치 들어갑니다.
knetqmail-1.06은 vpopmail까지 설치한 뒤에 적용 가능합니다. qmail 설치 단계에서는 아무런 패치를 가하지 않은 오리지날 qmail만을 컴파일 설치합니다.

cd /usr/local/src/qmail
wget ftp://ftp.eu.uu.net/pub/unix/mail/qmail/qmail-1.03.tar.gz
tar xvfpz qmail-1.03.tar.gz
cd qmail-1.03
vi error.h
#include <errno.h>
#ifndef ERROR_H
#define ERROR_H

 qmail 구동에 필요한 qmail 전용 사용자/그룹을 생성합니다.
 OS별로 조금씩 다릅니다. 리눅스의 경우는 아래와 같이 생성해 주면 됩니다. INSTALL.ids 파일에 명시되어 있습니다.
groupadd -r nofiles
useradd -r -g nofiles -d /var/qmail/alias alias
useradd -r -g nofiles -d /var/qmail qmaild
useradd -r -g nofiles -d /var/qmail qmaill
useradd -r -g nofiles -d /var/qmail qmailp
groupadd -r qmail
useradd -r -g qmail -d /var/qmail qmailq
useradd -r -g qmail -d /var/qmail qmailr
useradd -r -g qmail -d /var/qmail qmails

 이 제 설치합니다.
make
make setup check

 make setup check 시 아래와 같은 에러가 나는 경우가 있습니다.
nroff -man qmail-local.8 > qmail-local.0
/bin/sh: nroff: command not found
make: *** [qmail-local.0] 오류 127

 groff 패키지를 설치하면 됩니다.
yum -y install groff
 


이제 각종 설정에 들어갑니다. 별다른 설명은 않겠습니다.
./config-fast mail.foobar.com

vi /var/qmail/rc
#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/
※ 몇몇 문서들 중엔 qmail-start ./Maildir/ 부분 뒤에 아래와 같이 splogger qmail 옵션이 추가된 설정파일을 소개하고 있습니다.

#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH" \ 
qmail-start ./Maildir/ splogger qmail

그러나 위 설정은 큐메일을 daemontools를 이용해 구동하지 않을 시 syslod에 로그를 기록하기 위한 옵션이므로 본 문서처럼 daemontools와 연동해서 큐메일을 구동할 때엔 불필요합니다.
http://qmail.kldp.org/phpbb/viewtopic.php?t=7023


chmod 755 /var/qmail/rc
mkdir -p /var/qmail/supervise/qmail-send/log
mkdir -p /var/qmail/supervise/qmail-smtpd/log
chmod 1755 /var/qmail/supervise/qmail-send
chmod 1755 /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
Q_UID=`id -u qmaild`
Q_GID=`id -g qmaild`
exec /usr/local/bin/softlimit -m 2000000 \
/usr/local/bin/tcpserver -vRHl 0 \
-x /etc/tcp.smtp.cdb \
-u $Q_UID -g $Q_GID 0 25 /var/qmail/bin/qmail-smtpd 2>&1
위 내용은 vpopmail 연동 없이 qmail 단독으로 실행할 경우 사용할 수 있는 스크립트입니다.
smtp 인증 방식을 어떤 것으로 적용하느냐에 따라 /var/qmail/supervise/qmail-smtpd/run 파일 작성법이 조금씩 달라집니다. vpopmail과 연동해서 사용하려면 위 내용이 조금 달라지므로 뒤에 가서 다시 설명합니다.
따옴표 작성 시 '(apostrophe)가 아닌 `(grave accent)임에 유의합니다.

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

smtp 로그 파일 기록을 위한 작업
mkdir -p /var/log/qmail/smtpd
chown qmaill /var/log/qmail /var/log/qmail/smtpd

릴레이 규칙을 설정하기 위한 /etc/tcp.smtp 파일을 만듭니다.
vi /etc/tcp.smtp
127.0.0.1:allow,RELAYCLIENT=""

만 들어진 /etc/tcp.smtp 파일을  cdb 형식의 파일로 변경합니다.
/usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp


 qmail 은 기본적으로 root로는 메일 수신이 안되도록 설계되어 있기에 관리자 계정으로 수신되는 메일을 일반계정으로 포워딩하도록 alias를 설정해 줍니다. 여기서 server는 root, postmaster 등으로 오는 메일을 받을 일반 계정입니다.
 물 론 server 계정은 나중에 설명할 vpopmail 설치 과정까지 밟은 후 생성해 주어야 하겠죠.
 alias용 계정은 아무거나 해도 상관 없습니다.
echo server@foobar.com > /var/qmail/alias/.qmail-root
echo server@foobar.com > /var/qmail/alias/.qmail-postmaster
echo server@foobar.com > /var/qmail/alias/.qmail-mailer-daemon
chmod 644 /var/qmail/alias/.qmail-*


 여러 응용 프로그램들 중에서는 아직까지도 sendmail를 사용하는 경우가 많기 때문에 qmail 바이너리를 기존 sendmail 바이너리가 있던 경로에 링크를 시켜 주는 것이 좋습니다. 대표적인 예로 제로보드를 들 수 있습니다. php 함수로 메일을 발송하려 할 때 제로보드 기본 소스로는 /usr/bin/sendmail을 찾기 때문이죠.
 본 게시물에서는 sendmail을 삭제하지 않고 qmail을 설치하는 법을 다루고 있습니다. 그러므로 기존 sendmail 바이너리는 sendmail.orig로 이름만 바꾸어 백업해 놓고 qmail 바이너리를 그 자리에 링크해 놓는 것이 추후 sendmail로 원복해야 할 상황이 발생할 때를 대비할 수 있어서 좋습니다.
 센 드메일이 실행되어 있다면 센드메일을 먼저 내린 뒤 아래와 같이 작업해 줍니다.
mv /usr/lib/sendmail /usr/lib/sendmail.orig
mv /usr/sbin/sendmail /usr/sbin/sendmail.orig
ln -s /var/qmail/bin/sendmail /usr/lib
ln -s /var/qmail/bin/sendmail /usr/sbin


오리지날 qmail 설치는 이것으로 끝났습니다. 실행을 위한 스크립트를 작성합니다.
레드햇 계열의 init 스크립트는 아래와 같이 작성합니다.
vi /etc/rc.d/init.d/qmail

#!/bin/sh

# For Red Hat chkconfig
# chkconfig: - 80 30
# description: the qmail MTA

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

case "$1" in
  start)
    echo "Starting qmail"
     if [ -e /service/qmail-send ] ; then
        if svok /service/qmail-send ; then
            svc -u /service/qmail-send
        else
            echo qmail-send supervise not running
        fi
     else
        ln -s /var/qmail/supervise/qmail-send /service/
     fi

     if [ -e /service/qmail-smtpd ] ; then
        if svok /service/qmail-smtpd ; then
            svc -u /service/qmail-smtpd
        else
            echo qmail-smtpd supervise not running
        fi
     else
        ln -s /var/qmail/supervise/qmail-smtpd /service/
     fi

         if [ -e /service/vpop ] ; then
                if svok /service/vpop ; then
                        svc -u /service/vpop
                else
                        echo vpop supervise not running
                fi
         else
                ln -s /var/qmail/supervise/vpop /service/
         fi

    if [ -d /var/lock/subsys ]; then
      touch /var/lock/subsys/qmail
    fi
    ;;
  stop)
    echo "Stopping qmail..."
    echo "  qmail-smtpd"
    svc -dx /service/qmail-smtpd /service/qmail-smtpd/log
     rm -f /service/qmail-smtpd
    echo "  qmail-send"
    svc -dx /service/qmail-send /service/qmail-send/log
     rm -f /service/qmail-send
    echo "  vpop"

댓글목록

등록된 댓글이 없습니다.

49 (1/1P)

Search

Copyright © Cmd 명령어 3.135.184.195