postfix + Rgrey での spam 対策
Posted by yoosee on Debian at 2006-06-29 23:42 JST1 Rgrey - S25R + greylisting
postfix に Rgrey の方法で smtp spam filtering を入れた。ささださんの真似。1日動かした時点での効果としては、amavis の bannedmail フォルダに落ちるメールが、約 1/10 に減少している。spam filter で spam フォルダに落ちるメールは 1/3〜1/4程度になった。これだけで spam を遮断することにはならないが、後段の amavis や spamassassin に比べて処理がかなり軽いので負荷軽減にもなる。2 Greylisting + S25R
基本的な発想は Greylisting と言う方法。つまり「smtp 接続に 450 (一時的な拒否) を返して再送要求すると、まともな MTA なら再送するけど spam tool や virus は再送しないから spam を遮断できる」というもの。一度再送が行われた IPアドレスと From, To の組合わせは記録され、1ヶ月間は再度の再送要求無く処理される。一定時間が経過するまで一時拒否(4xx)して、それでも接続してきたら、たぶんopen proxyじゃないと思われるので受け取ることにしよう。
しかしこれだと「でもそれってまともな MTA にも余計な負担をかけるよね」と言われるのももっともな話。「じゃあ怪しげな接続元だけにこの手を使おう」と言うことにして、S25R にあるような
に基づき、「逆引き出来ないか、逆引き結果がいかにも回線系サービス」のものに Greylisting を適用する。有効なスパム対策は、メール中継サーバからのSMTPアクセスを受け入れる一方で、エンドユーザー用回線からのSMTPアクセスを拒絶することである。それらは、IPアドレスの逆引き名の特徴に基づいて識別できる。
こうした接続元逆引きパターンによる判別は、postfix の場合は main.cf の設定のみで対応出来る。設定内容は rgrey そのままだが、一応書いておくと
/etc/postfix/main.cf
smtpd_recipient_restrictions = ... , regexp:/etc/postfix/check_client_fqdn smtpd_restriction_classes = check_greylist check_greylist = check_policy_service inet:60000/etc/postfix/check_client_fqdn
/^unknown$/ check_greylist /^[^\.]*[0-9][^0-9\.]+[0-9]/ check_greylist /^[^\.]*[0-9]{5}/ check_greylist /^([^\.]+\.)?[0-9][^\.]*\.[^\.]+\..+\.[a-z]/ check_greylist /^[^\.]*[0-9]\.[^\.]*[0-9]-[0-9]/ check_greylist /^[^\.]*[0-9]\.[^\.]*[0-9]\.[^\.]+\..+\./ check_greylist /^(dhcp|dialup|ppp|adsl)[^\.]*[0-9]/ check_greylistpostgrey は Debian なら公式パッケージが用意されているので apt 一発。と言うことで導入は容易だ。check_client_fqdn の正規表現は色々試してみるのが良さそうか。
ちょうど、Rgreyでのgreylisitingの代りにtarpittingを使う手法、Starpitについての提案を書いたところでした。
Starpitでほぼ誤検出無く98%のスパムを排除
http://d.hatena.ne.jp/ste ... lthinu/20060706
Postfixのバージョンを上げないといけないという問題があるのですが、もしよろしければお試し下さい。
あとこれは毎回遅延を挟むんですよね? 要は postgrey のように、一度通ったアドレスを一定期間素通しするというアクションは無しで。
解決策として、postgreyにパッチ当てる形でtarpittingも利用できるようにしたいと考えています。
そして設定によっては、tarpitting and greylisting とか tarpitting or greylisting の構成に出来るようにもできればと。