今までのスパムメール対策の場合、海外から来るスパムメールはガシガシ弾いてくれていたから問題ないのですが、数は少ないとはいえ国内から来るスパムメールはPostfix側でのフィルタが弱すぎるせいで最後の頼みがprocmailで動かしているDNSBL、URLBL、ベイジアンスパムフィルタだけだったので、もう少し国内から来るスパムメールもチェックしたい!ということでPostfix制限クラス(smtpd_restriction_classes)を導入してみました。

要は何がしたいかと言うとsmtpd_client_restrictionsのチェックをパスした国内からのメールをsmtpd_sender_restrictions側でもう一度動的IP(若しくは逆引きできない)かどうかチェックして、動的IPだった場合はエンベロープのFROMのFQDNがフリーメール等のFQDNだった場合は要求を拒否したかったのです。

今回追加した項目は以下のとおり。

> vi /etc/postfix/main.cf
—————————————–
smtpd_restriction_classes =
 clientsender_matching

clientsender_matching =
 check_sender_access regexp:/etc/postfix/sender_matching

smtpd_sender_restrictions =
 check_client_access regexp:/etc/postfix/client_matching
—————————————–

> vi /etc/postfix/client_matching
—————————————–
# [rule 1]
/^[^.]*.*[0-9]{1,3}-[0-9]{1,3}.*\..+\.[a-z]/    clientsender_matching
# [rule 2]
/^[^.]*.*[0-9]{1,3}\.[0-9]{1,3}.*\..+\.[a-z]/    clientsender_matching
# [rule 3]
/^[^.]*.*[0-9]{1,3}x[0-9]{1,3}.*\..+\.[a-z]/    clientsender_matching
# [rule 4]
/^[^.]*.*[0-9]{4}.*\..+\.[a-z]/    clientsender_matching
# [rule 5]
/^[^.]*.*[0-9]{3,}[a-z]{3,}.*\..+\.[a-z]/    clientsender_matching
# [rule 6]
/^[^.]*.*[a-z]{3,}[0-9]{3,}.*\..+\.[a-z]/    clientsender_matching
# [rule 7]
/^[^.]*.*[0-9]{3,}-[a-z]{3,}.*\..+\.[a-z]/    clientsender_matching
# [rule 8]
/^[^.]*.*[a-z]{3,}-[0-9]{3,}.*\..+\.[a-z]/    clientsender_matching
# [rule 9]
/^[^.]*.*(dhcp|dial|ppp|dsl|flets|ftth|cable).*\..+\.[a-z]/    clientsender_matching
# [rule 10]
/^unknown$/    clientsender_matching
—————————————–

> vi /etc/postfix/sender_matching
—————————————–
/.*@yahoo\.co\.jp$/   450 may not be mail exchanger
/.*@hotmail\.co\.jp$/   450 may not be mail exchanger
/.*@hotmail\.com$/   450 may not be mail exchanger
/.*@gmail\.com$/   450 may not be mail exchanger
/.*@nifmail\.jp$/   450 may not be mail exchanger
—————————————–

こうすることでsmtpd_sender_restrictionsで再度動的IP(若しくは逆引きできない)かどうかを判定して、sender_matchingにマッチしたFQDNだった場合に要求を拒否することができます。

詳細はpostfixのスパムメール対策(排除率は99.975%だった)をご覧くださいませ。