📨 Сначала прочитайте предыдущую часть!
Это пятый пост серии "Настройка почтового сервера на Linux".
В предыдущем посте мы проанализировали 4 обязательных конфигурационных файла Dovecot. Если вы еще не читали его, я рекомендую сначала ознакомиться.
👉 Предыдущий пост: Анализ обязательных конфигурационных файлов Dovecot
🔄 Инструкции по изменению порядка
В предыдущей части я анонсировал, что "в следующем посте будет рассмотрена настройка auth-sql.conf.ext
", но,
при написании статьи я пришел к выводу, что сначала имеет смысл объяснить проектирование таблицы БД.
Таким образом, в этой статье мы рассмотрим концепцию виртуальных пользователей Dovecot и проектирование таблицы PostgreSQL,
а в следующем посте будет объяснено настройка auth-sql.conf.ext
, связывающая Dovecot и PostgreSQL.
🎯 Что такое виртуальные пользователи Dovecot? Зачем они нужны?
Способы аутентификации пользователей в Dovecot можно разделить на две основные категории.
- Аутентификация на основе системных учетных записей
- Аутентификация с использованием файлов
/etc/passwd
и/etc/shadow
- Использование обычных системных учетных записей
-
Управление учетными записями затруднительно, сложно создать учетные записи только для почты
-
Аутентификация на основе виртуальных пользователей (Virtual Users)
- Аутентификация с использованием отдельной базы данных (PostgreSQL, MySQL и т.д.)
- Возможность управления учетными записями почты, независимыми от системных учетных записей
- Высокая безопасность и масштабируемость, подходящие для крупномасштабных почтовых сервисов
Мы планируем создать виртуальную среду пользователей с использованием PostgreSQL.
Это означает, что мы будем аутентифицировать пользователей, получая информацию из базы данных, не создавая реальные учетные записи в Linux.
🔹 Преимущества виртуальной пользовательской среды
- Высокая безопасность, отдельно от системных учетных записей
- Легкое добавление и удаление пользовательских учетных записей
- Поддержка нескольких доменов (возможность управления несколькими почтовыми доменами на одном сервере)
- Отличная масштабируемость и простота управления
🛠️ Проектирование таблиц в PostgreSQL
Чтобы адекватно управлять виртуальными пользователями в Dovecot, необходимо минимум 3 таблицы.
1️⃣ Основные таблицы
mail_domain
- список доменов, управляемых почтовым серверомmail_users
- информация о реальных почтовых пользователяхmail_alias
- управление почтовыми псевдонимами (пересылка)
Причина разделения заключается в масштабируемости и удобстве обслуживания.
Это очень полезно, если в дальнейшем мы будем управлять несколькими почтовыми доменами или пересылать определенные электронные письма на другие адреса.
2️⃣ Схема таблицы и примеры SQL
📌 1. mail_domain (Управление списком доменов)
Таблица для управления доменами, разрешенными на почтовом сервере.
То есть определяются почтовые домены, такие как example.com
, mydomain.com
.
CREATE TABLE mail_domain (
id SERIAL PRIMARY KEY,
domain_name VARCHAR(255) NOT NULL UNIQUE,
active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT NOW()
);
🔹 Объяснение
- domain_name
→ почтовой домен (например: example.com
)
- active
→ следует ли использовать данный домен (можно деактивировать)
- created_at
→ дата создания
Пример вставки образца данных
INSERT INTO mail_domain (domain_name) VALUES ('example.com');
INSERT INTO mail_domain (domain_name) VALUES ('mydomain.com');
📌 2. mail_users (Учетные записи почтовых пользователей)
Здесь сохраняется информация о пользователях, которые будут использовать почту.
Каждый пользователь должен принадлежать определенному домену.
CREATE TABLE mail_users (
id SERIAL PRIMARY KEY,
domain_id INT NOT NULL REFERENCES mail_domain(id) ON DELETE CASCADE,
email VARCHAR(255) NOT NULL UNIQUE,
password TEXT NOT NULL,
home_directory TEXT NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
🔹 Объяснение
- domain_id
→ связь с id
таблицы mail_domain
(домен пользователя)
- email
→ адрес электронной почты пользователя (user@example.com
)
- password
→ хранение зашифрованного пароля
- home_directory
→ путь к хранилищу почты (/var/mail/vmail/user@example.com
)
- created_at
→ дата создания учетной записи
Пример вставки образца данных
INSERT INTO mail_users (domain_id, email, password, home_directory)
VALUES (1, 'user@example.com', 'hashed_password_here', '/var/mail/vmail/user@example.com');
📌 3. mail_alias (Почтовые псевдонимы / Пересылка) Необходима для пересылки почтового адреса на другой адрес или для использования нескольких псевдонимов для одного адреса.
CREATE TABLE mail_alias (
id SERIAL PRIMARY KEY,
domain_id INT NOT NULL REFERENCES mail_domain(id) ON DELETE CASCADE,
source_email VARCHAR(255) NOT NULL,
destination_email VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
🔹 Объяснение
- source_email → исходный адрес электронной почты (например: contact@example.com)
- destination_email → адрес электронной почты, на который будет передаваться (например: admin@example.com)
- Функция автоматически пересылает определенные электронные письма на другой адрес
Пример вставки образца данных
INSERT INTO mail_alias (domain_id, source_email, destination_email)
VALUES (1, 'contact@example.com', 'admin@example.com');
Теперь почта, приходящая на contact@example.com, будет автоматически пересылаться на admin@example.com.
🔍 Рекомендуемые таблицы для будущего расширения
Кроме основного почтового сервиса, можно добавить дополнительные функции. Ниже приведены примеры таблиц, которые могут быть расширены в будущем.
Название таблицы | Роль |
---|---|
mail_quota |
Ограничение почтового объема на пользователя |
mail_blacklist |
Список блокируемых адресов электронной почты |
mail_whitelist |
Список разрешенных адресов электронной почты |
mail_forwarding |
Пересылка на внешние почтовые аккаунты |
mail_autoresponder |
Управление автоматическими ответами |
mail_address_book |
Управление внутренним адресным book |
🏁 Итоги и следующие шаги
✅ Темы, рассмотренные в этой статье
- Концепция и необходимость виртуальных пользователей Dovecot
- Проектирование таблиц PostgreSQL (mail_domain, mail_users, mail_alias)
- Рекомендации по дополнительным таблицам для расширения управления электронной почтой
Анонс следующего поста: настройка auth-sql.conf.ext
и способы хеширования паролей
Теперь таблицы базы данных готовы. В следующем посте мы объясним, как Dovecot получает информацию о пользователях из PostgreSQL и выполняет аутентификацию,
и рассмотрим способы хеширования паролей, которые будут использоваться в учетных записях почтовых пользователей.
В частности, мы сравним особенности и различия в безопасности методов MD5, SHA-256, BCRYPT,
а также подробно рассмотрим, как каждую из этих методов применить в Dovecot и PostgreSQL.
👉 Следующий пост: Настройка auth-sql.conf.ext
и методы хеширования паролей (Скоро!)
댓글이 없습니다.