можно запросить postfix, чтобы получить информацию для входа sasl для его сервера ретрансляции из базы данных. Затем у меня есть этот сервер ретрансляции, который получает ту же самую информацию для входа.
откуда у нас этот формат конфигурационного файла, чтобы правильно принести?
мы знаем эту информацию:
- доменное имя реле.
- имя пользователя почтового ящика.
- доменное имя на сервере postfix (может быть более чем один.)
теперь текстовый файл, содержащий только пароли, будет отформатирован следующим образом (в строке), предполагая mailbox
посылает от domain2
С помощью пароля mailpass
:
smtp.relay.tld mailbox@domain2.tld:mailpass
Я проверил, что метод открытого текстового файла работает для определенного пользователя и пароля в базе данных. Теперь я хочу использовать a .cf файл для подключения к базе данных.
дана таблица доменов такой1:
+----+----------+-------------+----------+
| id | username | domain | password |
+----+----------+-------------+----------+
| 1 | mailbox | domain2.tld | mailpass |
+----+----------+-------------+----------+
In общий, такой файл был бы отформатирован так;
user = sqluser
password = dbpass
hosts = localhost
dbname = maildb
query = SELECT password FROM accounts WHERE username = '%u' AND domain = '%d'
Я не уверен, что именно поставить в параметре "query". Официальная документация на него довольно плохая: в ней говорится, что вы можете настроить с помощью базы данных sql, она не указывает, как вообще, никаких конкретных примеров не приводится.
теперь я попытался использовать наивный подход; создайте запрос, который просто возвращает значение точно так же, как строка в текстовом файле. Я также попытался вернуть различные подмножества линия, без успеха. Каждая попытка просто создает ошибку" доступ запрещен".
1: я знаю, что хранение паролей фактического пользователя в базе данных таким образом является плохая идея. Пароли, используемые здесь, просто для связи между двумя определенными серверами.
причиной использования базы данных является сочетание переносимости и масштабируемости. Е. Г. МФЛ домена хочет использовать несколько почтовых серверов, или перейти к другому поставщику услуг электронной почты. Причина не просто использовать один пароль, чтобы иметь возможность отделить проблемы (каждый пользователь имеет отдельный пароль реле настроен, который они сами не знают, но постфиксный пользователь на каждом почтовом сервере знает, глядя в определенной таблице базы данных. Это механизм, сравнимый с keystone openstack, хотя и гораздо менее сложный).
еще немного покопаться: включение ведения журнала уровня L4 и просмотр транскрипта соединения сервера, это кажется, никогда не отправляет сообщение AUTH (так что даже не выясняет, как "найти" пользователя). Следующие сообщения могут быть найдены в журнале почты (с доменными именами и т. д. отредактировано);
postfix/smtp[6494]: maps_find: smtp_sasl_password_maps: smtp.relay.tld: not found
postfix/smtp[6494]: maps_find: smtp_sasl_password_maps: smtp.relay.tld:587: not found
postfix/smtp[6494]: smtp_sasl_passwd_lookup: no auth info found
(sender=`user@domain.tld', host=`smtp.relay.tld')
тем не менее, выполнение этой команды:
postmap -q user@domain.tld mysql:/etc/postfix/mysql-map.cf
производит
smtp.relay.tld user@domain.tld:mailpass
другими словами, конфигурация работает, но postfix программа делает какой-то странный запрос, чтобы выудить пароль из базы данных, а его нигде нет указано, что это на самом деле, и не регистрируется.