27
4月
1

Postfixのスパムメール対策Ver3


————————————

※(2007/7/18追記)
本スパムメール対策は基本的に海外ホストからの非スパムメールを受取ることがほとんど無く、
国内ホストからのスパムメールが少ない環境の方
ならば幸せになれるかもしれません、
それ以外の環境で使用すると思わぬ弊害(reject_unknown_clientによるREJECT等)や逆効果といった自体を
招く可能性がありますので、導入される場合はPostfixのスパムメール対策の説明を一通り目を通して頂き、貴殿の運用ポリシーに合っているか等十分検討して下さい。

本記事の詳細についてはPostfixのスパムメール対策をご覧下さい。

————————————

CIDRを算出するスクリプトを作ってみた。で作成したcidr_tableをPostfixに導入してみました。

現在のpostfixのスパムメール対策でも十分スパムを排除できてきるのですが、maillogを見ていてウチに来るスパムメールはほとんどが海外から来ていて国内からはほとんど来ていないということに気が付いたのです。


日本語のスパムメールもほとんどが中国、韓国だったりします。恐らく国内から来るスパムメールは全体の1%に満たないと思います。

そこでsmtpd_client_restrictions部分にcidr_tableを追加して、国内のIPだった場合は以降のsmtpd_client_restrictionsの評価はパスして、海外のIPだった場合のみ以降のsmtpd_client_restrictionsの評価を継続するという手法を取り入れてみることにしました。

現在のmain.cfの主な設定は以下のとおりです。

#strict_rfc821_envelopes = yes
disable_vrfy_command = yes

smtpd_client_restrictions =
  permit_mynetworks
  check_client_access btree:/etc/mail/dracd
  check_client_access cidr:/etc/postfix/client_cidr
  reject_unknown_client
  check_client_access regexp:/etc/postfix/client_restrictions
  reject_unlisted_recipient
  reject_unauth_destination

smtpd_helo_required = yes

smtpd_sender_restrictions =
  permit_mynetworks
  check_sender_access regexp:/etc/postfix/sender_restrictions
  reject_unknown_sender_domain
  reject_non_fqdn_sender
  reject_unverified_sender


#smtpd_helo_restrictions =
#  permit_mynetworks
#  reject_invalid_hostname
#  reject_non_fqdn_hostname
#  reject_unknown_hostname

smtpd_recipient_restrictions =
  permit_mynetworks
  check_client_access btree:/etc/mail/dracd
  reject_unauth_destination

check_client_access cidr:/etc/postfix/client_cidr部分がcidr_tableによるフィルタリングです。

予めclient_cidrを/etc/postfixに移動してpostmap /etc/postfix/client_cidrを実行しておきます。

またRFCで必須としていない逆引き設定ですが、今回海外のIPに限定できるので、reject_unknown_clientも追加しました。

それと非スパムなメールにエンベロープ内のフォーマット間違いが意外と多いので、strict_rfc821_envelopesとsmtpd_helo_restrictionsはコメントしました。

smtpd_client_restrictions部分について流れを説明すると、

permit_mynetworks#自ホストからの接続はOK
check_client_access btree:/etc/mail/dracd#pop before smtpで認証済みホストからの接続はOK
check_client_access cidr:/etc/postfix/client_cidr#国内からの接続はOK
———ここまででOKなら以下は評価しない——–
以下省略

という条件になります。

smtpd_sender_restrictions、smtpd_recipient_restrictions等は別途評価されます。

今回のフィルタリングの特徴は国内からの接続には優しく海外からの接続には厳しくってところでしょうか、言い換えるなら国内からのスパムが多いサーバーでは返って逆効果だということです。

また私が作成した国内のIPを集めたclient_cidrですが、正直すべての国内のIPを網羅しているのかわかりませんし海外のIPが混ざっているかもしれません、ただclient_cidrはマッチしたIPをOKとしているだけなので、仮に国内のIPが欠如していてもcheck_client_access cidr:/etc/postfix/client_cidr以下の評価対象となるだけですので、差ほどリスキーな状況になることはありません。(海外のIPならその逆になるだけ)

それとこれを導入するにあたり本格的に統計をとってみようと思い、WEB上から確認できるツールを作成しました。
スパム統計

↑はmaillogとprocmailのログを日毎に集計しているものです。1時間おきに更新しています。

上段がpostfixでのフィルタリングを通過したメールをprocmailのログから非スパムなメール数、スパム判定(bsfilterとDNSBL、URLBL)されたメール数を表示しています。
中段がpostfixでREJECTされたメールの一覧を表示しています。
下段がREJECTの内容毎の集計を表示しています。

ちなみに今日21:00現在の統計を見てみると、
現在までにREJECTした総数は833
逆引きできないIPによるREJECTが225
S25R(改)によるREJECTが188
宛先不明によるREJECTが185
FROMのアドレスの不正によるREJECTが142
FROMのドメインが不正によるREJECTが51
FROMのアドレスが存在しないことによるREJECTが21
その他のREJECTが21(設定変更後に私自身がオープンリレーテストを行った結果)

配送されたメールの総数が15
非スパム判定が7
bsfilter、DNSBL、URLBLによるスパム判定が8

いずれも誤判定は0

配送された8通のスパムはすべてが国内から送られたものです。
最初にほとんど国内からのスパムは来ないと書きましたが、唯一仕事で使用しているwebmasterメール(いわゆる同胞メール)宛てに送られてきたスパムが転送されてきたものなのです。(ヘッダーを見るとこれらも元は海外から発送されています。)

総数833から宛先不明185、その他21を差し引いて、配送されたスパム8を足した数が635、これを単純に計算するとPostfixのみのREJECT率は約98.5%、リトライによる再送もあるので実数はもう少し低いかもしれませんが実用レベルに十分達している感じです。

これで1ヶ月間の統計をとったら、postfixのスパムメール対策を更新しようと思います。
(↑の統計ツールもいっしょにアップする予定です。)

1ヵ月後が楽しみです:)

Enjoyed reading this post?
Subscribe to the RSS feed and have all new posts delivered straight to you.
1 Comment:
  1. reject_unknown_clientについて。…

    (more…)

Post your comment



now loading...