qmail のディレクトリを作成する.
# mkdir /var/qmail
qmail ユーザ, グループを追加する.
# groupadd -g gid qmail # adduser --system --ingroup nofiles --home /var/qmail/alias alias # adduser --system --ingroup nofiles --home /var/qmail qmaild # adduser --system --ingroup nofiles --home /var/qmail qmaill # adduser --system --ingroup nofiles --home /var/qmail qmailp # groupadd -g gid qmail # adduser --system --ingroup qmail --home /var/qmail qmailq # adduser --system --ingroup qmail --home /var/qmail qmailr # adduser --system --ingroup qmail --home /var/qmail qmails |
Slink 版では qmail関連グループはシステムインストール時にすでに存在して いた. しかし Potato 版では, qmail 関連のシステムユーザおよびグループユー ザはすべて存在しなくなったので追加する. これらはシステムユーザ・グルー プなので,グループユーザに関しては gid 100-999 の中で空いている番号を使う.システムユーザのuidに 関してはadduser に--systemオプションを付けることで 自動的にdebian policy に沿ったuidをつけてくれる(詳細は Debian Policy Manual - The Operating System). 特に 1000-29999 は gate-system が使用するので, 使わない. あらかじめ変更する.
ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz を取得. 展 開する. できたディレクトリ(qmail-1.03/)に移って, コンパイル.
$ tar xvfz qmail-1.03.tar.gz $ cd qmail-1.03 # make # make man # make setup # make check |
まず,自ホスト名を設定する (詳細は http://man.qmail.jp/jinstall/install.ctl.html).
qmail-1.03.tar.gz を展開してできたディレクトリ(qmail-1.03/)に移る.
# ./config
このスクリプトは,ホスト名を DNS 検索する.以下の内容が書き込まれる.
/var/qmail/control/defaultdomain ep.sci.hokudai.ac.jp /var/qmail/control/locals localhost orange.ep.sci.hokudai.ac.jp /var/qmail/control/me orange.ep.sci.hokudai.ac.jp /var/qmail/control/plusdomain ac.jp /var/qmail/control/rcpthosts localhost orange.ep.sci.hokudai.ac.jp
セカンダリメールサーバとして使うために,ドメイン部が ep.sci.hokudai.ac.jp である宛先のメールを受け取るようにする.
# echo ep.sci.hokudai.ac.jp >> /var/qmail/control/rcpthosts
DNS サーバ によって,www.ep.sci.hokudai.ac.jp という別名を当てられている場合,
# echo www.ep.sci.hokudai.ac.jp >> /var/qmail/control/localsとする.ここで,ep.sci.hokudai.ac.jp を加えてはいけない.ep.sci.hokudai.ac.jp あてのメールをリモート配送させるためである.
ep.sci.hokudai.ac.jp あてのメールをMX レコードを DNS 検索することなしに,mail.ep.sci.hokudai.ac.jp に送るために,以下を行う.
これは, http://man.qmail.jp/faq/faq2.html, http://www.jp.qmail.org/q103/jman8/qmail-remote.html#smtproutes を参考にしたものである.
# echo ep.sci.hokudai.ac.jp:mail.ep.sci.hokudai.ac.jp > /var/qmail/control/smtproutes # chmod 644 /var/qmail/control/smtproutes
更に,メール発信の際にはドメイン部のないメールアドレスに,ep.sci.hokudai.ac.jp というドメイン部を付加するために,以下を行う.
# echo ep.sci.hokudai.ac.jp > /var/qmail/control/defaulthost # chmod 644 /var/qmail/control/defaulthost
そのほかに,以下を設定.
# echo 10000000 >> /var/qmail/control/databytes # chmod 644 /var/qmail/control/databytes
# echo 604800 >> /var/qmail/control/queuelifetime # chmod 644 /var/qmail/control/queuelifetimeメールキュー最大滞在時間 queuelifetime は長めに設定する. プライマリのメールサーバ の障害時には,セカンダリサーバとして メールをキューにためておくためである.
これら制御ファイルの効果は,qmail-showctl コマンド(マニュアルは http://man.qmail.jp/jman8/qmail-showctl.html にある)で確認できる.
システムのアドレスを設定する.
# cd /var/qmail/alias
# echo '&epmail' > .qmail-root
# echo '&root' > .qmail-postmaster
# echo '&root' > .qmail-mailer-daemon
# echo '&root' > .qmail-bin
# echo '&root' > .qmail-daemon
# echo '&root' > .qmail-games
# echo '&root' > .qmail-ingres
# echo '&root' > .qmail-nobody
# echo '&root' > .qmail-system
# echo '&root' > .qmail-toor
# echo '&root' > .qmail-uucp
# echo '&root' > .qmail-usenet
# echo '&root' > .qmail-anonymous
# echo '&root' > .qmail-mail
# echo '&epwww' > .qmail-www
# echo '&epdns' > .qmail-dns
# echo '&epnews' > .qmail-news
# chmod 644 .qmail-*
以上により, postmaster, mailer-daemon, bin, daemon, games, ingres, nobody, system, toor, uucp, usenet, anonymous, mail あてのメールは, root に転送され, root あてのメールは epmail に転送される. 詳細は, dot-qmail(5).
/var/qmail/bin 以下のコマンドにパスを通す. bash の場合, /etc/profile の PATH= の行を編集し, /var/qmail/bin を付け加える.
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/var/qmail/bin"
csh の場合, /etc/csh.cshrc を編集し, 同様に付け加える.
# /etc/csh.cshrc: system-wide .cshrc file for csh(1)/tcsh(1).
# $Id: csh.cshrc,v 1.4 1998/06/05 21:04:02 luisgh Exp $
setenv PATH /usr/local/bin:/usr/bin:/bin:/var/qmail/bin
/etc/manpath.config を編集し以下の部分を付け加える.
#MANDATORY_MANPATH /usr/src/pvm3/man ... ... MANDATORY_MANPATH /usr/local/man MANDATORY_MANPATH /var/qmail/man ... # *PATH* *MANPATH* ... ... ... MANPATH_MAP /opt/sbin /opt/man MANPATH_MAP /var/qmail/bin /var/qmail/man ... # *PATH* *CATPATH* ... ... ... MANDB_MAP /opt/man /var/cache/man/opt MANDB_MAP /var/qmail/man /var/qmail/man
/etc/profile に以下を書き加える.
...
export PATH PS1
umask 022
MAIL="$HOME/Mailbox"
MAILDROP="$HOME/Mailbox"
export MAIL MAILDROP
/etc/csh.cshrc に以下を書き加える.
...
set prompt = "%U%m%u:%B%~%b%# "
endif
endif
setenv MAIL $HOME/Mailbox
setenv MAILDROP $HOME/Mailbox
なお, 各ユーザのホームディレクトリのパーミッションは 755 でないと, メール配送時にエラーが出るらしい.
# cp /var/qmail/boot/home /var/qmail/rc # csh -cf '/var/qmail/rc &' |
qmail は起動する. qmail-send, splogger qmail, qmail-lspawn, qmail-rspawn, qmail-clean を ps で確認する.
次にブート時に qmail を走らせるようにするため, 以下のことを行う. ブー トスクリプトに関わる設定ファイルは/etc/inittabと /etc/init.d/rc である.
/etc/init.d/qmail に以下の起動スクリプトを記述し, 実行許可を与える.
# 起動スクリプト
csh -cf '/var/qmail/rc &'
# chmod 755 /etc/init.d/qmail
/etc/rc[2-5].d/ の下に, これへのリンクを置く. この数字(2-5)は RUNLEVEL に対応する. 2-5 はマルチユーザモード, 0 は halt, 1 は single user mode, 6 は reboot に対応する.
# cd /etc/rc2.d/ # ln -s ../init.d/qmail S80qmail # ls -al S80qmail lrwxrwxrwx 1 root root 15 S80qmail -> ../init.d/qmail # cd /etc/rc3.d/ (RUNLEVEL 3-5 も同様) |
このリンクの名前の S に続く2桁の数字(80)が, 起動のタイミングを決定する. reboot して, qmail デーモン群の起動を ps で確認.
ローカル配送テスト1:自分に送ってみる.kyoma は自分のユーザ名に変える.
% echo to: kyoma@orange.ep.sci.hokudai.ac.jp | /var/qmail/bin/qmail-inject~kyoma/Mailbox にメールが送られることを確認.
ローカル配送テスト2:存在しない宛先に送ってみる.
% echo to: nonexistent@orange.ep.sci.hokudai.ac.jp | \ /var/qmail/bin/qmail-inject -f kyoma@orange.ep.sci.hokudai.ac.jpバウンスメールが ~kyoma/Mailbox に送られることを確認.
リモート送り出しテスト1:他のホスト上のアカウントへ送ってみる.
% echo to: kyoma | /var/qmail/bin/qmail-injectkyoma@ep.sci.hokudai.ac.jp にメールが届くことを確認. 届いたメールの From: は kyoma@ep.sci.hokudai.ac.jp になっているか.
リモート送り出しテスト2:他のホスト上の存在しない宛先に送ってみる.
% echo to: nonexistent | /var/qmail/bin/qmail-injectMAILER-DAEMON@ep.sci.hokudai.ac.jp からの バウンスメールが kyoma@ep.sci.hokudai.ac.jp に送られることを確認.
文献 4, 5に従う.
ただし, sendmail ではなく, exim がインストールされている場合は, exim を無効にする.
exim のブートスクリプトは, /etc/init.d/exim4 で, これに /etc/rc[2-5].d/S20exim, /etc/rc{1,6}.d/K20exim からリンクが張られている. これを無効にする.
# chmod 000 /etc/init.d/exim4 # mv /etc/init.d/exim /etc/init.d/exim4.bak |
また, cron から呼び出される処理も無効にする. /etc/cron.daily/exim4-base の先頭の方に次の行を書き足す. 3 行目の [ と ! の間にはスペースが一つある ことに注意.詰めて書くとエラーが出る.
#!/bin/sh
# by TOYODA Eizi, 1999-09-22. We need not exim.
if [ ! -f /etc/exim.conf ]; then
exit 0
fi
# Uncomment the following lines to get daily e-mail reports ...
これで /etc/cron.daily/exim は無効になり, いずれ /etc/exim.conf を使って設定を行った暁には本当に動作するだろう. (豊田, 1999/09/22)
次に文献 4, 5 の通りの「sendmail 置き換 え」作業を行う.
# chmod 000 /usr/lib/sendmail # chmod 000 /usr/sbin/sendmail # mv /usr/lib/sendmail /usr/lib/sendmail.bak # mv /usr/sbin/sendmail /usr/sbin/sendmail.bak # ln -s /var/qmail/bin/sendmail /usr/lib/sendmail # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail |
最後にリンクを張ったのは, 「qmail の "sendmail" wrapperを MUA から使えるようにする」ため. /usr/lib/sendmail は, cron や gate-system がメールを出すのに使うので, リンクを張るのを忘れないこと.
www では cron デーモンがメールを送信する場合、あて先は
root@ep.sci.hokudai.ac.jp となる。
しかし、これでは先に設定した qmail のエイリアスによって
epmail に送られてしまい www 管理者へ届かない。
そこで正しく www 管理者へ送るために以下の作業を行う。
/etc/crontab 内の先頭の方に次のように MAILTO を加える。
・・・
# This file also has a username field, that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=epwww@ep.sci.hokudai.ac.jp
# m h dom mon dow user command
・・・
cron を再起動する。
/etc/init.d/cron restart
パソコンのメールソフトを使ってメールを利用するユーザは多いと考えられる ことから, mail が smtp 要求を受けるべきは, 1) mail にあるアカウント宛 に届くメール, 2) 地惑内のホスト(サブドメイン取得後なら, *.ep.sci.hokudai.ac.jp か)からの送られてきたメール, であろう.
qmail の FAQ 5.4「特定のクライアントにだけリレーとして使わせたい」(文献 1)に従って作業を行う. この FAQ では, tcpserver を使うやり方と, tcp-wrappers を使うやり方の二つが述べられて いる. tcpserver の導入によって, 同時に多くの smtp 要求を受け付けられ, 接続の記録が取れるようになる(文献 2)という利点 から, tcpserver を使うことにする.
文献 2に従って, qmail-smtpd の呼び出しを inetd から tcpserver に移す.
su になって, /etc/inetd.conf 中の smtp の行をコメントアウト (行頭に # を付す)して, inetd に HUP を送る . これによって, qmail-smtpd が inetd から呼び出されなくなる.
tcpserver は ucspi-tcp ツール群のひとつの機能である. ucspi-tcp ツール群のうち tcpserver は入ってくる TCP 接続を受け付けるプログラムである. ftp://ftp.jp.qmail.org/qmail/ucspi-tcp-0.88.tar.gz を取得. 展開する. 続いて付属ドキュメントに従ってコンパイルする.
$ tar xvfz ucspi-tcp-0.88.tar.gz $ make # make setup check |
qmaild の UID, nofiles の GID を確認した上で, 以下を実行する.
# tcpserver -u xxxx -g yyyy 0 smtp /var/qmail/bin/qmail-smtpd &
xxxx: qmaild の UID. yyyy: nofiles の GID.
inetd から qmail-smtpd を呼び出していたときと同様の受信テストを行い, inetd から tcpserver への移行 の成否を確認する.
次に qmail と同様に, ブート時に起動するようにする. /etc/init.d/tcpserver に以下を記述する. 編集後, root に実行許可を出す.
#!/bin/sh
#
# smtp
/usr/local/bin/tcpserver -u xxxx -g yyyy 0 smtp /var/qmail/bin/qmail-smtpd &
# chmod 755 /etc/init.d/tcpserver
/etc/rc[2-5].d/ の下に, これへのリンクを置く.
# cd /etc/rc2.d/ # ln -s ../init.d/tcpserver S80tcpserver # ls -al S80tcpserver lrwxrwxrwx 1 root root 15 S80tcpserver -> ../init.d/tcpserver # cd /etc/rc3.d/ (RUNLEVEL 3-5 も同様) |
smtp 中継を許可するホストを指定する. まず, 文献 1 に従って, /etc/tcp.smtp を書く. 例えば, 133.87.52.40 という IP アドレスのホストからの smtp 中継を許可するためには, この1行目のように 書く. 2 行目の 127. はローカルホストを指す. これは常に書くこと.
133.87.52.40:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""
次に以下のコマンドを実行する. tcp.smtp を元に /etc/tcp.smtp.cdb ができる.
# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
tcpserver 起動スクリプト /etc/init.d/tcpserver の起動行は以下のように 編集しなおす(1 行で書く).
/usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb -u xxxx -g yyyy 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
(xxxx: qmaild の UID. yyyy: nofiles の GID. )
追加された部分を説明すると -x /etc/tcp.smtp.cdb はデータベースファイル /etc/tcp.smtp.cdb を参照させるための設定である. また, 接続の記録を取るために -v オプションと splogger への受け 渡しが記述されている.
grey を reboot する. tcpserver の起動を確認する.
先ほど /etc/tcp.smtp に書いた IP アドレス(ここでは, 133.87.52.40)を 持つパソコンから, メーラー(例. eudora-J1.3.8.8r6)を使って, smtp サー バを blue に設定し, blue 以外の任意のホストにあるアカウント宛のメール を発信してみる.
/var/log/syslog に残るログは, 以下のようなものとなる事を確認する.
Jul 8 18:06:15 blue smtpd: 931424775.300370 tcpserver: status: 1/40
Jul 8 18:06:15 blue smtpd: 931424775.301735 tcpserver: pid 185 from 133.50.133.146
Jul 8 18:06:15 blue smtpd: 931424775.326543 tcpserver: ok 185 blue.ep.sci.hokudai.ac.jp:133.87.45.26:25
grey.sci.hokudai.ac.jp:133.87.52.40::2064
Jul 8 18:06:15 blue smtpd: 931424775.862705 tcpserver: end 185 status 0
Jul 8 18:06:15 blue smtpd: 931424775.863054 tcpserver: status: 0/40
gate-system から登録 IP アドレス一覧を受け渡してもらい, /etc/tcp.smtp.cdb を自動生成する. そのために, 標準入力から IP アドレス リストを読み込み, /etc/tcp.smtp を書くスクリプトを書いた. これを, /usr/local/sbin/list-2-tcp とする. root への実行許可を忘れずに.
#!/usr/bin/perl #Kyoma TAKAHASHI 1999.08.11 # 1999.09.09 # 1999.11.09 # list-2-tcp file $add = ':allow,RELAYCLIENT=""'; $bottom = '127.'; $rulefile = shift; open(RULEFILE,"> $rulefile"); while(<>) { chop($ip = $_); if($ip ne '') { if(/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/) { ($_) = /([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/; s/^0+//; s/\.0+/\./g; s/^\./0\./; s/\.$/\.0/; s/\.\./\.0\./g; s/\.\./\.0\./g; print RULEFILE $_,$add,"\n"; }} } print RULEFILE $bottom,$add; close(RULEFILE);
/usr/local/sbin/tcp_smtp_cdb を以下のように書く. root への実行許可を忘 れずに. gate の ip データベース更新時には, gate-system によってこのス クリプトが呼び出される.
#!/bin/sh
# Kyoma TAKAHASHI 1999.9.9
# 10.16
/usr/local/bin/gate-ip-show -f ip `/usr/local/bin/gate-ip-list stable` | /usr/local/sbin/list-2-tcp /etc/tcp.smtp && /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
gate-ip-show, gate-ip-list は, gate-system のコマンドである.
パーミッションは以下のように設定する.
# chmod 755 /usr/local/sbin/tcp_smtp_cdb
From: に入るアドレスを, 他のアドレスとするには,以下のいずれかによる.
これは,cron デーモンが送るレポートメールにも該当する.
これも From: と同様,ユーザ名をローカル部,/var/qmail/control/defaulthost を ドメイン部としたアドレスとなる.
Return-Path: に入るアドレスを, 他のアドレスとするには,以下のいずれかによる.
mail.ep.sci.hokudai.ac.jp の復活後,これらのたまったメールはめでたく配送されていく. キューにたまったメールを速やかに配送させるためには,
# kill -ALRM [qmail-send の PID]とする. http://man.qmail.jp/jman8/qmail-send.html を参照せよ.
また,プライマリのメールサーバ と同じように接続制御データベースと共に tcpserver による smtp の受付をさせているため,ep ドメイン内の smtp クライアント (パソコンなど) からのメールを任意の宛先に smtp 転送できる.
最終更新日: 2004/02/16(小松 研吾) | Copyright © 2001 epcore |