bogofilter (2004/02/18)


OSの勉強

OS のメモリ管理なんかを勉強してみたりして。

仮想アドレス機構ってのは、つまりハードウェアの備えてる機構である。 プログラムからどっかのアドレスに書き込んだり読み出したりすると、 これを「メモリ管理装置」ってものが、実際のアドレスに変換する。 最近の汎用コンピュータのハードウェアにはそういう機能が備わっている。

一般に仮想アドレス空間は本当のメモリのアドレスよりもサイズがでかい。 そのために仮想アドレスという仕組みは存在する。 そうなると、仮想アドレスのどの部分が本当のメモリ上にあり、どこは無いのか、 これを知っている必要がある。 アドレスの変換と、仮想アドレス空間のうちどこが本当のメモリ上にあり、 どこが無いのかを管理するという機能が最近のハードウェアにはある。 随分リッチなハードウェアだな。

無いところをアドレスすると、ページフォルトになる。 ハードウェアは OS をトラップする。 このあと OS が何をするかは、 OS の勝手だ。 普通は、無いところをアドレスしたプログラムを停止し、その続行に必要な情報をどっかに 退避してから、他のプログラムを実行しつつ、 メモリ上にある要らなそうな領域をディスクか何かに退避して、 空き領域を確保し、そこに停止してたプログラムの仮想アドレス空間の 一部を割り当て直して実行を再開する。

あるいは、足りなくなりそうな時に、あらかじめ使ってなさげなところを ディスクなどに退避しておくユーザプロセスというのがバックグラウンドで動いてて、 これがページフォルトの発生率を下げるのに貢献している。Linux なら kswapd とかいうのが どうもそれっぽいですね。どっかで起動してるものなんでしょうか。 ちょっと探してみましょう。 どっかにそういう実行ファイルが存在するということは無いようです。 どうも Linux というものを俺は良く解ってませんね。

変なアドレスを参照したときに発生するエラーから、 それが、無効なアドレスやら他人のアドレスだった場合と、 メモリ上にないというだけで、 利用可能なちゃんとしたアドレスだった場合を見分けてそれぞれ処理するのは OS の仕事らしい。 前者なら、おなじみの segmentation fault (core dumped) というやつだ。 実行は再開されることなく OS によって強制的に終了されてしまうわけです。

OSって本当に大変ですよ。いや、まじでカッコイイです。

すぱむ

スパムじゃないのはハムというらしい。 あんまりですよね。このセンスは厨ですよ。そう思いませんか?

公開されているアドレスは大変な事になってるケースが多いわけですが、 多くは俺の与り知らぬところでフィルタリングされており、 俺んちまで届くというケースは少ない。 たとえば、偉い人が設定してくださったおかげで付いて来る、 X-Spam-Flag ヘッダを見れば 大概オッケーなので、俺の今までの .qmail はこんな感じだった。

| condredirect yuji-trash grep 'X-Spam-Flag: YES'
/home/yuji/mbox
  

要するに grep してるだけだ。 .qmail-trash には /dev/null とか書いといたわけです。これじゃあんまりですよね。

しかしながら、最近はそういうインチキな手口も通用しなくなってきたので、 いっちょまじめに取り組んでみました。 どうも上流では spamassassin というのが使われているようなので、 違うものにしてみた。 bogofilter というやつだ。

俺のメール環境は、長年のええかげんな管理によってむちゃくちゃでたらめなものになっており、 一旦リモートの IMAP あるいは POP に溜ったやつを、 ssh 越しにローカルの smtp に転送するというややこしい経路である。 ローカルの SMTP は qmail である。

そこで、今回、こういう一行を追加した

| condredirect yuji-trash /usr/bin/bogofilter -u

あとは、bogofilter を教育する必要がある。 これは、ドキュメントにあった bogofilter -n でマトモなメッセージをおぼえさせ、 bogofilter -s でゴミを教え込む、というので、できあがりである。 -n には妻からのメール、 bugtraq、 仕事のメールを使い、 -s には一時的に /dev/null に転送するのをやめて勢い良くローカルにためこんだ ゴミを使った。

ついでに bogotune というのも使ってみたが、 これはオマケでついてた設定ファイルとあまり変わらない値が出たので、 オマケのファイルのコメントを外してそのまま使った。

続報

お。今のところは効果抜群ですよ。なかなか具合よろしい。 上流のフィルタを潜り抜けて来たゴミも今回導入の bogofilter でひっかかってます。 優秀です。

自分の出したメールもチェックしてみた。 ゴミ判定なし。 false positive は false negative よりも このケースは、具合悪い場合が多いので、これは良い結果である。

過去メールを調べたところ、上流でゴミ判定されたにもかかわらず、 ローカルの bogofilter が見逃すものもあるので、これについて追加学習させた。 もはやゴミ排除自体が目的化しつつありますな。よくない傾向です。 100% 正解する必要はないのですが…

しかしこれでバイアグラ大安売り!!!が全く来なくなってしまうわけですね。 それもちょっと寂しい気がしますね。

以下はある spam の語彙とその評価。こういうのを見てるとけっこう楽しい。

"Ebay!"                              1  0.000000  0.071429  0.994208 +
"FF00FF"                             1  0.000000  0.071429  0.994208 +
"WORK_AT_HOME"                       1  0.000000  0.071429  0.994208 +
"eBay!"                              1  0.000000  0.071429  0.994208 +
"head:HTML_FONT_COLOR_BLUE"          1  0.000000  0.071429  0.994208 +
"head:HTML_FONT_COLOR_CYAN"          1  0.000000  0.071429  0.994208 +
"head:MIME_HTML_NO_CHARSET"          1  0.000000  0.071429  0.994208 +
"utopia"                             1  0.000000  0.071429  0.994208 +
"FONT-SIZE"                          2  0.000000  0.142857  0.997090 +
"HTML_FONT_COLOR_MAGENTA"            2  0.000000  0.142857  0.997090 +
"HTML_FONT_COLOR_RED"                2  0.000000  0.142857  0.997090 +
"IN_REP_TO"                          2  0.000000  0.142857  0.997090 +
"Inches"                             2  0.000000  0.142857  0.997090 +
"Pen"                                2  0.000000  0.142857  0.997090 +
"Stronger"                           2  0.000000  0.142857  0.997090 +
"Videos"                             2  0.000000  0.142857  0.997090 +
"head:HTML_FONT_FACE_ODD"            2  0.000000  0.142857  0.997090 +
"Gain"                               3  0.000000  0.214286  0.998056 +
"head:BIG_FONT"                      4  0.000000  0.285714  0.998541 +
"sans-serif"                         4  0.000000  0.285714  0.998541 +
"font-size"                          5  0.000000  0.357143  0.998832 +

記事リストへ