Я бы хотел использовать postfwd версия 2 для ограничения количества ежедневной почты, отправляемой моими пользователями, прошедшими проверку подлинности sasl.
Я установил последний tarball: postfwd-1.35 с последним постфиксом от Centos 6.4
По моему у меня только это правило
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?
Классы ограничений Postfix могут возвращать три ответа: OK, REJECT или DUNNO, обычно они имеют (OK, DUNNO) или (REJECT, DUNNO) из-за того, как работает постфикс. DENY и OK означают, что остальные проверки игнорируются, DUNNO означает переход к следующей проверке.
Итак, в вашем случае permit_mynetworks
или permit_sasl_authenticated
возвращаются ОК, поэтому дальнейшие проверки не выполняются smtpd_recipient_restrictions
, хотя вы могли бы поместить его в другой класс ограничения, который затем должен сначала вернуть OK, чтобы почта была переадресована.
Вы не должны использовать «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)
Итак, если вы вместо этого используете "check_policy_service inet: 127.0.0.1: 10045" в smtpd_data_restrictions, это будет работать. Надеюсь, что так.