Linux への qmail の導入。 〜書きかけ〜
sendmail.cf の勉強したいなぁとか思ってたら、その前に qmail 云々のハナシが出てきてしまった。qmail と言えばこの人!みたいな同僚が一人いるから、作業はいつも任せてたけど、彼は夏期休暇に入っちゃってて良い機会でもあるのでやってみる事にした。いつも、「 qmail のインストールは面倒臭いから、依頼受けるならもっと高い請求だしたいです」って聞かされてたりもするのでちょっとビクビク。はい、前置きここまでよ。
パッチについて。
どうやら色々パッチを当てておいた方が幸せになれるらしい。(本家の適用推奨を強調)
- qmail-0.0.0.0.patch
- http://www.suspectclass.com/~sgifford/qmail/qmail-0.0.0.0.patch
- そのままでは、IP アドレス 0.0.0.0 をローカルホストとして認識しないらしい。
- qmail-103.patch
- http://www.ckdhr.com/ckd/qmail-103.patch
- 512バイト を超える DNS 応答のパケットの取り扱いに問題があるらしい。
- qmail-1.03.qmail_local.patch
- http://djbware.csi.hu/patches/qmail-1.03.qmail_local.patch
- qmail-local.c の条件分岐にコーディングミスがあるらしい。
- qmail-1.03.errno.patch
- http://djbware.csi.hu/patches/qmail-1.03.errno.patch
- glibc 2.3.1 以降を利用する場合に必要なパッチ。
- qmail-date-localtime.patch
- ftp://ftp.nlc.net.au/pub/unix/mail/qmail/qmail-date-localtime.patch
- 標準では GMT のみしか扱えないらしいので、JST で運用するにはこのパッチが必要らしい。
- qmail-smtpd-relay-reject
- http://www.qmail.org/qmail-smtpd-relay-reject
- メールアドレスの "@" 以前のユーザアカウント部分に "@", "!", "%" が含まれているメールを拒否するためのパッチ。
- sendmail-flagf.patch
- http://david.acz.org/software/sendmail-flagf.patch
- sendmail の -f オプション時の挙動の違いを修正するパッチ。
- qmailqueue-patch
- http://www.qmail.org/qmailqueue-patch
- QMAILQUEUE 環境変数を使えるようにするパッチらしい。
インストール
sendmail はアンインストールしておいた方がいいかもしれない。まずは必要となるユーザ,グループの追加から。( INSTALL.ids ファイル参照)
gid やら uid は指定したければ好きなようにすればいいと思われる。その次はパッチを適用して make 。
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
次は alias に関する設定。マニュアル( INSTALL, INSTALL.alias )に従ったけど、オーナ,グループを alias:qmail に設定しなくても良いんだろうか?
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
次に起動スクリプトの設定。/var/qmail/boot/home として用意されているファイルを /var/qmail/rc としてコピーする。Maildir 形式に変更するため、記述もあわせて変更。
cd /var/qmail/alias
touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
chmod 644 .qmail*
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)
ちなみに、configure の結果は私の場合はこんな感じになったらしい。
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
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
なんか混沌としてきた。qmailadmin とかのインストールについてを後日分のエントリとしてまとめる。
echo "*/15 * * * * root /home/vpopmail/bin/clearopensmtp 2>&1 1>/dev/null" > /etc/cron.d/clearopensmtp