Спокойной ночи,
У меня есть сервер postfix в сочетании с базой данных mysql для управления адресами. Есть таблица, отображающая пользователей и их почтовые адреса. например
|user|mail@domain.tld|
|user|mail2@domain.tld|
Кроме того, у меня есть несколько локальных псевдонимов для сервисов, например для веб-форума (forum@domain.tld)
Теперь я хочу настроить postfix следующим образом. Если кто-то отправляет письмо на почтовый сервер, MAIL FROM:
заголовок должен быть проверен. Если он содержит письмо, принадлежащее пользователю в таблице, оно должно быть отклонено, если пользователь не авторизован. Если он принадлежит к локальному псевдониму, его следует запретить, если он не отправлен локальным хостом.
Я настроил постфикс следующим образом:
smtpd_sender_restrictions = permit_mynetworks, # allow local networks
reject_unknown_hostname,
reject_unknown_recipient_domain,
reject_unknown_sender_domain,
reject_sender_login_mismatch,
permit_sasl_authenticated
(Виртуальные) псевдонимы настраиваются в alias_database
и virtual_alias_maps
. Для доставки почты пользователям имя пользователя извлекается mysql с помощью virtual_mailbox_maps
.
Чтобы иметь сопоставление пользователя sasl auth со списком почтовых адресов, smtpd_sender_login_maps
настроен на запрос, который возвращает всех пользователей на соответствующий адрес электронной почты.
Если я протестирую эти файлы, результаты будут работать в одном случае, но в сочетании они не работают должным образом.
Если я тестирую его и не авторизован, то письмо с MAIL FROM: mail@domain.tld
отклоняется, как и ожидалось, но письмо с MAIL FROM: forum@domain.tld
будет доставлено. Если я авторизован, я могу использовать любой MAIL FROM:
заголовок. У меня нет настроек перезаписи для порта отправки.
Как я могу настроить ограничения таким образом, чтобы каждый пользователь мог отправлять сообщения только со списка разрешенных почтовых адресов?