自分でサーバーを公開していると、SPAM が山ほどやってくる。
個人のアドレスでも山ほど来る人は多いと思うが、自宅サーバーの場合「アカウント」にある程度関係なくメールを受け取っているため、手当たり次第に送られてくる SPAM も、全部受け取ってしまうことになる。
そんなわけで、「間違えメール」のふりをした SPAM が、違うアドレス宛に10通も並ぶ、という失笑するような状況も毎日のようにあるのだが、こうなってくると SPAM 対策が面倒になってくる。
まずは、BkASPil。
Becky!2 という Windows 用のメールソフトのプラグインとして動作する、SPAM カッターである。
特徴は、Blacklist とベイズフィルタをうまく組み合わせていること。
「明らかな SPAM 発信 IP アドレス」とみなされているサーバーを収集したデータベースを参照し、そこからきたメールは SPAM とみなす。
その上で、この SPAM をベイズフィルタに学習させる。
そして、Blacklist にないサーバーから来たものであっても、ベイズフィルタで SPAM 判定を行う。
ベイズフィルタは学習が面倒なのだが、半自動で学習してくれる、ということになる。
これで「ある程度は」頭が良くなるので、それ以上の微調整はお好みで。
(自分が SPAM だと思うものを選んで学習させていくことになる)
しかし、これはあくまでも「来たメールの SPAM を判定する」仕組みに過ぎない。
そもそも、SPAM が来ないのが望ましいのだ。
そこで、S25R。
実際には、先日までこの手法の実装の一つである、qgreyを使っていた。
S25R は、greylist と呼ばれる「SPAM送信専用サーバー判定方式」の改良版。
greylist 方式は、相手のサーバーにわざと負荷をかけ、「SPAM 送信サーバーは、大量に効率よく送信を行いたいため、負荷を嫌う」ことを利用して判別を行う。
しかし、これでは何の罪もないサーバーの負荷を上げることになってしまうので、「サーバーの名前だけで善良なサーバーを見分け、greylist の適用を除外する」のが S25R 方式。
うちのサーバーでは、メールサーバーに qmail (実際にはいろいろパッチを当てたもの)を利用しているが、qmail 用の greylist フィルタに、qgreylist というのがある。
これにパッチをあて、S25R に対応させたのが qgrey。
さて、最初に「先日までは」qgrey を使っていたと書いた。
実は、S25R の研究者はその後も次々と改良方式を考えているのだが、qmail に対応させたプログラムはなかった…と思っていたのを、見つけて乗り換えたのだ。
S25R + tarpit before qgreylist パッチがそれ。
これは、qgrey ではなく、qgreylist へのパッチとなる。
しかし、qgrey 相当の機能は内包しているので問題なし。(およそ上位コンパチのようだ)
名称にもある tarpit というのは、greylist とは別の方法で「相手サーバーに負荷をかけるテスト」の名前。
やはり、SPAM 送信専用サーバーは負荷を嫌う、という性質を利用している。
で、このパッチを適用すると、S25R と tarpit と、さらには HELO 検査 (メール送信プロトコルの中で、自分のサーバー名を名乗る部分の検査。SPAM 送信専用サーバーは、名前を偽ることが多いため、これもSPAM の可能性検査となる)も行ってくれる。
さらに、Whitelist(何も検査せずに受け取る)や、Blacklist(何も検査せず、受け取り拒否する) は、IP アドレスベースとホスト名ベースの両方で登録が可能、というのも嬉しい。(qgreylist / qgrey では、IP ベースの whitelist のみ可能)
なかなかいいこと尽くめ。
しかし、これでもやはり SPAM は大量に来るのだった…
そこで、最後の手段。相手も見ずに、SPAM が良く送られてくる「国」レベルで、受け取りを拒否することにした。
この方法、中国・韓国・台湾あたりを拒否するとかなり効果がある、として知られている。
でも、自分の手元にある最近の SPAM を調べたところ、もっといろいろな国から SPAM がやってきている。
そこで、SPAM メールの Received 行を見ながら、あんたがたどこさ等を使って、送りつけてきた相手の国を判別する。
さらに、上のページでは、「その国からの接続を拒否する」ための設定ファイルまで配布してくれていると言うありがたさ。
そこで、qmail (tcpserver)用の接続拒否設定ファイルを持ってきて、次のような環境を作った。
1) サーバーに /etc/tcp.smtp/ というディレクトリを作る。
2) ディレクトリ内に、/etc/tcp.smtp ファイル(通常の qmail の設定)を移動。
3) /etc/tcp.smtp/ 内に、tcp.smtp.cn という名前で、中国(ドメインは .cn) の接続拒否設定を置く
4) 同じように、韓国 (.kr) 台湾 (.tw) などの接続拒否設定も置く。
5) Makefile を作る。
tcp.smtp.cdb:
cat tcp.smtp* > smtp.all
tcprules ../tcp.smtp.cdb tcp.smtp.tmp < smtp.all
rm smtp.all
6) make する
何のことはない、断片ファイルを全部接続してから、tcpserver の設定構築をしているだけ。
わざわざこんなややこしいことしないで /etc/tcp.smtp に書き込んでもよいのだが、拒否したい国がやたら多いことがわかったので、メンテナンス性を考慮したのだ。
今後接続拒否を増やす場合は、3 をして 6 、という作業で終わり。
割り当て状況が変わった場合も、ファイルごとに入れ替えればよいだけ。
で、現在拒否した国リスト。
.ar アルゼンチン .br ブラジル .ch スイス .cn 中国 .de ドイツ
.dk デンマーク .eg エジプト .es スペイン .il イスラエル .in インド
.it イタリア .ke ケニア .kr 韓国 .mx メキシコ .nl オランダ
.pl ポーランド .ro ルーマニア .ru ロシア .tr トルコ .tw 台湾
.za 南アフリカ
SPAM がたとえこようとも、.com や .org や .net や .info は拒否しないし、できない。.jp も。
それでも、SPAM は劇的に減った。
今後、接続拒否設定はもっと増えるかも。というか、一部を通して他は拒否、のほうが良いのか…
同じテーマの日記(最近の一覧)
別年同日の日記
16年 Microsoft Office 発売日 (1989)
申し訳ありませんが、現在意見投稿をできない状態にしています。 【kekulene】 (すみません、続きです)でも、サーバを構築するとなるとかなり難しいでしょね。 (2007-08-03 01:39:43)【kekulene】 スパム対策、おつかれさまです。僕の場合は、英語のメール=スパムなので一日一回チェックすればいいです。 (2007-08-03 01:38:53) |