Вопрос или проблема
Я написал простой сервер политики доступа для postfix и хочу применить его только к исходящим электронным письмам.
smtpd_recipient_restrictions =
check_policy_service inet:127.0.0.1:10011
Один из способов сделать это – проверить sasl_method=
на сервере политики и удостовериться, что у него есть значение, такое как sasl_method=LOGIN
, тогда я буду знать, что это пользователь, вошедший в систему, пытающийся отправить электронное письмо, и я могу обработать его и решить, вернуть ли REJECT
или DUNNO
. Но я не уверен, правильный ли это способ сделать.
Существует ли еще какая-либо директива, подобная smtpd_recipient_restrictions
, которая применяется только к исходящим электронным письмам, о которой я не знаю?
Ответ или решение
Чтобы применить check_policy_service
только к исходящим письмам в Postfix, у вас нет специальной директивы, аналогичной smtpd_recipient_restrictions
, которая применялась бы исключительно к исходящим сообщениям. Однако вы можете достичь желаемого результата, используя несколько методов.
Метод 1: Проверка по SASL
Как вы уже упомянули, вы можете использовать метод SASL для определения того, являются ли пользователи аутентифицированными отправителями. Если ваш сервер настроен на использование SASL для аутентификации пользователей, вы можете проверить значение sasl_method
в вашем policy-сервере. Вот пример того, как это можно организовать:
-
Убедитесь, что вы задали следующие параметры для аутентификации в вашем
main.cf
:smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth
-
В своем policy-сервере реализуйте проверку
sasl_method
:if (sasl_method == "LOGIN" || sasl_method == "PLAIN" || sasl_method == "CRAM-MD5") { // здесь обрабатываем логику для исходящих писем } else { // игнорируем другие запросы }
-
В файле
master.cf
добавьте строчку для проверки политики:smtp inet n - y - - smtpd -o smtpd_recipient_restrictions=permit_auth_destination,check_policy_service inet:127.0.0.1:10011
Метод 2: Использование smtpd_sender_restrictions
Другой подход — использование smtpd_sender_restrictions
, который позволяет фильтровать исходящие письма на уровне отправителя. Направьте check_policy_service в этот параметр.
Пример настройки может выглядеть следующим образом:
smtpd_sender_restrictions =
check_policy_service inet:127.0.0.1:10011
И тогда в вашем policy-сервере вы сможете обрабатывать только запросы от аутентифицированных пользователей.
Метод 3: Конфигурация через transport_maps
Если вам необходимо больше контроля над маршрутизацией и обработкой исходящих писем, вы также можете рассмотреть использование transport_maps
для указания, какие сообщения должны направляться вашему policy-серверу. Но это потребует дополнительных настроек и более сложной логики.
Заключение
Таким образом, самый простой и распространенный способ – это проверка значения sasl_method
в вашем policy-сервере, чтобы различать исходящие и входящие сообщения. Это позволяет вам применять логику проверки только к исходящим письмам, основанным на аутентификации пользователей. Ваше текущее направление абсолютно корректно! Убедитесь, что настройки Postfix и ваш policy-сервер тесно интегрированы для достижения наилучших результатов.