Вопрос или проблема
Когда настраиваю Postfix, как мне требовать SPF, но только если это не приходит от отправителя из локальной сети? Я попробовал следующее:
smtpd_recipient_restrictions=
reject_invalid_hostname,
permit_sasl_authenticated,permit_mynetworks,
check_policy_service unix:private/policyd-spf,
reject_unknown_helo_hostname
… и я думал, что в таком порядке permit_mynetworks
будет проверяться перед проверкой политики SPF и позволит отправку. Однако это не так, и SPF не проходит, отклоняя любые письма из локальной сети. Я не уверен, как решить эту проблему.
Если это имеет значение, я пробовал это с использованием Postfix 3.9.
Ответ или решение
Для того чтобы настроить Postfix таким образом, чтобы проверки SPF выполнялись только для отправителей, не входящих в локальную сеть, необходимо правильно расставить порядок правил в секции smtpd_recipient_restrictions
. Ваша текущая конфигурация не позволяет обойти проверку SPF для локальных сетей, потому что правила обрабатываются сверху вниз.
Ниже приведен пример конфигурации, который позволит достичь желаемого результата:
smtpd_recipient_restrictions =
reject_invalid_hostname,
permit_sasl_authenticated,
permit_mynetworks,
check_policy_service unix:private/policyd-spf,
reject_unknown_helo_hostname,
reject_unauth_destination
Объяснение конфигурации:
- reject_invalid_hostname – отклоняет сообщения, если обратное определение имени хоста недействительное.
- permit_sasl_authenticated – позволяет доставку сообщений от аутентифицированных пользователей.
- permit_mynetworks – позволяет пропустить проверку SPF для отправителей из локальных сетей (определяется переменной
mynetworks
). - check_policy_service unix:private/policyd-spf – выполняет проверку SPF для всех других отправителей, которые не попадают в предыдущие категории.
- reject_unknown_helo_hostname – отклоняет сообщения от узлов, которые не могут быть определены по имени.
- reject_unauth_destination – отклоняет сообщения, которые не предназначены для данного почтового сервера.
Дополнительные рекомендации:
-
Убедитесь, что значения
mynetworks
правильно настроены в конфигурации Postfix. Вам нужно определить конкретные IP-адреса или сети, которые будут считаться локальными.Пример настройки
mynetworks
:mynetworks = 127.0.0.0/8 [::1]/128, <ВАШ_ЛОКАЛЬНЫЙ_IP_АДРЕС_ИЛИ_СЕТЬ>
-
После внесения изменений не забудьте перезагрузить Postfix для применения новых настроек. Это можно сделать с помощью команды:
sudo systemctl restart postfix
-
Рекомендуется протестировать изменения с помощью утилит для отслеживания логов Postfix, таких как
mail.log
, чтобы убедиться, что сообщения от локальных сетей обрабатываются корректно.
Эта конфигурация должна удовлетворить ваши требования по исключению SPF-проверок для локальных сетей, при этом обеспечивая их выполнение для всех остальных отправителей.