スパム対策
目次- 1.0.0 概要
- 2.0.0 筆者の環境と現状
- 3.0.0 これまでの伝統的な方法
- 3.1.0 DNS 検証
- 3.2.0 スパムフィルター
- 3.3.0 根本的には
- 4.0.0 スパム対策の目標
- 5.0.0 アイデア
- 6.0.0 効果
- 7.0.0 設定
- 7.1.0 静的白色リスト
mail/lib/white.starter
- 7.1.1 設定
- 7.2.0 動的白色リスト
/mail/lib/whitelist
- 7.2.1 設定
- 7.3.0 灰色リスト
/mail/grey
- 7.3.1 設定
- 7.4.0 smtpd
/rc/bin/service/tcp25
- 7.4.1 設定
2004/10/22
概要
スパムメールは頭痛の種である。大量のスパムメールが送り込まれ、そのために大切なメールを見失うことがある。スパムメールの送信者はパソコンなどをつかって毎日何千通、あるいは何万通かのメールを送っていると思われる。スパム対策は今日におけるインターネットの基本的な課題であるが、どの方法も決定打を欠いている。今回は Plan 9 におけるスパム対策を紹介する。この方法は手間がかからず効果的にスパムを撃退している。筆者の環境と現状
筆者はいくつかのメールアドレスを持っている。そのうち公開されているのは2つであり、1つは大学のメールサーバのアドレス aichi-u.ac.jp 、もう1つは Plan 9 の ar.aichi-u.ac.jp である。
ホスト smtp は大学の smtp サーバで SPAM フィルターがかかっている。vega は大学の メールサーバ、ar は筆者の研究室のメールサーバである。そして vega と ar は筆者の家庭のパソコン mac から見た smtp サーバでもある。
大学のメールサーバからのメールは殆どがゴミである。大学はスパムフィルター、ウィルスフィルターを入れているが、スパムフィルターの働きは十分とは言えない。誤りがある限り届けざるを得ない。また誤りがある限り、我々は目を通さざるを得ない。結局スパムから逃れることはできていないのである。
ar.aichi-u.ac.jp は筆者がメーリングリストにメールを出すときに使用しており、そのために半ば公開されている。以前は ar.aichi-u.ac.jp に膨大なスパムメールが届けられた。そのために外国からのメールは全て入り口で拒否した。これは他方のトラブルをもたらしたが、当時としてはやむを得なかった。現在では拒否を解いている。最近はあまりメーリングリストに投稿していないためか ar へのスパムアクセスは少ない。それでも1日に100通ぐらいのスパムが届けられる。
最近 ar.aichi-u.ac.jp に対して Plan 9 のスパムフィルターを試してみた。スパムが劇的にカットされた。フィルターと書いたが実はメールの内容をスキャンしていないのでフィルターと言わない方がよいかも知れない。従来のスパムフィルターとは全く異なる発想に基づくものである。
これまでの伝統的な方法
DNS 検証
発信 IP が DNS に登録されているか否かを確認最近では意味がない。多くが DNS に登録されている。(たぶんリクエスト時に動的に)
以下は SPAM に使われた IP の DNS 検証
200.141.137.231 200141137231.user.veloxzone.com.br 200.148.82.104 200-148-82-104.dsl.telesp.net.br 200.79.91.5 customer-200-79-91-5.uninet-ide.com.mx 80.207.88.212 host212-88.pool80207.interbusiness.it 82.39.56.49 82-39-56-49.cable.ubr04.benw.blueyonder.co.uk 69.149.24.189 adsl-69-149-24-189.dsl.rcsntx.swbell.net 68.203.221.31 cs68203221-31.rgv.rr.com 68.162.39.146 pool-68-162-39-146.nwrk.east.verizon.netIP アドレス情報を含むホスト名が全て不正なアクセスかと言えば、そうでもない。次は私がメールを送信した IP の DNS 検証 (これは SPAM ではない)
203.174.217.213 usr203174217213.usr.starcat.ne.jpつまり区別が付かない。さらにDNS に登録されていない IP の DNS 検証は待ち時間が大きいのも他の攻撃(メール爆弾)との関係で問題になる。
スパムフィルター
サブジェクト欄に [spam] の文字を挿入するメールの内容を読み取って分析するスパムフィルターは、それがメールサーバに仕掛けられた場合には私信の秘密性を侵害する可能性を秘めているし、また効果が薄いばかりか、正当なメールを間違ってスパム扱いにすることがある。vega からは [spam] の表題がついたメールが大量に送られてくる。mac はまた独自にフィルターを持っているので、筆者はそうしたメールを「ゴミ箱」に捨てている。しかし本当に捨てる前に、一応目を通さざるを得ない。
根本的には
ISP が特定の IP から外に向けて発信されるメールの個数を監視し、許される発信数の上限を設定するか、適切な課金をする事であろう。TCP ヘッダだけを見ていれば済む話。難しい技術が必要とも思えない。
スパム対策の目標
正当なメールは確実に受け取る。その上でスパムメールをどれだけ効果的に削ぎ落とせるかが問題である。
内容ではなく、その送信方法でメールを分類しよう。
- 普通のメール
-
自動化されていないメール
SMTP サーバを介したメール
- スパムメール
-
パソコンなどを使用して大量に撒かれるメール
アイデア
スパマーと正当な送信者はメールを送信する目的が異なる。スパマーの目的はできるだけ多数のスパムメールを撒き散らかす事にある。スパマーにとって私のアドレスは何万分の一、あるいは何十万分の一の価値しか持っていない。従って必ずしも届ける必要がないのである。しかし、正当な送信者にとっては事情が異なる。彼らは私のアドレスへメールを届ける必要があるし、そのための努力をするであろう。
- 「白色リスト」に含まれている送信者からのメールは受け取る。
- 「白色リスト」に含まれていない送信者からのメールはとりあえず「灰色リスト」に登録し、もう一度再送するように知らせる。
人手によって送信されていれば気がつくし[注1]、
SMTP サーバからの送信ではサーバは時間をおいてまた送信をトライするはずである[注2]。
- 「灰色リスト」に登録後、一定の時間の間に(ソースコードによると30秒から14時間の間)メールが送られれば受け入れ、「白色リスト」に登録する。30秒の拒絶期間が設けられているのは、スパマー(SPAM プログラム)は概して直ちに再送をトライするからである[注3]。
注1: 例えば Mac OSX からは次のように見える。
注2: この時間は設定に依存する。Plan 9 の標準設定では 10 分。
注3: 次に示すのは smtpd のログであり、スパマーの典型的な行動パターンが見て取れる。21:43:18 で "temporary failure" のメッセージを受けてもスパマーは直ちに再送する(21:43:20)。そしてまた失敗しあきらめる。
ar Oct 19 21:43:18 no call registered for 220.191.79.245/ar.aichi-u.ac.jp!linda; registering ar Oct 19 21:43:18 no recent call from 220.191.79.245 for a rcpt; rejecting with temporary failure ar Oct 19 21:43:20 call for 220.191.79.245/ar.aichi-u.ac.jp!linda was seconds ago or long ago ar Oct 19 21:43:20 no recent call from 220.191.79.245 for a rcpt; rejecting with temporary failureあきらめが良いのは、彼らの目標ができるだけ多くのスパムメールを巻き散らかすことにあり、私に送る事が至上命令ではないからである。
効果
Plan 9 のアイデアの効果の程を調べてみよう。grep arisawa /mail/grey/*/*で「灰色リスト」を調べてみると最初の2日間でホスト ar に対して筆者宛に来たメールは 207 通である(最近は ar 宛のスパムは本当に少なくなりました)。この内
/mail/lib/whitelist
への登録に至ったのは 20 通であった。カット率は 90% である。カット率は長期的には悪くなる事が予測されるので、もっと長期に観測しカット率の推移を調べた方が面白いであろう。なお20通の内、個人的なメールは2通、筆者が実験のために出したメールが1通、他はスパムである。
設定
静的白色リスト mail/lib/white.starter
これは「白色リスト」の初期設定ファイルである。Plan 9 のリリースに含まれている。吟味し、必要なら追加する。筆者は hotmail.com を追加している。設定
# internal net 10.0.0.0/8 # yahoo mail hosts 66.218.66.0/24 66.218.84.0/24 # bellnexxia.net 209.226.175.0/24 # telus.net 199.185.220.0/24 # amazon 207.171.188.0/24 # careerbuilder.com 66.45.112.0/24 # psuvax1.cse.psu.edu - 9fans 130.203.4.6 # plan9.bell-labs.com 204.178.31.2 # ieee 140.98.194.25 # jetblue.com 64.50.124.126 # # Kenar's addition # # hotmail.com 64.4.53.0/24ここに載っているのは主に多数の SMTP サーバを抱えた大きなサイトである。この場合には再送する時の IP が同じであるとは限らないので、「白色リスト」に登録されるまでに何回も再送トライが発生し時間がかかると予想される。
hotmail.com は筆者の周囲に利用者が多い。また hotmail.com はスパマーは利用しづらいと思われる。web メールなので効率的にスパムメールを送るためのコントロールが効かないのてある。もっとも hotmail を名乗るスパムメールはたくさん来るのだが...
動的白色リスト /mail/lib/whitelist
メールを受け取る事によって自動更新される。設定
ファイル/mail/lib/whitelist
を作成しておく。アクセスモードは a-rw-rw-rw-
に設定しておく。ar% ls -l /mail/lib --rw-rw-r-- M 8 upas upas 460 Apr 27 2000 /mail/lib/blocked ... --rw-rw-r-- M 8 upas upas 326 Nov 2 2003 /mail/lib/white.starter a-rw-rw-rw- M 360659 bootes upas 0 Oct 20 11:47 /mail/lib/whitelist
whitelist
には動的に受け入れ可能な IP アドレスが追加される。ar% cat lib/whitelist # unknown 200.242.215.45 # YahooBB220003016167.bbtec.net 220.3.16.167 # wbg1213na10.ezweb.ne.jp 222.1.136.18 # adsl-west-3212.enjoy.ne.jp 218.223.116.212
灰色リスト /mail/grey
メールを受け取る事によって自動更新される。設定
ディレクトリ/mail/grey
を作成する。ユーザ none
による読み書きを許す。ar% ls -l /mail d-rwxrwxr-x M 360659 upas upas 0 Aug 3 20:44 /mail/box ... d-rwxrwxrwx M 360659 bootes sys 0 Oct 20 10:10 /mail/grey d-rwxrwxr-x M 360659 upas upas 0 Oct 20 10:08 /mail/lib d-rwxrwxrwx M 360659 upas upas 0 Oct 20 11:41 /mail/queue d-rwxrwxrwx M 360659 upas upas 0 Oct 19 03:30 /mail/tmpSMTP ポート(tcp 25)へのアクセスがあるたびに
grey
に次のようにサブディレクトリが追加される。ar% ls grey/*/* ... grey/202.250.160.40/201.254.152.159/arisawa grey/202.250.160.40/201.4.210.32/arisawa grey/202.250.160.40/202.112.112.224/arisawa grey/202.250.160.40/203.174.217.213/arisawa grey/202.250.160.40/203.236.190.51/arisawa grey/202.250.160.40/209.169.153.91/arisawa grey/202.250.160.40/210.105.239.14/arisawa ...
arisawa
はファイル名である。中身は空。 私宛のメールであることを表している。smtpd /rc/bin/service/tcp25
設定
smtpd に-g
オプションを設定する。#!/bin/rc exec upas/smtpd -g -n $3