
スパムフィルターを高速化するには? 83
ストーリー by headless
低速 部門より
低速 部門より
本家/.「Ask Slashdot: Speeding Up Personal Anti-Spam Filters?」より
私は着信するメールを振り分けるためにProcmailを数年間使っているが、使っているうちにスパムのパターンリストが長くなってきた。パターンを使用する利点としては、実質的に間違いがないということだ。新しいスパムを2回以上見ることはなく、必要なメールが失われることもない。処理は1行に1つのパターンを含むスパムパターンファイルを使い、「egrep -F」を実行することで実現している。シンプルな処理ではあるが、パターンリストが長くなるにつれて処理に時間がかかるようになり、CPUパワーの消費も増えてきた。現在のところ平均的なメールを処理するのに15秒程度要する。つまり、次第に使いにくくなっており、もっと効率の良い方法に切り替えたいと思う。今のところ考えているのは小さなインデックス化されたデータベースを使うといったような方法だ。皆さんが自分で使うとしたらどのような方法を選ぶだろう。SQLiteは目的にあっているだろうか。
egrep -F じゃない (スコア:2)
egrep -F は fgrep と同じで、固定文字列を検索する。それで実用的なスパムフィルターを作れるって、すごいことじゃね?
…と思ったら、本家のタレコミ主である hmilz さんが重要なところを間違えている。 hmilz さんのコメント [slashdot.org]によれば、各メールについて「egrep -i -o -f」を実行しているのであって、固定文字列を検索する「egrep -F」は全然関係ない。
-f はパターンが 1 行に 1 個ずつ書かれたファイルを読み込んで、全パターンを検索するためのオプション。大量の正規表現パターンをコンパイルすることもなく何度も繰り返し使うなんて、そりゃ遅いに決まっている。
少なくとも、メールごとにパターンをコンパイルしないで済む仕組みが必要。既存のスパムフィルターならそういうことは当然しているけれど、他の処理もいろいろくっついてくるから運用を変える必要がある。「余計な処理は要らないから、 egrep -f を同じパターンファイルで何度も実行するのを高速化したい」というのがやりたいことだとすると、どういうツールがあるのかわからない。
富豪的 (スコア:1)
もっと早いマシンを買え。
そうでなければ、パターン(正規表現)をコンパイルして待機するデーモンでも作ればいいんじゃない? 原理的には、テキストの長さnに対してO(n)の走査時間で済むだろ。
Re: (スコア:0)
うーん、でもなあ、もっと速いマシンを買ったところで、わずかしか速くならないからなあ。
Re:富豪的 (スコア:1)
台数を増やす。
マッチングパターンのが数が多いのだから、マシンの台数もそれに合わせて増やすのだ ( w )
fjの教祖様
専用メールアドレス (スコア:1)
公開用とDM用に専用メールアドレス使うだけでだいぶspamは減らせる感じ。
spam来るようになったらそのメールアドレスだけ捨てればいいので。
あと公開用はgmailかgoogle apps使うと楽。
# でも今はもう無料のgoogle appsないんだっけ
どれだけ... (スコア:1)
thunderbird の迷惑メールフィルターで、十分間に合ってます...
# procmailがthunderbirdより重いってことはないよね?
メールアドレス変更 (スコア:0)
そんなことに手間隙費やすくらいなら、メールアドレスを変更すればよいのではないだろうか。どうせいずれまた重くなって、うまい方法がないものだろうかと相談するのが落ち。周知や登録しなおしの手間もあるけど、これを機会に不要な登録を消すというのにも良いと思う。
対策に自分の時間と労力と金を取られることも、迷惑メールに負けたような気がするからいやなんだよね。
気持ち的にもすっきりするよ。
Re:メールアドレス変更 (スコア:1)
最初は「だれがこのアドレス知ってたっけ?」という点で苦労するけど、二回目以降は段々慣れる。
スパムフィルタ自体については他の方々が言及されているので割愛。
アドレス変更と併用するなら手のかからない子がいいんじゃないかな。
# 個人的には誤判定しにくい(と思う)URI BLが好き。軽くはないけど。
にゃー。
Knuth方式 (スコア:0)
そもそもメールなんて(ry
Re:Knuth方式 (スコア:1)
なるほど、メールアドレスをもっていらっしゃらない [atmarkit.co.jp]わけですね。
秘書も雇えず、E-mailも使わない、としたら、私は何を使えばよいのかな。
Facebook, Twitter, Line, ... 何かいや。
知り合いや業務連絡なら、Groupwareかな。
それ以外、となると、自分のhome pageに連絡用入力formを用意する、とか。入力項目に特定のページを読んで理解しないと分からないような内容を入れさせるようにすれば、spamも来なくなるんじゃないかな。入学試験みたいなもので。
Re: (スコア:0)
メールアドレスを変更したって、スパムメールが届かなくなるとは限らないし、メールアドレスの変更をするにも、周知などに多大な時間と労力が掛かると思うんだけど。
しかも、その多大な時間と労力を掛けても、一部の相手から連絡が来なくなるリスクが無くなる訳ではない。
スパムが届かないだけじゃなくて、必要なメールも確実に逃さないことも大事なんだよね。
Re: (スコア:0)
spamごときのためにメールアドレスを変えさせられることのほうがよっぽど迷惑メールに負けている気がするのだが。
Re: (スコア:0)
キミ、学校とかで友達から相談を受けることないでしょ。
何でだと思う?
Re: (スコア:0)
高度なスパムフィルターを装備しているから
gmailの迷惑メールフォルダ (スコア:0)
よく楽天とかニコニコのDMが入ってるけど、解除が面倒で迷惑メールの指定をする人がいて、それでそういう学習するのかね。
Re:gmailの迷惑メールフォルダ (スコア:1)
どんなスパムフィルタにも一定の誤認識はあります。
「楽天とかニコニコのDM」が百パーセントスパムフォルダに入ってるなら話は別だけど。
Re: (スコア:0)
私も前にそう思って、戻したらホントにフィッシングメールだった、ってこともあるので、よくソースやヘッダを調べた方が良いよ。
Re: (スコア:0)
今はどうか判らないけど、前に楽天の解除しようとした時は「ログインして解除にチェックいれてOK」じゃ駄目だったからなぁ
具体的には「ログインした時点で別のメールの送信に同意したものと見なされて別のが届くようになる」とか「OKの後、隅っこにある確定ボタンを押さなきゃいけない」とかあった。
少なくともリテラシーあまり高くない人が楽天で買い物しちゃって、解除のやりかたが判らなくて仕方なくスパム学習させた、ってことはあると思う。
Re: (スコア:0)
リテラシ高い人で、メルマガ類の解除は時間コストがかかるからspamフィルタに登録してるという人を知ってる。
spamassassinでいいのでは? (スコア:0)
spamassassinのようなフィルタプログラムでスパムにマークして、それのマークをprocmailで振り分ければいいだけでは?
たまに誤判定もするけど、それは学習させればいいし。定期的に自動学習するようにcronでも設定しておけば、誤判定したメールをspamフォルダに移すだけでよいし。
まず、自分でスパムのどの部分のパターンを取り出してprocmailのレシピにするのかが手間だし、そのパターンもランダムに変わらないところを選ばないと行けないし、あまり一般化すると必要なメールも引っかかるしで、面倒ばかりでいいことあるとは思えないけど。それから、procmailのレシピが肥大化して15秒とか、いったい何件ルールを書いているのだか。ちょっと古めのCPUでも、1000件の処理なんて一瞬でしょう?
自分でルールを厳密に決めて、完璧にスパムをはじきたいなら、もうルールをひたすら書き続ければいいと思う。
Re: (スコア:0)
たまにある誤判定が業務用には厳しい。
Re:spamassassinでいいのでは? (スコア:1)
たまに迷惑メールフォルダをチェックする必要はあるだろうね。
どんな方法でも誤検出をゼロにすることはできない。従って、どんな方法であろうと、たまには迷惑メールフォルダをチェックする必要はある。例外は、本人チェックのみ。
すべて本人チェックする業務負荷と、たまに迷惑メールフォルダをチェックする業務負荷のどちらが大きいかを勘案して決めなよ。
Re:spamassassinでいいのでは? (スコア:1)
正直、誤判定はゼロ、とは断言できません。
SA標準の状態では、日本語メイルに対しては結構誤判定が多いです。
自前でuser_prefsを11年ほどメンテしてますが、誤判定ゼロか、と言われるとちょっと自信がない。
7〜8年位前に一回だけ、spamディレクトリにhamが紛れ込んだことがあります。
それ以来、かなり安全方向にルールを作っています。
Re:spamassassinでいいのでは? (スコア:2)
Re:spamassassinでいいのでは? (スコア:1)
私は通称「TLEC の user_prefs」 [spamassassin.jp]を利用しています。あとは、誤判定されないように、普段メールをやりとりする相手はホワイトリストを追加する感じで、だいたい問題ないですね。
あとは、入り口でS25R+tarpitting [srad.jp]を実施。
SMTP接続がかかったときに、接続元のIPアドレスを見て「動的IPアドレスっぽい逆引き名のホスト」「逆引き出来ないホスト」からの接続の時は65秒待つ、というだけの処理なんですが、それだけで面白いようにメール受信数が減ります。
Re:spamassassinでいいのでは? (スコア:1)
なるほど、"S25R+tarpitting" というのはシンプルだけど、強力そうですね。
逆に強力だから、みんながこの方法を使ったら、spammerが音を上げるか、対抗してくるか。抗生物質抵抗性菌みたいなもので。
Re:spamassassinでいいのでは? (スコア:1)
ああ、まだ拙作user_prefs使って下さってる方がいらっしゃる。
ありがとうございます。m(__)m
最近更新が滞り気味ですいません。
半ばライフワーク化してますが、メイルがなくなるか、spamがなくなるか、SAがなくなるか、自分がキーボード叩けなくなるまで更新し続ける所存です。
Re:spamassassinでいいのでは? (スコア:1)
m(__)mm(__)mm(__)m
Re:spamassassinでいいのでは? (スコア:1)
まずは、あんたのいう「業務用」を定義しろ。
話はそれからだ。
Re: (スコア:0)
どっちかって言うと、「たまに」の定義をまず知りたい。
仕事用だろうが私用だろうが、誤判定が致命的なミスにつながる可能性はある。
Re: (スコア:0)
誤判定をスパムフォルダに移動させる手間と、すり抜けてきたスパムの内容から、ランダムに変わりそうになく特徴的な部分を分析してprocmailのレシピに書き込むのと、どちらが手間でしょうか?
大人数を抱える業務システムを運用したことがないので、ストーリーの方法と比較してどれくらい厳し野かがちょっと見当つきません。
Re:spamassassinでいいのでは? (スコア:1)
私は、SpamAssassinを使い始める前は、procmailで頑張っていた時期がありました。
はっきり言って、破綻します。
procmailのレシピは書きにくく、記述できる内容も貧弱で、お話になりません。
procmailでレシピをゴリゴリ書く位なら、SAのルールをいじる方が遥かに楽です。
spamフィルタの精度にもよりますが、一般的に、誤判定はfalse negativeの方が処理は楽です。
false positiveが面倒。
Re: (スコア:0)
この人間様は誤判定をすることなどないという妄信はいったいどこから来るのだろうか。
飛行機だってオートパイロットは信用できないから最初から最後まで人間が張り付いて操作すべきだよね。
Re: (スコア:0)
内容によるけど業務用には厳しいね。納期変更とかフィルタリングされたら泣くに泣けない。
「フィルタリングされてました」なんて言ったら信用がた落ちだし。
Re: (スコア:0)
自分で設定したprocmailのレシピでも同じ事が起こる可能性もあるよね?
ホワイトリスト作っておけばいいのか?
Re: (スコア:0)
どう判定するか予測できるか出来ないかの違いかな。
いっぱいやる (スコア:0)
焦らない、焦らない。
お湯を沸かして、お茶なりコーヒーなり準備して、甘いものをつまみながら一息つく。
そうするといつの間にか処理が終わってます。
今時procmailとか(笑) (スコア:0)
「えーマジprocmail?」「キモーイ」「procmailが許されるのは20世紀までだよねー」「キャハハハハ」
とか言われて、やれdropmailだのslocalに移行しろだの言われてたのが2007年くらいまで。
今はもうMDAつったらSieve一択だろ? 常識的に考えて。
どんだけ時代に取り残されてんだ…
ルールのコンパイルひとつできないMDAなんて窓から放り投げろ。
そもそもスパムフィルターなんてのは、MDAに落ちてくる前にMilterの段階でマークするなり落とすなりしとくものだろ?
さあ振り分けって段階になって初めてスパムフィルターかけてるのがそもそもイカレてるんだよ。
ベイズが信用ならんって場合でも、それならそれで自分でパターン書いといてsa-compile的なことして常駐させとけよ。
だいたいからしてprocmailから更にegrepとかもうな…
sieve使うようになってもrequire "regex"せずに、毎回毎回-exec egrepしてそうだわ…
Re:今時procmailとか(笑) (スコア:1)
#すんませんMDAにprocmail使ってます
Milterってそんなにいいんですか。
時々設定がわからんってトラブル報告見るんですけど。
なんつうか、Milterってメイルの流れがよくわからんのですよ。
昔からprocmailは卒業したかったんで、取り敢えずSieveチェックしてみますね。
Re:今時procmailとか(笑) (スコア:1)
> MTA内処理でのタイミングを知りたいならcfのマニュアル読むのが一番早い。
え?sendmai.cf?
マジっすかorz
#遅ればせながら、元コメのprocmailが腐ってるってのは全面的同意します。
Re: (スコア:0)
そうは言ってもubuntuだってprocmailが標準なんだけど・・・
Re:今時procmailとか(笑) (スコア:1)
むしろsieveが標準のディストリビューションて何ですかね?
Re: (スコア:0)
こういう発言する人って俺かっこいいとか思っちゃってんだろうな...
メーラー標準機能 (スコア:0)
Apple Mail標準の迷惑メールフィルタで特に困ってない。
誤判定は学習させればいいだけだし。
いちいち手動で特徴抜き出してリスト作成してって、すげえ面倒くさい。
間に他のプログラムを噛ませるのも(管理や連携が)面倒くさい。
Thunderbirdとかにも似たような機能あるんだろうし、移行しても標準機能で満足すると思う。
Re: (スコア:0)
いまんとこThunderbird利用中
Yahooと楽天の不要なサービスのメールは登録後には迷惑メールに弾くようになっているなぁ
スパムフィルタを高速化 (スコア:0)
スパムフィルタを使わないのが一番いいな
Re: (スコア:0)
ルールに
・IPアドレス逆引きができない物は基本不許可(ホワイトリスト外を除く)
・逆引きしたドメイン名が特定ルール(mail-b??.netとか)だとはじく
だけでそこそこはじける気もしますが。
Re:使われなくなったパターンを自動的に摘除してくれる仕組みはないの? (スコア:1)
> 要らなくなった定義を自動的に摘除してくれる仕組みとかって、ないんでしょうか。
いまんとこ、そういう便利なものは見たことも聞いたこともありません。
自分も手作業でやってます。
キミが作るしか!m9(・∀・)ビシッ!!
Re:SPAM業者を撲滅する (スコア:1)
仰る通りだと思います。
因みに、国内サイト発スマホ宛spamはデ通協通報が効きます。(経験者は語る)
http://twitter.com/Yoh_Matsuda/status/222223082071392256 [twitter.com]
http://twitter.com/Yoh_Matsuda/status/222312620429033473 [twitter.com]
http://twitter.com/Yoh_Matsuda/status/222313662948450305 [twitter.com]
http://twitter.com/Yoh_Matsuda/status/222314908732231680 [twitter.com]
http://twitter.com/Yoh_Matsuda/status/222576636762144769 [twitter.com]
http://twitter.com/Yoh_Matsuda/status/222766231382536192 [twitter.com]
Re:スパム業者の知能指数 (スコア:1)
「配信」「購読」
などの言葉が入っているメールは
ほぼメルマガだと断定してます。
「この機会に」とかも異様にスパム率が高いです。