Мне удалось настроить Postfix для чтения списка виртуальных почтовых ящиков из базы данных. Но что, если мой список распределен по нескольким базам данных? Есть ли способ установить учетные данные для доступа к базе данных Postfix на основе домена назначения входящей электронной почты?
У меня несколько клиентов, использующих один веб-сервер, и у каждого из них есть собственная база данных. И мне было интересно, могу ли я также поделиться между ними Postfix !? Проблема в том, что их список пользователей находится в их индивидуальных базах данных, и количество шардов может со временем расти. И я не хочу перенастраивать систему под каждого нового клиента.
В файле Readme базы данных Postfix говорится:
Все справочные таблицы Postfix хранят информацию в виде пар (ключ, значение). Поначалу этот интерфейс может показаться упрощенным, но оказывается очень мощным. Интерфейс запросов (ключ, значение) полностью скрывает сложности LDAP или SQL от Postfix. Это хороший пример соединения сложных систем с простыми интерфейсами.
Postfix предоставляет вам только ключ поиска, тогда «ваша таблица» должна возвращать соответствующее значение. Что касается нескольких баз данных, postfix также поддерживает это. Но у него есть только один единственный режим работы: последовательно проверять базу данных, пока не будет найден «ключ». Когда вы добавили некоторую настраиваемую логику, например установить учетные данные для доступа к базе данных Postfix на основе домена назначения входящей электронной почты, то у postfix такой опции нет.
Итак, ответ на ваш вопрос:
Можно ли шардировать базу данных виртуальных почтовых ящиков postfix?
Да, это возможно. Но с одним только постфиксом этого не сделать. Вам нужны дополнительные "инструменты", чтобы помочь найти информацию о постфиксах из вашей БД. Постфикс
Некоторая идея:
Использование хранимой процедуры MySQL для заполнения всех баз данных и последующего выполнения запроса по базам данных, например: https://stackoverflow.com/questions/2132654/querying-multiple-databases-at-once . Для подключения к mysql вам нужны единые основные учетные данные.
Поместите несколько файлов postfix-mysql-maps в одну папку и настройте cron на периодическое заполнение всех файлов в postfix. main.cf
. Команды, подобной приведенной ниже, должно быть достаточно.
postconf -e virtual_mailbox_maps=$(for maps in /etc/postfix/mymaps/*; do printf "mysql:$maps "; done)
transport_maps
.Если вы используете postfix
и mysql
для хранения домена и пароля пользователя и т. д. у вас может быть много postfix
серверы с одним сервером mysql, потому что postfix использует mysql
только для получения информации с помощью запроса sql для чтения.
Если у вас есть централизованная база данных, каждый клиент может указать на эту базу данных.