Debian / Qmail / SMTP-AUTH 設定

smtp-auth パッチ適用済み qmail のビルド

ucspi-tcp のビルドとインストール

$ sudo apt-get install ucspi-tcp-src $ build-ucspi-tcp $ /tmp/ucspi-tcp にできたパッケージをインストール

qmail のビルド

$ sudo apt-get install qmail-src
$ build-qmail

/tmp/qmail に展開していいか?みたいなことを聞かれるので yes と答えておく Enter するとインストールの画面になったところでパッチをあてるために別ターミナルを起動。

以下別ターミナルで操作

qmail-smtpd-auth
http://members.elysium.pl/brush/qmail-smtpd-auth/

から ver0.31 をダウンロード

$ cd ~/
$ tar xzvf qmail-smtpd-auth-0.31.tar.gz

smtp-auth パッチと base64 関連のソースを qmail のビルド用ディレクトリにコピーして パッチを適用する。

$ cd /tmp/qmail/qmail-1.03
$ cp ~/qmail-smtpd-auth-0.31/* ./
$ patch -p0 < auth.path

Makefile と qmail-smtpd.c にうまくパッチがあたらない。 ちなみにこのまま無視して make すると base64encode.o が見つからないとかいうエラーが 出て途中で失敗する。

仕方がないのであとは手パッチ。 Makefile.rej と qmail-smtpd.c.rej を見て手動で直す。

$ vi Makefile

具体的には qmail-smtpd: ターゲットを以下のように変更

旧 Makefile

qmail-smtpd: \
load qmail-smtpd.o rcpthosts.o qregex.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 strerr.a substdio.a error.a str.a \
fs.a auto_qmail.o socket.lib
        ./load qmail-smtpd qregex.o 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 strerr.a substdio.a error.a str.a fs.a auto_qmail.o  `cat \
        socket.lib`

新 Makefile

qmail-smtpd: \
load qmail-smtpd.o rcpthosts.o qregex.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 strerr.a substdio.a error.a str.a \
fs.a auto_qmail.o base64.o socket.lib
        ./load qmail-smtpd qregex.o 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 strerr.a substdio.a error.a str.a fs.a auto_qmail.o base64.o `cat \
        socket.lib`

変更箇所は各行に base64.o を加えてるだけ。

qmail-smtpd.cは

#include "wait.h"
#include "fd.h"

を #include "command.h" の後に、

#define AUTHCRAM

を #define MAXHOPS 100 の前に加えればよい(試す人は一応 qmail-smtpd.c.rej を見て内容を確認してね)。

パッチの適用が終わったら、元のターミナルに戻って Enter を押せばビルドが始まる。 ビルドが終わったらできた .deb ファイルを dpkg -i してインストールすればよい。 最後に、Debian のスタートアップスクリプトの場合 qmail-smtpd が smtp-auth で認証 するようになっていないので書き換える。

smtp サービスの起動部分 を以下のように変更

 --- 前略
 # prevent denial-of-service attacks, with ulimit
  ulimit -v 16384
    sh -c "start-stop-daemon --start --quiet --user qmaild \
    --pidfile /var/run/tcpserver_smtpd.pid --make-pidfile \
    --exec /usr/bin/tcpserver -- -R -H \
    -u `id -u qmaild` -g `id -g nobody` -x /etc/tcp.smtp.cdb 0 smtp \
    $rblsmtpd /usr/sbin/qmail-smtpd /usr/sbin/vchkpw /bin/true 2>&1 \
    | $logger &"

/usr/sbin/vchkpw /bin/true の部分が追加したところ。 cmd5checkpw とか使う場合は上記 vchkpw 部分を書き換えるとよい。

チェック項目: /usr/sbin/vchkpw の実行権限は root になっているか。 なってないと動きません。(Debian/sid から入れた場合はなってるはず)

vchkpw の権限を確認したら

$ sudo /etc/init.d/qmail restart

確認

$ telnet localhost 25
EHLO localhost

とか打つと

250-avoidnotes.org
250-AUTH LOGIN CRAM-MD5 PLAIN
250-PIPELINING
250 8BITMIME

といったレスポンスが返ってくる。 250-AUTH が返ってきていれば SMTP-AUTH が有効になっていることが確認できる。

PLAIN 認証を確認

$ perl -MMIME::Base64 -e 'print encode_base64("Username\0Username\0Password");'

とかして出てきた結果をコピーしておく。

例:ユーザー名 test@avoidnotes.org / パスワード testpass
$ perl -MMIME::Base64 -e 'print encode_base64("test@avoidnotes.org\0test@avoidnotes.org\0testpass");' 
dGVzdC5vcmcAdGVzdC5vcmcAdGVzdHBhc3M=

このパスワードをコピーなりメモなりしておいて

$ telnet localhost 25

する

EHLO localhost
250-avoidnotes.org
250-AUTH LOGIN CRAM-MD5 PLAIN
250-PIPELINING
250 8BITMIME
AUTH PLAIN dGVzdC5vcmcAdGVzdC5vcmcAdGVzdHBhc3M=
235 ok, go ahead (#2.0.0)

となれば認証成功。

参考 URL

Memo for Linux ( SMTP Auth )
http://www.eva.gr.jp/~help/linux/2004/20040418.html
qmail+vpopmailでSMTP AUTH実装 : マロンくん.NET
http://www.marronkun.net/linux/mail/qmail_000032.html