スパムメールがうっとおしいので,公開しているメールアドレスはGmailだけにして,直通メールのアドレスは非公開にしていた.(Gmailはスパムフィルタが使える) しかし最近,その非公開にしているはずのメールアドレスに,スパムがたくさん来るようになった. どこからアドレスを入手したのかわからんが,どうもkamoland.comのドメイン登録情報から取得しているようだ.それしか考えられない. 非常に腹立たしいのだが,取得されたという前提で,対策を考えるしかない.
考察 (判定方法)
となると,英文のメールをスパム扱いすれば良さそうだが,スパム以外の英文メールがはじかれるのは困る. しかし,俺に届くスパム以外の英文メールは,送信元が限られている(amazon.comなど)ので,ホワイトリストで対応できそうだ. あと,英文メールかどうかの判断方法だが,
(A) Content-Typeヘッダを見るたとえば,Content-Type: text/plain; charset="iso-2022-jp" しかし,AmazonやGoogleはHTMLメールを送ってくるが,このとき Content-Type: multipart/alternative; boundary="〜"
(B) Subjectヘッダを見るSubjectが日本語の場合,必ずSubject内に=?iso-2022-jp? =?UTF-8? さらに今まで届いたスパムのSubjectを見ると,ことごとくこのようなエンコーディング指定が無かった. ということで,とりあえずSubjectにこれらの文字列が含まれない場合は,英文メールだと判断することにした. 以下のように明らかに誤判定の余地があるが,発生したら都度対応することにする.
結局まとめると,スパム扱いする条件は, (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 さて,これでどれだけ捕獲できるか.ウッシッシ 参考: |