D:20020826 免責事項
あっちこっちからやってくるspamを除去するのにISPのサービスを使っている。しかし、これだけではまだ足りない。とくに大陸方面からやってくるspamを何とかしようという試み。完全ではないけれど、ほぼいい感じになってきたのは、woody標準のMTAであるEximのおかげだ。
spam除去の仕組みは、spamメールを選別するフィルターファイルをホームディレクトリに設置することで実現している。詳しくはExim付属のドキュメントを参照のこと。[5]
今回はとくに大陸方面のCとかKの言語で送られてくるメールを対象とする。これらの言語の特徴がメールヘッダーのなかにあるのは容易に予想がつく。実際、spamメールのヘッダーの「Content-Type:」フィールドのなかに「GB2312」や「ISO-2022-KR」といった文字列が共通して見られる。このような特徴を拾い出して列挙したのがこの一覧。これをもとにフィルタのルールを記述していく。
GB2312 |
ISO-2022-KR |
ks_c_5601-1987 |
euc-kr |
Exim付属のドキュメントの例を参考にして、除去すべきメールを選別するルールを記述したフィルタファイルはつぎのとおり。
# Exim filter <<== do not edit or remove this line if $header_Content-Type: contains "text/html" or $header_Content-Type: contains "GB2312" or $header_Content-Type: contains "ISO-2022-KR" or $header_Content-Type: contains "ks_c_5601-1987" or $header_Content-Type: contains "euc-kr" then save $home/spam # seen finish endif if $header_Subject: contains "euc-kr" or $header_From: contains "euc-kr" or $header_Subject: contains "ISO-2022-KR" or $header_From: contains "ISO-2022-KR" or $header_Subject: contains "ks_c_5601-1987" or $header_From: contains "ks_c_5601-1987" or $header_Subject: contains "GB2312" or $header_From: contains "GB2312" then save $home/spam # seen finish endif
このフィルターファイルを.forward
という名前でホームディレクトリに設置します。
フィルターファイル(.forward
)を設置したら、検証の前に適切な場所($home/mail/fooなど)に適切な名前(spamでなくても良い)で空の一時ファイル(regular file、644)を作成しておきます。前節のフィルタファイルの例でいえば、ホームディレクトリへ移動した後につぎのようにして一時ファイルを用意します。
~$ touch spam
if-endifブロック内にある
save $home/spam
は、このブロックがまだ検証中のため予想外のメールが除去されないようにするためのものです。このif-endifブロックの条件に合致したメールだけがspam
という名前のファイルへsave(追記)されていき、mailboxには転送されません。spam
の内容を調べて予定どおりの動作をしているかを検証します。失われたメールは元に戻りません。くれぐれも十分な検証期間を設けて大切なメールを除去しないよう注意してください。
検証の結果、spamメールを選別するフィルタが予定どおりの動作をしていれば、if-endifブロックの
save $home/spam
を
seen finish
と変えて実際の運用を始めます。