exim4 - Почему ограничение исходящей почты на смарт-хост работает только с acl_not_smtp?

Чтобы ограничить количество исходящих писем для каждого получателя (все письма отправляются одним и тем же пользователем), я провел некоторое тестирование в очень простой среде:

                                         The Webs              

                                             ^                 
                                             |                 
+-------------------+   SMTP?         +--------+---------+       
|                   +---------------> | mail.example.com |       
| billyw.localhost  |                 |   (smarthost)    |       
|    (exim4)        |                 |                  |       
+-------------------+                 +------------------+       

billyw.localhost это машина Debian С помощью dpkg-reconfigure exim4-configЯ настроил его на использование mail.example.com как умный хост.

В настоящее время я ограничиваю скорость, добавляя ACL в acl_not_smtp:

acl_not_smtp = acl_check_not_smtp

acl_check_not_smtp:

  # Rate limit based on the recipient address
  discard
    ratelimit = 7 / 1m / per_mail / $recipients
    log_message = Rate limit exceeded for $recipients: $sender_rate/$sender_rate_period (max $sender_rate_limit)

  accept

Я проверяю это с помощью следующей команды на billyw.localhost:

for i in {1..10}; do
  mail -s testing billyw@mypersonalemail.com <<< ''
  mail -s testing billyw@myotherpersonalemail.com <<< ''
done

Эта конфигурация, кажется, работает как задумано; он пропускает 7 писем каждому получателю и отбрасывает последние 3 на каждого получателя.

Однако, если я попытаюсь использовать эту же конфигурацию в ACL, связанном с SMTP, например:

  • acl_smtp_connect
  • acl_smtp_rcpt
  • acl_smtp_mail

Тогда запись ACL, ограничивающая скорость, не перехватывается и все 10 сообщений отправляются.

Почему ограничение скорости не применяется, когда оно помещено в ACL, связанный с SMTP?

1 ответ

Решение

acl_not_smtp эквивалентно acl_data для SMTP-трафика. Попробуйте ограничение скорости в этом ACL. SMTP-соединения дают вам больше возможностей ACL, где вы можете разместить сообщение. (Заметка: discard это вариант черной дыры accept так что вы не увидите сообщения об отклонении.) Отбрасывание довольно радикально, и я бы использовал defer или же deny для SMTP-трафика.

Ограничение скорости описано в главе 42, раздел 38 спецификации Exim. Вы можете тестировать с измененной конфигурацией, чтобы вы могли оценить ограничение более жестко во время тестирования, чем когда бы вы его не внедрили. Дайте время, чтобы пределы теста очистились перед внедрением.

Попробуйте добавить следующее к вашему acl_smtp_rcpt:

defer
  ratelimit = 7 / 1m / $recipients
  message = Rate limit exceeded for $recipients: \
            $sender_rate/$sender_rate_period (max $sender_rate_limit)

/usr/bin/mail работает местный sendmail Программа для доставки почты вместо подключения по сетевому стеку. В вашем случае exim4 используется в качестве замены для sendmail. Почта будет рассматриваться как не-SMTP доставка. Ограничение скорости должно быть сделано с использованием ACL не-SMTP.

Другие вопросы по тегам