Ограничения для отправки писем

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

exim

recipients_max = 10

Этот параметр определяет максимальное число оригинальных получателей для любого сообщения. Дополнительные получатели, которые сгенерированы альясингом или форвардингом не считаются. Если число получателей (RCPT) превышает это число, то на все последующие команды RCPT возвращается код возврата 452, но все ранние получатели обрабатываются нормально.

То есть, хорошо, но не совсем то, чего хотелось бы.

recipients_max_reject = true

Если эта опция установлена в истину, exim отклоняет SMTP сообщения содержащие слишком много получателей, выдавая ошибку 552 на избыточные команды RCPT, и ошибку 554 на возможную команду DATA. Иначе (по умолчанию) он выдаёт ошибку 452 на избыточные команды RCPT и принимает сообщение от имени начального набора получателей.

А это уже как раз то, что надо, что бы сразу отсекать письма с большим количеством получателей.

Иногда нужна гибкость, например ограничивать только конкретные домены или адресаты. Тогда на помощь приходит такая конструкция (можно менять condition, добавлять hosts, domains, …):

# Флаг, включающий или выключающий ограничения числа получателей
RELAY_RCPT_LIMIT_ENABLE = yes
# Максимально допустимое число получателей в одном письме
RELAY_RCPT_LIMIT_NUM = 10
...
acl_check_rcpt:
...
defer   condition     = RELAY_RCPT_LIMIT_ENABLE
        message       = Too many recipients
        condition     = ${if >={$recipients_count}{RELAY_RCPT_LIMIT_NUM}{yes}{no}}
...

взято отсюда

А вот ещё дополнительные условия, на предмет наличия пустого поля CC/TO, при этом все в скрытой копии (это любимая фишка спамеров)

acl_check_data:
...
# empty TO
  defer message         = X-SPAM-Alert: Empty "TO" or "CC" field.
        log_message     = SPAM-Alert. Empty "TO" or "CC" field.
        condition       = ${if and {{eq{$h_to:}{}}{eq{$h_cc:}{}}}{yes}{no}}

# present header undisclosed-recipients
  defer message         = X-SPAM-Alert: Empty "TO" or "CC" field.
        log_message     = SPAM-Alert: undisclosed-recipients in "to:".
        condition       = ${if match{$h_to:}{undisclosed-recipients}{yes}{no}}

postfix

smtpd_recipient_limit = 10

Это глобальный параметр, действует во время smtp сессии, когда еще дело до транспорта не дошло

В связи с этим, есть такие ограничения на этот параметр:

  • Это связано с тем, что smtpd_recipient_limit применяется только к письмам, полученным демоном smtpd через транзакцию SMTP . Письма, отправленные с помощью команды sendmail , помещаются в очередь maildrop командой postdrop , которая принимается командой pickup и передается непосредственно в cleanup
  • Вы не можете ограничить количество получателей для писем, отправленных с помощью команды sendmail.
  • Нельзя установить ограничения подоменно

Взято отсюда

virual_destination_recipient_limit = 10

Ограничения во время доставки, но если вы используете virtual домены/пользователей

Если же это не подходит по каким-то причинам, то можно использовать

smtp_destination_recipient_limit = 10

Это уже ограничение действует на транспорт.

Если хочется аналога из exim’a для фильтрации пустых TO/CC то можно применять проверку заголовков:

header_checks = pcre:/etc/postfix/header_checks

создать файл /etc/postfix/header_checks такого содержания:

/^To:[[space:]]*$/ REJECT empty To: header
/^To:.*undisclosed-recipients/     REJECT empty recipient field

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *