qmailでメールサーバー構築

openSUSE 10.3でsmtpサーバーとpopサーバーを構築します

ソースのダウンロード

以下をダウンロードする。

  • netqmail-1.05
  • ucspi-tcp-0.88.tar.gz
  • qmail-date-localtime.patch
  • qmail-smtpd-relay-reject
  • vpopmail-5.4.25
# cd /usr/local/src  <=作業ディレクトリ
# wget http://www.qmail.org/netqmail-1.05.tar.gz
# wget http://www.emaillab.org/djb/tools/ucspi-tcp/ucspi-tcp-0.88.tar.gz
# wget http://www.itheart.com/phpgw/qmail-date-localtime.patch
# wget http://www.qmail.org/qmail-smtpd-relay-reject

qmailのソースの展開

# cd /usr/local/src/
# tar -zxvf netqmail-1.05.tar.gz
# cd netqmail-1.05
# ./collate.sh
# cd netqmail-1.05

パッチの適用

Received ヘッダのローカルタイムゾーン対応パッチを適用します。

# patch -p1 < ../../qmail-date-localtime.patch
patching file date822fmt.c

一般的なspamチェック(%や!等の特殊文字を含むものをエラーにする)

# patch -p1 < ../../qmail-smtpd-relay-reject
missing header for unified diff at line 3 of patch
patching file qmail-smtpd.c
Hunk #1 succeeded at 53 with fuzz 2.

qmail用の環境作成

qmail用ディレクトリの作成

# mkdir /var/qmail

qmailグループとqmailユーザ群を設定

# /usr/sbin/groupadd nofiles
# /usr/sbin/useradd -M -u901 -g nofiles -s /bin/false -d /var/qmail/alias alias
# /usr/sbin/useradd -M -u902 -g nofiles -s /bin/false -d /var/qmail qmaild
# /usr/sbin/useradd -M -u903 -g nofiles -s /bin/false -d /var/qmail qmaill
# /usr/sbin/useradd -M -u904 -g nofiles -s /bin/false -d /var/qmail qmailp
# /usr/sbin/groupadd qmail
# /usr/sbin/useradd -M -u908 -g qmail -s /bin/false -d /var/qmail qmailq
# /usr/sbin/useradd -M -u906 -g qmail -s /bin/false -d /var/qmail qmailr
# /usr/sbin/useradd -M -u907 -g qmail -s /bin/false -d /var/qmail qmails

コンパイル&インストール

# cd /usr/local/src/netqmail-1.05/netqmail-1.05
# make setup check

qmail の設定

DNS が利用できない場合、./config-fast を使用します。

# ./config-fast smtp.powerdee.com
Your fully qualified host name is smtp.powerdee.com.
Putting smtp.powerdee.com into control/me...
Putting powerdee.com into control/defaultdomain...
Putting powerdee.com into control/plusdomain...
Putting smtp.powerdee.com into control/locals...
Putting smtp.powerdee.com into control/rcpthosts...
Now qmail will refuse to accept SMTP messages except to smtp.powerdee.com.
Make sure to change rcpthosts if you add hosts to locals or virtualdomains!

受信メールサイズの制限を設定します。 巨大なサイズのメール受信は、以下の設定で回避します。(無制限にする場合は「0」と記述)

# cat >/var/qmail/control/databytes <<EOD
# 1000000
# EOD

HELOコマンドで応答するホスト名を設定します。

# cat >/var/qmail/control/helohost <<EOD
# smtp.powerdee.com

/var/qmail/control/localsを編集します。 このファイルはqmailがメールを受け取るドメインを指定するファイルです。

localhost          <--追加
smtp.powerdee.com
powerdee.com        <--追加

/var/qmail/control/rcpthostsを編集します。 このファイルはSMTPのRCPTを許可するドメインを指定します。

localhost          <--追加します。
smtp.powerdee.com

エイリアスの設定

postmaster, mailer-daemon, root で指定されたメールを受け取るように設定します。 メールを受け取るユーザはメール管理者のメールアドレスを指定しておく方が良いと思います。

cd /var/qmail/alias
echo '&info@powerdee.com' > .qmail-root
echo '&root' > .qmail-postmaster
echo '&root' > .qmail-mailer-daemon
chmod 644 .qmail*

sendmailをqmailへ置き換える

# mv /usr/lib/sendmail /usr/lib/sendmail.bak
# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
# chmod 0 /usr/lib/sendmail.bak
# chmod 0 /usr/sbin/sendmail.bak
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

tcpserverのインストール

# cd /usr/local/src
# tar -xvzf ucspi-tcp-0.88.tar.gz
# cd ucspi-tcp-0.88
# patch -p1 < ../netqmail-1.05/other-patches/ucspi-tcp-0.88.errno.patch
patching file error.h
# patch -p1 < ../netqmail-1.05/other-patches/ucspi-tcp-0.88.a_record.patch
patching file rblsmtpd.c
# make
# make setup check

vpopmailのインストール

vpopmail用のグループとユーザの作成

# groupadd vchkpw
# useradd -g vchkpw -s /bin/false -M vpopmail
# mkdir /home/vpopmail
# chown vpopmail:vchkpw /home/vpopmail

/home/vpopmail/etcディレクトリの作成

# mkdir /home/vpopmail/etc
# chown vpopmail:vchkpw /home/vpopmail/etc

/home/vpopmail/etc/defaultdomainにデフォルトドメインを設定します。 user@powerdee.comのようなアドレスをuserと指定するだけでドメイン名を省略しても配信可能とするドメイン名を指定します。

# cat >/home/vpopmail/etc/defaultdomain <<EOD
# powerdee.com
# EOD

/home/vpopmail/etc/tcp.smtpを作成します。内容は下記の通りです。

127.:allow,RELAYCLIENT=""
192.168.0.:allow,RELAYCLIENT=""

次にtcprulesを実行してtcp.smtp.cdbファイルを作成します。

# tcprules /home/vpopmail/etc/tcp.smtp.cdb \
> /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp

vpopmailをインストールします。 POP認証後の有効時間は10分と指定しています。

# cd /usr/local/src
# tar xvzf vpopmail-5.4.25.tar.gz
# cd vpopmail-5.4.25
# ./configure \
> --enable-roaming-users=y \
> --enable-relay-clear-minutes=10 \
> --enable-tcpserver-file=/home/vpopmail/etc/tcp.smtp
# make
# make install-strip

POP before SMTPの設定

先ほど作成したファイル、/home/vpopmail/etc/tcp.smtp.cdbの指定内容では、127.x.x.xもしくは 192.168.0.xネットワークからのアクセスのみ、メール送信が可能になります。 しくみとしては、メールユーザーがPOP認証を行うとそのユーザーのIPアドレスが内部でこのファイルに保持(RELAYCLIENT=”“の部分)されて/var/qmail/control/rcpthostsの制限を受けずに、メール送信が可能になります。

そのため、POP認証が済んだクライアント情報を定期的に削除する為、以下のようにクーロンに削除スクリプトを登録します。

# crontab -e
# 0,10,20,30,40,50 * * * * /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null

起動スクリプトの作成

/var/qmail/boot/home に起動スクリプトが用意されていますので、 /var/qmail/rc というファイルにコピーして使用します。

# cp /var/qmail/boot/home /var/qmail/rc

maildir 形式のメールボックスを設定します。 # vi /var/qmail/rc

    qmail-start ./Mailbox splogger qmail

この部分を以下のように変更します。

    qmail-start ./Maildir/ splogger qmail

smtpとpopの起動スクリプトを作成

vi /etc/rc.d/init.d/qmail

#!/bin/sh
#
# chkconfig: 345 99 99
# description: qmail & vpopmail startup script
#


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

HOSTNAME=`hostname`
QMAILDUID=`id -u qmaild`
QMAILDGID=`id -g qmaild`

[ -f /var/qmail/rc ] || exit 0

case "$1" in
        start)
                echo "Starting qmail."
                csh -cf '/var/qmail/rc &'

                #FOR SMTP
                tcpserver -H -R -l $HOSTNAME -v \
                -x /home/vpopmail/etc/tcp.smtp.cdb -u $QMAILDUID -g $QMAILDGID 0 smtp \
                /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &

                #For POP3
                #envdir /etc/relay-ctrl relay-ctrl-chdir \
                tcpserver -H -R -l $HOSTNAME -v 0 pop3 \
                /var/qmail/bin/qmail-popup $HOSTNAME \
                /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1 | /var/qmail/bin/splogger pop3d 3 &

                touch /var/lock/qmail
                ;;

        stop)
                # Stop daemons.
                echo "Shutting down qmail."
                PID=`/bin/ps -aefw | grep qmail | awk '{print $2}'`
                if [ ! -z "$PID" ] ; then
                        /bin/kill ${PID} 1> /dev/null 2>&1
                fi
                rm -f /var/lock/qmail
                ;;

        *)
                echo "Usage: S88qmail {start|stop}"
                exit 1

esac

exit 0

作成したスクリプトに実行権限を与えて、自動起動の設定を行います。

# chmod 755 /etc/rc.d/init.d/qmail
# chkconfig --add qmail

バーチャルドメイン、ユーザーの作成

vpopmailの機能で、バーチャルドメイン・バーチャルユーザーを作成して、メール受信の振り分けを行うことができます。 バーチャルドメインは、vadddomainコマンドで作成します。

# /home/vpopmail/bin/vadddomain powerdee.com

バーチャルユーザーの作成以下のように行います。

# /home/vpopmail/bin/vadduser user1@powerdee.com

削除する場合は、vdeluserコマンドです。ユーザーを削除するとMaildirも削除されるので注意しましょう。

# /home/vpopmail/bin/vdeluser user1@powerdee.com

メールサーバーの起動!

先ほど作成したスクリプトで起動します。

# service qmail start
homeserver/qmail.txt · 最終更新: 2008/03/16 01:47 by whiteapple
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0 openSUSE