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
各ファイルの意味と編集内容は下記の通り。
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:-::
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
それぞれ、パーミッションもちゃんと変更しておく。
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
おしまい。