Anti Spam資料 by m-ito (H18.01.16)
駄文です(^^;
Spam対策の方法論
統計的方法
- メール本文中の単語の出現確率により統計的に判断する(ベイズ理
論等)。
- サンプルとなるメールを収集し、出現確率等を記録(学習)させる
必要がある。
- 学習量が増えるごとに判断が正確になってゆく。
- 統計的に判断するため、新手のspamもなんとなく自然に判断でき
てしまう。
- 学習させるデータを選択することで、「自分好み」な判断を憶え
こませる事が可能。よって、クライアントでの対応方法として向
いている。
参考
データベースマッチングによる方法
- 接続元IP、接続元FQDN、ヘッダー送信元アドレス等をspam送信情
報を集めたデータベースと照合し判断する。
- 商用ベースのソフトウェアが主流となる。
- ボランティアベースのデータベースを利用する方法も有るが、現
状ではあまり機能していないように思える。
- spam判断がデータベースの収集傾向によって決まるので、はたし
てその判断基準が自組織に当てはまるかどうか事前検討が必要か
も?。
- サーバでの対応方法として向いている。
パターンマッチングによる方法
- 接続元IP、接続元FQDN、エンベロープ情報、本文等に対して、正
規表現を利用したパターンマッチングを行い判断する。
- クライアント側、サーバ側のどちらの対応方法としても利用でき
る。
参考
クライアントでの対応例
SpamAssassin
http://spamassassin.apache.org/
- procmailと連携させて利用
- ベイズ理論による識別
- ユーザ自身が学習させる事で、ユーザ好みの識別を憶えていく
- ユーザ権限での設定
bogofilter
http://bogofilter.sourceforge.net/
- procmailと連携させて利用
- ベイズ理論による識別
- ユーザ自身が学習させる事で、ユーザ好みの識別を憶えていく
- ユーザ権限での設定
bsfilter
http://bsfilter.org/
- procmailと連携させて利用
- ベイズ理論による識別
- ユーザ自身が学習させる事で、ユーザ好みの識別を憶えていく
- ユーザ権限での設定
- 開発者が日本人
サーバでの対応例
POPFile
http://popfile.sourceforge.net/
- POPデーモンと連携させて利用(pop proxy)
- ベイズ理論による識別
- ユーザ自身が学習させる事で、ユーザ好みの識別を憶えていく
SpamAssassin
http://spamassassin.apache.org/
- sendmailとMILTER機能により連携させて利用
- ベイズ理論による識別
bogom
http://www.usebox.net/jjm/bogom/
- bogofilterからsendmail(MILTER)へのインターフェイスを提供
- sendmailとMILTER機能により連携させて利用
- ベイズ理論による識別
bsfilter
http://bsfilter.org/
- POPデーモンと連携させて利用(pop proxy)
- ベイズ理論による識別
- 開発者が日本人
regex-milter
http://www.benzedrine.cx/milter-regex.html
- sendmailのMILTER機能による連携
- 正規表現による識別
既存手法の評価
クライアント側での対策としては、ベイズ理論を利用したフィルタ
とprocmailの連携というパターンが実績、効果共に高い。
サーバ側での対策としては、sendmailのMILTERインターフェースか
ら、各種(ベイズ理論、正規表現マッチング etc)のフィルタを呼び
出す形式が今後の主流になるのではないかと思われが、MILTERイン
ターフェースの仕様に関するわかり易い資料が現時点では乏しく、
どの程度、対応フィルタが出てくるか、またはエンドユーザが簡単
に自作フィルタを組み込める程度のMILTERに関する技術資料が出て
くることが焦点となる(かも?)。
個人的見解
ベイズ理論
ベイズ理論を初めとする統計的手法に関しては、「spam送信者側で
の対策も進んでおり効果が薄れてきている」との意見もあるようだ
が、実際に利用(非ベイズ理論)してみて、依然と非常に有効な手法
であると感じている。確率にして95%程度のspamが排除できている。
MILTER機能
MILTER機能に関してはMTAとして実績の高いsendmailが備えたフィル
タインタフェースとして有望であることは間違いないと思われるし、
対応したフィルタを利用するだけであれば、サーバに掛かる負荷も
低く抑えられ良い選択肢であると思われる。ただし...技術資料の不
足、インターフェース仕様そのものの煩雑さを考えると、独自のフィ
ルタを作り、MILTER対応にするという向きには、かなり垣根が高い
と思われる(というか、やりたくない)。
その他の手法
別の方法として、現時点では一般的ではないかもしれないが、上記
に紹介したURLの情報から、
- DNSの逆引き(IP->FQDN)ができないホストを拒否
- DNSの逆引きによるFQDNから動的割り当てのユーザ回線と推察
されるホストを拒否
- 接続要求に対して、わざと一定の遅延時間(10秒程度)後に応答
する
上記の3手法を併用する事によっても、ベイズ理論のフィルタを用
いたときと同程度の効果を確認した。これらの手法では、spamを判
断する為にメール本文を解析する必要が無いため、負荷が非常に軽
いという特徴が有る。
参考
運用面
運用面においては、いずれの方法を採用しても一定の割合で正しい
メールをspamと誤判断することは避けられないため、誤判断が発生
した時のエンドユーザから管理者への連絡方法、対応方法等をあら
かじめ取り決めておく必要があると思われる。
そんでもって、車輪の再発明
統計的手法フィルタ(非ベイズ理論)
sf-0.5.tar.gz(2007/02/21)
ベイズ理論を理解しづらいと感じたお馬鹿な私が、もっとシンプ
ルな考え方でも効果が見込めるのでは?と思い、自分なりの仮説
に基づいてフィルタを実装してみたら、結構いけてしまったとい
う代物。
詳細は
sf-0.5 -- spam filter for UNIX-like systems
より。
smtp daemonラッパープログラム
smtp_wrapper-0.4.tar.gz(2006/10/02)
上記、「その他の手法(3手法)」をsendmailと共に利用しようと
したが、MILTER仕様の煩雑さにメゲてMILTER対応フィルタ作成を
あきらめ、smtp daemon(sendmail etc)のラッパから単純な独自
インタフェースでフィルタを呼び出すという方法でお茶を濁した
作品。
サーバの負荷がちょい高めらしいが、標準入出力と標準ファイル
を読み書きできる言語なら何でも(sh, perl, c ...)フィルタが
書けてしまうという点がちょと気に入っているらしい。
また、フィルタ次第でspam対策に限定しないあらゆる応用が可能
に...。
間違っても、socketプログラミングの練習の為だけに作ったわけ
ではない。
詳細は
smtp_wrapper-0.4 -- SMTP filtering(spam, virus etc) support daemon
より。
リンクいただいております
m-ito@myh.no-ip.org
[更新]