Postfixアドレス検証方法


警告 警告 警告

このドキュメント内に記述されている送信者/受信者アドレス検証機能は、 流量が少ないサイトだけに敵している。高負荷下では性能は不十分であり、あ なたのサイトがいくつかのプロバイダのブラックリストに載るかもしれない。 詳細は後述の"アドレス検証の制限"節を参照。

Postfixアドレス検証があなたにしてくれること

アドレス検証は、送信者(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_countaddress_verify_poll_delay パラメータで変更可能である。詳細は postconf(5) 参照。

アドレス検証の制限

受信者アドレス検証

前に述べたように、受信者アドレス検証は、全ての正しい受信者アドレス のリストを持たないメール中継ホストで、配送不可能な受信者へのメールをブ ロックするために有用であるだろう。これは 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ドメインからのメールについての送信者アドレス検証

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 ファイルに定 義されている。

ドメインリスト 通常配送 検証配送
mydestination local_transport address_verify_local_transport
virtual_alias_domains (該当しない) (該当しない)
virtual_mailbox_domains virtual_transport address_verify_virtual_transport
relay_domains relay_transport address_verify_relay_transport
(該当しない) default_transport address_verify_default_transport

デフォルトでは、アドレス調査の配送制御パラメータは、通常メール配送 制御のパラメータと同じ値を持つ。

調査経路の強制の例

代表的なシナリオでは、アドレス検証調査では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

調査経路の強制の制限

調査メッセージが通常メールと同じ経路を辿らない時に、矛盾が発生する。 たとえば、通常経路を辿る時にメッセージは受け付けられ、強制経路を辿る時 に同じ調査メッセージが拒否される。反対のことが発生するが、これはおそら く少ないだろう。