Ограничения на отправителя и доступ клиентов в Postfix не работают для поддоменов.

Вопрос или проблема

Использую Postfix 3.7.11 на Debian 12. Я не могу понять, почему мои smtpd_client_restrictions или smtpd_sender_restrictions не работают с поддоменами.

Например:

smtpd_sender_restrictions =
permit_mynetworks
permit_sasl_authenticated
check_sender_access hash:${config_directory}/denied_senders

В denied_senders:
.example.com 554 go away

Это не отклоняет MAIL FROM: [email protected]

Документация (https://www.postfix.org/access.5.html) говорит, что это должно работать, если я как-то неправильно не понял.

Если я добавлю: parent_domain_matches_subdomains = smtpd_access_maps (особенность, которую документация говорит, что в будущем уберут) и изменю строку в denied_senders на example.com 554 go away, то только тогда отклоняется почта от [email protected]

Есть ли что-то еще, что мне нужно добавить в main.cf, чтобы получить поддержку поддоменов, не прибегая к функции, которая скоро исчезнет?

Ответ или решение

Проблема, с которой вы столкнулись, связана с тем, как Postfix обрабатывает ограничения для отправителей и клиентов, особенно в отношении поддоменов. Ваша конфигурация не работает, как ожидается, из-за особенностей обработки доменов в Postfix, что может заставлять чувствовать вас разочарование при настройке вашего почтового сервера. Рассмотрим теоретическую основу, примеры и практическую реализацию, которые помогут прояснить ситуацию и предложить решение.

Теория

Postfix использует ряд механизмов для контроля доступа к отправке и приему электронной почты. Основной механизм, который вы используете — это smtpd_sender_restrictions, который позволяет задавать правила, касающиеся отправителя. При этом check_sender_access, используемый в вашем случае, обращается к файлу access map, который содержит правила отказа или разрешения на основе доменов отправителей.

Ключевая проблема здесь заключается в восприятии Postfix поддоменов, когда вы используете точку (.) в начале доменного имени в файле denied_senders. Требуется понимать, что по умолчанию в Postfix обрабатываются полные доменные имена, и поддомены не учитываются автоматически.

В этом контексте, директива parent_domain_matches_subdomains, которую вы упомянули, позволяет распространять действие правил на все поддомены заданного домена. Однако, как указано в документации, это временное решение, и лучше стремиться к более устойчивым вариантам, вписывающимся в долгосрочную конфигурацию вашего почтового сервера.

Пример

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

smtpd_sender_restrictions = 
   permit_mynetworks
   permit_sasl_authenticated
   check_sender_access hash:${config_directory}/denied_senders

И файл denied_senders содержит:

.example.com 554 go away

Этот подход не работает по умолчанию для поддоменов example.com, если только вы не используете parent_domain_matches_subdomains с параметром smtpd_access_maps.

Когда вы изменяете конфигурацию на:

example.com 554 go away

И используете parent_domain_matches_subdomains = smtpd_access_maps, Postfix начинает блокировать поддомены, т.к. включает определение родительских доменов, что является своеобразным обходным путем.

Применение

Чтобы реализовать долгосрочную и устойчивую архитектуру, предлагается рассмотреть следующие шаги:

  1. Пересмотреть использование parent_domain_matches_subdomains: Если это возможно, планируйте будущее без него, стараясь не полагаться на это временное решение.

  2. Использовать регулярные выражения: Создайте регулярное выражение для обработки поддоменов в sender_access:

    Измените вашу строку в sender_access на:

    /^.*\.example\.com$/ 554 go away

    Для этого необходимо создать файл с регулярными выражениями, например denied_senders.regexp, и обновить вашу конфигурацию:

    check_sender_access regexp:${config_directory}/denied_senders.regexp
  3. Перепроверьте и обнулите кэш: После изменения конфигурации нужно не забыть перезапустить Postfix и обнулить кэш, чтобы все изменения вступили в силу.

postfix reload
postmap hash:${config_directory}/denied_senders

В результате такого подхода ваш сервер будет гибко и корректно блокировать поддомены без необходимости использования уязвимых или устаревающих функций. Это решение будет работать эффективно и в дальнейшем без риска потерь функциональности.

Путем тщательной настройки и понимания системы, вы сможете обеспечить более надежную и безопасную работу вашего почтового сервера. Если проблема не решится, рекомендуется также проверить логи для получения более детальной информации о том, почему конкретные правила работают или не работают в вашей системе.

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

Капча загружается...