自宅サーバー構築メモ The last update of this page 2008/04/06
使用するソースとダウンロード先
netqmail-1.05 http://qmail.org/netqmail/
qmail-vida-0.53 http://prdownloads.sourceforge.jp/qmail-vida/2100/qmail-vida-0.53.tar.gz?use_mirror=kyushu-u
checkpassword http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz
ucspi-tcp http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
Received ヘッダのローカルタイムゾーン対応パッチ http://ftp.nlc.net.au/pub/unix/mail/qmail/qmail-date-localtime.patch
SMTP認証サーバへのリレー用パッチ qmail-remote-auth.patch
qmail-vida 用 qregex-20040601 + validrcptto.patch http://www.asahi-net.or.jp/~aa4t-nngk/codes/netqmail-vida-qregex-vrt.patch
インストール
qmailインストール用のディレクトリを作成
mkdir /var/qmail

qmailを動作させるためのユーザとグループを作成
groupadd -g 900 nofiles
groupadd -g 901 qmail
groupadd -g 902 vida
useradd -g nofiles -u 900 -d /var/qmail/alias -m -k /dev/null -s /sbin/nologin alias
useradd -g nofiles -u 901 -d /var/qmail -m -k /dev/null -s /sbin/nologin qmaild
useradd -g nofiles -u 902 -d /var/qmail -m -k /dev/null -s /sbin/nologin qmaill
useradd -g nofiles -u 903 -d /var/qmail -m -k /dev/null -s /sbin/nologin qmailp
useradd -g qmail -u 904 -d /var/qmail -m -k /dev/null -s /sbin/nologin qmailq
useradd -g qmail -u 905 -d /var/qmail -m -k /dev/null -s /sbin/nologin qmailr
useradd -g qmail -u 906 -d /var/qmail -m -k /dev/null -s /sbin/nologin qmails
useradd -u 907 -g vida -d /home/pop -s /bin/bash pop
useradd -u 908 -g vida -d /var/qmail/users -m -k /dev/null -s /sbin/nologin qmailu
useradd -u 909 -g vida -d /var/qmail/authdb -m -k /dev/null -s /sbin/nologin authdb

pop にログインパスワードを与える
passwd pop

解凍
cd /usr/local/src
tar xvfz netqmail-1.05.tar.gz
tar xzvf qmail-vida-0.53.tar.gz
tar xzvf checkpassword-0.90.tar.gz
tar xzvf ucspi-tcp-0.88.tar.gz

netqmail のソース展開と付属パッチの適用
cd netqmail-1.05
./collate.sh

qmail-vida の Makefile を編集
netqmail をベースにする場合には qmail-vida-0.53/Makefile の調整が不可欠
cd /usr/local/src/qmail-vida-0.53
vi Makefile
変更するポイント

QMAILSRC = ../netqmail-1.05/netqmail-1.05
patch-qmail: here=`pwd` && cd ${QMAILSRC} && ${PATCH} -p1 -F 3 < $${here}/patch/qmail.patch

パッチの適用
qmail-vida 付属パッチによる checkpassword, netqmail へのパッチ適用
make patch
cd ../netqmail-1.05/netqmail-1.05
patch -p1 < ../../qmail-date-localtime.patch
patch -p1 < ../../netqmail-vida-qregex-vrt.patch
patch < ../../qmail-remote-auth.patch
cd ../../checkpassword-0.90
patch -p1 < ../netqmail-1.05/other-patches/checkpassword-0.90.errno.patch
cd ../ucspi-tcp-0.88
patch -p1 < ../netqmail-1.05/other-patches/ucspi-tcp-0.88.errno.patch
patch -p1 < ../netqmail-1.05/other-patches/ucspi-tcp-0.88.a_record.patch

qmail-vida のソース補完
checkpassword, ucspi-tcp, qmail から qmail-vida への必要ライブラリのコピーと、ucspi-tcp, qmail から checkpassword へのライブラリコピーが行われる
cd ../qmail-vida-0.53
make copy

qmailのインストール
cd ../netqmail-1.05/netqmail-1.05
vi qmail-remote.c ←2008/4/6追記
make setup check
25番ポートブロック対応
SMTP認証が必要なプロバイダ(リレーサーバー)の場合、 qmail-remote.c「void smtp()」関数内の次の箇所を修正

while((i += str_chr(smtptext.s+i,'\n') + 1) && (i+14 < smtptext.len) &&
str_diffn(smtptext.s+i+4,"AUTH LOGIN\n",11) &&
str_diffn(smtptext.s+i+4,"AUTH LOGIN ",11) &&
str_diffn(smtptext.s+i+4,"AUTH PLAIN LOGIN\n",17) &&
str_diffn(smtptext.s+i+4,"AUTH PLAIN LOGIN ",17) &&
+ str_diffn(smtptext.s+i+4,"AUTH CRAM-MD5 LOGIN PLAIN\n",26) &&
+ str_diffn(smtptext.s+i+4,"AUTH CRAM-MD5 LOGIN PLAIN ",26) &&

str_diffn(smtptext.s+i+4,"AUTH=LOGIN\n",11) &&
str_diffn(smtptext.s+i+4,"AUTH=LOGIN ",11));
※赤字の箇所が今回追加する部分です。
参考にさせていただいたURL fragile graciousness

初回インストールの場合のみ以下実行(hosso.comは使用ドメインに置き換える)
./config-fast hosso.com

checkpasswordのインストール
cd ../../checkpassword-0.90
make
make setup check

qmail-vidaのインストール
cd ../qmail-vida-0.53/src/vida
make
make setup check

ドキュメントのインストール
vida ユーティリティは /var/qmail/bin/ に、ドキュメントは /var/qmail/doc/qmail-vida/ にインストールされる
cd ../..
make install-doc

ucspi-tcpのインストール
cd /usr/local/src/ucspi-tcp-0.88
make
make setup check

ディレクトリの整備
実在ドメインの、実在ユーザと仮想ユーザ用のパスワードディレクトリ構造を作成する。これによって、 /var/qmail/authdb/pwduser および pop ディレクトリが用意される
/var/qmail/bin/vida-pwdbinit
設定
qmail用にエリアスを設定します
vi /var/qmail/alias/.qmail-postmaster
vi /var/qmail/alias/.qmail-mailer-daemon
vi /var/qmail/alias/.qmail-root
サーバ管理者などのメールアドレスに対してはエリアスを設定しておく必要がある。
/var/qmail/alias/以下に「.qmail-***」というファイルを作成することにより***宛てのエリアスを作成することができる。
これらのファイルに、&に続けて転送するアドレスを記載する。例えば「.qmail-postmaster」はpostmaster@宛てにきたメールを転送するためのエリアスだが、このファイルに「&admin@foo.com」と記載しておくとpostmaster宛てにきたメールは「admin@foo.com」に転送される。


qmail の sendmail ラッパーをシステムが使えるようにする
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

起動スクリプトを作成
ps の出力を解析して PID を見つけるルーティンシェル
vi /usr/local/bin/detectpid
chmod 755 /usr/local/bin/detectpid
detectpid内容

qmail起動スクリプト作成
vi /etc/init.d/qmail
qmail起動スクリプト内容

qmail-smtpd起動スクリプト作成
vi /etc/init.d/qsmtpd
qmail-smtpd起動スクリプト内容
※MYSVNAME=hosso.comとなっている部分は変更してください。

qmail-pop3d起動スクリプト作成
vi /etc/init.d/qpop3d
qmail-pop3d起動スクリプト内容
※MYSVNAME=hosso.comとなっている部分は変更してください。

ファイル権限設定
chmod 755 /etc/init.d/qmail
chmod 755 /etc/init.d/qpop3d
chmod 755 /etc/init.d/qsmtpd
chkconfig qmail on
chkconfig qpop3d on
chkconfig qsmtpd on

環境変数の設定
mkdir /etc/service
vi /etc/service/tcp.pop3
cd /etc/service
tcprules tcp.pop3.cdb tcp.pop3.tmp < tcp.pop3
tcp.pop3内容
:allow,ALLOWPLAIN=""

qmail-smtpup は SMTP認証時に CRAM-MD5 による暗号化 (ハッシュ) ネゴシエーションを、また、 vida によってパッチが当たった qmail-popup は APOP 認証をデフォルトとしている。しかし、メールクライアント側の移行をシームレスに行うため (特に Windows版の OUTLOOK EXPRESS が未対応なので問題)、平文認証も生かしておく必要がある。smtp, pop3 とも、環境変数 ALLOWPLAIN が設定されていると、平文認証も許可するようになる。実際にどちらでネゴシエーションを行うかは、セッションでクライアントが送ってくるコマンドによって自動的に選択される。環境変数を設定する手段はいろいろと考えられるが、ここでは tcpserver のルール cdb を活用することにする。


vi /etc/service/tcp.smtp
cd /etc/service
tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp
tcp.smtp内容 ※192.168.0.の箇所は変更してください。
127.0.0.1:allow,RELAYCLIENT="",ALLOWPLAIN=""
192.168.0.:allow,RELAYCLIENT="",ALLOWPLAIN=""
:allow,ALLOWPLAIN=""

validrcpttoファイルの編集
vi /var/qmail/control/validrcptto
記述例
^mailer-daemon@
^postmaster@
^root@
^webmaster@
validrcptto ファイルは validrcptto パッチ によって利用可能になるコントロールファイルで、 badmailto とちょうど反対の評価を行う。つまり、RCPT TO: で受け取りを許可するアドレスを書いておくファイルになる。qmail は本来、smtp セッションの段階では、自ドメイン宛かどうかは確認しても、@ より前のユーザ名が有効なものかどうかは確かめず、とりあえず受け取ってしまう。無作為なユーザ名で総当たり的な spam (ディクショナリーアタック) をやられたら大変だ。そこで威力を発揮するのが validrcptto だ。qregex + validrcptto 統合パッチ では、このファイルでも正規表現を使う。 このファイルは、環境変数 RELAYCLIENT が未定義の場合にだけ評価される。つまり、SMTP-AUTH を正規に経たセッションや、 tcpserver 経由で RELAYCLIENT が設定された接続においてはチェックされない。言い換えれば、 control/rcpthosts に書いてあるドメインに属するメールアドレスにだけ適用されるわけだ。また、評価の順序は badmailto の後なので、 badmailto と validrcptto の両方にマッチする記述があった場合には、 badmailto の評価が優先される。 このファイルは必ず、このサーバで受け取るすべてのメールアドレスをカバーするように書いておかなくてはならない。

smtproutesファイルの編集 ←2008/4/6追記
vi /var/qmail/control/smtproutes
25番ポートブロック対応
以下のようにsmtproutesファイルにリレーさせるプロバイダのサーバーを記述する
※SMTPサーバー名:587 ユーザー名 パスワード
:smtpauth.eonet.ne.jp:587 xxxx yyyy

起動
/etc/init.d/qmail start
/etc/init.d/qpop3d start
/etc/init.d/qsmtpd start

各ユーザーの設定
実在システムユーザのマネージメント
※操作はすべてそのユーザの権限 (例では admin) で行うこと
既に Maildir を持っている場合は qmail/authdb/pwdusers/cdb にパスワードを登録するだけ
su - admin
/var/qmail/bin/vida-passwd

新たにシステムユーザを作成した際の手順
※操作はすべてそのユーザの権限 (例では admin) で行うこと
su - admin
/var/qmail/bin/maildirmake ~/Maildir
/var/qmail/bin/vida-passwd
echo ./Maildir/ >> ~/.qmail

一般 (仮想) メールユーザのマネージメント
仮想メールボックスを使うユーザを登録する際には、仮想メールボックスの実オーナーである pop となって作業を行う
su pop

1)qmail/authdb/pop/passwd への hanako 用パスワード追加と cdb への変換
/var/qmail/bin/vida-passwd -a -u hanako

2) qmail/users/assign への hanako 定義の追加と、 qmail-newu コマンドによる qmail/users/cdb の更新
/var/qmail/bin/vida-assign -a -u hanako

3) /home/pop/hanako ディレクトリの作成と /home/pop/hanako/Maildir 構造の作成
/var/qmail/bin/vida-maildirmake hanako Maildir

4)ドットqmailの作成
echo ./Maildir/ >> ~/hanako/.qmail

※ユーザーを追加した場合はvalidrcpttoファイルへの追加も行ってください。