以前の情報

 (http://www.exim.org/) 

ここまで日本語情報の少ない MTA も珍しい。 eximDebian GNU/Linux では標準の MTA として扱われているのにも関わらず、殆どまったくと言ってよいほど無い。 Exim ぽーたる? と称している所でさえ、名ばかりで情報は無いし…。
/usr/share/doc/exim/ にインストールされている spec.txt.gz (とその他のファイル)を 良く読む しか無い。

@ 凍った queue を解かす:
何らかの理由により外部にメールが配送できなかったり、 /etc/exim/exim/exim.conf による設定が不完全で受取人 recipient(s) にも送信者 sender にも通知ができなかった場合などに、そのメールは queue の中で frozen とマークされて凍結される。
もし exim 側のホストにメールが届く状態であれば Mailer-Daemon から Message frozen というメールが届いているはずだ。但しもちろん、この 通知自体も frozen される可能性もある。

 From MAILER-DAEMON Sat Dec 22 21:30:25 2001
 Envelope-to: postmaster@exim2.example.net
 From: Mail Delivery System <Mailer-Daemon@exim2.example.net>
 To: postmaster@exim2.example.net
 Subject: Message frozen
 Date: Sat, 22 Dec 2001 21:30:24 +0900
 
 Message 16HlIG-0000Yf-00 has been frozen.
 The sender is <yu-ji@exim2.example.net>.
 
 The following address(es) have yet to be delivered:
   yu-ji@exim1.example.net: lookup of host "192.168.0.1" failed in smarthost router

root になって mailq を見ると、frozen されたメールが queue に溜まっていることが分かる。

# /usr/bin/mailq

 4d  1.4K 16HctA-00004O-00 <> *** frozen ***
          root@exim1.example.net
 3d   361 16HlIG-0000Yf-00 <yu-ji@exim2.example.net> *** frozen ***
          yu-ji@exim1.example.net
 38h   348 16IOhI-0000KW-00 <yu-ji@exim2.example.net> *** frozen ***
           yu-ji@exim1.example.net

通常、exim の queue を吐き出すには runq (exim -q と同じ) を使う。しかし、これは frozen されたメッセージを queue から吐き出すことはしない。そのメッセージが frozen とマークされた原因の障害が回復したら、次のコマンドにより管理者が解凍 thaw してあげなければならない。

 # exim -Mt <message id> <message id> ...

溜まった frozen メールを一気に thaw して配送するには、次のオプションが使える。

 # exim -qff

デフォルトの設定では、frozen されたメールは管理者が thaw しない限り、 永久に queue に留まってしまう。次のような設定を exim.conf に加えて、自動的に thaw し再配送を試みるようにしたり、frozen なメールが永久凍土にならないよう破棄できるようにしておくのが良い。

 auto_thaw = 3h
 timeout_frozen_after = 3d

2002/01/30 追記 ここから
すると、この例の場合 3日後には以下のように勝手に消し去ってくれる。

 Jan 30 04:57:21 exim1.example.net exim[675]: 2002-01-30 04:57:21 16UOrS-0000XS-00 cancelled by timeout_frozen_after
 Jan 30 04:57:21 exim1.example.net exim[675]: 2002-01-30 04:57:21 16UOrS-0000XS-00 Completed

2002/01/30 追記 ここまで

管理者が queue に溜まっているメールを手動で frozen にマークすることもできる。

 # exim -Mf <message id> <message id> ...

@ wait-remote_smtp の owner が root になっていた:
Debian GNU/Linux 3.0 (Woody) を、Woody のインストーラから最小構成(ベース)でインストールした状態 *1 で、 /var/spool/exim/db/wait-remote_smtp と wait-remote_smtp.lockfile の owner が root:root となっており、配送時にエラーが発生していた。
詳細なメッセージは忘れてしまったが mail -v RECIPIENT_ADDRESS したときに、ファイルが開けないとかなんとかのメッセージが表示されていた。
exim-users@exim.org によると chown mail:mail wait-remote_smtp* して良いとのことだ。

@ 特定のホストからの SMTP 接続を拒否する:
host_reject = (HOST LIST)
ここに記述したホストからの SMTP 接続は、tcp 接続が確立した直後に切断される。
(HOST LIST) の記述書式は、 192.168.0.1 とか 192.168.0.1 : 192.168.0.3 とか、ホスト名でも良いし、正規表現も使える。多様なので必ず spec.txt 熟読のこと。同様な設定で host_reject_recipients もある。

@ メールのサイズを制限する:
message_size_limit = 1M
これだと 1M = 1024 * 1024 bytes となる。

message_size_limit_count_recipients = true
とすれば、To: などに複数の受取人が記述されている場合、トータルで制限される。例えば、message_size_limit = 1M の場合、To: hoge, fuga と 2つの受取人があると、サイズは 1人につき 0.5M、2人併せて 1M という具合に解釈される。

@ 中継に関する設定:
eximconfig で設定すれば、とりあえず安全な exim.conf が吐かれるようだ。 eximconfig が吐く英語は、なにやらやたらと理解しづらいし、さすが細かな設定が出来るわけではないが。

host_accept_relay = (HOST LIST)
host_accept_relay = 127.0.0.1 : ::::1 : 192.168.0.0/24
中継を許可するホストを記述する。 localhost 以外には、自分のアドレス・ブロックを記述することになるだろう。
qmail で言う RELAYCLIENT

relay_domains = (DOMAIN LIST)
relay_domains = subdomain.example.net : example.net
自分宛てのメール以外で中継するドメインのリストを記述する。 qmail で言う rcpthosts

local_domains = (DOMAIN LIST)
local_domains = localhost : exim1.example.net
ローカルで受け取る(自分宛てとして扱う)ドメインのリストを記述する。 qmail で言う locals

host list や domain list は、IP アドレス、ホスト名、正規表現、データベース、テキストファイル等、 多様な記述方法 がある。 spec.txt を熟読すれば どのような設定で どのような記述が可能なのか良く分かるだろう。

@ いちいち indent / lookup しないで〓:
利用者の多いサーバでは特に、いちいち indent / lookup されるのはかなわない。

rfc1413_hosts =
としておけば、どこにも indent しない。 host list で記述できるので、特定のホスト/ネットワークだけ indent するようにしても良いだろう。しかし、なんでこれのデフォルトが * なんだ ;(

host_lookup =
これで 繋いできたホストをいちいち DNS lookup しなくなる。

Received: ヘッダが寂しいという場合は、両方 * にしときゃ良い。小さいサイトでは問題になることは少ないはずだし、何か合ったときには有用な情報となるかも知れない。

@ 並列配送して〓:
ある程度の規模の ML を運用するのであれば、並列配送しないとやっていられない。

remote_max_parallel = 20
とかしておけば、リモート配送は 20本同時にいける。リソースと相談して増やすべき。

SPAM 対策:
殆どの場合、何の効果も上げず徒労に終わるだろうし、いまどき地道にやってる人なんていないだろうけど。一応。

sender_reject = (ADDRESS LIST)
sender_reject = spamuser@some.domain : spam.domain
@ ログは syslog に吐いて〓:
log_file_path = (STRING LIST)
log_file_path = syslog
log_file_path = : /var/log/exim/%slog
log_file_path = /var/log/exim/%slog : syslog
割りと syslog に吐かれることを想定してなさそうなモノを吐くけど。
3番目の例のようにすれば、default の log_file_path と syslog に吐かれる。 Woody のパッケージの場合は、つまり 4番目の例と同じ意味になる。

                                                                                                                                                              • -