Вопрос или проблема
Использую 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 начинает блокировать поддомены, т.к. включает определение родительских доменов, что является своеобразным обходным путем.
Применение
Чтобы реализовать долгосрочную и устойчивую архитектуру, предлагается рассмотреть следующие шаги:
-
Пересмотреть использование
parent_domain_matches_subdomains
: Если это возможно, планируйте будущее без него, стараясь не полагаться на это временное решение. -
Использовать регулярные выражения: Создайте регулярное выражение для обработки поддоменов в
sender_access
:Измените вашу строку в
sender_access
на:/^.*\.example\.com$/ 554 go away
Для этого необходимо создать файл с регулярными выражениями, например
denied_senders.regexp
, и обновить вашу конфигурацию:check_sender_access regexp:${config_directory}/denied_senders.regexp
-
Перепроверьте и обнулите кэш: После изменения конфигурации нужно не забыть перезапустить Postfix и обнулить кэш, чтобы все изменения вступили в силу.
postfix reload
postmap hash:${config_directory}/denied_senders
В результате такого подхода ваш сервер будет гибко и корректно блокировать поддомены без необходимости использования уязвимых или устаревающих функций. Это решение будет работать эффективно и в дальнейшем без риска потерь функциональности.
Путем тщательной настройки и понимания системы, вы сможете обеспечить более надежную и безопасную работу вашего почтового сервера. Если проблема не решится, рекомендуется также проверить логи для получения более детальной информации о том, почему конкретные правила работают или не работают в вашей системе.