スパム作成者や電子メール詐欺犯は、多くの場合、不正なドメイン名や電子メールアドレスを使用するか、または適正なドメイン名や電子メールアドレスを使用して、知っている人物や会社からメッセージが届いたと思い込ませることにより、電子メールを偽造します。たとえば、スパム発信者は president@whitehouse.gov のようなアドレスから電子メールを送信し、それを受信したユーザーは本当にそのアドレスからメールが届いたと思い込む可能性があります。電子メールを偽造することで、ユーザーに迷惑メッセージを開かせたり、虚偽の公共機関に情報を提供させることができます。また、スパム発信者は、RBL のリストに登録されていない適正なドメインから電子メールを送信することを好みます。
Sender Policy Framework (SPF) は、SMTP 対話処理中に、偽造電子メールを検出して拒絶する技術です。SPF は具体的には、ホストがそのドメイン名を使用できることを、ドメインがホストに対して明示的に認可できるようにするプロトコルです。加えて、この認可をチェックするように受信側ホストを設定することができます。SPF ではこのようなしくみにより、偽造電子メールの数を大幅に減らすことができます。
Messaging Server からメッセージが届くと、MTA は SPF クエリーを実行して、そのアドレスが本当にそのアドレス上のドメインに由来するものかどうかを判定します。SPF クエリーは、メッセージのドメイン (domain) に属する TXT レコードを DNS に問い合わせます。domain は、HELO または EHLO (spfhelo チャネルキーワードが使用された場合) の引数として指定されたドメイン名か、MAIL FROM: コマンドで指定されたオリジネータのアドレス内のドメイン名(通常は @ 文字のあとの部分) のいずれかです。ドメイン名が指定されていないか、使用できない場合は、HELO/EHLO で指定されたドメインが domain として使用されます。ほとんどの ISP は、自社のドメインに一致する IP アドレスの公式リストを配布しています。IP アドレスがドメイン名に一致しない場合、そのメッセージは偽造されたとみなされます。
DNS に問い合わせる前に、SPF_LOCAL マッピングテーブルに一致するドメインがあるかどうかを確認します。一致するドメインがある場合は、それが最初に使用されます。
マッピングテーブルで見つかったレコードに redirect=domain 節が含まれている場合は、ドメインへのリダイレクションが DNS クエリーとして実行され、マッピングファイルの冗長な再帰的チェックが行われなくなります。
取得される TXT レコードの例を次に示します。
v=spf1 +mx a:colo.siroe.com/28 -all
v=spf1 トークンは、この RFC によってサポートされる SPF レコードに必ず指定されます。
+mx は、MX レコードから domain を検索し、この SMTP 接続のソース IP アドレスが domain に関する MX クエリーの結果として得られたいずれかの IP アドレスに一致するかどうかを確認するように指示しています。+ は、一致した場合にこの結果が Pass になることを意味します。
a:colo.siroe.com/28 は、A レコードから colo.siroe.com を検索し、この SMTP 接続のソース IP アドレスが A レコードで指定されたのと同じ CIDR サブネット内にあるかどうかを (255.255.255.240 でマスクした) 28 ビットのみを比較することによって確認するように指示しています。修飾子文字が指定されていないので、一致した場合は結果が Pass になることを意味するデフォルトの + が使用されます。
最後の -all はほかのすべてに一致し、その結果は Fail になります。SPF レコードの詳細については、RFC 4408 (http://www.ietf.org/rfc/rfc4408.txt) を参照してください。
SPF 処理の結果には、いくつかの種類があります。次の表に、処理の結果とその説明を示します。
表 15–1 SPF 処理の結果
結果 |
説明 |
---|---|
Pass |
検索が成功しました。つまり、SPF レコードが見つかり、そのレコードによって、発信元のシステムが domain の使用を認可されていることが検証されました。 |
Fail |
検索で一致する SPF レコードが見つかりましたが、そのレコードによって、SMTP クライアントに対する SMTP トランザクション中の domain の使用の認可が明示的に拒否されました。Sun の SPF 実装のデフォルト動作では、5xx 応答によって SMTP コマンドを拒否します。 |
SoftFail |
検索で一致する SPF レコードが見つかり、そのレコードによって、SMTP クライアントに対する domain の使用の認可も拒否されましたが、この拒否は厳密なものではなく、そのレコードは完全な失敗を指示していません。Sun の実装のデフォルト動作では、メッセージを受け入れますが、Sieve 処理中などのその後の評価では、Received-SPF: ヘッダー内の SoftFailに注意してください。 |
Neutral |
SPF レコードは、SMTP クライアントによる domain の使用の認可に関して何も要求していません。メッセージは受け入れられます。仕様では、Neutral を次の None と同じように処理することが要求されています。 |
None |
一致する SPF レコードが見つからなかったため、SPF 処理は実行されませんでした。 |
PermError |
SPF 処理中に恒常的エラーが発生しました。たとえば、SPF レコードに構文エラーがあった場合や、(include: 機構や redirect= 修飾子による) 入れ子の SPF レコードを処理中に DNS 障害が発生した場合や、入れ子の SPF レコードを処理中に SPF 処理に関する制限値を超えた場合などです。デフォルトの動作では、5xx 応答によって SMTP コマンドを拒否します。 |
TempError |
SPF 処理中に一時的エラーが発生しました。これは、ほとんどの場合、SPF レコード照会時の DNS タイムアウトが原因です。デフォルトの動作では、4xx 応答によって SMTP コマンドを拒否します。 |
SPF 処理の完了後、SPF 処理の結果をドキュメント化するメッセージに Received-SPF: ヘッダーが書き込まれます。このヘッダーは、その後の検討における Sieve 処理の中で照会できます。option.dat ファイルの MTA オプション MM_DEBUG が有効 (>0) になっている場合は、拡張デバッグが利用可能です。
SPF は、スパムに対抗するためのツールの 1 つにすぎず、必ずしもすべての問題を解決するわけではありません。スパム発信者にとって、ドメインを作成し、そのドメインを適正なものに見せかける SPF TXT レコードを追加することはきわめて簡単です。一方、SPF は既存の ISP から送信された偽造電子メールを検出するのに非常に効果的ですが、多くの TXT レコードでは SPF の処理結果が Fail になりません。
あらゆるメッセージに対して DNS クエリーが必要になるため、非常に高速な DNS サーバーをシステムに設置することが重要です。
SPF テクノロジを設定するための手順は、次の 2 つです。
受信 TCP チャネルにチャネルキーワードを配置します。受信 TCP チャネルは、一般には tcp_local チャネルですが、tcp_local から別のチャネルへのチャネル切り替えを許可している場合は、ほかのチャネルが存在する可能性があります。表 15–2 を参照してください。
option.dat ファイルのオプションを設定します。表 15–3 を参照してください。
この節では、SPF チャネルキーワードと SPF MTA オプションに関する参照情報を示します。SPF サポートは、受信 tcp_* チャネル (一般には tcp_local) に適用される 4 つのチャネルキーワードによって実装されます。次の表に、キーワードとその説明を示します。
表 15–2 SPF キーワード
キーワード |
説明 |
---|---|
spfnone |
SPF 処理を無効にします。 |
spfhelo |
HELO または EHLO への引数として指定されたドメイン名に関して、SPF 処理を有効にします。 |
spfmailfrom |
MAIL FROM: の受信後にオリジネータのエンベロープアドレスとして指定されたドメイン名に関して、SPF 処理を有効にします。 |
spfrcptto |
RCPT TO: の受信後にオリジネータのエンベロープアドレスとして指定されたドメイン名に関して、SPF 処理を有効にします。spfmailfrom と同じ処理ですが、RCPT TO: コマンドが発行され、宛先が有効な宛先であることが別の方法で確認されるまで、SMTP トランザクション内で処理が保留されます。 |
spfmailfrom と spfrcptto は競合するキーワードなので、これら 2 つのキーワードのうち、いずれか一方のみをチャネルに指定するようにしてください。ただし、spfmailfrom と spfrcptto のいずれかを spfhelo と組み合わせて使用することにより、両方の種類の SPF チェックを実行できます。
追加サポートにより、SPF 処理に関する制限値を設定し、Fail、SoftFail、PermError、TempError などの SPF の各種処理結果に関して、SMTP コマンドを受け入れるか、4xx 応答を伴うエラー (一時的エラー) にするか、5xx 応答を伴うエラー (恒常的エラー) にするかを制御できます。
option.dat 内の次の MTA オプションを使用して、SPF 処理に関する制限値を設定できます。
表 15–3 SPF 制限オプション
オプション |
説明 |
---|---|
SPF_MAX_RECURSION |
include: または redirect= による SPF レコードの入れ子の許容反復回数を指定します。この制限値を超えた場合の処理結果は、PermError になります。 デフォルト: 10 (RFC による規定) |
SPF_MAX_DNS_QUERIES |
DNS 検索を必要とする機構または修飾子 (include:、a:、mx:、ptr:、exists:、redirect=、exp= を含む) の数を指定します。この制限値は実際の DNS 検索の数をカウントするものではないため、1 つの機構によって複数の DNS クエリーが発生する可能性もあります。この制限値を超えた場合の処理結果は、PermError になります。 デフォルト: 10 (RFC による規定) |
SPF_MAX_TIME |
SPF 処理が完了するまでの許容時間 (秒数) を指定します。この値を超えた場合の処理結果は、TempError になります。デフォルト値は、RFC の規定より大きくなっています。 デフォルト: 45 |
さらに、option.dat 内の次の MTA オプションを設定することにより、SPF の処理結果 Fail、SoftFail、PermError、および TempError に対する SMTP サーバーの動作を制御できます。これらの処理結果のそれぞれに対して、SMTP サーバーは 2xx (成功)、4xx (一時的エラー)、または 5xx (恒常的エラー) の応答を返信できます。また、Fail と SoftFail に関して、MTA は「all」機構の結果として得られた SPF 処理結果とそれ以外の方法で明示的に参照された一致を区別できます。これにより、ユーザーは特定の結果と SPF レコードのデフォルトの結果を見分けることができます。これらのオプションの有効な値は 2、4、または 5 です。2、4、または 5 という値は、特定の SPF ステータスを取得した結果として SMTP サーバーから受信される 2xx、4xx、または 5xx の応答に対応しています。したがって、たとえば、SPF_SMTP_STATUS_FAIL=2 で、SPF レコードが「-a:192.168.1.44」(ユーザーの IP アドレス) で明示的にメールをブロックしている場合は、5xx 応答ではなく、「250 OK」でこのアドレスが受け入れられます。
表 15–4 SPF の失敗およびエラーのオプション
オプション |
説明 |
---|---|
SPF_SMTP_STATUS_FAIL |
SPF レコードの一致が「-all」以外の「-」付きの機構である場合に使用されます。 デフォルト: 5 |
SPF_SMTP_STATUS_FAIL_ALL |
一致した機構が「-all」である場合に使用されます。 デフォルト: 5 |
SPF_SMTP_STATUS_SOFTFAIL |
SPF レコードの一致が「~all」以外の「~」付きの機構である場合に使用されます。 デフォルト: 2 |
SPF_SMTP_STATUS_SOFTFAIL_ALL |
一致した機構が「~all」である場合に使用されます。 デフォルト: 2 |
SPF_SMTP_STATUS_TEMPERROR |
一時的エラー (通常は DNS 処理の問題に関連するもの) が発生した場合に使用されます。 デフォルト: 4 |
SPF_SMTP_STATUS_PERMERROR |
恒常的エラー (通常は、SPF 処理中に見つかった構文エラーやその他の技術上のエラーによるもの) が発生した場合に使用されます。これは、ローカル以外のエラーが原因で発生します。 デフォルト: 5 |
このテストユーティリティーを使用して、SPF 処理をテストできます。
spfquery は、SPF の設定をテストするものではありません。SPF 処理を有効にした場合に返される可能性がある結果をテストするものです。
要件: Messaging Server のバイナリを実行し、そのライブラリにアクセスするためのアクセス権を持っているユーザーとして実行する必要があります。
場所: msg-svr-base/sbin/
spfquery [-i ip-address] [-s sender-email] [-h helo-domain] [-e none | neutral | pass | fail | temperror | permerror] [-v] [-V] [?] domain |
次の表に、spfquery のオプションとその説明を示します。
表 15–5 spfquery のオプション
オプション |
説明 |
|
---|---|---|
-i ip address |
SPF クエリーのリモートアドレスとして使用する IP アドレスを指定します。デフォルトは 127.0.0.1 です。このオプションは、--ip-address と表記することもできます。 |
|
-s domain |
MAIL FROM: として指定されたとみなして使用する電子メールアドレスです。デフォルトはpostmaster@domain です。このオプションは、--sender と表記することもできます。 |
|
-h helo-domain |
HELO ドメインとして指定されたとみなすドメイン名です。このドメインは、それ自体は検証されませんが、マクロ処理の補足的情報として提供されます。デフォルト値は、domain に指定された値と同じになります。このオプションは、--helo-domain と表記することもできます。 |
|
-e result |
spfquery は、SPF 処理の結果を予想される結果と比較します。結果が予想と異なる場合は、メッセージが出力され、0 以外の復帰状態とともに spfquery が終了します。処理結果は、none、neutral、pass、fail、softfail、temperror、permerror のいずれかになります。このオプションは、--expect と表記することもできます。 |
|
-v |
SPF 処理中の冗長出力を有効にします。このオプションは、--verbose と表記することもできます。 |
|
-V |
SPF ライブラリの現在のバージョンを出力します。このオプションは、--version と表記することもできます。 |
|
|
ここに示した使用方法についての情報を表示します。このオプションは、--help と表記することもできます。 |
# /opt/SUNWmsgsr/sbin/spfquery -v -i 192.168.1.3 11.spf1-test.siroe.com Running SPF query with: IP address: 192.168.1.3 Domain: 11.spf1-test.siroe.com Sender: postmaster@11.spf1-test.siroe.com (local-part: postmaster) HELO Domain: 11.spf1-test.siroe.com 15:30:04.33: ---------------------------------------------------------------- 15:30:04.33: SPFcheck_host called: 15:30:04.33: source ip = 192.168.1.3 15:30:04.33: domain = 11.spf1-test.siroe.com 15:30:04.33: sender = postmaster@11.spf1-test.siroe.com 15:30:04.33: local_part = postmaster 15:30:04.33: helo_domain = 11.spf1-test.siroe.com 15:30:04.33: 15:30:04.33: Looking up "v=spf1" records for 11.spf1-test.siroe.com 15:30:04.35: DNS query status: Pass 15:30:04.35: "v=spf1 mx:spf1-test.siroe.com -all" 15:30:04.35: 15:30:04.35: Parsing mechanism: " mx : spf1-test.siroe.com" 15:30:04.35: Assuming a Pass prefix 15:30:04.35: Processing macros in spf1-test.siroe.com 15:30:04.35: Comparing against 192.168.1.3 15:30:04.35: Looking for MX records for spf1-test.siroe.com 15:30:04.41: mx02.spf1-test.siroe.com: 15:30:04.41: 192.0.2.22 - No match 15:30:04.41: 192.0.2.21 - No match 15:30:04.41: 192.0.2.20 - No match 15:30:04.41: 192.0.2.23 - No match 15:30:04.41: mx01.spf1-test.siroe.com: 15:30:04.42: 192.0.2.13 - No match 15:30:04.42: 192.0.2.11 - No match 15:30:04.42: 192.0.2.12 - No match 15:30:04.42: 192.0.2.10 - No match 15:30:04.42: mx03.spf1-test.siroe.com: 15:30:04.42: 192.0.2.32 - No match 15:30:04.42: 192.0.2.30 - No match 15:30:04.42: 192.0.2.31 - No match 15:30:04.42: 192.168.1.3 - Matched 15:30:04.42: Mechanism matched; returning Pass 15:30:04.42: 15:30:04.42: Parsing mechanism: "- all : " (not evaluated) 15:30:04.42: 15:30:04.42: SPFcheck_host is returning Pass 15:30:04.42: ---------------------------------------------------------------- |