このドキュメント内に記述されている送信者/受信者アドレス検証機能は、 流量が少ないサイトだけに敵している。高負荷下では性能は不十分であり、あ なたのサイトがいくつかのプロバイダのブラックリストに載るかもしれない。 詳細は後述の"アドレス検証の制限"節を参照。
アドレス検証は、送信者(MAIL FROM)または受信者(RCPT TO)アドレスが配 送可能かどうかを検証するまで、Postfix SMTP サーバがアドレスをブロック する機能である。
この技術は、返信不可能な送信者アドレスを伴うジャンクメールを拒否す るために使用する。
この技術は、たとえば、全ての正しい受信者アドレスのリストを持たない メール中継ホスト上で、配送不可能な受信者へのメールをブロックするために も使用できる。これは、Postfix がMAILER-DAEMON 返信メッセージを送ろうと して、資源を浪費することのないように、配送不可能なジャンクメールをキュー に入れることを防ぐ。
この機能は Postfix バージョン 2.1 以降で有効である。
このドキュメントでカバーする話題:
送信者または受信者アドレスは、そのアドレスに実際にメールを配送せず に、最寄りの MTA を調査することにより、検証される。最寄りの MTA は Postfix 自身にもできるし、リモート MTA(SMTP 割り込み)にもできる。調査 メッセージは通常のメールと似ているが、配送、defer, bounce されない; 調 査メッセージは常に破棄される。
Internet -> Postfix
SMTP
server<-> Postfix
verify
server<-> Address
verification
database|
probe
messages
v^
delivery
status
|Postfix
queue-> Postfix
delivery
agents
Postfix アドレス検証が有効な場合、通常のメールは、初回のアドレス検 証の間、最大6秒の短い遅延だけを被る。一度アドレス状態が知られると、状 態はキャッシュされ、Postfix はすぐに応答する。
検証が長い時間かかる場合、Postfix SMTP サーバは送信者または受信者ア ドレスを 450 応答で延期する。通常のメールクライアントは、いくらか遅れ た後に再度接続する。アドレス検証遅延は main.cf の address_verify_poll_count と address_verify_poll_delay パラメータで変更可能である。詳細は postconf(5) 参照。
Postfix は検証するアドレスの最寄りの MTA を調査する。実際にその アドレスにメールを送信はしない。最寄りの MTA がアドレスを受け入れる場 合、Postfix はアドレスが配送可能だとみなす。たとえ MTA が受け入れた後 に bounce するとしても。
AOL のようなサイトは、あなたが頻繁に調査したり(調査はメールを配 送しない SMTP セッションである)、存在しないアドレスを頻繁に調査すると、 あなたをブラックリストに載せるかもしれない。
通常、アドレス検証調査メッセージは、通常のメールと同じ道を辿る。 しかし、いくつかのサイトは中継 relayhost を経由してインターネッ トにメールを送信する; これはアドレス検証を壊す。メールルーティングを無 効にする方法と、これを行なう必要がある時に起こりうる制限について、後述 のセクション "アドレス検証調査の経路制御" を参照。
Postfix はアドレスの最寄りの MTA が調査を拒否すると、拒否の理由 (client rejected, HELO rejected, MAIL FROM rejected, etc...)にかかわら ず、アドレスを配送不可能とみなす。したがって、Postfix は、送信者の MTA があなたのマシンからのメールを拒否する時に、メールを拒否する。これは良 いことである。
不幸にも、YAHOO のようないくつかのメジャーサイトは、RCPT TO コ マンドの返答で、未知のアドレスを拒否しない。しかし、メッセージが転送さ れた後で、DATA の最後の応答内で配送失敗を報告する。Postfix アドレス検 証はこのようなサイトでは働かない。
デフォルトでは、Postfix 調査メッセージは、送信者アドレスとして "postmaster@$myorigin" を持つ。 これは、Postfix SMTP サーバがこのアドレスについてのメールを拒否しない ため、安全である。
あなたはこれを null アドレス("address_verify_sender =")に変更できる。これは、"postmaster@$myorigin" からの調査は成功するのに、 MAIL FROM: <> を拒否するように間違って構成されたサイトで、アドレ ス調査が失敗するかもしれないので、安全でない。
前に述べたように、受信者アドレス検証は、全ての正しい受信者アドレス のリストを持たないメール中継ホストで、配送不可能な受信者へのメールをブ ロックするために有用であるだろう。これは MAILER-DAEMON メッセージでメー ルキューが一杯になることを防ぐ助けになる。
受信者アドレス検証は、比較的率直であり、驚くべきことはない。受信者 調査が失敗すると、Postfix はその受信者アドレスへのメールを拒否する。受 信者調査が成功すると、Postfix はその受信者アドレスへのメールを受け付け る。
/etc/postfix/main.cf: smtpd_recipient_restrictions = permit_mynetworks reject_unauth_destination ... reject_unknown_recipient_domain reject_unverified_recipient ...
"reject_unknown_recipient_domain" 制限は存在しないドメインのメールをブロックする。 "reject_unverified_recipient" の前にこれを置くと、不必要な調査メッセージの生成のオーバーへッドを会費 できる。
unverified_recipient_reject_code パラメータ (デフォルト 450) は、受信者アドレスが bounce すると知られて いる時の Postfix の応答を指定する。あなたが Postfix の判定を信用する時 は、この設定を 550 に変更せよ。
forged メールに頻繁に現れる特定ドメインについて、送信者アドレス検証 を比較的安全に有効にする。
/etc/postfix/main.cf: smtpd_sender_restrictions = hash:/etc/postfix/sender_access unverified_sender_reject_code = 550 # Note 1: 後述の "アドレス検証データベース" セクションを確実に読むこと! # Note 2: ハッシュファイルはここでは避け、代わりに btree を使用せよ。 address_verify_map = btree:/var/mta/verify /etc/postfix/sender_access: aol.com reject_unverified_sender hotmail.com reject_unverified_sender bigfoot.com reject_unverified_sender ... etcetera ...
頻繁に forged される MAIL FROM ドメインのリストは http://www.monkeys.com/anti-spam/filtering/sender-domain-validate.in で見つけることができる。
NOTE: あなたが最初に行なうことの一つは、あなた自身の全てのドメイン について、送信者アドレス検証を有効にすることである。
不幸にも、送信者アドレス検証は、全ての電子メールには簡単に有効には できない - あなたは間違って構成されたシステムからの正当なメールを失う だろう。あなたは、特定のアドレスまたはドメイン全体のホワイトリストをほ ぼ確実に設定する必要がある。
送信者アドレス検証があなたのメールにどのような影響を与えるかを見つ けるには、どのメールがブロックされるのかを見れるように、 "warn_if_reject reject_unverified_sender" を記述する:
/etc/postfix/main.cf: smtpd_sender_restrictions = permit_mynetworks ... check_sender_access hash:/etc/postfix/sender_access reject_unknown_sender_domain warn_if_reject reject_unverified_sender ... # Note 1: 後述の "アドレス検証データベース" セクションを確実に読むこと! # Note 2: ハッシュファイルはここでは避け、代わりに btree を使用せよ。 address_verify_map = btree:/var/mta/verify
実際にメール拒否を開始する前に、あなたのキャッシュにアドレス検証結 果を入れておくのは良い方法である。
sender_access 制限は、OK であると知られているホワイトリストドメイン またはアドレスを必要とする。たとえ、Postfix が良いと知られているアドレ スを、調査が失敗した後に悪いとマークしないとしても、sorry よりも安全で あることはより良いことである。
NOTE: 各投稿について異なる送信者アドレス(VERP)を使用するメーリング リストを動かしているような securityfocus.com や他のサイトについて、ホ ワイトリストサイトを持つ必要がある。このようなアドレスはアドレス検証キャッ シュをすぐに汚染し、不必要な送信者検証調査を生成する。
/etc/postfix/sender_access securityfocus.com OK ...
"reject_unknown_sender_domain" 制限は存在しないドメインからのメールをブロックする。これを "reject_unverified_sender" の前に置くことで、不必要な調査メッセージの生成のオーバーへッドを回避で きる。
unverified_sender_reject_code パラメータ (デフォルト 450) は、送信者アドレスが bounce すると知られて いる時の Postfix の応答を指定する。あなたが Postfix の判定を信用する時 は、この設定を 550 に変更せよ。
NOTE: デフォルトでは、アドレス検証情報は永続的なファイルには置かれ ない。main.cf に一つ指定する必要がある(後述)。永続的な蓄積はデフォルト ではオフである。あなたのファイルシステムで利用できるよりも多くのディス ク領域を必要とするからである。
アドレス検証情報は Postfix verify デーモンによってキャッシュされる。 Postfix は有効/無効結果のキャッシュを制御するパラメータ群を持つ。詳細 は verify(8) マニュアルページ参照。
address_verify_map (NOTE: 単数) 設定パラメータはオプションの永続的な送信者アドレス検証結 果データベースを指定する。ファイルを指定しない場合は、全てのアドレス検 証情報は "postfix reload" または "postfix stop" 後に失われる。
あなたの /var ファイルシステムに十分な領域がある場合、次を試みよ:
/etc/postfix/main.cf: # Note: ハッシュファイルはここでは避け、代わりに btree を使用せよ。 address_verify_map = btree:/var/mta/verify
NOTE: 空き領域がなくなりそうなファイルシステム中にこのファイルを置 いてはいけない。アドレス検証テーブルが壊れると、世界は終わり、あなたは 次のセクションで述べるように手でそれを修正しなければならない。その間、 あなたは SMTP 経由ではメールを受信できない。
verify(8) デーモンプロセスはデータベー スが存在しない場合、新しいデータベースを生成し、chroot jail に入る前そ して root 権限を破棄する前に、ファイルをオープン/生成する。
verify(8) マニュアルページは、リフレッ シュされることが必要となる前に情報がキャッシュに残る期間と、期限切れに なる前に情報が "unrefreshed" で残ることができる期間を制御するパラメー タを説明している。Postfix は、正の結果(アドレスが受け入れられた)と負の 結果(アドレスが拒否された)異なる制御を使用する。
今すぐには、アドレス検証データベースを管理するためのツールは提供さ れない。ファイルが大きくなり過ぎたり、ファイルが壊れたりした場合は、手 動でファイルをリネームまたは削除して、"postfix reload" を実行すること ができる。新しい verify デーモンプロセスは新しいデータベースを生成する。
デフォルトでは、Postfix はアドレス検証調査メッセージを通常メールと 同じ経路を経由して送信する。通常、それがもっとも確実な結果を提供するた めである。あなた自身の SMTP ポートに接続して、ローカルアドレスを検証す ることは良いことではない; それは全ての種類のメーラーループ警告のきっか けとなる。あなたのマシンが最良の MX ホストである宛先についても同様であ る: 隠れたドメイン, 仮想ドメイン等。
しかし、いくつかのサイトは複雑なインフラを持つ。それは、メールがイ ンターネットに直接送られず、代わりに、中継する relayhost に与えられる。これはア ドレス検証で問題である。なぜなら、リモートのインターネットアドレスは Postfix がリモートの宛先に直接アクセスできる時だけ検証可能だからである。
この理由より、Postfix は、アドレス検証調査メッセージを配送するとき に、経路パラメータを無効にすることができる。
最初に、 address_verify_relayhost パラメータは relayhost 設定を無 効にすることができ、 address_verify_transport_maps パラメータは transport_maps 設定を無効にできる。
次に、各アドレスクラスは、以下に示すテーブルのように、メッセージ配 送トランスポートのアドレス検証版を与えられる。アドレスクラスは ADDRESS_CLASS_README ファイルに定 義されている。
デフォルトでは、アドレス調査の配送制御パラメータは、通常メール配送 制御のパラメータと同じ値を持つ。
代表的なシナリオでは、アドレス検証調査ではrelayhost 設定を無効し、それ以外 は全てをそのままにしておく:
/etc/postfix/main.cf: relayhost = $mydomain address_verify_relayhost = ...
ネットワークアドレス変換(NAT)装置の裏のサイトは、正しいホスト名情報 を送信する、別のSMTP クライアントを使用する必要がある。
/etc/postfix/main.cf: relayhost = $mydomain address_verify_relayhost = address_verify_default_transport = direct_smtp /etc/postfix/master.cf: direct_smtp .. .. .. .. .. .. .. .. .. smtp -o smtp_helo_name=nat.box.tld
調査メッセージが通常メールと同じ経路を辿らない時に、矛盾が発生する。 たとえば、通常経路を辿る時にメッセージは受け付けられ、強制経路を辿る時 に同じ調査メッセージが拒否される。反対のことが発生するが、これはおそら く少ないだろう。