パンダのメモ帳

技術系のネタをゆるゆると

netqmail-1.06 のセットアップ

とある業務で RHEL5.3 に netqmail-1.06 をインストールしたのでその時のオペレーションを記録。

  • netqmail-1.05 では必要だった collate.sh の実行が netqmail-1.06 では不要になった。
  • qmail-date-localtime.patch の公式はやっぱり行方不明?ローカルで持っておいた方がいいかも。
  • 今回はSMTPのみなので、vpopmail とか qmail-vida は入れず。

必要なファイルのダウンロード

cd ~
mkdir tmp
cd ~/tmp
wget http://qmail.org/netqmail-1.06.tar.gz
wget http://www.qmail.org/qmail-smtpd-relay-reject
wget http://www.tymy.net/~matsu/blog/wp-content/uploads/2008/03/qmail-date-localtime.patch
wget http://www.emaillab.org/djb/tools/ucspi-tcp/ucspi-tcp-0.88.tar.gz

qmailの解凍 〜 パッチの適用 〜 make

tar zxf netqmail-1.06.tar.gz
cd netqmail-1.06/other-patches
cp ../../qmail-date-localtime.patch ./
cp ../../qmail-smtpd-relay-reject ./qmail-smtpd-relay-reject.patch
cd ../
patch -p1 < other-patches/qmail-date-localtime.patch
patch -p1 < other-patches/qmail-smtpd-relay-reject.patch

qmail用ユーザー&グループの作成

su
/usr/sbin/groupadd nofiles
/usr/sbin/groupadd qmail
/usr/sbin/useradd -g nofiles -d /var/qmail -s /sbin/nologin -M alias
/usr/sbin/useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaild
/usr/sbin/useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaill
/usr/sbin/useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmailp
/usr/sbin/useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailq
/usr/sbin/useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailr
/usr/sbin/useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmails

GIDやUIDは指定してもよいし、指定しなくてもよいと思う。今回は指定しなかったので、実行後に各IDをメモ。

qmailのインストール

make setup check

qmailの設定

./config
cd /var/qmail/control

各ファイルの意味と編集内容は下記の通り。

databytes

許容するメールの最大サイズ(Byte)。0を指定すると無制限になる。環境変数DATABYTESで上書き可能。
今回はとりあえず100MBに設定した。

104857600
defaultdomain

メールアドレスのホストにドットが含まれない場合に自動で追加されるドメイン。今回は触らず。

defaulthost

メールアドレスでホスト名が指定されていない場合に自動で追加されるホスト名。今回は触らず。

locals

セットアップするサーバーでローカルアドレスに使用するホスト名の一覧。
セットアップするサーバーで受信する必要のあるドメインを記述する。

example.jp
example.com
example.net
me

セットアップするサーバーのFQDN。configスクリプト実行で自動設定されるので、必要に応じて編集。今回は触らず。

plusdomain

メールアドレスがプラス記号(+)で終わる場合に自動で追加されるドメイン。今回は触らず。

rcpthosts

qmail-smtpdにリレーさせるホスト名の一覧。設定しないとオープンリレー、空ファイルの場合は全拒否。環境変数RELAYCLIENTで上書き可能。
セットアップするサーバーで受信する必要のあるドメインを記述する。

example.jp
example.com
example.net
virtualdomains

セットアップするサーバーで運用するバーチャルドメインの設定。各行に <ドメイン名>:<ユーザー名>の形で記述。
<ユーザー名>に指定したユーザーを /var/qmail/users/assign で設定するのを忘れちゃいけない。

example.jp:hoge
example.com:hoge

ユーザーの設定

/var/qmail/users/assign を編集し、qmailからメールを配信するユーザーの設定を行う。virtualdomainsで設定したユーザーについてもここで記述する。

=hoge:hoge:<UID>:<GID>:/home/hoge:::
+hoge-:hoge:<UID>:<GID>:/home/hoge:-::

はそれぞれhogeユーザーのUIDとGID。

tcpserverのインストール

いったんrootから抜けてmake。

exit
cd ~/tmp
tar zxf ucspi-tcp-0.88.tar.gz
make

makeに失敗する。同様にRHEL5へインストールしている記事を見つけたのでそこに書いて有る通り error.h を編集する。

// 以下の行をコメントアウト
// extern int errno;
// 以下の行を追加
#include <errno.h>

再びmake。

make

makeが通ったら再び root になってインストール。

su
make setup check

SMTP用アクセス制御ファイルの作成

tcpserverで使用するアクセス制御ファイルを作成する。今回はSMTPのみ。

mkdir /var/qmail/etc
cd /var/qmail/etc
vi tcp.smtp

今回のサーバー経由での送信は行わないので、rcpthostsで設定したホスト宛のメールを全IP対象に許可する。

:allow

そうするとこれだけ。……でいいんだろうか。書き終わったらtcprulesでcdbファイルを生成。

tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp

起動スクリプトの作成

qmailの起動用スクリプトを作成する。

/var/qmail/bin/rc
#!/bin/bash

exec env - PATH="/var/qmail/bin:$PATH" qmail-start ./Maildir/ splogger qmail
/etc/init.d/qmail
#!/bin/bash
#
# qmail
#
# chkconfig: 2345 80 30
# description: qmail

# Source function library
. /etc/rc.d/init.d/functions

[ -f /var/qmail/bin/rc ] || exit 0

start() {
  echo -n "Starting qmail: "
  csh -cf '/var/qmail/bin/rc &'
  /usr/local/bin/tcpserver -v -x /var/qmail/etc/tcp.smtp.cdb -R -H -u <UID> -g <GID> 0 25 /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
  echo
  touch /var/lock/subsys/qmail
  RETVAL=$?
  
  return $RETVAL
}

stop() {
  echo -n "Stopping qmail: "
  killproc qmail-send
  killproc tcpserver
  RETVAL=$?
  [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/qmail
  echo
  return $RETVAL
}

case "$1" in
'start')
  start
  RETVAL=$?
  ;;

'stop')
  stop
  RETVAL=$?
  ;;

'restart')
  stop
  start
  RETVAL=$?
  ;;

*)
  echo "Usage: $0 { start | stop | restart }"
  exit 1
  ;;
esac

exit $RETVAL

にはそれぞれqmaildユーザーのUID,GIDを設定する。普通ならPOP3用の記述も必要だけど、今回は省略。
それぞれ、パーミッションもちゃんと変更しておく。

chmod 755 /var/qmail/bin/rc
chmod 755 /etc/init.d/qmail

sendmailの停止

sendmailを停止し、自動起動しないように設定を変更する。

/sbin/service sendmail stop
/sbin/chkconfig sendmail off
/sbin/chkconfig --list sendmail

最後のコマンドで、sendmailが起動しないようになっているかを確認している。正しく処理されていれば、以下のような出力が得られるはず。

sendmail        0:off   1:off   2:off   3:off   4:off   5:off   6:off

sendmailラッパーの設定

qmailにはsendmailコマンドのラッパーが用意されているので、それを利用するようにごにょごにょする。

cd /sbin
mv sendmail.sendmail sendmail.sendmail.bak
ln -s /var/qmail/bin/sendmail sendmail.qmail
ln -s /var/qmail/bin/sendmail sendmail.sendmail

qmailの起動

/etc/init.d/qmail start

おしまい。