スパムフィルターの仕組み
すべてのメールが通過するフィルタリングパイプライン — 接続時のチェックから機械学習分類器まで — と大手プロバイダーがどのようにしてメッセージをインボックスに届けるかを決定する方法。
フィルタリングパイプライン
スパムフィルタリングは単一のチェックではありません。SMTP トランザクションのすべての段階と配信後にメッセージを評価するマルチステージパイプラインです。各ステージはメッセージを拒否、遅延、またはフラグ付けできます。ステージはおおよそこの順序に従います:
- 接続時のチェック — IP レピュテーション、ブロックリスト、レート制限
- エンベロープチェック — 送信者確認、受信者検証
- 認証チェック — SPF、DKIM、DMARC 評価
- ヘッダー分析 — 構造検証、一貫性チェック
- コンテンツ分析 — 本文スキャン、URL チェック、添付ファイル検査
- レピュテーションスコアリング — すべてのシグナルに対して重み付けされた送信者レピュテーション
- 機械学習分類 — ベイズおよびニューラルネットワークモデル
- 配信後のシグナル — エンゲージメント、ユーザーアクション、苦情フィードバック
Gmail や Outlook などのプロバイダーの最新のスパムフィルタはこれらのほとんどを並行して実行し、インボックス配置を決定する複合スコアを生成します。ただし、これらをパイプラインとして理解することは、各レイヤーがどのように貢献するかを説明するのに役立ちます。
ステージ 1:接続時のチェック
メールコンテンツの 1 バイトが送信される前に、受信サーバーは接続する IP アドレスを評価します。
-
ブロックリストクエリ:サーバーは、Spamhaus SBL/XBL、Barracuda BRBL、SpamCop などの DNS ベースのブロックリスト(DNSBL)に対して IP をチェックします。Spamhaus へのリストは
550レスポンスで即座に拒否される可能性があります。 - IP レピュテーションキャッシュ:大手プロバイダーは独自の内部レピュテーションデータベースを保持しています。そのプロバイダーでスパムを送信した履歴を持つ IP は、外部ブロックリストステータスに関係なく拒否またはスロットルされる可能性があります。
- 逆引き DNS(FCrDNS):サーバーは、接続する IP に有効な PTR レコードがあるかどうか、およびその PTR レコードが同じ IP に逆解決するかどうか(前方確認済み逆引き DNS)を確認します。有効な rDNS がないサーバーはしばしば完全に拒否されます。
-
レート制限:IP からの異常な量は スロットリングをトリガーします。サーバーは
421(後で再度試してください)で応答して送信者を遅くします。
550 5.7.1 Service unavailable; client [198.51.100.42] blocked
using zen.spamhaus.org
接続時のチェックは最もコスト効率的なフィルタです。接続時に拒否することで、サーバーはメッセージ全体の処理を回避できます。
ステージ 2:エンベロープチェック
SMTP エンベロープフェーズ(MAIL FROM および RCPT TO)中に、追加のチェックが実行されます:
- 送信者の存在:一部のサーバーはコールバック確認を実行し、送信者の MX に接続して MAIL FROM アドレスが実際に存在するかどうかをチェックします。これは偽造されたバウンスアドレスをキャッチします。
-
受信者検証:存在しない受信者は即座に拒否されます(
550 5.1.1 User unknown)。単一の送信者から無効な受信者の高い割合はスロットリングまたはブロックをトリガーします。 -
グレイリスティング:サーバーは未知の送信者/IP/受信者の組み合わせからの最初の配信試行を一時的に拒否します(
450)。正当なサーバーは数分後に再試行します。多くのスパムツールはそうしません。
ステージ 3:認証チェック
メッセージコンテンツが到着すると、サーバーはメール認証を評価します:
- SPF:送信 IP はドメインの公開 SPF レコードと一致していますか?
- DKIM:暗号署名は有効ですか?署名ドメインは From: ヘッダーと一致していますか?
- DMARC:SPF または DKIM のいずれかが From: ドメインへのアラインメントで成功していますか?ドメインは何のポリシーを公開しましたか?
認証結果はAuthentication-Results ヘッダーに記録されます:
dkim=pass header.i=@example.com header.s=mtg;
spf=pass (google.com: 198.51.100.42 is permitted) smtp.mailfrom=example.com;
dmarc=pass (p=REJECT) header.from=example.com
認証は前提条件であり、保証ではありません。SPF、DKIM、DMARC をパスしても、メッセージがインボックスに届くことは保証されません。スパマーは有効な認証を設定することもできます。しかし、認証に失敗することは、メッセージをスパムまたは拒否にルーティングすることがほぼ確実である強い負のシグナルです。
ステージ 4:ヘッダー分析
スパムフィルタはメッセージヘッダーの異常を検査します:
- From:/Reply-To: の不一致:From: と Reply-To: に異なるドメインがあるとフィッシングを示す可能性があります。
-
欠落または形式が正しくないヘッダー:欠落している
Date:またはMessage-ID:ヘッダーは、メッセージが正当なメールクライアントではなく粗雑なスパムソフトウェアによって生成されたことを示唆しています。 - Received: チェーン分析:Received: ヘッダーのシーケンスは、メッセージがどのように移動したかについての一貫性のあるストーリーを伝える必要があります。偽造された Received: ヘッダーまたは不可能なタイムスタンプは警告信号です。
- 過度な受信者:To: ヘッダーに数百のアドレスがあるか、Bcc が重い送信パターンは、一括的な未要請メールの特性です。
- ヘッダーインジェクション:ヘッダー値の改行または異常な文字は、ヘッダーインジェクション攻撃の試みを示す可能性があります。
ステージ 5:コンテンツ分析
コンテンツ分析はメッセージ本体、HTML 構造、および添付ファイルを検査します。
テキストおよび HTML 分析
- キーワードおよびフレーズスコアリング:特定のフレーズ(「今すぐ行動」、「期間限定」、「ここをクリック」)はスパムスコアに貢献します。単一のフレーズはフィルタリングをトリガーしません — 複数のシグナルの蓄積です。
- HTML とテキストの比率:ほぼテキストがない画像のみのメールは疑わしいです。ほぼ見えないテキスト量と大きな隠されたテキストブロックを含むメールも同様です。
-
隠されたテキスト:白い背景に白いテキスト、ゼロピクセルフォント、または CSS
display:noneコンテンツは、フィルタが特に検出する古典的なスパムテクニックです。 - 画像のみのメール:テキストのない 1 つの大きな画像のみで構成されるメッセージは、テキストベースのフィルタを回避するために歴史的に使用されていました。最新のフィルタはこのパターンにフラグを立てます。
- 難読化:文字置換(「fr33」、「v1agra」)、Unicode ルックアライク、または Base64 エンコード済みコンテンツを使用してスパムキーワードを隠す。フィルタは分析前にコンテンツをデコードして正規化します。
URL およびリンク分析
- URL ブロックリスト:リンクは URIBL、SURBL、Google Safe Browsing、およびプロバイダー固有のデータベースに対してチェックされます。既知の悪いドメインへの単一のリンクでもメッセージ全体がフラグを立てられる可能性があります。
- URL 短縮サービス:短縮 URL(bit.ly、tinyurl)は最終的な目的地に解決されてチェックされます。URL 短縮サービスの過度な使用自体は負のシグナルです。
- リンクテキストの不一致:「www.bank.com」と言うアンカータグが「evil.example.com」にリンクしているのはフィッシングシグナルです。
- リンクが多すぎる:異なるドメインへの多数のリンクがあるメールはスパムまたはアフィリエイトマーケティングメッセージを示唆しています。
- 新規登録ドメイン:過去数日以内に登録されたドメインへのリンクは疑わしいです。
添付ファイル分析
-
実行可能ファイル:
.exe、.scr、.batおよびそれに類する実行可能な添付ファイルはほぼ常にブロックまたは隔離されます。 -
パスワード保護されたアーカイブ:パスワード付きの
.zipファイルはスキャンを防止し、疑いを持って扱われます。 -
マクロ有効ドキュメント:
.docm、.xlsmファイルはマルウェアの一般的なベクトルです。 -
ファイルタイプの不一致:
.pdf拡張子を持つファイルですが、バイナリヘッダーに実行可能なコンテンツがあるのはフラグを立てられます。
ステージ 6:レピュテーションスコアリング
上記のすべてのシグナルはレピュテーションモデルに供給されます。これはIP およびドメインレピュテーションが最大の影響を持つ場所です。
レピュテーションは乗数として機能します。優れたレピュテーションを持つ送信者は利益の疑い — 境界線上のコンテンツがインボックスに配信されます。貧しいレピュテーションを持つ送信者は利益がありません — きれいなコンテンツでもフィルタリングされる可能性があります。これはレピュテーションがコンテンツよりも重要である理由です。
プロバイダーはシグナルを異なる方法で重み付けします:
- Gmailはドメインレピュテーションとユーザーエンゲージメントに重点を置いています。Google Postmaster Tools はドメインレピュテーションを 4 つのレベルに分類します:高、中、低、悪い。
- Outlook.comは IP レピュテーションに大きく重みを置き、投票者ユーザーパネルからの送信者レピュテーションデータ(SRD)に依存しており、メッセージをジャンクまたは非ジャンクと評価します。
- Yahooは IP およびドメインレピュテーションの組み合わせを使用し、フィードバックループプログラムからの苦情率に大きく重みを付けます。
ステージ 7:機械学習分類
最新のスパムフィルタは数十億のメッセージで訓練された機械学習モデルを使用しています。
ベイズフィルタリング
基本的なテクニック。ベイズフィルタは、既知のスパムコーパスと既知のハムコーパスにおける単語(トークン)の頻度に基づいて、メッセージがスパムである確率を計算します。「invoice」という単語がハムの 80%に出現し、スパムの 5%に出現する場合、それは強いハムシグナルです。「unsubscribe」が「おめでとうございます! あなたは勝ちました!」と並んで現れる場合、結合確率はスパムにシフトします。
ベイズフィルタは適応的です — 新しいメッセージから学びます。ユーザーがメッセージをスパムとしてマークすると、フィルタは確率テーブルを更新します。このユーザーごとの学習は、同じメッセージがあるユーザーのスパムとしてフィルタリングされ、別のユーザーのインボックスに配信される理由です。
ニューラルネットワークモデル
大手プロバイダーは現在、個々の単語頻度をはるかに超えた深い学習モデルを使用しています。これらのモデルは以下を評価します:
- メッセージの意味内容(キーワードだけではなく)
- HTML の構造パターン
- 時間的パターン(送信時刻、頻度、バースト)
- 送信者と受信者の関係(以前にメールを交換したことがありますか?)
- 既知のスパムキャンペーンへの類似性(クラスター分析)
たとえば、Google のスパムフィルタは、false positive レートを 0.05% 未満に保ちながら、99.9% 以上のスパムをインボックスに到達する前に処理します。これは大規模な機械学習でのみ可能です。
ステージ 8:配信後のシグナル
フィルタリングはメッセージがインボックスに到達したときに停止しません。配信後のシグナルは配置を継続的に改善します:
- 「スパムとして報告」クリック:最も直接的な負のシグナル。多くの受信者が送信者からのメッセージをスパムとして報告する場合、その送信者からの将来のメッセージはすべての受信者でフィルタリングされる可能性が高くなります。
- 「スパムではない」/ジャンクから復刻:メッセージをスパムからインボックスに移動することは、フィルタが間違いを犯したことをフィルタに伝える正のシグナルです。
- 読み込み/開く動作:一貫して開かれて読まれるメッセージは価値を示唆しています。読まずに削除されるメッセージはその反対を示唆しています。Gmail はこれを大いに使用しています。
- 返信動作:メッセージに返信することは非常に強い正のシグナルです — スパムに返信しません。
- 連絡先リスト:送信者が受信者のアドレス帳にある場合、メッセージはほぼ常にインボックスに配信されます。
- 滞留時間:受信者がメッセージを読むのに費やした時間。
エンゲージメントベースのフィルタリングはフィードバックループを作成します:新しいサブスクライバーへの初期メッセージが開かれない場合、将来のメッセージはフィルタリングされる可能性が高くなります。これが IP warming アドバイスが常に最もエンゲージされた受信者から始めるよう言う理由です。
大手プロバイダーの違い
Gmail
Gmail のフィルタリングは最も高度で、最もエンゲージメント主導型です。主な特性:
- ドメインレピュテーションは IP レピュテーションよりも重みを置きます。
- エンゲージメントシグナル(開く、返信、スパム報告)はインボックス配置に大きく影響します。
- Gmail は一部のメールをタブ(Primary、Promotions、Social、Updates)に分類しており、これはスパムフィルタリングとは別ですが、可視性に影響します。
- 2024 年 2 月以降、Gmail は大量送信者(Gmail への 5000 メッセージ以上/日)に SPF、DKIM、DMARC での認証、ワンクリック登録解除の提供、スパム苦情率を 0.3% 以下に保つことを要求しています。
Outlook.com / Microsoft 365
- IP レピュテーションは大きく重み付けされます。Microsoft は大規模な内部 IP レピュテーションデータベースを保持しています。
- 送信者レピュテーションデータ(SRD)パネル — メッセージが望まれているかどうかに投票する実際のユーザー — フィルタリング決定に直接供給されます。
- Exchange Online Protection(EOP)は接続フィルタリング、ポリシーフィルタリング、およびコンテンツフィルタリングを含む複数のレイヤーを使用します。
- Microsoft の SmartScreen フィルタは既知のスパムおよびフィッシングに対して訓練されたモデルに対してメッセージ特性を分析します。
Yahoo / AOL
- Yahoo のフィードバックループからの苦情率は主要なシグナルです。
- Yahoo は DMARC
p=rejectの初期採用者であり、それを厳密に実施しています。 - Yahoo は 2024 年に Gmail に参加し、大量送信者認証とワンクリック登録解除が必要です。
スパムフィルタのテストとデバッグ
メッセージがスパムに到達する場合、原因を診断するために体系的なアプローチが必要です。
フィルタヘッダーの読み込み
ほとんどのスパムフィルタはメッセージにヘッダーを追加してその判定を明らかにします。テストメッセージを自分自身に送信し、生のヘッダーを検査します:
X-Gm-Message-State: [internal state data]
X-Google-DKIM-Signature: [Google's own signature]
Authentication-Results: mx.google.com;
spf=pass ... dkim=pass ... dmarc=pass
# Microsoft は以下を追加します:
X-Microsoft-Antispam: BCL:0;
X-MS-Exchange-Organization-SCL: 1
# SCL(スパム信頼レベル):-1=安全、0-4=配信済み、5-6=ジャンク、7-9=ブロック
# SpamAssassin(オープンソース、広く使用)は以下を追加します:
X-Spam-Status: No, score=-1.2 required=5.0
tests=DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,SPF_PASS,
RCVD_IN_DNSWL_LOW autolearn=ham
これらのヘッダーは、適用されたテストと結果が正確にわかります。Authentication-Results ヘッダーは標準化されています。スパムスコアヘッダーはフィルタ固有です。
シードテスト
複数のプロバイダー(Gmail、Outlook、Yahoo、企業サーバー)のアカウントにテストメッセージを送信し、インボックスまたはスパムに到達するかどうかを確認します。これは、主要なキャンペーンまたはインフラストラクチャの変更の前に行ってください。いくつかのサードパーティサービスは、数十のプロバイダー全体のテストアドレスのパネルでこれを自動化します。
変数の分離
メッセージがスパムに到達する場合、トリガーを識別するために一度に 1 つの変数を変更します:
- 異なるドメインから同じコンテンツを送信します — それが配信されると、問題はコンテンツではなくレピュテーションです。
- 同じドメインから異なるコンテンツを送信します — それが配信されると、問題はコンテンツ固有です。
- 異なる IP から同じプロバイダーに送信します — それが配信されると、問題は IP レピュテーションまたはブロックリストです。
- すべてのリンクを削除して再度送信します — それが配信されると、リンクの 1 つがブロックリストに登録されています。
何が悪く なる可能性があります
正当なメールがスパムとしてフィルタリングされる
トランザクションメール(パスワードリセット、注文確認)が同じドメインのマーケティングメールがドメインレピュテーションを低下させたためにスパムに到達します。修正:トランザクションとマーケティングメールを異なるサブドメインに分離して、マーケティングからのレピュテーション損害が重要なトランザクション配信に影響しないようにします。
正当なコンテンツでのコンテンツトリガー
請求書メールに「payment」という単語と添付ファイルとリンク — すべて正当ですが、組み合わせは高くスコア付けされます。修正:強力な認証とレピュテーションを確保して、コンテンツシグナルが信頼できる送信者のコンテキストで評価されるようにします。
エンゲージメント死のスパイラル
非アクティブなサブスクライバーの大量リストに送信します。ほぼ誰もメールを開きません。低いエンゲージメント率が後続のメッセージをスパムに移動させます。さらに少ない人々がそれを見ます。開く率はさらに低下します。より多くのメッセージはスパムになります。修正:非アクティブなサブスクライバーを定期的に削除し、非エンゲージド状態になる前に再エンゲージキャンペーンを使用します。
URL ブロックリスト
メールでリンクされているドメインがブロックリストに登録されます(おそらくトラッキングドメイン、または共有リンク短縮サービス)。そのリンクを含むすべてのメールはフラグが立てられます。修正:トラッキングリンクに自分のドメインを使用し、リンクレピュテーションを監視し、メールで共有 URL 短縮サービスを回避します。
重要なポイント
- スパムフィルタリングは多層です。単一のチェックがインボックス配置を決定します。それは接続、認証、コンテンツ、レピュテーション、およびエンゲージメントシグナルの集合です。
- 認証は必要ですが十分ではありません。SPF/DKIM/DMARC をパスするとインボックス配信が保証されません、しかしそれらに失敗することはほぼスパムまたは拒否を保証します。
- レピュテーションはコンテンツを切り札。境界線上のコンテンツを持つ信頼できる送信者が配信されます。きれいなコンテンツを持つ信頼されない送信者がフィルタリングされます。
- エンゲージメントは新しいフロンティアです。Gmail は特に開く、返信、およびスパム報告を主要なフィルタリングシグナルとして使用します。メールを望む人に送信することは最も効果的な配信性の戦略です。
- 各プロバイダーが異なります。Gmail はエンゲージメント主導型、Outlook は IP 主導型、Yahoo は苦情主導型。それぞれを最適化します。
- メールストリームを分離します。トランザクションとマーケティングメールに異なるサブドメインを使用してレピュテーションを分離します。
- 監視して適応させます。スパムフィルタリングは常に進化しています。昨年機能したことが今日機能しない可能性があります。Postmaster Tools とフィードバックループを使用して情報を得ます。