スパムメールがうっとおしいので,公開しているメールアドレスはGmailだけにして,直通メールのアドレスは非公開にしていた.(Gmailはスパムフィルタが使える)

しかし最近,その非公開にしているはずのメールアドレスに,スパムがたくさん来るようになった.

どこからアドレスを入手したのかわからんが,どうもkamoland.comのドメイン登録情報から取得しているようだ.それしか考えられない.

非常に腹立たしいのだが,取得されたという前提で,対策を考えるしかない.

考察 (判定方法)

  • スパムの特徴: 全て海外勢なので,英文メール

となると,英文のメールをスパム扱いすれば良さそうだが,スパム以外の英文メールがはじかれるのは困る.

しかし,俺に届くスパム以外の英文メールは,送信元が限られている(amazon.comなど)ので,ホワイトリストで対応できそうだ.

あと,英文メールかどうかの判断方法だが,

(A) Content-Typeヘッダを見る
たとえば,
Content-Type: text/plain; charset="iso-2022-jp"
のように,日本語のcharsetが指定されているかどうかで判断する方法.本文のエンコーディングを調べるので,一番確実に思える.

しかし,AmazonやGoogleはHTMLメールを送ってくるが,このとき

Content-Type: multipart/alternative; boundary="〜"
となるため,判断できない.残念.

(B) Subjectヘッダを見る
Subjectが日本語の場合,必ずSubject内に
=?iso-2022-jp?
=?UTF-8?
などが含まれるはずである.(エンコーディングを指定せずに直接ShiftJISなどで書き込むという凶悪なのは無視)

さらに今まで届いたスパムのSubjectを見ると,ことごとくこのようなエンコーディング指定が無かった.

ということで,とりあえずSubjectにこれらの文字列が含まれない場合は,英文メールだと判断することにした.

以下のように明らかに誤判定の余地があるが,発生したら都度対応することにする.

  • a) 日本語メールに英文のSubjectをつけた場合 (IT系のメルマガとか?)
  • b) UTF-8だが日本語でない場合 (中国語などをはじけない)

結局まとめると,スパム扱いする条件は,

(1) Subjectヘッダにエンコーディング指定なし
 AND
(2) Fromアドレスがホワイトリストに一致しない

となった.

具体的な対策

スパム扱いの条件を満たしたメールは,procmailを使ってサーバ上で別ディレクトリに隔離することにする.

こんな感じで作成した.

$HOME/.procmailrc

WHITELIST=$HOME/whitelist

:0
* ! ^Subject.*=\?ISO-2022-JP\?
* ! ^Subject.*=\?UTF-8\?
* ? test -s $WHITELIST
* ^From:\/.*
* ! ? echo "$MATCH" |fgrep -iqf $WHITELIST
spambox

whitelistの中身は,以下のようなものである.

$HOME/whitelist

@amazon.com
@google.com

さて,これでどれだけ捕獲できるか.ウッシッシ

参考:

kamolandをフォローしましょう


© 2017 KMIソフトウェア