Применяйте check_policy_service только к исходящим письмам

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

Я написал простой сервер политики доступа для 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-сервере. Вот пример того, как это можно организовать:

  1. Убедитесь, что вы задали следующие параметры для аутентификации в вашем main.cf:

    smtpd_sasl_auth_enable = yes
    smtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth
  2. В своем policy-сервере реализуйте проверку sasl_method:

    if (sasl_method == "LOGIN" || sasl_method == "PLAIN" || sasl_method == "CRAM-MD5") {
       // здесь обрабатываем логику для исходящих писем
    } else {
       // игнорируем другие запросы
    }
  3. В файле 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-сервер тесно интегрированы для достижения наилучших результатов.

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

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