$ sudo apt-get install ucspi-tcp-src $ build-ucspi-tcp $ /tmp/ucspi-tcp にできたパッケージをインストール
$ sudo apt-get install qmail-src $ build-qmail
/tmp/qmail に展開していいか?みたいなことを聞かれるので yes と答えておく Enter するとインストールの画面になったところでパッチをあてるために別ターミナルを起動。
以下別ターミナルで操作
から 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: ターゲットを以下のように変更
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`
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 が有効になっていることが確認できる。
$ 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)
となれば認証成功。