Вопрос или проблема
У меня настроен сервер Postfix, и он аутентифицируется через AD с использованием Dovecot.
Существует ли возможность настроить его так, чтобы один пользователь из группы A мог отправлять письма с домена @a.local, а пользователь из группы B мог отправлять письма с домена @b.local?
Postfix имеет smtpd_sender_login_maps
и reject_sender_login_mismatch
для этой цели, хотя это работает наоборот: при предоставлении адреса отправителя в конверте (который почтовый клиент отправляет в команде протокола MAIL FROM:
) он запрашивает карту для получения списка всех SASL-логинов, которым разрешено использовать этот почтовый адрес. Если аутентифицированное имя пользователя оказалось в этом списке, проверка проходит, в противном случае возвращается ошибка.
Это независимо от метода аутентификации и библиотеки; единственное, что связывает это с аутентификацией, – это имя пользователя. Это авторизация.
Вам нужно спроектировать ваши smtpd_sender_login_maps
таким образом, чтобы они:
- запрашивали LDAP (AD)
- динамическая часть запроса,
%s
, будет фактически заменена на адрес электронной почты отправителя или, возможно, в вашем случае вы можете предположить, что это часть домена (@domain на самом деле) - запрос должен вернуть список SMTP SASL имен пользователей, которым разрешено отправлять почту с этим почтовым адресом. Чтобы составить такой список, запрос может проверять членство группы AD.
Затем, если вы используете специализированный сервис submission
в Postfix для получения почты от ваших пользователей, в конфигурации этого сервиса установите smtpd_sender_restrictions=reject_sender_login_mismatch. В последних версиях Postfix master.cf
обычно имеет smtpd_sender_restrictions=$mua_sender_restrictions
для сервиса submission, поэтому вам нужно установить в файле main.cf
:
mua_sender_restrictions = reject_sender_login_mismatch
smtpd_sender_login_maps = ldap:/etc/postfix/ldap-sender-login-maps.cf
где /etc/postfix/ldap-sender-login-maps.cf
содержит ваш запрос и параметры аутентификации для Postfix в AD для выполнения этого запроса.
Этот LDAP-запрос может быть сложным для реализации. Если это кажется вам слишком трудным, рассмотрите следующий подход:
- Напишите скрипт (возможно, PowerShell или любой другой, который вы можете использовать), который сможет синхронизировать AD с какой-то таблицей, доступной Postfix, содержащей необходимую информацию о сопоставлении. Это может быть любая таблица: файл, MySQL/MariaDB и т.д.
- Запускайте этот скрипт периодически и/или когда вы знаете, что данные в AD изменились.
- Вместо этого используйте эту таблицу в smtpd_sender_login_maps.
Пожалуйста, прочитайте все ссылки на страницы руководства Postfix дважды, прежде чем задавать дополнительные вопросы. Я никогда не реализовывал это с AD, я делал это только с картой на основе MySQL, и это работало очень удовлетворительно.
Ответ или решение
Да, существует способ ограничить доступ отправителей в Postfix в зависимости от группы Active Directory (AD), в которой они находятся. Этот процесс требует настройки систем авторизации в Postfix и интеграции с LDAP для работы с пользователями и их группами в AD. Вот шаги, которые вам нужно выполнить:
-
Настройка Postfix для использования LDAP: Убедитесь, что у вас есть установленный и работающий Postfix, а также Dovecot для аутентификации пользователей через AD.
-
Использование параметров smtpd_sender_login_maps: Postfix предоставляет параметры
smtpd_sender_login_maps
иreject_sender_login_mismatch
, которые позволяют контролировать, какие пользователи могут отправлять почту в зависимости от их аутентификационных данных. Вам необходимо создать подходящий LDAP-запрос, который будет сопоставлять адреса электронной почты с пользователями AD. -
Создание LDAP-отображения:
- Убедитесь, что вы можете выполнить LDAP-запрос, который будет проверять членство пользователей в нужных группах. Ваш запрос должен возвращать список SMTP SASL имен пользователей, которые имеют право отправлять почту с определенного адреса электронной почты.
- Для настройки
smtpd_sender_login_maps
, вам нужно создать файл конфигурации, например,/etc/postfix/ldap-sender-login-maps.cf
, который будет содержать параметры соединения с AD и ваш запрос.
Пример конфигурационного файла может выглядеть следующим образом:
server_host = your_ad_server search_base = dc=yourdomain,dc=com bind_dn = your_bind_user bind_pw = your_bind_password query_filter = (member=*) result_attribute = uid # Здесь вам нужно настроить фильтрацию по домену
-
Настройка ограничений в Postfix: В файле
main.cf
добавьте следующие строки:smtpd_sender_restrictions = reject_sender_login_mismatch smtpd_sender_login_maps = ldap:/etc/postfix/ldap-sender-login-maps.cf
-
Реализация периодической синхронизации (если необходимо): Если выполнение LDAP-запросов вызывает сложности, вы можете написать скрипт (на PowerShell или любом другом языке), который будет синхронизировать данные из AD в общую таблицу (например, в файл, MySQL или MariaDB). Этот скрипт может запускаться периодически или после изменений в AD.
-
Тестирование конфигурации: После настройки всех параметров протестируйте возможность отправки почты от пользователей из групп A и B, чтобы убедиться, что ограничения работают корректно.
Не забудьте тщательно изучить всю документацию Postfix, связанную с LDAP и авторизацией, чтобы избежать частых ошибок и проблем в конфигурации. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться к сообществу или профессионалам, имеющим опыт работы с Postfix и AD.