Postfix スパム対策 改定版

Back


 スパムといえば、今現在来るのは、
#韓国、中国、アメリカ等の外国勢エンドユーザホストから来るもの
#国内の特定のISP、yournet.ne.jp nttpc.ne.jp ocn.ne.jp などなどのエンドユーザホストから来るもの
#unknownなホストから来るもの
#妙な添付ファイルつきのメール
 という感じに大別できる。

  メールの基本情報はヘッダ部分に書かれていて、postfixではそのヘッダ部分をフィルタリングするheader_checks機構 を使って上記のようなスパムと思われるメールをおおまかに選別することができる。

header_checks = regexp:/etc/postfix/header_checks

と、main.cf内にチェック用ファイルのパスを指定することで使用可能になる。

 ヘッダ解析によってスパムメールを排除する上で一番安全確実な方法は、FromまたはReturn-Pathとホストの組み合わせを調べることだと思わ れ るが、残念ながらpostfix内蔵のフィルタではそこまでできない。(IF文が使えるが、これはあくまで入力1行に対してしか使えない)

 なのでホスト指定のみでREJECTするしかないわけだが、ISPエンドユーザホストから来る接続なら、ほ ぼ間違いなくスパムだと選別してよいと思われる(通常はISPのSMTPサーバを使うはずなので)。ISP標準SMTPのホスト名とエンドユーザホスト名 はたいてい区別 できるので、エンドユーザと思われるホストはみなスパムとしてREJECTすれば良いわけである。

 ただし、この論でいくと我が家のような趣味自宅サーバも REJECTされるので諸刃の剣。極悪特定ISP(yournet.ne.jp nttpc.ne.jp ocn.ne.jp)限定で適用するのはありかもしれないが、基本的にはこの手のフィルタはかけないで済むならかけない方がよし、と思われる。

#海外***.net向け
/^Received: from [^ ]* \([^\.]*\.[^\.]*\.[^\.]*\.([a-z]*\.net)/ REJECT denied host: $1
/^Received: from [
^ ]* \([^\.]*\.[^\.]*\.([a-z]*\.net)/ REJECT denied host: $1
#国内ISP向け(yournet nttpc ocn odn hi-ho aol bbexcite alpha.net 辺り)
/^Received: from [
^ ]* \([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\.([a-z\.]*\.ne\.jp|[a-z\.]*\.bbexcite\.jp) \[/ REJECT denied host: $1
/^Received: from [
^ ]* \(([a-z0-9]*\.[a-z0-9]*\.[a-z\-]*\.[a-z]*\.ne\.jp) \[/ REJECT denied host: $1
/^Received: from [
^ ]* \([a-z0-9\-]*\.[a-z0-9]*\.(ocn\.ne\.jp|hi-ho\.ne\.jp|odn\.ad\.jp) \[/ REJECT denied host: $1
#名前解決できないIPなホスト名
/^Received: from [
^ ]* \(([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*) \[/ REJECT denied host: $1
#自ホスト名・IP (111.222.333.444/my.domain.org)の騙り/localhost のREJECT
if /^Received: from ([\[]?111\.222\.333\.444[\]]?|my\.domain\.org|localhost) \(/
!/
^Received: from [^ ]* \(my\.domain\.org \[/ REJECT denied host : unknown domain
endif


 unknownなホスト、もしくはおかしなheloを使ってくるところ、だが、これは確実にスパム選別できる材料になるはず……と思っていたのが、そう でもないようである。スパムではないのだがunknownホスト(携帯など)だったり、スパムではないのにおかしなheloコマンドを打つホスト(いかん ともしがたし)もある。ので単純にREJECTしてしまうわけにもいかない模様。(考えてみると我がサーバもおかしなheloを打ってることになるかも)
 なのでこのフィルタも諸刃の剣。

/^Received: from [^ ]* \(unknown \[/ REJECT denied host: unknown domain


 残る妙な添付ファイル付きのメール、これは確実にREJECTしてもよいかと。ZIPファイルは仕方ないとして、Windows系の実行ファイル拡張子 の添付ファイルがついているものは根こそぎREJECT。

/name=.*\.scr/i REJECT
/name=.*\.exe/i REJECT
/name=.*\.bat/i REJECT
/name=.*\.com/i REJECT
/name=.*\.eml/i REJECT
/name=.*\.lnk/i REJECT
/name=.*\.nws/i REJECT
/name=.*\.pif/i REJECT
/name=.*\.scr/i REJECT
/name=.*\.shs/i REJECT
/name=.*\.vbs/i REJECT



 結論。postfixのheader_checksでほぼ安全確実に排除できるのは、わかりやすい添付ファイルが付いたウイルスメールだけということに なる。

 というわけで別の手は無いかということで、よさげなのを発見。RBLによるフィルタ。main.cfにちょろっと設定を書き足すだけで有効になる。

smtpd_client_restrictios = reject_rbl_client relays.ordb.org,
 reject_rbl_client all.rbl.jp,
 reject_rbl_client bl.spamcop.net,
 reject_rbl_client sbl.spamhaus.org


smtpd_client_restrictios = reject_rbl_client relays.ordb.org,
 reject_rbl_client all.rbl.jp,
 reject_rbl_client bl.spamcop.net,
 reject_rbl_client sbl-xbl.spamhaus.org


 自前のヘッダフィルタも設定次第でかなり強力になるが、無関係なホストを弾く恐れもある。RBLだとまれに漏れはあるがかなりの防御力を保ちつ つ、事故の可能性がほぼ皆無なので安心。ただRBLサーバの信頼性がどれほどのものなのかが問題ではある。
 とりあえずはスパムをどしどし弾いてくれるので 常用 中


 などと採用していたRBLであるが、「ヘッダ解析でもしてはじいてくれてる」などと勝手に思っていたおバカちゃんな私。実はIPではじいていてブロック ごと登録されているそうなのだが、この精度がかなりトンデモだそう。巻き添えが結構出てしまうようなので外すことに。


 というわけで結論その2、やはりとりたてて対策はないっぽい。結局、あきらかにスパムなホストを地味な手製正規表現フィルタで排除中。



2006 11/11 updated
C's gallery OS X Tips