Last modified: Sun, 02/26/2006 12:11

設定のチェック

 設定し終わったら,それが意図したように動くか,チェックしなきゃならない.それなしにインターネットにつなげちゃうのはちょっとね.ここではチェック方法と俺が考えるチェックポイントをあげる.

構文チェック

 まずは設定ファイルの構文が間違っていないか確認しよう.

# exim -bV

 これはversion情報を表示してくれるが,設定ファイルも読み込んでもくれる.そこでエラーがあればその旨表示するんで,構文チェックに使える.

配送チェック

 次は配送チェック.つまり自分ところ宛のメールを,ちゃんと自分ところで受け取るものであると認識してくれるか,そして自分とこじゃない外のアドレス宛のメールは,ちゃんと配送先を見つけて配送してくれるか,ってところを確認しよう.でないとせっかく届いたメールを拒否して送り返してしまったりして,送り元のサーバ管理者に迷惑をかけてしまうことになってしまう.それはお互い避けたいのでしっかり確認しようよ.

 で,これをテストするためにはeximをテストモードで起動させる.具体的には以下のように実行する.

# exim -bt

これでプロンプト(">")が出るので,そこにメールアドレスを入力すると,どういう風に中で処理されるかが表示される.なんで,ここで

  1. このメールサーバが受け取らないアドレス(外のアドレス)
  2. このメールサーバが受け取るアドレス

を入力し,それぞれちゃんと

  1. 外部のサーバへ配送する
  2. 内部のユーザへ配送する

という結果になることを確認しよう.
 じゃ, まず外のアドレスの例を見てみよう.外のアドレスとして,postmaster@yahoo.co.jpを実験台にしてみる.一応確認しておくが,ここでテストしたメールアドレスにメールが飛ぶわけではないので,安心して有名なアドレスを使ってかまわない.ということで,プロンプトにこのアドレスを入力すると,以下のように出力される(説明の便宜上,出力に赤字で示す行番号を振る.実際に番号は出力されない).

   > postmaster@yahoo.co.jp
1: postmaster@yahoo.co.jp
2: router = dnslookup, transport = remote_smtp
3: host mta14.mail.yahoo.co.jp [211.14.15.25] MX=10
4: host mta13.mail.yahoo.co.jp [211.14.15.24] MX=10
5: host mta15.mail.yahoo.co.jp [211.14.15.26] MX=10
6: host mta12.mail.yahoo.co.jp [211.14.15.23] MX=10
7: host mta11.mail.yahoo.co.jp [211.14.15.22] MX=10
8: host mta10.mail.yahoo.co.jp [211.14.15.21] MX=100

 気にすべきはまずは2行目,外部のメールアドレスは,このようにrouterがdnslookupで,transportがremote_smtpにならなければならない(もちろんデフォルトの設定ファイルを元に設定した場合).ここが違っているとメールをうまく配送できない可能性がある.設定ファイルを見直そう.で,ここがその通りだと,後はそのアドレス用のメールサーバの一覧がその下にズラズラ出る.上の例の3〜8行目だ.実際に配送する場合は,このサーバのどれかに配送することになる.
  ちなみにyahooは大きいところなのでこういう風に沢山メールサーバを用意しているが,普通のところはこんなにはない.せいぜい2〜3個だ.まあ多寡はあれこういう出力が出るってこと.

 次はこのメールサーバが受け取る内部アドレスのチェックをしてみよう.同様にプロンプトにアドレスを入力する.例えばxxx@example.comってメールアドレスを受け取ることになっているのであれば,そのアドレスを入れてみよう(実際に存在するアカウントでないと駄目だよ).そうすると以下のように出力される.

   > user@example.com
1: user@example.com
2: router = localuser, transport = local_delivery

 やはりここでも気にすべきは2行目.ローカルのアドレスであれば,このようにrouterがlocaluserで,transportがlocal_deliveryになっていないといけない(/etc/aliasや.forwardは設定されていない場合).こーゆーふーになっていれば,ちゃんとユーザーさんのメールスプールにメールを配送してくれる.ここが違っていると,せっかく遠くから届いたメールを,「自分宛でない」と言って拒否しちゃってメールが届かなかったりする.確認すべし.
 ちなみにこれはDNSで設定されているA recordと(設定されていれば)MX recordの両方のパターンで試した方がいい.どちらでもメールは届くからね.この辺はDNSの話ともカラんでくるんで深入りしない.ここに書いてあることが分からんというのであれば,もっと勉強しろよと答えておく.

 テストモードの終了はCTRL+Dだ.

3rd party relay

 3rd party relayってのは,要は全然関係ない人に,自分のメールサーバをメール配送に使われてしまうこと.これは気分が悪いってのもあるけど,なによりかによりそう言う風に見ず知らずの人ン所のサーバ使うようなやつは,大概いわゆるspam mail業者であること多いって所.そーゆー人達はこーゆーふーに使えるサーバを日々探しているんで,こんな極東の片田舎のメールサーバでも見つけられてしまう可能性があるんだ.大概機械仕掛けでしらみつぶしに探すし.これでspamに使われちゃったりすると,迷惑被った人にやり玉に挙げられることこれ確実.最近は損害賠償請求なんて話も聞いたりするし.きちんと対策しておこう.
 この3red party relayについてのページは,

とかがあるんであわせて目を通しておいて欲しい.

 で,この3red party relay制限をするための具体的な方針だが,

  1. ローカルのメールクライアントのアドレスからくるメール中継要求は無条件で許可
  2. 外部アドレスからの中継要求は,自分が受け取るメールアドレスドメイン部分である場合のみ可(ただしこのサーバが他のドメインのMXやgatewayになっている場合は,そのドメインも許可する)

ってのが最低限.さらに特定のブラックリスト(spam行為の履歴の)に載ってるアドレスからは無条件に拒否したり,ローカルからのメールも,fromが自分所のアドレスでないと拒否したりとか送り手のメールアドレスが実在するか確認するとか,色々手はあるけれど,まずは最小限の所をこなすところから始めよう.

 で,eximでは,これらの設定は,とりあえずの設定のところで説明したlocal_domains,relay_to_domains,relay_from_hostsをきちんと設定しておけば,ちゃんとそう言う動作になる(ついでに自動で送り手のメールアドレスのドメイン部分が実在するドメインかどうかまで調べてくれる).後はその設定が正しいかどうかだよな.って訳で確認してみる.
  でも設定した人とチェックする人が同じだと,勘違いを発見できないというのはどうしてもある.まあ一晩おいてからもう一度一からチェックし直してからやったりとかした方がいいんじゃないかな.
 これを確認するためのツールとして,exim_checkaccessってのが用意されている.使い方は以下のとおり.

# exim_checkaccess <IP address> <email address>

 これで,<IP address>から<email address>宛のメールが届いたとき受け取るか拒否するかを確認できる.実行例は以下のとおり.

# exim_checkaccess 211.14.15.25 postmaster@excite.co.jp
Rejected:
550 relay not permitted

 211.14.15.25ってのは自分のネットワークとは全然関係ない余所のアドレス(実はyahoo.co.jpの範囲のアドレス).そこから,やはり自分所と全然関係のないexcite.co.jpのアドレスのメールをこのサーバ経由で送ろうとした場合どうなるか,ということを試している.で,当然それは拒否される(rejected).これはさっきの方針の2に引っかかったわけだな.こんな感じでテストしてくわけよ.
  で,テストのパターンとしては,<IP address>が,

で,<email address>としては

でこの全部の組み合わせで試して欲しい.で,上記のアドレスの類も,なるべく実際の環境で使われている(使う予定の)ものを使った方がいい.実際に指差し確認できる人の・マシンのアドレスを使いましょうってこと.そうすると変な勘違いも減るんじゃないかな.
 で,チェックの結果は,以下のようになるべき.そうでなかったら見直してみよう.

 
メールアドレスのドメインが
受け取るアドレス
余所のアドレス
リレー先のアドレス
ローカルのIPアドレス
Accept Accept Accept
余所のIPアドレス
Accept Rejected:
550 relay not permitted
Accept

ようやく起動

 これでようやく起動させて使うところまでもってきた.起動スクリプトはすでにインストール時点で,/usr/local/etc/rc.d/exim.shとして用意されているんで,いつも通りこれを引数つけて実行するだけ.このスクリプトはOS起動時に自動で実行されるんで,これからは何も気にせずにOS起動と同時にeximも立ち上がるようになる.

# /usr/local/etc/rc.d/exim.sh start

 あとはpsで確認してeximがdaemonとして存在するのを確認したり,netstatでport 25がlistenになってるのを確認して楽しんでくれ.あとは,できれば3rd parth relay checkのページが何カ所かあるんで,それで確認するとなおよろし.

 あとは自分のプロバイダからメール送ったりして届くことを確認してくれよ.

さらなるチェック

 この項はヒントのみ.

3rd party relayチェックをもう少し詳しくやりたい

 exim_checkaccessでやれるチェックは,実は

# exim -bh <IP address>

とやって smtp sequence入力するのと同等である.こちらの方がsmtp sequenceの知識が必要なんだけど,その分細かい処理経過のメッセージを出してくれる.思い通りに動かなかった場合はこっちで確認してみるといい.

テストモードではなく,実際にsmtp sessionを受けている状態の動作をチェックしたい

 exim起動時に-dオプションをつけるとdebugモードになる.-bdオプションと併用すると,フォアグラウンドで実行されstderrにdebugメッセージを出すようになる.その状態で外部からsmtp sessionを開始すると,それに対応した内部の動作が逐一stderrに出力されるので,動作のトレースに便利.


Eximのとりあえずの設定 Eximの設定ファイル詳細へ→
色々技術メモページに戻る
石田 翼のホームページに戻る

Copyright (C) 1997-2002
ISHIDA, Tsubasa <tbs-i@mtg.biglobe.ne.jp>
All rights reserved