Linux への qmail の導入。 〜書きかけ〜

sendmail.cf の勉強したいなぁとか思ってたら、その前に qmail 云々のハナシが出てきてしまった。qmail と言えばこの人!みたいな同僚が一人いるから、作業はいつも任せてたけど、彼は夏期休暇に入っちゃってて良い機会でもあるのでやってみる事にした。いつも、「 qmail のインストールは面倒臭いから、依頼受けるならもっと高い請求だしたいです」って聞かされてたりもするのでちょっとビクビク。はい、前置きここまでよ。

パッチについて。

どうやら色々パッチを当てておいた方が幸せになれるらしい。(本家の適用推奨を強調)

恨み言

  • ftp.jp.qmail.org つながらね。うぜぇ。 ftp.nlc.net.au つながらね。うぜぇ。パッチ多いんだよ。うぜぇ。

インストール

sendmail はアンインストールしておいた方がいいかもしれない。まずは必要となるユーザ,グループの追加から。( INSTALL.ids ファイル参照)


mkdir /var/qmail
groupadd nofiles
useradd -g nofiles -d /var/qmail/alias -m -k /dev/null -s /sbin/nologin alias
useradd -g nofiles -d /var/qmail -m -k /dev/null -s /sbin/nologin qmaild
useradd -g nofiles -d /var/qmail -m -k /dev/null -s /sbin/nologin qmaill
useradd -g nofiles -d /var/qmail -m -k /dev/null -s /sbin/nologin qmailp
groupadd qmail
useradd -g qmail -d /var/qmail -m -k /dev/null -s /sbin/nologin qmailq
useradd -g qmail -d /var/qmail -m -k /dev/null -s /sbin/nologin qmailr
useradd -g qmail -d /var/qmail -m -k /dev/null -s /sbin/nologin qmails
gid やら uid は指定したければ好きなようにすればいいと思われる。その次はパッチを適用して make 。

patch -p1 < ../qmail-0.0.0.0.patch
patch -p1 < ../qmail-103.patch
patch -p1 < ../qmail-1.03.qmail_local.patch
patch -p1 < ../qmail-1.03.errno.patch
patch -p1 < ../qmail-date-localtime.patch
patch -p1 < ../qmail-smtpd-relay-reject
patch -p0 < ../sendmail-flagf.patch
make setup check
./config-fast HOSTNAME
次は alias に関する設定。マニュアル( INSTALL, INSTALL.alias )に従ったけど、オーナ,グループを alias:qmail に設定しなくても良いんだろうか?

cd /var/qmail/alias
touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
chmod 644 .qmail*
次に起動スクリプトの設定。/var/qmail/boot/home として用意されているファイルを /var/qmail/rc としてコピーする。Maildir 形式に変更するため、記述もあわせて変更。

cp /var/qmail/boot/home /var/qmail/rc
vi /var/qmail/rc

#!/bin/sh

# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/Mailbox by default.

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/ splogger qmail

その後、起動するかどうかの確認だけをしておく。

csh -cf '/var/qmail/rc &'
ps aux | grep qmail
killall qmail-send

tcpserver のインストール。

tcpserver(UCSPI-TCP) は tcp_wrapper や xinetd なんかよりも高機能なプログラムらしい。glibc 2.3.1 以降を利用している場合には、errno に関するパッチ(→ucspi-tcp-0.88.errno.patch)を適用する必要がある。ucspi-tcp-0.88.a_record.patch, ucspi-tcp-0.88.nobase.patch なんてパッチファイルも転がっているので、適用した方があるいは幸せになれるかもしれない。


wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
tar xfvz ucspi-tcp-0.88.tar.gz
cd ucspi-tcp-0.88/
patch -p1 ../ucspi-tcp-0.88.errno.patch
make
make setup check
とりあえずインストールだけして、細かい事は後回し。

vpopmail のインストール。

余談ながら、vchkpw.c の authcram() の引数の順番に問題があり、SMTP AUTH 利用の際に CRAM-MD5 が正常に動作しないとの話もある。必須ではないが、以下の修正を行うと幸せになれるのかもしれない。


--- vchkpw.c.orig 2004-12-17 00:57:34.000000000 +0900
+++ vchkpw.c 2006-08-07 13:43:43.000000000 +0900
@@ -708,7 +708,7 @@
unsigned char h;
int j;

- hmac_md5( challenge, strlen(challenge), password, strlen(password), digest);
+ hmac_md5( response, strlen(response), password, strlen(password), digest);

digascii[32]=0;

@@ -720,7 +720,7 @@
digascii[(2*j)+1]=hextab[h];
}
/* printf("digascii: %s, response: %s", digascii, response); */
- return(strcmp(digascii,response));
+ return(strcmp(digascii,challenge));
}

int authapop(unsigned char *password, unsigned char *timestamp, unsigned char *clearpass)


groupadd vchkpw
useradd -g vchkpw -d /home/vpopmail -m -k /dev/null -s /sbin/nologin vpopmail
mkdir /home/vpopmail/etc/
cd /home/vpopmail/etc
echo '127.:allow,RELAYCLIENT=""' > tcp.smtp
tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp
chown -R vpopmail:vchkpw /home/vpopmail/etc
cd /usr/local/src
wget http://keihanna.dl.sourceforge.net/sourceforge/vpopmail/vpopmail-5.4.13.tar.gz
cd vpopmail-5.4.13
./configure \
--prefix=/home/vpopmail \
--enable-vpopuser=vpopmail \
--enable-vpopgroup=vchkpw \
--enable-roaming-users=y \
--enable-relay-clear-minutes=15 \
--enable-tcpserver-file=/home/vpopmail/etc/tcp.smtp \
--enable-clear-passwd=n \
--enable-ip-alias-domains=n \
--enable-logging=y \
--enable-log-name=vpopmail
make
make install-strip
ちなみに、configure の結果は私の場合はこんな感じになったらしい。

vpopmail 5.4.13
Current settings

                                                                            • -

vpopmail directory = /home/vpopmail
uid = 1007
gid = 1002
roaming users = ON --enable-roaming-users
tcpserver file = /home/vpopmail/etc/tcp.smtp
open_smtp file = /home/vpopmail/etc/open-smtp
rebuild tcpserver file = ON --enable-rebuild-tcpserver-file (default)
password learning = OFF --disable-learn-passwords (default)
md5 passwords = ON --enable-md5-passwords (default)
file locking = ON --enable-file-locking (default)
vdelivermail fsync = OFF --disable-file-sync (default)
make seekable = ON --enable-make-seekable (default)
clear passwd = OFF --disable-clear-passwd
user dir hashing = ON --enable-users-big-dir (default)
address extensions = OFF --disable-qmail-ext (default)
ip alias = OFF --disable-ip-alias-domains (default)
auth module = cdb --enable-auth-module=cdb (default)
auth inc = -Icdb
auth lib =
system passwords = OFF --disable-passwd (default)
pop syslog = show successful and failed login attempts
--enable-logging=y
auth logging = ON --enable-auth-logging (default)

また余談だけども、SMTP AUTH を利用する場合には、vchkpw の所有者を root に変更する必要があるとかなんとか。今回はその操作はやってないけど。

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

echo "*/15 * * * * root /home/vpopmail/bin/clearopensmtp 2>&1 1>/dev/null" > /etc/cron.d/clearopensmtp
なんか混沌としてきた。qmailadmin とかのインストールについてを後日分のエントリとしてまとめる。