Назад | Перейти на главную страницу

Контроль скорости сообщений SMTP в Ubuntu 8.04, желательно с постфиксом

Возможно, я гонюсь за ошибкой, но я пытаюсь настроить своего рода прокси-сервер smtp. У меня есть сервер postfix, который получает всю электронную почту для набора серверов / клиентов. Он использует умный хост (relayhost = ...) для пересылки почты на наш корпоративный MTA. Я хотел бы ограничить количество сообщений, которые может ретранслировать отдельный сервер, чтобы предотвратить перегрузку корпоративного MTA. В Postfix есть программа под названием «наковальня», которая способна отслеживать статистику о почте, которая будет использоваться для таких вещей, но, похоже, она не выполняется. Я запустил "inotifywait -m / usr / lib / postfix / anvil", в то время как я запустил postfix и отправил через него несколько сообщений с удаленного сервера. inotifywait указал, что наковальня никогда не запускалась. Кто-нибудь заставил работать регуляторы скорости постфикса / наковальни?

main.cf

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
myhostname = site-server-q9
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost
relayhost = Out outgoing mail relay
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 10.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = 10.X.X.X
smtpd_client_message_rate_limit = 1
anvil_rate_time_unit = 1h

master.cf экстракт

anvil     unix  -       -       -       -       1       anvil
smtp      inet  n       -       -       -       -       smtpd

В конце концов, я использовал policyd, который делает именно такие вещи. Я настроил его, чтобы ограничить один IP-адрес не более 10000 сообщений в час и 1 ГБ. Ниже представлена ​​копия документа, написанного для меня на случай, если кто-то сочтет его полезным.


Настройка postfix и policyd

После установки пакетов внесите следующие изменения в их конфигурации. В /etc/postfix/main.cf добавьте следующую строку

smtpd_client_restrictions = check_policy_service inet:127.0.0.1:10031

В /etc/postfix-policyd.conf

  • изменение WHITELISTING=1 к WHITELISTING=0
  • изменение GREYLISTING=1 к GREYLISTING=0
  • изменение SENDERTHROTTLE=0 к SENDERTHROTTLE=1
  • изменение QUOTA_EXCEEDED_TEMP_REJECT=1 к QUOTA_EXCEEDED_TEMP_REJECT=0
  • изменение SENDER_QUOTA_REJECTION="Quota Exceeded." к SENDER_QUOTA_REJECTION="Quota Exceeded, 10,000 messages/hour max!"
  • изменение SENDER_SIZE_REJECTION="Message size too big." к SENDER_SIZE_REJECTION="Message size too big. 10Mb per message or 1 Gb/hour max!"
  • изменение SENDERMSGLIMIT=512 к SENDERMSGLIMIT=10000
  • изменение SENDERRCPTLIMIT=3600 к SENDERRCPTLIMIT=10000
  • изменение SENDERQUOTALIMIT=250000000 к SENDERQUOTALIMIT=1000000000
  • изменение SENDERMSGSIZE=10240000 к SENDERMSGSIZE=50000000
  • изменение SENDER_INACTIVE_EXPIRE=31d к SENDER_INACTIVE_EXPIRE=1h

Возможно интересно для вашей реализации:

default_destination_concurrency_limit (default: 20)

    The default maximal number of parallel deliveries to the same destination. This is the default limit for delivery via the lmtp(8), pipe(8), smtp(8) and virtual(8) delivery agents. With per-destination recipient limit > 1, a destination is a domain, otherwise it is a recipient.

    Use transport_destination_concurrency_limit to specify a transport-specific override, where transport is the master.cf name of the message delivery transport.

Anvil действительно предназначалась для ограничения скорости входящих сообщений, а не для исходящих. Думайте об этом как о грубом фильтре DoS.

Возможно, вы захотите посмотреть настройки, относящиеся к qmgr часть постфикса. В частности, вы можете захотеть установить свой параллелизм пределы чего-то очень низкого, и ваш время ожидания в очереди очень высоко. Вы захотите установить скорость доставки для чего-то, что имеет большую (r) задержку, а также хотите уменьшить количество процессов доставки в master.cf.

Ты посмотрел с помощью qshape чтобы определить, какая ставка будет приемлемой для вашего внутреннего MTA?

Anvil ведет журнал для постфикса, я добавил ниже в main.cf и, похоже, у меня работает

#### Prevent server sending excess mail from clients add to /etc/postfix/main.cf
####
anvil_rate_time_unit = 60s
anvil_status_update_time = 120s
smtpd_error_sleep_time = 2s
smtpd_soft_error_limit = 10
smtpd_hard_error_limit = 20
smtpd_client_message_rate_limit = 
#### End Prevent server sending excess mail