web-dev-qa-db-ja.com

postfwdはsaslユーザーをレート制限しません

postfwd バージョン2を使用して、sasl認証済みユーザーが送信する1日あたりのメール量を制限したいと思います。

Centos 6.4の最新の接尾辞を含む最新のtarball:postfwd-1.35をインストールしました

私にはこのルールしかありません

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

これは、認証されたユーザーのメールのみを拒否する必要があります(信頼できるメールサーバーからのメールは拒否しません)。

私のpostfwd2はtcp10045と私の接尾辞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に関与していない理由はありますか?

4
golemwashere

接尾辞制限クラスは、OK、REJECT、またはDUNNOの3つの回答を返すことができます。通常、接尾辞の機能方法により、(OK、DUNNO)または(REJECT、DUNNO)が返されます。 DENYとOKは、残りのチェックが無視されることを意味し、DUNNOは、次のチェックに進むことを意味します。

したがって、あなたの場合、permit_mynetworksまたはpermit_sasl_authenticatedはOKを返します。したがって、smtpd_recipient_restrictionsの下でそれ以上チェックしませんが、別の制限クラスに配置して、最初に返す必要があります。 OK、メールを転送します。

3
NickW

「action = rcpt(...)」には「smtpd_recipient_restrictions」を使用しないでください。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_serviceinet:127.0.0.1:10045」を使用すると、機能します。そう願っています。

1
Javi M.