qmailの利用・インストール〜smtp編

MTAとしてはsendmailの方が一般的だけど、大量のSMTPをさばく為には動作が速く安定しているqmailの方が有利なのでインストールしてみました。popは後回しで取りあえずsmtpだけ。

portsからもインストールできるけど、一発でうまく動かなかったため、ソースから手動でmakeしてみました。

qmailのインストール

qmail-1.03.tar.gzをftpしてくる
tar zxvf qmail-1.03.tar.gz
cd qmail-1.03
mkdir /var/qmail
pw groupadd nofiles
pw useradd alias -g nofiles -d /var/qmail/alias -s /noexistent
pw useradd qmaild -g nofiles -d /var/qmail -s /noexistent
pw useradd qmaill -g nofiles -d /var/qmail -s /noexistent
pw useradd qmailp -g nofiles -d /var/qmail -s /noexistent
pw groupadd qmail
pw useradd qmailq -g qmail -d /var/qmail -s /noexistent
pw useradd qmailr -g qmail -d /var/qmail -s /noexistent
pw useradd qmails -g qmail -d /var/qmail -s /noexistent

make setup check

./config
(又はホスト名検索させずに ./config-fast hostname.your.domain
と言う手もある。DNSに登録されていないマシンやlocalipを振って
あるマシンには有効)

動かす前にaliasを設定。
cd /var/qmail/alias
touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
chmod 644 .qmail*

起動スクリプトの複写
cp /var/qmail/boot/home /var/qmail/rc



動作テスト

sendmailはこの時点で動いていてもオッケーです。

csh -cf '/var/qmail/rc &'

tail /var/log/maillog と
ps ax | grep qmail で確認。

echo to: root | /var/qmail/bin/qmail-inject でメール送信確認。
同様に他のホストにもテストをしてみます。

実稼働の為に・・・
/etc/rc.conf (FreeBSD3.2なら /etc/defaults/rc.conf)
の中の

sendmail_enable="NO"
と変更。

替わりに /usr/local/etc/rc.d/に

ln -s /var/qmail/rc qmail.sh
とリンクを張っておきます。qmail.shが起動時に実行。(実体は/var/qmail/rcを実行)

which sendmail でsendmailの在処を調べてから
/usr/sbin/sendmail -q で停止。
setuidビットを削ってqmailのsendmailモドキにリンクを張っておきます。こうしておけばperlのスクリプトでsendmailが呼ばれたときもあたかもsendmailを使っているかのようにqmailが振る舞います。

cd /usr/sbin
chmod 0 /usr/sbin/sendmail
mv sendmail sendmail.org
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

inetdから起動するなら
/etc/inetd.confを書き換えておきます。(tcpserverからの起動なら記述必要無し)

smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd
(多分既に#でコメントアウトされている記述が有るはず)

inetdのプロセス番号を調べて再起動
cat /var/run/inetd.pid
又は ps ax | grep inetd

kill -HUP プロセス番号

tcpserverの設定

inetd(インタネットスーパサーバ)に負荷が掛かるとこけてしまい、inetdから起動
するサービスデーモンもろともこけてしまうこともあるのでtcpserverからqmailを
使うように設定。これは大量のSMTPをさばくリストサーバなどに効果的。

tcpserverは ucspi-tcpパッケージに含まれるので

ucspi-tcp-0.84.tar.gz を取ってきて
tar zxvf ucspi-tcp-0.84.tar.gz
cd ucspi-tcp-0.84
make
make man
make setup

/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 ./Mailbox splogger qmail &

/usr/local/bin/tcpserver -c 1000 -u 82 -g 1003 0 \
smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
--------------------------------------------------------------------------------
(-u はqmaildのuserid、-g はnofilesのgroupidを書いておく。 -c 1000は同時接続
を1000まで拡張(標準は40)。 最後のsploggerはlog取りの為)

inetdを再起動してオッケー。



次に中継制限


/var/qmail/control/rcpthosts に許可するドメイン名を記述
localhost
.itoh.co.jp
等と書いておけばよし。rcpthostsを削除するとSPAMサーバ(!)になります。

他にtcpserver側での制限も記述
/etc/tcp.smtp
172.16.:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""
:allow
等とsmtpを受け付けるネットワークを書いておきます。

tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
とやってtcpserverに読み込ませる制限ファイル(tcp.smtp.cdb)を作り

/var/qmail/rcを下記のように変更

/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 ./Mailbox splogger qmail &

/usr/local/bin/tcpserver -x /etc/tcp.smtp.cdb -v -c 1000 -u 82 -g 1003 0 \
smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
--------------------------------------------------------------------------------
再起動後に有効になる。

転送設定・aliasesに変わるモノ

root宛のメイル転送は
/var/qmail/alias/.qmail-root

&takamura@itoh.co.jp
と書いておけばよし。(または行頭の&を省略できる。)

一般ユーザの転送設定は
~/.qmail
に同様の
&takamura@itoh.net
と書いておくだけ。

#:コメント
&:転送
|:programの実行
となっており最後の「|」を使ってメイルの仕訳をMTA(qmail)にやらせちゃうなんて芸当が可能。
.forwardを有効にしてsendmailで構築してあるサイトをqmailにそのまま移行するdot-forwardもこの「|」を使っている。
/etc/aliasesは使わずに
/var/qmail/alias/.qmail-*** を使う。ユーザのホームにこの「.qmail-***」を置けばユーザが勝手にaliasを設定できる。
~/.qmail-takamura2 を作っておけば
takamura-takamura2@itoh.co.jp 宛のメイルはtakamura@itoh.co.jpに届く。

MXを振り向けたとき

#echo domainname.com >> /var/qmail/control/locals
#echo domainname.com >> /var/qmail/control/rcpthosts

qmail-sendに kill -HUPする。
のようにしておかないとMXレコードで振り向けられても受け取りません。
正確に言うとメイルスプールに書き込んでくれません。tcpserverから
qmailが動くように設定してあると
  1. tcpserverからqmailを起動して良いか?
  2. smtpの中継を許すか?
  3. ローカルのメイルとしてスプールに書き込んでも良いか?
と言うような段階があって初めてメイルが届くことになります。メイルがちゃんと
配送されない場合は /var/log/mailogを良く見てどの段階で受け取り拒否されて
いるか考えなければなりません。

FAQ(qmail-1.03) (村田暢宏、前野年紀 訳)

[(改)は改訂、(!)は新規項目]

1. 送信メッセージの外見
1.1. ホスト名を隠したい
1.2. ユーザ名を変えたい
1.3. Mail-Followup-Toを自動で設定させたい(!)

2. 送信メッセージの振り分け
2.1. ローカル宛のメイルも全部別のホストに送りたい
2.2. メイルの配送をサーバに任せたい
2.3. UUCP経由でメイルを送りたい
2.4. SLIP/PPP 接続用にメイルキューを分けたい
2.5. "CNAME lookup failed temporarily"はどう始末するのでしょうか(改)

3. 受信メッセージの振り分け(システム編)
3.1. 別ホストあてのメイルも受け取りたい
3.2. 仮想ドメインを使いたい
3.3. 一人に複数の仮想ドメインを使わせたい

4. 受信メッセージの振り分け(ユーザ編)
4.1. ローカル処理されなかったメイルを他に転送したい
4.2. メイリングリストはどうすれば使えますか(改)
4.3. majordomoをqmailとともに使いたい(改)
4.4. procmailをqmailとともに使いたい(改)
4.5. elmのfilterをqmailで使いたい
4.6. .qmailにドット(.)を含めたい
4.7. sendmailで使っていた.forwardを使うには(!)
4.8. sendmailで使っていた/etc/aliasesを使うには(!)
4.9. NFSやNISが止まったときにメイル配送を後まわしにするには(!)
4.10. メイルアドレスを制御するアカウントを変更するには(!)

5. サーバの設定
5.1. qmail-smtpdをtcpserverを使って動かしたい
5.2. qmail-qmtpdを設定したい
5.3. qmail-pop3dを使いたい(改)
5.4. 特定のクライアントだけにリレーとして使わせたい(踏台対策)(改)
5.5. クライアントが送ってくる壊れたメッセージを矯正したい
5.6. qmail-qmqpdを設定したい(!)

6. MUAをqmail対応にするには
6.1. Dateをローカルタイムゾーンで付けさせたい
6.2. pineがクラッシュするのです。どうしたら止められますか
6.3. MHをqmailとともに使うには
6.4. Sunのdtcmがハングしないようにしたい

7. メイルシステムの管理
7.1. 安全にqmail-sendを止めるには(改)
7.2. 手動でキューを処理するには(改)
7.3. メッセージを若返らせるにはどうしたらよいですか
7.4. 大規模ネットワークでqmailを使いたい
7.5. キューのバックアップとリストアはどうしたらよいですか
7.6. 監視つきでqmailを動かすには(!)
7.7. syslogを使わないためには(!)

8. その他
8.1. もっと多くの同時配送をさせたい
8.2. 送受信するすべてのメイルに関するメッセージのコピーを保存したい
8.3. sendmailからゆっくりqmailへ移りたい

高村のホーム   いとうのホーム