[an error occurred while processing this directive]
by Katja and Guido Socher <katja/at/linuxfocus.org, guido/at/linuxfocus.org>
著者紹介:
Katja はドイツの LinuxFocus 編集者です。Tux と映画と写真と海が好きです。
ホームページはここにあります。 Guido はずっと前からの Linux ファンです。
Linux は選択肢と自由を与えてくれます。
必要に応じて自由に選択し、開発することができるのです。
日本語訳:
須藤 賢一 <deep_blue(at)users.sourceforge.jp>
目次:
|
スパムメールと闘う
要約:
あなたのメールにはスパムが混じっていませんか?
スパムメールはもの凄い勢いで増えていて、みんなにとって悩みの種になっています。
この記事では、このスパムという災難に立ち向かう方法を解説します。
_________________ _________________ _________________
|
スパムメールとは
スパムメールにはいろんな名前があります。
UCE (Unsolicited commercial email : 頼みもしないのに送られてくる押し売りメール) と呼ぶ人もいれば、単に Unwanted E-mail (不要メール) と呼ぶ人もいます。
ですが、呼び方はどうあれ、スパムメールの実体の説明にはなっていません。
スパムメールを受信したことが (まだ) ないなら、
ここにあるスパムメール集
(spam_samples.html) を見て下さい。
これは、2、3 日で届いたスパムメールを適当に選んだものです。
メールの内容を読めば、商売とは何の関係もないことがすぐに分かると思います。
これを送ってきたスパマーは犯罪者です。
真面目なビジネスマン/ビジネスウーマンであれば、こんな風に人をいらいらと不快にさせてまで、罠にひっかかるような間抜けを探すようなまねはしないはずです。
インターネットを使うことに慣れていない人の間には、こういった広告が、普段我々が地元のスーパーで入手できるような情報と同じくらい信頼できるものだ誤解している人がいます。
しかし、スパムメールで売られている商品はたいてい違法であるか、全く商品でないことすらあるのです。
あなたから金を巻き上げるための罠なのです。
スパムメールはどれだけあるのか
スパマーはウェブサイトやニュースグループやドメインレコード
(自分のドメインを持っている場合) から電子メールアドレスを集めます。
ロボットプログラムを使ってアドレスを集めて CD に焼き、他のスパマーに安く売る人間もいます。
今どきメールアドレスをホームページにクリアテキストで書いたら、
プログラムでそれを抽出できてしまうので、2、3 ヵ月でひどいことになって、それを阻止する手段はないでしょう。
問題は日ごとに大きくなるのです。
1998 年には、LinuxFocus 宛に送られて来るスパムメールの比率は 10% 以下でした。
2002 年の 11 月時点での統計は以下の通りです。
我々のサーバーは週にだいたい 4075 通のメールを受け取ります。
そのうち、なんと 3273 通がスパムメールです。
=> 全体の 80% がスパムという計算になります。
すなわち、メールサーバーの容量の 80% 、ネットワークの帯域の 80% が、要りもしないもののために使われているということです。
3273 通のスパムメールのうち、40% がアメリカ (主にカナダ、アメリカ合衆国、メキシコ) から、約 30% がアジア (主に韓国、中国、台湾) から送られてきています。
スパムが届いたら
spam-mails
を見ると、
ほとんどの場合、リストから削除してもらうための手続きがあるように思ってしまいます。
でも、絶対にこの手続きを行ってはいけません。相手は犯罪者なのです。
削除すべきアドレスの一覧をきちんと保守したところで、彼らにとって何の得にもならないのです。
では、どうしてあたかも削除してもらえるかのように書いてあるのでしょうか。
答えは簡単です。
それによって、読む人に良い印象を与え、統計を取る最良の手段にもなるのです。
返信が来れば、自分達のメールが確かに届いたのだということがすぐに分かります。
言い換えれば、メールが届いたことをわざわざ教えていることになるのです!
削除要求のメールを送るには、純粋に技術的な問題もあります。
LinuxFocus はそれほど大きなサイトではありませんが、
週に 3273 件のスパムメールに対して削除要求を出すには、フルタイムで働く人が 1 人必要になり、しかも 1 分に 1 通のメールを出さないといけないのです。
削除要求の方法はスパマー毎に違いますから、どだい無理な話です。
できる訳がありません。
削除要求を出すのはばかげた考えで、かえってスパマーを喜ばすだけなのです。
正しい唯一の方法、それはスパムメールを消去することです。
スパムを処理するソフトウェア
スパムをフィルターで除去するにはたくさんの方法がありますが、スパマーが回避することが難しいという点では、ここで示す方法が優れています。
ですが、結局のところいたちごっこに過ぎません。
スパムを除去するためのツールは徐々に進化していますが、スパマーもまた手を替え品を替えしてくるのです。
フィルターには 2 種類のものがあります。
- MTA (Message Transfer Agent=メールサーバー) で直接チェックするタイプ。
普通はその中でメールを拒否します。
つまり、メールを受信している最中にスパムだと分かったら、すぐにエラーコードを送り返します。
このタイプのツールの多くはブロックすべき IP アドレスの一覧を持っていて、メールのヘッダーをチェックします。
自分用のメールサーバーを持っていない人は ISP に設定してもらう必要があります。
- メールを受信後にフィルタをかけるタイプ。
この場合電子メールの配送は成功しますが、後でスパムを除去します。
では、いろんな可能性を詳細に見ていくことにしましょう。
どれも利点と欠点を持っています。
スパムを全部除去するのに最も良い方法は、ツールをいくつか組み合わせることです。
直接 MTA でメールを拒否する
メールを受信する際にメールサーバーで直接拒否すれば、スパマーはエラーコードを受信することになり、このアドレスが正しくないことを知ります。
スパマーが「スパム用メールアドレス一覧 CD 作成者」ならば、
そのアドレスを除外するかも知れません。
メッセージ全体を受け取る訳ではないため、ネットワーク帯域の節約にもなります。
メールがスパムだと分かったら、すぐにエラーコードを送り返すことが可能です。
それには、柔軟性のある MTA が必要です。
残念なことに、良く使われているのは Sendmail と Bill Gates
謹製のサーバーですが、この 2 つはこういう用途には全く向いていません。
これに替わるのが
Postfix と
Exim という素晴らしいサーバーです。
サーバーを取り換えられないなら、messagewall のような
smtp プロキシーをサーバーの前段に入れることもできます
(smtp は Simple Mail Transfer Protocol の頭文字をとったもので、インターネットのメールプロトコルです)。
では、一般的なフィルタ手法と、それがどのように動作するのかを説明します。
MTA 毎の設定方法は説明しません。説明しようとすると、記事が長くなってしまうからです。
代わりに、インストールした MTA 付属のドキュメントを読むことをお勧めします。
Postfix も Exim もドキュメントがしっかりしています。
- リアルタイムブロックリスト
これは DNS に基づいたリストです。
あなたのサーバーに向けてメールを送って来るメールサーバーの IP アドレスと既知のスパマーのブラックリストとを突き合わせます。
一般的なリストは www.spamhaus.org や ordb.org にあります。
また、blq というツールがあります (参考文献を参照のこと)。
これを使うと、特定の IP アドレスがリストに載っているかどうかを問い合わせることができます。
ですが、この方法にはあまり期待しすぎない方が良く、リストも注意して選ぶ必要があります。
スパマーがダイヤルアップ接続を使って特定の ISP に接続したことがあるというだけで、その ISP の IP アドレスの範囲全てをブロックするようになっていることもあります。
当方では、ordb.org のリストだけを有効にしています。
きちんと管理されていないサーバーからのメールを遮断するためです。
経験的には、この方法でブロックできるスパムメールは 1% から 3% 程度です。
- subject 行の 8 ビット文字
最近ではスパムの約 30% は中国や台湾やその他のアジア諸国から来ます。
中国語が読めないなら、題名に 8 ビット文字 (ASCIIでない文字)
がたくさん入っているメールを拒否しても良いでしょう。
MTA によってはそういう設定ができるものもありますが、
正規表現を使ってヘッダーとマッチさせても良いでしょう。
/^Subject:.*[^ -~][^ -~][^ -~][^ -~]/
これは題名の行に ASCII のスペースからチルダの範囲にない文字が 4 つ以上連続して入っているようなメールを拒否します。
正規表現を良く知らない人は勉強してください。必要になります (LinuxFocus の記事番号 53 を参照してください)。
exim も postfix も perl の正規表現 (www.pcre.org を参照) をサポートするようにコンパイルすることができます。
Perl は最も強力な正規表現を備えています。
この方法はとても効果的で、スパムメールの 20〜30% を除去します。
- 既知のスパマーの 「From」アドレス一覧を使う
この方法はあきらめましょう。
確かに 1997 年時点では有効でした。
最近のスパマーはアドレスを偽装しているか、何の罪もない他人のアドレスを使っています。
- FQDN (Fully Qualified Domain Name) でない送信者や、送信元ドメインが不明な場合に拒否する
スパマーの中には「From」のアドレスに架空のアドレスを入れる者がいます。
アドレスの全部をチェックすることは不可能ですが、ホスト名/ドメイン名の部分を DNS サーバーに問い合わせてチェックすることはできます。
この方法ではスパムのうち 10〜15% を除去することができますし、
届いたメールがたとえスパムでなかったとしても、そのメールに返信することはどのみちできないのですから、不要なはずです。
- IP アドレスが DNS 内に PTR レコードを持っていない場合
メールを受け取るサーバーの IP アドレスをドメイン名に逆引きすることが可能かどうかをチェックします。
これはとても強力な方法で、たくさんのメールが除去できます。
ですが、我々はこの方法をお勧めしません。
この方法は、そのメールサーバーのシステム管理者がきちんとしているかどうかをチェックするのではなく、そのバックボーンになっているプロバイダーがきちんとしているかどうかをチェックすることになるからです。
ISP は IP アドレスをバックボーンのプロバイダーから買い、バックボーンのプロバイダーもさらに大きなバックボーンのプロバイダーから IP アドレスを買っているのです。
関連するバックボーンのプロバイダーと ISP の全てが DNS を適切に設定しない限り、鎖のようなつながりはうまく働きません。
中間にいる誰かが間違いを犯したり設定をいやがったりすればうまく機能しないのです。
この方法は、鎖のはじっこにいる個々のメールサーバーについては何も語っていないのです。
- HELLO コマンドを義務づける
2 つの MTA (メールサーバー) が (smtp を使って) 互いに会話する際には、
まず自分が誰なのか (例えば mail.linuxfocus.org など) を伝えます。
スパムソフトウェアによってはこれを行いません。
この方法でスパムのうちの 1〜5% を減らすことができます。
- HELO コマンドを義務づけ、不明なサーバーを拒否する
HELO コマンドで受け取った名前を使って DNS に問い合わせを行い、
確かに登録されたサーバーかどうかをチェックします。
これはとても効果的です。一時的なダイアルアップ接続を使うスパマーは、正しい DNS レコードを設定しないことが多いからです。
この方法は全スパムの 70〜80% を除去できますが、複数のメールサーバーを管理しているずさんなシステム管理者が、全部のサーバーのホスト名を DNS に登録していないようなサイトから送られてきた正当なメールまで拒否してしまいます。
MTA によってはもっとたくさんのオプションがあることもありますが、出来の良い MTA ならたいがい上述の機能を持っています。
これらのチェックをする利点は、あまり CPU に負荷をかけないことです。
これらのチェックを行うからといって、メールサーバーのハードウェアを増強する必要は普通はありません。
受信済みのメールをフィルタする
次に述べる手法はメール全体に対して適用されることが多く、メールを送ってきたメールサーバーは、メールが配送されなかったことに気づくことはありません。
また、正当な送信者が障害レポートを受け取ることもありません。
メッセージは消えてなくなるだけです。
それに加えて、この手法は完全に正しいとは限らないことも言っておかないといけません。
メールサーバーのフィルタ能力に大きく依存するからです。
Exim はとても柔軟で、特別なメッセージフィルタを記述することができます。
-
SpamAssassin (http://spamassassin.org/):
これは Perl で書かれたスパムフィルタです。
注意深く記述された規則を使っていて、"strong buy" (「強く買い」)、
"you receive this mail because" (「このメールは次のような方々にお送りしております」)、
"Viagra" (「バイアグラ」),
"limited time offer" (「期間限定商品」)
などとった、スパムメールで良く使われる文章に点数を割り当てます。
点数があるレベルより大きいと、そのメールはスパムと見なされます。
このフィルタの問題は、メモリと CPU 負荷の面でとても重いということです。
2、3 年前のサーバーを使っているのなら、
きっとメールサーバーのハードウェアを増強しないといけないでしょう。
ですので、直接メールサーバー上でこれを使うことはお勧めしません。
Spamassassin には spamd プログラムがついています (spamd=spam デーモン、spamc=デーモンに接続するクライアント)。
これを使うことで spamassassin の起動時間を短縮し、CPU 負荷を軽減することができますが、
依然として大量のリソースが必要なアプリケーションであることに変わりはありません。
メールを除去するには、以下のような内容の .procmailrc (と .forward ) ファイルを作成する必要があります。
# The condition line ensures that only messages smaller than 50 kB
# (50 * 1024 = 56000 bytes) are processed by SpamAssassin. Most spam
# isn't bigger than a few k and working with big messages can bring
# SpamAssassin to its knees. If you want to run SpamAssassin without
# the spamc/spamd programs then replace spamc by spamassassin.
:0fW:
* < 56000
| /usr/bin/spamc
# All mail tagged as spam (e.g. with a score higher than the set threshold)
# is moved to the file "spam-mail" (replace with /dev/null to discard all
# spam mail).
:0:
* ^X-Spam-Status: Yes
spam-mail
インストールは簡単で、spamassassin はスパムの 90% 以上を除去してくれます。
-
procmail (http://www.procmail.org):
procmail 自体はスパムフィルタではありませんが、自分でフィルタを書いて組み込むことができます。
ルールを適当な量 (だいたい 10 以下) に抑えれば、procmail はとても軽快に動作します。
利用するには、ホームディレクトリに .forward ファイルを作成し、以下の行を追加します。
"| exec /usr/bin/procmail"
人によっては以下のようにすることを奨めています。
"|IFS=' ' && exec /usr/bin/procmail"
ですが、このようにするとメールサーバーの制御下を離れた余計なプロセスを作ることになってしまいます。
postfix や exim のようなセキュアなメールサーバーであれば、
.forward ファイルに先の例のように書けば十分でしょう。
procmail は、閉じたグループ内でのコミュニケーションが多いような環境で使うと最も便利です。
例えば、企業内でメールのほとんどは同僚や知合いから送られて来るような場合です。
以下に "mycompany.com" の例を示します。
# .procmailrc ファイル
# ヘッダーを見て友人からかどうかチェック
:0 H:
* ^From.*(joe|paul|dina)
/var/spool/mail/guido
# ヘッダーを見て、mycompany.com 以外から来たメールなら
# maybespam に保存する
:0 H:
* !^From.*(@[^\@]*mycompany\.com)
/home/guido/maybespam
# デフォルトのルール
:0:
/var/spool/mail/guido
これでスパムを削除するのがとても簡単になり、通常のメールに混じってスパムが届くこともありません。
procmail はとても柔軟なので、違ったことにも活用できます。
全く違う使い方を紹介しましょう。
procmail には "reply to sender" (送信者に返信する) プログラム formail が含まれています。
これを使うと、メッセージを送り返すといったことができます。
word ドキュメントが添付されたメールを受け取るという、何とも厄介なことが良くあります。
もしあなたが Linux で開発をしていて、自分のプロジェクトや Linux についての情報をやり取りするために電子メールを使っているなら、文章を word ドキュメントに書いてメールに添付してくるような人とは関わりたくないでしょう。
ウィルスはこうやって簡単に広まってしまうのです。
Linux に感染することは多くありませんが、文章を送るのに MS Word を使うというのは良くありません。
受け取った側でも同じバージョンの MS word がないと、読めなくなってしまうからです。
RTF や HTML といったオープンなフォーマットがありますが、
こちらを使えばウィルスをばら撒くこともありませんし、クロスプラットフォームで、前述のようにバージョンに悩まされるということもありません。
# Promail script to
# reject word documents. Reject the mail, but do not reply to
# error messages "From MAILER-DAEMON"
# If you use ":0 Bc" instead of ":0 B" then you will still get the mail
:0 H
* !^From.*DAEMON
{
# The mime messages with word documents look like this in the body
# of the message:
#------=_NextPart_000_000C_01C291BE.83569AE0
#Content-Type: application/msword;
# name="some file.doc"
#Content-Transfer-Encoding: base64
#Content-Disposition: attachment;
# filename="real file.doc"
:0 B
* ^Content-Type:.*msword
| (formail -r ; cat /home/guido/reject-text-msword ) | $SENDMAIL -t
}
# explicit default rule
:0:
/var/spool/mail/guido
/home/guido/reject-text-msword というテキストファイルには、
msword で書かれたドキュメントはウィルスをばら撒く可能性があることと、
RTF のようなフォーマットで再送するよう送信者に依頼する文章を書いておきます。
procmail の使い方と、上記設定ファイル内のややこしい記号は、"procmailrc"
のマニュアルページで親切に説明されています。
- bogofilter (http://www.tuxedo.org/~esr/bogofilter ):
bogofilter は Bayesian スパムフィルタ (ベイズ確立理論を使ったスパムフィルタ) です。
完全に C で記述されており、(SpamAssassin と比べて) とても高速に動作します。
Bayesian フィルタは統計を元にしたフィルタで、最初のうちはどれがスパムでどれがスパムでないのかを教え込む必要があります。
新しく届いたメッセージに対して有効に働くようになるには、だいたい 100
通の練習メッセージ (スパムとそうでないものに分けたもの) が必要となります。
bogofilter は高速ですが、SpamAssassin のように初日から動くわけではないのです。
ですが、しばらくすれば SpamAssassin と同じように効果的に動作し、
スパムの 90% 以上を除去してくれます。
- razor (http://razor.sf.net/):
これは分散・強調型のスパム検出システムです。
既知のスパムのチェックサムがデータベースに格納されています。
新しいメールが到着したら、チェックサムを計算して中央データベースにあるチェックサムと比較します。
チェックサムがマッチすれば、メールをスパムと見なして破棄しても構わないでしょう。
razor がうまく動作するのは、特別な電子メールアカウントがインターネット上に広がり、全スパマーのアドレス一覧に潜り込むからです。
このアカウントはスパムだけを受信し、通常のメールは受け取りません。
もちろん、一般の人々が razor に対してメールを送ってスパムだと教えることも可能です。
スパムがあなたに届く前に既にスパムであると判明しているケースが多いでしょう。
このシステムはスパムの約 80% を除去します。
razor には、他の前処理または後処理によるフィルタ技術が持っていない特徴がひとつあります。
それは、razor はほとんど偽陽性のメールを検出することがないということです。
すなわち、スパムではないがスパムと判断されてしまうメールの数が、razor ではごく少ないということです。
スパムと闘うにはもっとたくさんの方法を採ることもできますが、
重要なものについてはここまででカバーしていると思います。
最善の策は、第一段階として MTA でチェックを行い、まだ残っているスパムを第二段階として後処理フィルタで除去することです。
HTML メール
電子メールで特に危険なのは HTML 形式のスパムメールです。
たいがいのスパマーは、「今後メールが不要な方以下にご連絡ください」という仕掛けを使って自分達のメールがどれだけ届いたかを判断します。
HTML フォーマットのメールはさらにその上を行くフィードバックを与えてしまいます。
それは画像です。
ホームページで良く使われる、訪問者の数を示すカウンターを思い浮かべてください。
スパマーはいつ、どうやってメールが読まれたかを正確に知ることができるのです。
スパムを良く見ると、中に含まれている画像の URL がシーケンス番号を含んでいることが分かるでしょう。
スパマーは誰がいつメールを見たかを正確に知ることができるのです。
何と言うセキュリティホールでしょう。
最近のメールリーダーは別の URL からダウンロードされる画像は表示しないようになっています。
しかし、最新でセキュアなメールリーダーはほとんどありません。
Kmail と最新の mozilla メールでは外部ソースからの画像を表示しないようにできます。
その他のほとんどはスパマーに対して便利な統計情報を送ってしまうのです。
では、どうすれば解決できるでしょうか。それは、HTML メールが読めるプログラムを使わないことです。
それができなければ、メールをいったんダウンロードし、インターネットから切り離してから読むことです。
スパムはどこから来るのか
スパムメールの「From」フィールドの送信アドレスを信用してはいけません。
これは存在しないアドレスか、罪のない人のアドレスです。
これがスパマー本人のアドレスであることはほとんどありません。
メールがどこから来たかを知りたければ、ヘッダー全体を見る必要があります。
...
Received: from msn.com (dsl-200-67-219-28.prodigy.net.mx [200.67.219.28])
by mailserver.of.your.isp (8.12.1) with SMTP id gB2BYuYs006793;
Mon, 2 Dec 2002 12:35:06 +0100 (MET)
Received: from unknown (HELO rly-xl05.dohuya.com) (120.210.149.87)
by symail.kustanai.co.kr with QMQP; Mon, 02 Dec 2002 04:34:43
この例で、IP アドレス 120.210.149.87 の、自分は rly-xl05.dohuya.com だと言っているホストが symail.kustanai.co.kr にメールを送っています。
さらに symail.kustanai.co.kr がメールをその先に送っています。
スパマーは 120.210.149.87 の向こうのどこかに潜んでいますが、このアドレスはおそらくダイナミックに割り当てられたダイアルアップ IP アドレスでしょう。
要するに、警察であれば、kustanai.co.kr の所有者のところに行って、サーバーのログと地元の電話会社の通話履歴を突き合わせてこの人物を特定することができるかもしれません。
でも、一般の人にはそれが誰なのかを見つけるのはほとんど不可能です。
また、実は最初の部分は偽造したもので、スパマーは dsl-200-67-219-28.prodigy.net.mx の向こうにいることもあり得ます。
symail.kustanai.co.kr が dsl のダイアルアップ接続を使って dsl-200-67-219-28.prodigy.net.mx にメールを送る道理がありませんから、その可能性は非常に高いと言えます。
mailserver.of.your.isp (シンボリック名) はあなたのインターネットサービスプロバイダのサーバーで、この 「Received:」行からが信用できる部分になります。
スパマーを見つけ出すことは可能ではありますが、prodigy.net.mx を調べるには国際諜報機関と警官隊が必要になるのです。
結論
この調子でスパムが増え続けたら、インターネットは本当の電子メールよりもはるかに多くのスパムメールを運ぶことになるでしょう。
スパムは受信者を犠牲にしながら運ばれるのです。
スパムのためにさらなる帯域が必要となり、メールシステムはスパムを処理すべく増強する必要があります。
大抵の国では、スパマーという犯罪者から人々を守るのに、法律はほとんど役に立ちません。
実際、正直者だけが制限されてしまって (デジタル著作権管理など)、
犯罪者を保護する (スパマーの統計収集を助けてしまう) だけの法律を定めている国もあります。
ぜひ反スパムの団体 Coalition Against UCE に参加しましょう。

http://www.euro.cauce.org/en/ |

http://www.cauce.org/ |
インターネットサービスプロバイダはメールシステムを見直すべきです。
メールサーバーに対する不正なアクセスを許してはなりません。
一人のユーザーが毎分送信できるメールの量を制限すべきです。
参考文献
2003-04-02, generated by lfparser version 2.36