スパムといえば、今現在来るのは、
#韓国、中国、アメリカ等の外国勢エンドユーザホストから来るもの
#国内の特定の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サーバの信頼性がどれほどのものなのかが問題ではある。
とりあえずはスパムをどしどし弾いてくれるので
常用
中。
|