qmail+vpopmailでSMTP AUTH実装

メールの不正リレー対策としては、POP before SMTP が有名です。
POP Before SMTPとはPOP認証が行われたIPアドレスから時間を限定してSMTPによるメールの送信を許可するという仕組みで、認証後の一定時間であればなりすましでの送信が可能であり、セキュリティ面で脆弱なためRFCでは推奨されていません。

そこで RFC 2554 にて定義された標準規格である SMTP AUTH を qmail + vpopmail で実装しました。

パッチの入手

smtp authを実現するには qmail にパッチの適用が必要です。

以下のURLから最新のパッチを入手してください。
http://members.elysium.pl/brush/qmail-smtpd-auth/
今回は qmail-smtpd-auth-0.31.tar.gz をダウンロードしました。
http://members.elysium.pl/brush/qmail-smtpd-auth/dist/qmail-smtpd-auth-0.31.tar.gz

qmailのSMTP AUTH化

(1) インストールディレクトリの作成(/var/qmail)
まずは、インストールを行う前にインストールディレクトリを作成します。

# mkdir /var/qmail

(2) 専用ユーザの作成
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

(3) qmail + smtp auth パッチの適用・インストール

$ tar xvfz qmail-1.03.tar.gz
$ tar xvfz qmail-smtpd-auth-0.31.tar.gz
$ cd qmail-1.03 <- qmailの展開ディレクトリ
$ cp qmail-smtp-auth-0.31/*.* ./ <- smtp-authパッチ内の *.* のファイル移動
$ patch < auth.patch <-他のパッチ適用があれば引き続き行う
$ make
$ su
# make setup
# make check

これでsmtp auth のパッチ適用が完了しました。

qmailの設定ファイルの作成、起動前の準備方法など省略します。詳しくは qmailの標準インストール を参照ください。

vpopmailのインストール

vpopmailは5.4.0を利用しました。
バージョンによってインストール方法が異なるかも知れません。

(1) vpopmailを操作する専用ユーザの作成
グループ名 vchkpw , ユーザ名 vpopmail で作成します。FreeBSDの場合はvpopmailのユーザIDは89が予約されているようなので89があいていれば89を利用しましょう。

# groupadd -g 89 vchkpw
# useradd -u 89 -g 89 -d /home/vpopmail -m -s/bin/bash vpopmail

(2) リレー許可DBの作成
Ver 5.2.1のときはリレーのDBの作成が無くてもインストールができましたが5.4.0ではインストール時、怒られてしまうので必要なディレクトリ、ファイルを作成します。

# chmod 755 /home/vpopmail/
# mkdir /home/vpopmail/etc
# cd /home/vpopmail/etc
# echo '127.:allow,RELAYCLIENT=""' > tcp.smtp <-リレー許可として127.を追加
# tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp  <-cdbの作成
# chown -R 89:89 /home/vpopmail/etc

(3) vchkpw.cの修正
vchkpw.cのauthcram()の引数の順番が間違ってる?ようで CRAM-MD5 がそのままでは正常に動作しないようなので以下の用に修正が必要です。

684行目

hmac_md5( challenge, strlen(challenge), password, strlen(password), digest);
                      ↓修正
hmac_md5( response, strlen(response), password, strlen(password), digest);

696行目

return(strcmp(digascii,response));
            ↓修正
return(strcmp(digascii,challenge));

★FCとも(゚∀゚)の会様の qmailとvpopmailでSMTP-AUTHをやってみる を参照させて頂きました。

(4) コンパイル・インストール
では、コンパイル・インストールを始めましょう。

$ tar xvfz vpopmail-5.4.0.tar.gz
$ cd vpopmail-5.4.0
$ su
# ./configure --enable-qmail-ext=n --enable-logging=y
# make
# make install-strip

(5) デフォルトドメインの指定
バーチャルドメインを利用する為に、メインとして利用するドメインを入力します。ここで指定したドメインはPOPするアカウントがメールアドレスの@前のものになります。それ以外のドメインはメールアドレス形式でのPOPとなります。
/home/vpopmail/etc/defaultdomain ファイルにデフォルトドメインを記入します。

# echo 'example.com' > /home/vpopmail/etc/defaultdomain

(6) vchkpwにroot権限の設定
この設定がないとSMTP AUTHがうまく動作しません。

# chown root:root ~vpopmail/bin/vchkpw
# chmod 4755 ~vpopmail/bin/vchkpw

vpopmailの起動

バーチャルドメインを認識させるために現在動作しているqmailのPOP,SMTPの起動方法の変更が必要です。

(1) POPサーバ
変更箇所はPOPプログラムを /home/vpopmail/bin/vchkpw に変更します。

# /usr/local/bin/tcpserver -v -R -H 0 pop3 \
 /var/qmail/bin/qmail-popup hoge.example.com \
 /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1 \
 | /var/qmail/bin/splogger pop3d 3 &

(2) SMTPサーバ
変更箇所はtcpserverが参照するcdbファイルとSMTP AUTH の指定が必要です。
ドメイン名には環境に応じて変更してください。

# /usr/local/bin/tcpserver -v -x /home/vpopmail/etc/tcp.smtp.cdb \ 
 -R -H -u qmaildのUID -g qmaildのGID 0 smtp /var/qmail/bin/qmail-smtpd \
 ドメイン名 /home/vpopmail/bin/vchkpw /bin/true 2>&1 \
 | /var/qmail/bin/splogger smtp 3 &

起動スクリプトの作成

(1) daemontoolsで起動
daemontoolsで利用するスクリプトです。daemontoolsの利用方法は daemontoolsからサービス起動方法 を参照ください。

POPサーバ

#!/bin/sh
exec env - PATH="/var/qmail/bin:/usr/local/bin:/bin:/usr/bin" \
envdir /etc/relay-ctrl relay-ctrl-chdir \
tcpserver -v -R -H 0 pop3 qmail-popup \
`/bin/cat /var/qmail/control/me` /home/vpopmail/bin/vchkpw \
relay-ctrl-allow qmail-pop3d Maildir 2>&1

SMTPサーバ

#!/bin/sh
exec env - PATH="/var/qmail/bin:/usr/local/bin:/bin:/usr/bin" \
envdir /etc/relay-ctrl relay-ctrl-chdir \
tcpserver -v -x /home/vpopmail/etc/tcp.smtp.cdb -R -H \
-u `/usr/bin/id -u qmaild` -g `/usr/bin/id -g qmaild` \
0 smtp qmail-smtpd ドメイン名 /home/vpopmail/bin/vchkpw /bin/true 2>&1

(2) init.d制御
通常よく利用される /etc/rc.d/init.d/qmail も用意しました。よかったら利用してください。

#!/bin/sh
# chkconfig: 345 85 15
# description: Dynamic Relay Authorization Control
# processname: qmail
#
# 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."

        # qmail
        csh -cf '/var/qmail/rc &'

        # POP3 by vpopmail
        envdir /etc/relay-ctrl relay-ctrl-chdir \
        tcpserver -v -R -H 0 pop3 qmail-popup \
        `/bin/cat /var/qmail/control/me` /home/vpopmail/bin/vchkpw \
        relay-ctrl-allow qmail-pop3d Maildir 2>&1 \
        | splogger pop3d 3 &

        # SMTP
        envdir /etc/relay-ctrl relay-ctrl-chdir \
        tcpserver -v -x /home/vpopmail/etc/tcp.smtp.cdb -R -H \
        -u `/usr/bin/id -u qmaild` -g `/usr/bin/id -g qmaild` \
        0 smtp qmail-smtpd ドメイン名 /home/vpopmail/bin/vchkpw \
        /bin/true 2>&1 \
        | splogger smtp 3 &

        echo
        touch /var/lock/subsys/qmail
        ;;
  stop)
        # Stop daemons.
        echo "Shutting down qmail."
        kill $(/sbin/pidof tcpserver)
        kill $(/sbin/pidof qmail-send)
        echo
        rm -f /var/lock/subsys/qmail
        ;;
   *)
        echo "Usage: S99qmail {start|stop}"
        exit 1
esac

exit 0 

メールアドレスの設定・運用については省略します。詳しくは vpopmailでバーチャルドメイン を参照下さい。

これでqmail+vpopmailでのSMTP AUTH実装が完了しました。
PLAIN認証,CRAM-MD5認証ができますので、BeckyなどSMTP AUTH対応メーラーで動作確認をしてください。

marronおすすめの参考書 by Amazon
AVQ251-500-N アンチウィルス for Linux Qmail版 AVQ251-500-N アンチウィルス for Linux Qmail版
ギデオン /
¥ 415,800
AVQ1-50-N アンチウィルス for Linux Qmail版 AVQ1-50-N アンチウィルス for Linux Qmail版
ギデオン /
¥ 138,600
AVQ51-100-N アンチウィルス for Linux Qmail版 AVQ51-100-N アンチウィルス for Linux Qmail版
ギデオン /
¥ 207,900

Copyright(C) 2004-2006 マロンくん.NET ~サーバ管理者への道~ All Rights. Reserved.