Назад | Перейти на главную страницу

Postfix + sasslauthd + PAM Как я могу запретить / разрешить аутентификацию определенных пользователей?

У меня есть простая установка postfix на RedHat, которая годами работает нормально и использует TLS / saslauthd / PAM, чтобы позволить пользователям проходить аутентификацию для ретрансляции почты из внешней сети. Все пользователи являются локальными учетными записями Linux, поэтому метод saslauthd с использованием PAM в целом работает хорошо.

Есть несколько локальных учетных записей, которые не используются пользователями для входа в систему и для которых в оболочке установлено значение / sbin / nologin, но эти учетные записи по-прежнему доступны через SMTP через saslauthd. Я не нашел очевидного метода предоставления списка учетных записей для saslauthd, для которых следует отказать в аутентификации. По сути, я ищу способ занести в белый или черный список учетные записи пользователей, чтобы им всегда было отказано в разрешении на ретрансляцию SMTP. Я не хочу, чтобы все существующие локальные учетные записи могли пересылать почту, а только те, которые я выбираю. Есть ли удобный способ сделать это без серьезных изменений в моей текущей цепочке аутентификации?

Один из способов - использовать pam_listfile и запретить пользователям, перечисленным в текстовом файле, который вы ему предоставляете.

Я сомневаюсь, что исключение данных пользователей SASL изначально возможно в Postfix. Однако вы можете создать собственный Служба политики Postfix который разрешает и запрещает доступ на основании любых выбранных вами критериев. Я создал pfxpold framework в качестве основы для этого, но pfxpold нуждается в настраиваемом классе Perl и может оказаться слишком тяжелым для вашего приложения. Тем не менее, тривиальные проверки политики в системах с низким уровнем использования могут быть разбиты на несколько строк сценария оболочки.

Это взлом, но вы можете использовать авторизацию отправителя конверта, http://www.postfix.org/SASL_README.html#server_sasl_authz Затем используйте reject_sender_login_mismatch, чтобы заблокировать пользователей, которые не авторизованы.