postfwd 不对 sasl 用户进行速率限制

postfwd 不对 sasl 用户进行速率限制

我想使用后发版本 2 来限制我的 sasl 认证用户每天发送的邮件数量。

我安装了最新的 tarball:postfwd-1.35 和 Centos 6.4 的最新 postfix

在我的心里我只有这条规则

id=RULEZEROSASL
  sasl_username=~/^(\S+)$/
  action=rcpt(sasl_username/500/86400/REJECT only 500 recipients per day for $$sasl_username) 

它应该只拒绝经过身份验证的用户的邮件(而不是来自受信任邮件服务器的邮件)。

我的 postfwd2 监听 tcp 10045,在我的 postfix main.cf 中我有

# Restriction Classes
smtpd_restriction_classes       = postfwdcheck
postfwdcheck                    = check_policy_service inet:127.0.0.1:10045
127.0.0.1:10045_time_limit      = 3600

...

smtpd_recipient_restrictions =
        permit_mynetworks
        permit_sasl_authenticated
        permit_tls_clientcerts
        reject_unauth_destination
        check_recipient_access  hash:/etc/postfix/access
        reject_invalid_helo_hostname
# postfwd con rate limiting
        check_policy_service inet:127.0.0.1:10045
        warn_if_reject reject_non_fqdn_helo_hostname
        warn_if_reject reject_unknown_helo_hostname
        warn_if_reject reject_unknown_client
        reject_non_fqdn_sender
        reject_non_fqdn_recipient
        reject_unknown_sender_domain
        reject_unknown_recipient_domain
        warn_if_reject reject_unverified_sender
        reject_unverified_recipient
        reject_rbl_client zen.spamhaus.org
        permit  

在 /etc/postfix/policy

.   postfwdcheck

我在日志和命令中没有看到匹配规则的条目

postfwd2 -vv --dumpcache -f /etc/postfwd.cf

显示请求编号

[STATS] postfwd2::policy 1.35: **5** requests since 0 days, 01:05:31 hours

仅对于使用以下方法进行的手动测试增加:

 nc 127.0.0.1 10045 <request.sample

知道为什么 postfwd 不能被 postfix 调用吗?

答案1

后缀限制类可以返回三个答案,OK、REJECT 或 DUNNO,通常它们有 (OK, DUNNO) 或 (REJECT, DUNNO),这是由于后缀的功能方式。DENY 和 OK 表示忽略其余检查,DUNNO 表示继续进行下一个检查。

因此,在您的情况下,permit_mynetworkspermit_sasl_authenticated返回 OK,所以它不会在 下进行进一步检查smtpd_recipient_restrictions,但您可以将其放在另一个限制类中,然后该限制类必须首先返回 OK,才能转发邮件。

答案2

您不应该将“smtpd_recipient_restrictions”用于“action=rcpt(...)”,因为它需要知道recipient_count属性。从手册页中:

 rcpt (<item>/<max>/<time>/<action>) 
   this command works similar to the rate() command with the difference,
   that the rate counter is increased by the request's recipient_count
   attribute. to do this reliably you should call postfwd from 
   smtpd_data_restrictions or smtpd_end_of_data_restrictions. if you want
   to be sure, you could check it within the ruleset:
      # recipient count limit 3 per hour per client
      id=RCPT01 ;  protocol_state==END-OF-MESSAGE ;  client_address!=10.1.1.1
         action=rcpt(client_address/3/3600/450 4.7.1 sorry, max 3 recipients per hour)

因此,如果您在 smtpd_data_restrictions 中使用“check_policy_service inet:127.0.0.1:10045”,它将起作用。希望如此。

相关内容