Настройка ограничений на отправку в Exim (ratelimit): различия между версиями

Материал из Bas Wiki
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 32: Строка 32:
После внесения соответствующих изменений не забудьте перезапустить демона. В моём случае это делается командой <code>/etc/init.d/exim4 restart</code>.<br />
После внесения соответствующих изменений не забудьте перезапустить демона. В моём случае это делается командой <code>/etc/init.d/exim4 restart</code>.<br />
<br />
<br />
Для моих целей мне этого хватило, но я не могу не сказать о том, что есть acl для не SMTP подключений (например, web-mail или отправка с помощью различных скриптов Perl или PHP). Для того, чтобы ограничивать данную рассылку, необходимо добавить наши правила в acl_smtp_data таким же образом.
Для моих целей мне этого хватило, но я не могу не сказать о том, что есть acl для не SMTP подключений (например, web-mail или отправка с помощью различных скриптов Perl или PHP). Для того, чтобы ограничивать данную рассылку, необходимо добавить наши правила в acl_smtp_data таким же образом.<br />
 
<br />
<br />
<hr>
<hr>
<references />
<references />

Версия от 13:56, 9 апреля 2015

Большое количество спама традиционно радует не только пользователей, но и админов. Особенно приятным стало то, что спам начал сыпаться от пользователей своей сети, которые заражались различными вирусами. Уже эти вирусы в свою очередь и создавали большое количество спама, а так как скорость по локальной сети хорошая, то почтовые сервера принимали на себя всё, что им полагалось. В среднем было замечено, что 1 вирусный пользователь за пару часов активной "работы" генерировал под 2-3 тысячи спам-писем. Так как адреса для этих спам-писем чаще всего генерируются случайным образом, то на эти письма генерируется дикое количество bounce-сообщений (ответы). В итоге почтовая очередь заполняется очень быстро, сервер начинает не справляться с нагрузкой и тормозить. Медленно, но верно я пришёл к тому, что пользователя надо ограничивать. Ограничивать по количеству отправляемых сообщений в единицу времени.

Данную работу мне потребовалось выполнить на сервере под управлением Debian Linux, в качестве почтового демона работает Exim.

Для того, чтобы решить эту задачу я буду использовать директиву ratelimit[1][2] которую добавлю в конфигурационный файл /etc/exim4/exim.conf. Проверять данный параметр мы будем на этапе проверки отправителя, поэтому попадает всё это в acl_smtp_rcpt.

Первая тонкость, которую следует отметить - порядок правил в acl имеет значение, поэтому если после настроек конфига данная опция у Вас не заработает, то попытайтесь поднять её выше. Только не увлекайтесь сильно этим. Во-первых, выше у Вас обязательно должны быть правила безусловных чёрных и белых списков, когда Вы можете добавлять IP или e-mail.

Вторая тонкость. Из любого правила есть исключения - давайте и здесь придерживаться этого. В моём случае, пока я тестировал данную опцию под запрет попали 2 сервера. Для того, чтобы исключить нужные адреса только из области действия данной опции, а не всех правил почтового демона, мы добавим свой белый список. Если Вы будете использовать белые списки, то перед перезапуском почтвого демона убедитесь, что файл whitelist_ratelimit создан.

accept
  hosts = net-lsearch;/etc/exim4/whitelist_ratelimit
  logwrite = "Sender rate overlimit - $sender_host_address , but whitelisted..."
warn
  ratelimit = 30 / 30m / leaky / $sender_host_address
  log_message = Sender rate $sender_rate / $sender_rate_period / $sender_host_address
deny
  message = Sender rate overlimit - $sender_address / $sender_host_address
  ratelimit = 30 / 30m / leaky / $sender_host_address

Теперь немного поясню.

0. Ограничивать пользователей мы будем по IP-адресу хоста, с которого приходит почта. Для себя я установил ограничение 30 писем за 30 минут. Можно использовать несколько правил для ограничений. Скажем, Вы можете указать ограничение 10 писем в секунду, затем 50 писем за 30 минут и 100 писем за 1 час. Таким образом вы играете толерантностью правила от более жёсткого к менее суровому. Внизу статьи есть ссылка на страницы, где перечислены все опции, какие могут приходить, а так же все опции, какие используются при ratelimit. Так Вы сможете опытным путём найти подходящую для Вас конфигурацию.

1. Первая секция, которая называется accept нужна для того, чтобы пропускать почту для адресов, которые мы добавляем в белый список. В список исключений мы добавляем IP-адреса - каждый новый адрес с новой строчки. Опцию logwrite я добавил для административных целей, чтобы знать, что исключение отработало успешно. Внимание! Сообщение попадёт в mainlog.

2. Вторая секция warn служит для того, чтобы предупреждать нас о том, что лимит превышен. Внимание! Сообщение пишется в mainlog. Больше данная секция ни для чего не предназначена.

3. Секция deny создана именно для того, чтобы не получать почту от отправителя, который превысил лимит. Почта блокируется, пользователь получает соответствующее сообщение. Внимание! Помимо сообщения пользователю это же сообщение пишется в rejectlog.

После внесения соответствующих изменений не забудьте перезапустить демона. В моём случае это делается командой /etc/init.d/exim4 restart.

Для моих целей мне этого хватило, но я не могу не сказать о том, что есть acl для не SMTP подключений (например, web-mail или отправка с помощью различных скриптов Perl или PHP). Для того, чтобы ограничивать данную рассылку, необходимо добавить наши правила в acl_smtp_data таким же образом.