Skip to content


Ограничение количества получателей в exim

Поскольку спамеры заинтересованы в отправке почты максимальному количеству получателей, они часто в одной SMTP-сессии передают множество команд "RCPT TO". Так как нормальный юзер такое будет делать очень редко (если вообще будет), то очень полезно ограничить количество получателей для одного письма для минимизации распространения спама через почтовый сервер. Для этого в exim предусмотерна опция recipients_max, числовое значение которой и устанавливает максимально допустимое число получателей одного письма. Если exim работает чисто как relay и не принимает почту для локальных доменов, то просто установки в exim.conf

recipients_max = 10

должно быть достаточно (число 10 взято для примера). В противном же случае, когда exim помимо relay-инга еще и является primary mx для некоторых доменов, использование recipients_max может вызвать проблемы, поскольку количество получателей для входящей почты также будет лимитироваться. Представим ситуацию, когда на сервере пару тысяч пользователей (обычное дело для провайдеров и freemail-сервисов) и 12 из них подписалось на одну и ту же полезную рассылку. При приведённой выше конфигурации почтовый сервер рассылки сможет доставить письмо только 10-ти из этих пользователей, а оставшиеся 2 пойдут пинать админа со словами "почему у меня не работает почта". И вот чтобы всё было по фен-шую, нужно лимитировать количество получателей только для исходящих писем (когда сервер используется как relay). Для этого в блок списков контроля доступа, который соответствует acl_smtp_rcpt, нужно добавить следующее (так, чтобы новые правила были примерно 4-ым и 5-ым сверху если считать для exim.conf, который идет по-умолчанию):

defer condition = RELAY_RCPT_LIMIT_ENABLE
  message = Too many recipients
  condition = ${if >={$recipients_count}{RELAY_RCPT_LIMIT_NUM} {yes}{no}}
  hosts = +relay_from_hosts
  !authenticated = *
 
defer condition = RELAY_RCPT_LIMIT_ENABLE
  message = Too many recipients
  condition = ${if >={$recipients_count}{RELAY_RCPT_LIMIT_NUM} {yes}{no}}
  !hosts = +relay_from_hosts
  authenticated = *

Ну и перед блоком "begin acl" определить две опции:

# Флаг, включающий или выключающий ограничения числа получателей
RELAY_RCPT_LIMIT_ENABLE = yes
# Максимально допустимое число получателей в одном письме
RELAY_RCPT_LIMIT_NUM = 10

Первое условие будет срабатывать для хостов, которым разрешёно использовать почтовый сервер как relay, но которые не прошли аутентификацию. А второе – для хостов, которые прошли аутентификацию, но которым запрещен relay-инг без неё. А вот хосты, которые не могут использовать сервер как relay и которые НЕ прошли аутентификацию проверять не надо, поскольку они доставляют входящую почту на домены, для которых наш exim является primary MX. Четвёртый вариант (хосты, прошедшие аутентификацию и которым разрешён relay) также ограничивать смысла нет, так как обычно эти два множества не пересекаются.

Posted in *nix, Howto.


One Response

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Александр says

    Интересно.... хочу сделать лимиты на количество отправленных писем для каждого меилбокса. Например в файле указывать конкретно какие лмиимты для того или иного пользователя и подхватывать потом через ACL листы.... Не подскажешь как?

You must be logged in to post a comment.