Как безопасно настроить параметры конфигурации Postfix *_restrictions с помощью белых и черных списков?

Учимся и пытаемся понять

Я провел последнюю неделю, узнавая, что Postfix может сделать, чтобы помочь уменьшить спам. Если я правильно понимаю, разные *_restrictions параметры конфигурации контролируют, когда проверки выполнены, а затем список ограничений, таких как permit_mynetworks а также check_client_access контролировать то, что проверено. Это верно?

Если я правильно понимаю, проверки выполняются в следующем порядке:

  • smtpd_client_restrictions
  • smtpd_helo_restrictions
  • smtpd_sender_restrictions
  • smtpd_relay_restrictions
  • smtpd_recipient_restrictions

Это верно? И если я правильно понимаю, smtpd_delay_reject не влияет на порядок проверок, но влияет только на отправку отклонения. Правильно?

Мой Север Настроил

smtpd_relay_restrictions Кажется, на моем сервере Plesk 11 не задан параметр конфигурации. Моя версия Postfix 2.8.4.

Я также заметил, что некоторые проверки перечислены несколько раз под разными параметрами конфигурации. Они должны быть перечислены несколько раз?

Вот моя текущая конфигурация:

smtpd_sender_restrictions =
    check_sender_access hash:/var/spool/postfix/plesk/blacklists
    permit_sasl_authenticated
    check_client_access pcre:/var/spool/postfix/plesk/non_auth.re

smtpd_client_restrictions =
    permit_mynetworks

smtpd_recipient_restrictions =
    permit_mynetworks
    check_client_access pcre:/var/spool/postfix/plesk/no_relay.re
    permit_sasl_authenticated
    reject_unauth_destination

Если я правильно понимаю, это будет так же, как это:

smtpd_sender_restrictions =

smtpd_client_restrictions =

smtpd_recipient_restrictions =
    permit_mynetworks
    check_sender_access hash:/var/spool/postfix/plesk/blacklists
    permit_sasl_authenticated
    check_client_access pcre:/var/spool/postfix/plesk/non_auth.re
    permit_mynetworks
    check_client_access pcre:/var/spool/postfix/plesk/no_relay.re
    permit_sasl_authenticated
    reject_unauth_destination

Файл черных списков пуст. Файлы no_auth имеют это:

/^/ PREPEND X-No-Auth: unauthenticated sender

и файл no_relay имеет это:

/^/ PREPEND X-No-Relay: not in my network

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

Обеспокоенность

  • Повторные проверки
    Выполняет ли Postfix проверку снова, когда она указана несколько раз? Или Postfix знает, что уже сделал эту проверку? Если проверки выполняются несколько раз, это кажется пустой тратой. Если они не выполняются несколько раз, действительно ли заголовки no_auh / no_relay добавляются правильно во всех случаях?

  • Отсутствует smtpd_relay_restrictions
    Отрывок из SMTP-реле Postfix и контроля доступа

    ПРИМЕЧАНИЕ: версии Postfix до 2.10 не имели smtpd_relay_restrictions. Они объединили политики ретрансляции почты и блокировки спама в разделе smtpd_recipient_restrictions. Это может привести к неожиданным результатам. Например, разрешающая политика блокирования спама может неожиданно привести к разрешающей политике ретрансляции почты.

    Еще одна выдержка:

    Некоторые люди рекомендуют помещать ВСЕ ограничения доступа в список smtpd_recipient_restrictions. К сожалению, это может привести к слишком разрешительному доступу.

    Поэтому я не хочу перечислять все ограничения в smtpd_recipient_restrictions, но наличие нескольких ограничений и одинаковых проверок при разных ограничениях может привести к путанице. Безопасно ли использовать просто smtpd_recipient_restrictions а также smtpd_relay_restrictions и игнорировать клиента, привет, отправитель?

  • Черный список
    Разве этот черный список не находится в начале списка? Если отправитель является частью моей сети и может проходить аутентификацию, должен ли я на самом деле блокировать его по электронной почте отправителя? Сейчас таблица пуста, но я не уверен, какой компонент Plesk может добавить адреса электронной почты в эту таблицу. Это также идет вразрез с RFC, который требует 100% доставки на postmaster@ и злоупотребления @ адресами.

Вот то, что я хочу достичь

  • будь проще
  • убедитесь, что я не создаю открытое реле или другую дыру в безопасности
  • убедитесь, что я не блокирую действительный адрес электронной почты
  • белый список postmaster@ и abuse @ адреса, которые существуют в виртуальной таблице псевдонимов
  • черный список IP-адресов блоков спамеров из Китая / Кореи
  • с помощью регулярного выражения отклоните все адреса, кроме определенных, в домене, который использует всеохватывающие сообщения. Я использую всеохватывающее решение для одного домена, чтобы я мог использовать отказные адреса VERP-y, даже если Plesk не поддерживает VERP.

Вот что я думал

В /etc/postfix/main.cf

#smtpd_client_restrictions =
#smtpd_helo_restrictions =
#smtpd_sender_restrictions =

smtpd_relay_restrictions =
    permit_mynetworks
    check_client_access pcre:/var/spool/postfix/plesk/no_relay.re
    permit_sasl_authenticated
    check_client_access pcre:/var/spool/postfix/plesk/non_auth.re
    reject_unauth_destination

smtpd_recipient_restrictions =
    check_recipient_access pcre:/etc/postfix/custom/recipient_checks.pcre
    check_client_access cidr:/etc/postfix/custom/sinokorea.cidr
    check_sender_access hash:/var/spool/postfix/plesk/blacklists

В /etc/postfix/custom/recipient_checks.pcre

# Always accept mail to postmaster@ and abuse@
/^postmaster@/ OK
/^abuse@/ OK

# Reject all mail sent to mailapp.ourdomain.com
# except for certain specific recipients
# and bounce messages which may use VERP
if /@mailapp\.ourdomain\.com$/
!/^(?:validuser|anothervalid|bounces(?:\+.+)?)@/ REJECT
endif

Я сталкивался с примерами, которые имеют @ сбежал в регулярных выражениях. Это не специальный персонаж, не так ли?

Будет ли моя предложенная конфигурация выполнить, я хочу?

(Обратите внимание на себя и других пользователей Plesk, читающих это: может потребоваться задание cron для регулярного восстановления изменений в файле main.cf, поскольку некоторые действия Plesk, похоже, перезаписывают этот файл.)

2 ответа

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

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

Q1: эти два конфига эквивалентны?

smtpd_sender_restrictions =
    check_sender_access hash:/var/spool/postfix/plesk/blacklists
    permit_sasl_authenticated
    check_client_access pcre:/var/spool/postfix/plesk/non_auth.re

smtpd_client_restrictions =
    permit_mynetworks

smtpd_recipient_restrictions =
    permit_mynetworks
    check_client_access pcre:/var/spool/postfix/plesk/no_relay.re
    permit_sasl_authenticated
    reject_unauth_destination

А ТАКЖЕ

smtpd_sender_restrictions =

smtpd_client_restrictions =

smtpd_recipient_restrictions =
    permit_mynetworks
    check_sender_access hash:/var/spool/postfix/plesk/blacklists
    permit_sasl_authenticated
    check_client_access pcre:/var/spool/postfix/plesk/non_auth.re
    permit_mynetworks
    check_client_access pcre:/var/spool/postfix/plesk/no_relay.re
    permit_sasl_authenticated
    reject_unauth_destination

Если электронное письмо приходит из моей сети, оно не будет проверено /var/spool/postfix/plesk/no_relay.re а также /var/spool/postfix/plesk/no_relay.re, Это означает, что электронная почта будет принята и не будет изменена. С точки зрения действия постфикса (REJECT, ACCEPT), он не будет отличаться, но для plesk возможно эти два заголовка важны.

Q2: выполняет ли Postfix проверку снова, когда она указана несколько раз? Или Postfix знает, что уже сделал эту проверку? Если проверки выполняются несколько раз, это кажется пустой тратой. Если они не выполняются несколько раз, действительно ли заголовки no_auh / no_relay добавляются правильно во всех случаях?

Да, это может выглядеть расточительно, когда две проверки повторяются. Но эти повторные проверки будут размещены в разных местах / ограничениях. И в каждой проверке есть какая-то логика или алгоритм того, как postfix обрабатывает электронную почту. Вас может беспокоить повторная проверка, если проверка была тяжелой, такой как check_policy_service или DNSBL. Для облегченной проверки, например, allow_mynetwork, вы можете ее игнорировать.

В3: Безопасно ли использовать только smtpd_recipient_restrictions и smtpd_relay_restrictions и игнорировать клиента, helo, sender?

Ну, с двумя smtpd_recipient_restrictions и smtpd_relay_restrictions должно быть достаточно для некоторых расширенных ограничений. Но это для постфикса> = 2.10. Для пользователя с postfix < 2.10 вы можете поместить проверки в несколько директив, чтобы postfix не стал слишком разрешающим.

Q4: Будет ли моя предложенная конфигурация выполнить, я хочу?

Да, хорошая работа для упрощения вашего текущего ограничения постфикса. Но будьте осторожны, этот постфикс был частью plesk. Инженер plesk может установить эти ограничения по ряду причин, таких как модульность или простота обслуживания.

Резюме:

  • Размещение всех ограничений в smtpd _ * _ не рекомендуется.
  • По этой причине вы можете использовать smtpd_relay_restriction для postfix >= 2.10 или другую проверку ограничения для postfix < 2.10

Что бы вы ни делали, не выходите из дома без:

smtpd_client_restrictions = reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net

Они поймали большинство для меня сами по себе.

Другие вопросы по тегам