It-e.RU
Цифровой двигатель вашего бизнеса.

Лимитирование трафика postfix

Лимитирование трафика postfix

Лимитирование трафика postfix поможет несколько угомонить локальных и внешних спамеров, не терять сообщения при работе через смтп-провайдера и многое другое.


Для ограничения трафика в postfix можно использовать следующие переменные:
  • initial_destination_concurrency = количество одновременных доставок возможно первоначально. (по умолчанию 5 )
  • smtpd_client_event_limit_exceptions = клиенты, которые исключены из подсчёта (по умолчанию: $mynetworks)
  • anvil_rate_time_unit =период времени, в течение которого рассчитываются показатели. (default: 60s)
  • anvil_status_update_time = как часто писать в лог статистику. (default: 600s)
  • default_client_message_rate_limit = максимальное количество сообщений, которое клиент имеет право отправить в период времени. (default: 0)
  • smtpd_destination_concurrency_limit = сколько одновременных доставок. (по умолчанию: 100)
  • smtpd_destination_rate_delay = задержка между отдельными доставками на один и тот же домен
  • smtpd_destination_recipient_limit = максимальное количество получателей письма (по умолчанию: 50)
  • smtpd_error_sleep_time = время задержки ответов клиенту. Значение должно быть больше smtpd_soft_error_limit и меньше smtpd_hard_error_limit
  • smtpd_soft_error_limit = количество ошибок в смтп-сессии перед замедлением сессии на smtpd_error_sleep_time. (по умолчанию: 10)
  • smtpd_hard_error_limit = количество ошибок в смтп-сессии перед отключением клиента. (по умолчанию: 20)
  • smtpd_client_connection_count_limit = колическо одновременных соединений (default: 50)
  • smtpd_client_connection_rate_limit = количество соединений в anvil_rate_time_unit период (по умолчанию anvil_rate_time_unit: 60s, а smtpd_client_connection_rate_limit: 0)
  • smtpd_process_limit = количество процессов postfix. (по умолчанию 100)
  • .
  • smtp_mx_session_limit = количество попыток отправки письма перед сбросом на fallback и удалением письма
  • maximal_backoff_time = максимальное время между попытка отправить задержанное письмо (по умолчанию: 4000s)
  • minimal_backoff_time = минимальное время между попытка отправить задержанное письмо (по умолчанию: 300s)
  • queue_run_delay = время опроса очереди задержаных писем. Должно быть меньше minimal_backoff_time (по умолчанию: 300s)
Таким образом можно добавить примерно следущее в my main.cf:
   anvil_status_update_time = 600s
   anvil_rate_time_unit = 60s
   initial_destination_concurrency=1
   default_destination_concurrency_limit=50
   default_destination_recipient_limit=50
   default_destination_rate_delay = 1s
   default_process_limit=200
   smtp_mx_session_limit=100
   smtpd_client_connection_rate_limit = 60 
   smtpd_client_connection_count_limit = 25
   smtpd_client_message_rate_limit = 50
   smtpd_client_recipient_rate_limit = 100
   smtpd_destination_concurrency_limit=100
   smtpd_destination_recipient_limit = 2
   smtpd_destination_rate_delay = 1s 
   maximal_backoff_time = 1000s
   minimal_backoff_time = 300s
   queue_run_delay = 300s
   smtpd_error_sleep_time = 1s
   smtpd_soft_error_limit = 10
   smtpd_hard_error_limit = 20
В postfix возможно задавать индивидуальные параметры доставок для доменов. Для этого необходимо задать файл транспортов, которые расскажут postfix по каким правилам работать с определенными доменами, и создать набор правил.
Добавил ограничение 10/5/2 одновременных доставок для домена с задержками:
   transport_maps = hash:/etc/postfix/transport
   smtp_rate10_destination_concurrency_limit = 10
   policy5_destination_concurrency_limit = 2
   policy5_destination_rate_delay = 0
   policy5_destination_recipient_limit = 5
   policy2_destination_concurrency_limit = 1
   policy2_destination_rate_delay = 3s
   policy2_destination_recipient_limit = 2
/etc/postfix/transport:
   domain.ru  smtp_rate10:somedomain.ru
   domain5.ru policy5:
   domain2.ru policy2:
/etc/postfix/master.cf:
   smtp_rate10     unix - - n - - smtp
   policy5         unix - - n - - smtp
   policy2         unix - - n - - smtp
Тестирование:
   #!/bin/bash
   i=0
   while [ $i != 2500 ]; do
   echo test | /bin/mail -s "test message$i" "user@test.com"
   i=$(( $i + 1 ))
   done;

Пожалуйста, уважайте труд автора, при копировании материалов сохраняйте ссылку на источник!

Комментарии (0)







Разрешённые теги: <b><i><br>Добавить новый комментарий: