RBLとDCCを使ってスパムを排除する

 現在、私はPostfixベースのメールサーバを管理している。ユーザは数百人で、1日に扱う正当なメールは平均2000件だが、スパムのおかげで実際のサーバの負荷ははるかに高い。スパムの影響を抑えるため、Postfix上でRealtime Blackhole Lists(RBL)クライアントとDistributed Checksum Clearinghouse(DCC)クライアント、そしてSpamAssassinを利用している。

 RBLは、既知のスパム発信元およびその疑いのある発信元のIPアドレスを集めたリストである。RBLのサービスを提供するプロバイダは、SpamhausSpamcop、DNSRBLなど数多い。RBLにはブラックリスト、ブロッキングリストなどの別名もある。メールサーバは、RBLサーバに接続してIPアドレスをチェックできる。

RBLプロバイダは、次の条件に該当するIPアドレスをRBLに追加する。

  • 既知のスパム発信元
  • スパムを送信するメールサーバによって悪用されうるオープンなSMTPリレー
  • DSLまたはダイヤルアップのユーザの動的割り当てIPアドレスのうち、ユーザのコンピュータがスパム発信の踏み台にされうるもの
  • 大量メール送信ウイルスやトロイの木馬に感染したコンピュータのIPアドレス

 RBLプロバイダは、IPアドレスのリストを作成する際に、他のさまざまなパラメータも考慮に入れる。IPアドレスの収集には、RBLプロバイダごとに独自のノウハウがある。大量のIPアドレスを積極的にチェックして、疑わしいIPアドレスを抽出するようなことも行われる。

 RBLに載せられたIPアドレスが永遠にリストに留まるわけではない。一部のRBLプロバイダでは、一定の期間が過ぎたIPアドレスを自動的にリストから削除する。また、IPアドレスの所有者から削除を要求された場合、リストに追加した理由が既に解消されたと判断されればIPアドレスをリストから外すこともある。簡単にリストから外せるかどうかは、プロバイダによって違う。ときには面倒な手続きになる。

RBLシステムの仕組み

 RBLプロバイダでは、リストに記載すべきIPアドレスを見つけると、対応するレコードをDNSデータベースに設定する。たとえば、IPアドレス192.168.1.1をSpamhausのRBLに追加する必要があると判断した場合、擬似ホスト1.1.168.192.zen.spamhaus.orgのDNSレコードを追加する。こうすることで、クライアントはDNSプロトコルを使ってこのIPアドレスを簡単にルックアップできる。

 RBLの一種にRight Hand Side Black List(RHSBL)がある。RHSBLは、IPアドレスではなくホスト名のリストである。このリストが便利なのは、スパマーがIPアドレスの異なる複数のコンピュータを使っているが、ホスト名が同じ場合である。一般にプロバイダがRBLとRHSBLの両方を提供することはないため、RBLに加えてRHSBLのルックアップも使う場合は、複数のルックアップを行うことになる。

 IPアドレスまたはホスト名をチェックする必要があるSMTPサーバは、txt型レコードのDNSクエリを、適切に記述されたホスト名(例:1.1.168.192.zen.spamhaus.org)に対して実行する。応答として返されるレコードには、リストの詳細情報があるURLが格納されている(例:1.1.168.192.zen.spamhaus.org text = "http://www.spamhaus.org/query/bl?ip=192.168.1.1")。SMTPサーバは、この情報を利用し、適切なエラーメッセージを使って接続を拒否できる。レコードが返されない場合は、該当するエントリがリストに存在しないということであり、SMTPサーバは接続を受け付けることができる。

 私は、PostfixでRHSBL/RBLルックアップを設定するために、次の行を/etc/postfix/main.cfに追加した。

smtpd_recipient_restrictions =
                        reject_rhsbl_client blackhole.securitysage.com,
                        reject_rhsbl_sender blackhole.securitysage.com,
                        reject_rbl_client zen.spamhaus.org,
                        reject_rbl_client bl.spamcop.net

 この設定では、Postfixサーバは受信接続のホスト名とIPアドレスを4つのRBLにルックアップし、該当するエントリがある場合に接続を拒否する。

 上記のコードをPostfixサーバに実装したところ、RBLルックアップの結果に基づいて全接続の約75%が拒否されるようになった。

 メールサーバの管理者にとって福音のようだが、この方式には負の側面もあり、警戒を怠ってはならない。IPアドレスがRBLに記載される理由はさまざまだ。記載されるべきでないIPアドレスが含まれていることもある。このような事態が起こるのは、たとえばRBLプロバイダが個々のIPアドレスではなく一定の範囲のIPアドレス(アドレスブロック)を一括して追加したようなケースだ。これは、その範囲内の多数のIPアドレスがリスト記載の条件を満たす場合に起こりうる。メールサーバの管理者は、このような可能性を常に念頭に置いて、サイトのポリシーに基づいて十分に検討を行い、RBLのみに基づいてSMTP接続レベルでIPアドレスをフィルタ処理するかどうかを決める必要がある。

SpamAssassinを使ったRBLルックアップ

 SpamAssassinは、利用者の多いスパム撃退アプリケーションで、GPLライセンスに基づいて配布されている。SpamAssassinでは、多数のローカルベースおよびネットワークベースのチェックに基づいて電子メールメッセージを評価し、スコアを付ける。管理者は、このスコアを基にメールをスパムとして扱うかどうかを判断し、適切な措置(メールの破棄、スパムのマーク付け、別のフォルダへの転送など)をとることができる。

 RBLルックアップを評価ルーチンの一部として実行するようにSpamAssassinを設定できる。この方法は、RBLのヒットのみを根拠にSMTP接続を拒否する方法よりも穏当である。

 そのためには、RBLルックアップを以下のようにSpamAssassinの設定ファイル(/etc/mail/spamassassin/local.cf)に追加する。

skip_rbl_checks  0  # This is the default and enables lookups
rbl_timeout 15 # Timeout for lookups in seconds

 また、SpamAssassinでは、RBLルックアップで一致するエントリがあった場合、それを示すヘッダーがメッセージに追加される。メールがスパムであることを示すため、[SPAM]などのタグが件名に追加される。ユーザは、このようなメッセージをIMAPサーバまたはメールクライアントの別のフォルダに振り分けることができる。

Distributed Checksum Clearinghouse

 メールサーバ管理者にとって残念なのは、スパマーがいつも同じホストを使ってスパムメッセージを送信するとは限らないため、RBLルックアップが空振りに終わる場合があることだ。しかし、SpamAssassinでは、Distributed Checksum Clearinghouse(DCC)と呼ばれるネットワークベースのルックアップを使って、メッセージが大量に出回っている既知のメールかどうかを識別できる。

 DCCサーバは、特定のメッセージがデータベースでルックアップされた回数をカウントする。サーバにはメッセージ全体ではなくメッセージのチェックサムだけが保存される。クライアントは、ルックアップするメッセージのチェックサムを生成し、これをDCCサーバにクエリする。DDCサーバは、そのチェックサムがルックアップされた回数を返す。クエリの回数がしきい値を超えると、カウントは”多数”に分類される。DCCの仕組みにおいて、クライアントはデータに積極的に寄与する。転送されるのはチェックサムだけなので、通信のプライバシーが侵害されることはなく、ルックアップのオーバーヘッドは最小になる。

 DCCは、ほとんどのアンチスパムツールに統合できる。SpamAssassinのlocal.cfに次の行を追加する。

use_dcc 1
dcc_home /var/dcc
dcc_path /usr/local/bin/dccproc
add_header all  DCC _DCCB_: _DCCR_

 特定のアドレスやドメインからのメールをチェックの対象外にする場合は、次の行をlocal.cfに追加すればホワイトリストを作成できる。

whitelist_from somebody@example.com somebodyelse@example.com
whitelist_from *@example.com

 RBLとDCC以外にも、スパムに対抗する手段はある。メールコンテンツに既知のパターンを探すとか、メールヘッダの特徴を分析するなどの方法でもスパムを検出できる。

 メールサーバやSpamAssassinのアンチスパム設定は、一度やってそれで終わりとはいかない。管理者は、新しい脅威を迎え撃つために常に警戒し、コース修正に努める必要がある。

NewsForge.com 原文