qmail メールサーバ設定

もし、あなたがダイナミックDNSでメールサーバを運用していてDUL(Dialup User List)などに登録されているために、メールが不配になってしまうことがあるならば以下の設定を試してみて下さい。

/var/qmail/control 配下に smtproutes というファイルを作り、その中に : に続けてあなたのISPSMTPサーバのアドレスを書いておきます。 さらに、完全を記すならば defaulthost というファイルを作り、そこにISPのドメイン名を書いておくといいそうですが、私の場合は毎日のリポートメールがISPに行ってしまい宛先不明で戻って来てしまうので、いまのところやっていません。 先の smtproutes だけでもいいようです。

200612



私のオフィスは、少人数のため一般のISPにメールサーバとウェブサーバを置いて使用していましたが、出張で日本や他の州に行ってダイアルアップや出先のLANに入れてもらったときなど、メールを取ることはできるが、送ることができなくなって困っていました。 大きなISPほど、SPAMメール対策でセキュリティが厳しく、SMTP認証やPOP Before SMTP にしてもらうのは困難でした。 仕方なく、融通の利く日本の会社の現地法人のISPに変更し、やっと使えるようになったと思ったら、先日、サーバを置いている会社が合併されて、新しいサーバに移す前にサーバが切られてしまい、3日ほどメールが使えなくなってしまいました。 アメリカの会社はやることが大胆で困ってしまいます。 そこで、速度は遅くても、自分たちで管理できるように、オフィスにサーバーを置いて自前でやろうということになり、設定を始めました。

とりあえず、動くものを作ろうということで qmail + checkpasswd で組むことにしてどこからでもアクセスできるようにしようと考えましたが、SPAMメール対策はどうしても必要なので、relay-ctrl を入れることにしました。

qmail のインストール
tcpserver
のインストール
pop
サーバー設定
relay-ctrl
のインストール
courer-imap
のインストール
Squirrelmail
のインストール



sendmail を削除し、インストール先と、運用に必要なユーザー、グループを作成します。

yum remove sendmail
mkdir /var/qmail
groupadd nofiles
useradd -g nofiles -d /var/qmail/alias -s /bin/false alias
useradd -g nofiles -d /var/qmail -s /bin/false qmaild
useradd -g nofiles -d /var/qmail -s /bin/false qmaill
useradd -g nofiles -d /var/qmail -s /bin/false qmailp
groupadd qmail
useradd -g qmail -d /var/qmail -s /bin/false qmailq
useradd -g qmail -d /var/qmail -s /bin/false qmailr
useradd -g qmail -d /var/qmail -s /bin/false qmails

インストールします。

rpm -ivh http://www.qmail.org/rpms/RPMS/qmail-1.03-112patch_14_15.i386.rpm

この時点で、/var/qmail/control の下に五つのファイルが作られます。 要求によって変更を加えて下さい。
以下は私の設定です。

/usr/qmail/control/me

www.hyde-tech.com

/usr/qmail/control/locals

localhost
www.hyde-tech.com
hyde-tech.com

/use/qmail/defaultdomain

hyde-tech.com
www.hyde-tech.com

/usr/qmail/plusdomain

hyde-tech.com

/usr/qmail/rcpthosts

localhost
hyde-tech.com
.hyde-tech.com
www.hyde-tech.com

起動の準備をします。 最初に postmasterMAILER-DAEMONroot の重要なアカウントにメールを配送する設定をします。

cd /var/qmail/alias
touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
chmod 644 .qmail*

これで postmasterMAILER-DAEMONroot に対するメールは、/var/qmail/alias にセーブされるようになります。

/var/qmail/rc ファイルの中を次のように変更します。

qmail-start ./Mailbox splogger qmail -> qmail-start ./Maildir/ splogger qmail

Maildirの後ろのスラッシュを忘れないでください。

Maildir ディレクトリは自分で作る必要があります。

/var/qmail/bin/maildirmake ~alias/Maildir
chown -R alias /var/qmail/alias/Maildir

ユーザーに関してはそれぞれのアカウントで次のコマンドを実行します。

/var/qmail/bin/maildirmake ~/Maildir

または、root が代わりに作ってもいいですが、chown でそれぞれのユーザーにオーナーを変更する必要があります。したのコマンドを実行して、/etc/skel ディレクトリに Maildir のテンプレートを置いておけば、adduser コマンドであたらしいユーザを作ったときに自動的に作ってくれます。

/var/qmail/bin/maildirmake /etc/skel/Maildir

/var/qmail/alias/.qmail-rootに転送先のアドレスの頭に&を付けて書いておけば、root宛のメールが転送されます。

一般ユーザの場合は ~/.qmail に同様に記述します。

インストールします。

rpm -ivh http://www.qmail.org/rpms/RPMS/ucspi-tcp-0.88-112memphis.i386.rpm

cdb ファイルの元となるファイルを作ります。 ここでは、tcp.smtp と言うファイルで /etc に作ります。

vi /etc/tcp.smtp

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

次のコマンドで、cdb ファイルを作ります。 このコマンドは、一番最後に qmail を起動する前に実行したほうがいいようです。

/usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

pop デーモン自身は、qmail をインストールした時点で入っていますが、このデーモンにはユーザー認証の機能が無いので、checkpassword を使って認証機能を実現します。 インストールします。

rpm -ivh http://www.qmail.org/rpms/RPMS/checkpassword-0.90-112memphis.i386.rpm

まず、この Version では envdir というコマンドを使っており、fedora には入っていませんでしたので、調べてみると daemontools に入っていることがわかりました。

インストールします。

rpm -ivh http://www.qmail.org/rpms/RPMS/daemontools-0.76-112memphis.i386.rpm

次に relay-ctrl をインストールしましょう。
http://untroubled.org/relay-ctrl/relay-ctrl-3.1.1.tar.gz
をダウンロードします。

tar xvzf relay-ctrl-3.1.1.tar.gz
cd relay-ctrl-3.1.1
make

mkdir /usr/local/man
./installer

これで /usr/local/bin relay-ctrl のコマンド群がインストールされました。 次に、アクセスしてきた IPアドレスを記録しておく directory を作ります。 これは、どこでもかまいませんがわかりやすいように次のようにしました。

mkdir /var/qmail/relay-ctrl
mkdir /var/qmail/relay-ctrl/spool
chgrp -R qmail /var/qmail/relay-ctrl
chmod 700 /var/qmail/relay-ctrl
chmod 777 /var/qmail/relay-ctrl/spool

次に relay-ctrl の環境 directory を作ります。 envdir によって、この中に入っているファイル名と同じ環境変数がそのファイルの内容を持って作られることになります。

mkdir /etc/relay-ctrl

この中に RELAY_CTRL_DIR を作ります。

echo "/var/qmail/relay-ctrl/spool" > /etc/relay-ctrl/RELAY_CTRL_DIR

次に、一定時間後に /var/qmail/relay-ctrl/spool の中の IP アドレスを消す cron を設定します。

crontab -e

としてエディットモードになり

* * * * * /usr/local/bin/envdir /etc/relay-ctrl /usr/local/bin/relay-ctrl-age

を最終行に付け加えます。 次に、qmail を起動するスクリプトを次のようにします。

#!/bin/sh
#
# qmail: /var/qmail
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
[ -f /var/qmail/rc ] || exit 0
case "$1" in
start)
    # Start daemons.
    echo "Starting qmail."
    csh -cf '/var/qmail/rc &'
    envdir /etc/relay-ctrl relay-ctrl-chdir \
        tcpserver -v -u [qmail group ID] -g [nofiles group ID] -x /etc/tcp.smtp.cdb \
        0 smtp relay-ctrl-check \
        /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
    envdir /etc/relay-ctrl relay-ctrl-chdir \
        tcpserver -v 0 pop3 /var/qmail/bin/qmail-popup \
        [server FQID] /bin/checkpassword \
        relay-ctrl-allow /var/qmail/bin/qmail-pop3d Maildir 2>&1 \
        | /var/qmail/bin/splogger pop3d 3 &
    echo
    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
    echo
    rm -f /var/lock/qmail
    ;;
restart)
    $0 stop
    $0 start
    ;;
*)
    echo "Usage: S93qmail {start|stop|restart}"
    exit 1
esac
exit 0

さて、いよいよスクリプトを動かして qmail を立ち上げ、テストしてみます。

telenet localhost 110

と入力して

Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK <1498.1013146645@your server FQDN>

と表示されたら、おめでとうございます、pop は無事立ち上がっています。 ここで

user popユーザ名

と入力すると

+OK

が表示されます。 さらに

pass パスワード

と入力して

+OK

と表示されればpopは正常に動いています。

quit

で終了し、/var/qmail/relay-ctrl/spool の中に 127.0.0.1 というファイルができていることを確認しましょう。 あとは、自分のメーラーを使用して送受信が正常にできる事を確認してください。 さらに、受信してから15分後に先のファイルが消えていることも確認してください。

これがうまくいったら、次に localhost ではなく、自分のホスト名でアクセスしてみてください。 この接続に長い時間がかかるようであれば DNS の設定が必要です。 DNS を設定しましょう。

imapを導入しましょう。

courier-imap-3.0.4.tar.bz2 を使用します。 これ以降のバージョンも出ているのですが余計な機能が付いていて設定が面倒なのでこのバージョンにしました。

tar xvjf courier-imap-3.0.4.tar.bz2
cd courier-imap-3.0.4
./configure --without-authmysql --without-authldap --prefix=/usr/local –with-redhat
make
make check

make install
make install-configure

先のrelay-ctrlを使いたいので、起動スクリプトは次の様になります。

#! /bin/sh
# $Id: imapd.rc.in,v 1.26 2004/04/18 15:54:38 mrsam Exp $
#
# Copyright 1998 - 2002 Double Precision, Inc.
# See COPYING for distribution information.
prefix=/usr/local
exec_prefix=/usr/local
bindir=${exec_prefix}/bin
libexecdir=/usr/local/libexec
if test ! -f ${prefix}/etc/imapd
then
    echo "${prefix}/etc/imapd does not exist, forgot make install-configure?"
    exit 1
fi
if test ! -f ${prefix}/etc/imapd-ssl
then
    echo "${prefix}/etc/imapd-ssl does not exist, forgot make install-configure?"
    exit 1
fi
TLS_CACHEFILE=""
. ${prefix}/etc/imapd-ssl
. ${prefix}/etc/imapd
case $1 in
start)
    MAXPERIP=20
    LIBAUTHMODULES=""
    for f in `echo $AUTHMODULES`
    do
        LIBAUTHMODULES="$LIBAUTHMODULES /usr/local/libexec/authlib/$f"
    done
    if test -x ${libexecdir}/authlib/authdaemond
    then
        /usr/bin/env - DEBUG_LOGIN="$DEBUG_LOGIN" ${libexecdir}/authlib/authdaemond start
    fi
    if test "$TLS_CACHEFILE" != ""
    then
        rm -f $TLS_CACHEFILE
    fi
    ulimit -v $IMAP_ULIMITD
    /usr/bin/env - /bin/sh -c " set -a ;
    prefix=/usr/local ;
    exec_prefix=/usr/local ;
    bindir=${exec_prefix}/bin ;
    libexecdir=/usr/local/libexec ;
    . ${prefix}/etc/imapd ; \
        . ${prefix}/etc/imapd-ssl ; \
        IMAP_STARTTLS=$IMAPDSTARTTLS ; export IMAP_STARTTLS ; \
        TLS_PROTOCOL=$TLS_STARTTLS_PROTOCOL ; \
        /usr/local/bin/envdir /etc/relay-ctrl /usr/local/bin/relay-ctrl-chdir \
        /usr/local/libexec/couriertcpd -address=$ADDRESS \
        -stderrlogger=${exec_prefix}/sbin/courierlogger \
        -stderrloggername=imapd \
        -maxprocs=$MAXDAEMONS -maxperip=$MAXPERIP \
        -pid=$PIDFILE $TCPDOPTS \
        $PORT ${exec_prefix}/sbin/imaplogin $LIBAUTHMODULES \
        /usr/local/bin/relay-ctrl-allow \
        ${exec_prefix}/bin/imapd ${MAILDIRPATH}"
    ;;
stop)
    /usr/local/libexec/couriertcpd -pid=$PIDFILE -stop
    if test -x ${libexecdir}/authlib/authdaemond
    then
        ${libexecdir}/authlib/authdaemond stop
    fi
    ;;
esac
exit 0
configureするときに –without-authldapスイッチを忘れたりするといったん削除しても設定が残ってしまうので、起動時にLDAPを見に行ってログインできなくなってしまいますので、そのときには、

cd /usr/local/libexec/authlib/
mkdir old
mv authdaemond.ldap old/
mv authdaemond.mysql old/

としてください。

わたしの勤務している会社のネットワークのファイヤーウォールは、まったくもって鉄のカーテンで外部からの接続はVPN以外はまったくだめ、外に出るのはポート80が制限付で空いているだけなので、私のようなコントラクターは自分の会社のメールサーバにもアクセスできないのです。 しかも、内部メールはLookoutだけで転送禁止ときているので使いにくいことこの上ない。 MSNYahooのメールもアクセスできなくなっています。(でも、日本のサイトはO.Kなのです。 抜けてますね。) ということで、自分のメールサーバにアクセスするためにsquirrelmailを入れました。

yum -y install squirrelmail
cd /usr/share/squirrelmail/config
./conf.pl

最初に設定画面を開いたときはカラーがオンになっていて設定されている値が見えないのでcを入力してオフにします。

重要な設定だけを書いておきます。

2. Server Setteing
    1. Domain
        自分のドメイン名を書いておきます。 私の場合は hyde-tech.com になります。
    3. Sendmail of SMTP
        SMTPに変更します
    A. Update IMAP Settings
        8. Server software
            courier に変更します
3. Folder Defaults
    1. Default Folder Prefix
        Maildir/ に変更
    3. Trash Folder
        INBOX.Trash に変更
    4. Sent Folder
        INBOX.Sent に変更
    5. Drafts Folder
        INBOX.Drafts に変更
10. Languages
    1. Default Language
        ja_JP に変更

セーブして終了します。

ln -s /usr/share/squirrelmail /var/www/html/webmail

これで、URLの後ろに /webmail と付ければ squirrelmail のログイン画面が出てきます。

現在のバージョンは squirrelmail-1.4.8-1.fc5 windows 上のブラウザで日本語名の添付ファイルを保存するときにファイル名が化けるというバグがあります。 1.4.8-2 では直っているのですがfc5はまだ出てません。 fc6用のソースrpmを取ってきて入れればOKですが、面倒であればパッチ済みの mime.php がありますので、欲しい方はメールを下さい。 以下にソースRPMからのインストールの方法を書いておきます。

http://download.fedora.redhat.com/pub/fedora/linux/core/development/source/SRPMS/squirrelmail-1.4.8-2.fc6.src.rpm

mv squirrelmail-1.4.8-2.fc6.src.rpm /usr/src/redhat/SRPMS/
cd /usr/src/redhat
rpm -ivh SRPMS/squirrelmail-1.4.8-2.fc6.src.rpm
rpmbuild -ba SPECS/squirrelmail.spec
rpm -Uvh RPMS/noarch/squirrelmail-1.4.8-2.noarch.rpm

以上で完了です。

更新日:11/19/2006,10:08:03

戻る