グレイリスティングによるSPAMメール対策 – j-chkmail


グレイリスティング(グレイリスティング)方式は新たなSPAM/メールウィルス対策技術です。コンテンツフィルタリングを行わないという特徴により、ISPなどの大規模サイトにも適し、高い検出性能を発揮します。

グレイリスティング(Greylisting)とは

グレイリスティングは、ヒューリスティックフィルタやベイジアンフィルタのようなコンテンツフィルタを使用しない、サーバ向けSPAM対策技術。コンテンツフィルタを使用しないため、非常に軽量・高速で、大量のメール処理に向いているのが特徴。

グレイリスティングは、一度、エラーコード4xx(通常451: 一時的な受信不能状態。再送が期待されている)でメールの着信を一時的に拒否したのち、その後一定時間内に再送されてくれば受け付ける。バルクメーラーやワーム等を含むBOTは一般に再送をしないので、迷惑メールやウィルスメールを遮断できるというのがその動作原理。

エンベロップのFrom(送信者URL)とTo(あて先URL)、送信ホストのIPアドレスのみをチェックするため、メール本文のサイズにかかわらず高速処理が可能(これら3つのパラメータを合算したものは「トリプレット」と呼ばれる)。グレイリスティングはこのトリプレットを登録・管理し、トリプレットが登録済みであれば、以降、遮断せず受信する。ただし、所定の期間、同じトリプレットを持つメールがこなければ、そのトリプレットは廃棄される。

グレイリスティング機能を提供するソフトウェア

グレイリスティングの提唱者はEvan Harris氏がリファレンス実装として作成したrelaydelayが知られているが、その他、このリファレンス実装を元に、smfs-grey, Postgrey Rgreyなどいくつかのオープンソースソフトウェアが提案されている。多くはSendmailが提唱するメールフィルタAPI: MiterによるMTA(メールサーバ)との連携を前提にしている。

Milterは、sendmail社によりオープン化されており、現在はPostfixなどsendmail以外の製品でも利用可能だ。独立したコミュニティ milter.orgも存在する。

メンテナンスフリーなSPAM対策技術 – グレイリスティング

ISP、総合大学などのように、「不特定多数」のユーザを大量に抱えているサイトでは、ユーザの合理的な理解・協力を簡単には得にくい。ユーザ毎に面倒なルールメンテナンスが必要であったり、「フォルスポジティブ(誤認=正しいメールを遮断してしまう冤罪)」が発生した場合に管理者の密接な介入が必要であるようなシステムは導入が困難だ。特にISPの場合には、文章や単語の利用は多岐にわたる。一般企業サイトでは迷惑語とするのが当たり前な語彙も、ユーザの立場によってはそうではない。語彙の価値判定を伴うベイジアンフィルタ(例:SpamAssassin)は、ISPでの活用が困難である。大規模サイトの管理者にとって、軽量、ほぼメンテナンスフリーなグレイリスティングは魅力的な方法だ。

グレイリスティングの問題点

メールの遅延

グレイリスティングはメールを遅延させる。一度、トリップレットが登録されてしまえば、それ以降、割合頻繁にメールのやり取りをしていれば遅延は発生しないが、「初対面」のメールは必ず遅延する。実サイトでのテストでは、ほとんどのサイトが平均30分から1時間経過してから再送している。

電子メールはもともとの設計思想に即時性の保障はない。とは言っても、今日多くのユーザが電子メールは直ちに配信されて当たり前と考えている。また、現実のメールの利用形態では、この程度の遅延でも不都合な場合が多々ある。ECサイト、クレジットカード業者のサイトその他で、取引成立や決済完了の通知、ユーザ登録、パスワード通知等の確認メールなどが典型的な例だ。

メールを再送しないホスト

グレイリスティングは、「素性の正しいMTA(メールホスト)は、RFCの推奨する仕様に忠実である」ことを前提にしている。だが、グレイリスティングが依拠している拡張エラーメッセージ(4.X.X)がRFCで定義された以前の仕様に準拠し、グレイリスティングが返す「Temporary failure」のコードを理解せず再送しないメールホストは、まだ、多数現役で活躍している。また、メーリングリストサーバなどは、Bulkメーラー同様に個別のあて先に対しては再送しないものがある。負荷分散されたされたサイトで、再送毎にIPアドレスの異なるホストから送信される場合も、グレイリスティングはそのままでは対応できない。

テストの結果では、「再送しないホスト」は結構多い。老舗の大手プロバイダーほど、このようなホストを抱えている。

大規模サイトでのグレイリスティングの問題対策

ホワイトリスト

一般論では、「ホワイトリストに除外ホストを羅列することにより、グレイリスティングが対応できないメールホストに対しチェックを免除する」という方法が考えられる。B2Bが主な取引形態で取引先が限定できる業態の企業サイトであれば、この方法で多少のカットアンドエラーを経て対応は可能だろう。だが、一日に数十万~数百万通の不特定多数のメールを処理するISPで、このような対策は非現実的だ。

実際、われわれは、一定以上の知名度のあるISP、その他機関のメールホストのアドレスを調査し、充実した(と自分たちには思える)ホワイトリストを作成してみたが、一週間~2週間に一度の割合で、新たなホストの追加を余儀なくされた。お定まりのコースはネットワーク単位の除外だが、メールホストアドレス同様、これもいつ変わるかわからない。また、SPAM対策効果が下がる。

大規模サイトでの利用に耐える対策は、グレイリスティングソフトウェアのホワイトリスティング機能に依る。
##DNSの逆引きの成功を許可条件とすることができる
##DNS逆引きチェックを前提としたDNSのゾーン名(ドメイン名)による許可指定ができる
##MXレコードの存在やSPFチェックの結果を許可条件とすることができる

以上のような、ホストアドレスに依存しない条件設定ができれば、ホワイトリストによる対応は大分現実的なものとなる。

ワイルドカードに対応したトリプレット

負荷分散されたメールサイトには、メールの再送が常に同じIPアドレスから行われるとは限らないものがある。このような事例に対応する方法として、トリプレットの設定に、以下のような自由度があることが望ましい。
##メールホストについて、FQDNでの記録や、FQDNのドメイン部/IPアドレスのネットワーク部等の切り出しが可能なマスク指定機能
##エンベロップFROM、エンベロップTOのメールURLについてメールドメイン部分の切り出し等のマスク機能

トリプレットを上記のような「ワイルドカード」で管理することができれば、負荷分散サイトや複数のMXを持つサイトにも柔軟な対応が可能になる。

負荷分散サイトにおけるグレイリスティングの課題

大規模サイトの特徴は、複数台のリレーホスト、スマートホストで構成され、かつロードバランサーで負荷分散されてい ること、複数のMX登録されたホストを抱えていることだ。

このような環境では、再送されたメールをかならず同じメールホストで受信できるとはかぎらない。したがって、グレイリスティングは複数のメールサーバについて同一のトリプレット・データベースを共有できるようなものでなければならない。Milterによりグレイリスティングサービスを複数のホストで共有することは可能だが、競合的なトランザクションに対する対応を名言したMilter式グレイリスティングソフトウェアは事実上存在しない。負荷によっては、Greykistingホストの負荷分散が必要になるが、グレイリスティングソフトウェアに対して相当の加工が必要となる。

負荷分散にも対応する j-chkmailのグレイリスティング 機能

さまざまなテストと検討の結果、わたしたちは、フランスのL’Ecole des Mines de Parisが開発したSPAM対策ソフトウェア j-chkmailを選択した。日本の業界は概ね米国のみに注目しているが、ヨーロッパ、特にフランスは歴史的にもソフトウェア大国で、非常に完成度の高いオープンソース資源を多数排出している。

j-chkmailは総合SPAM/ウィルスメール対策ソフトウェアで、ヨーロッパ有数の大学・研究機関の大規模サイトで長年の利用実績がある。j-chkmailは外部のスキャナーとの連携、独自のヒューリスティクフィルタやベイジアンフィルタを内蔵し、未知のワームにもある程度対応可能など非常に機能豊富なソフトウェアだが、必要な機能だけを利用したり、複数の機能を組み合わせたり自由度が高い。

グレイリスティングはj-chkmailが提供する機能のほんのの一部にすぎない。j-chkmailは、クライアントサーバ型のグレイリスティングデータベースデーモン(jgreyd)を提供している。複数のj-chkmailホスト間で、トリプレットDBを共有することができるだけでなく、各ホスト毎のローカルトリプレットDBと並列動作するため高効率だ。

ホワイトリスティング機能について、定義方法が多彩で、複雑ではあるが、逆引きを前提としたDNS正引きゾーン名でのワイルドカード指定が可能であるため、例えば、「co.jp」「ne.jp」全体を許可するような設定も可能。

実際、逆引きできないホストを排除するだけでも相当なSPAM対策効果があげられるが、逆引き設定が正しくできていない「堅気のホスト」も多く、従来利用には相当な割り切りが必要だった。しかし、逆引きの成功を前提としたワイルドカード的なホワイトリスト設定は、結果として逆引き検査を行ったのと等価だ。そして、逆引きに失敗しても、「堅気のホスト」はグレイリスティングのチェックで救済される。

実際、上記の方向での設定にて、実環境で長期テストを行った結果、当社が長年使用している十分チューニングされた「Amavisd+SpamAssassin+ClamAV」と比較して、SPAM排除性能に大差はなかった。原理的に、未知のワームやウィルスにも相当程度対応可能であることを考慮すると、大規模サイトでは現実的な最適解に近い。

さらに、j-chkmailは、ヒューリスティックフィルタも備え、グレイリスティングとのさまざまな条件での組み合わせが可能であり、語彙やシグネチュアの解析にたよらないSPAM、ワーム、ウィルス対策ツールとして完成度が高い。

大規模メールシステムにおけるメッセージフィルタリング(PDF: Ecole des Mines de Paris 電算機センター:フランス語)