Сначала прочтите предыдущую часть
Эта статья является шестой частью серии «Настройка почтового сервера на Linux».
В предыдущей части мы завершили проектирование таблицы виртуальных учетных записей пользователей с использованием PostgreSQL.
Если вы еще не ознакомились с ней, настоятельно рекомендуем это сделать.
👉 Предыдущая часть: Понятие виртуальных пользователей Dovecot и проектирование таблицы PostgreSQL


Что такое настройка auth-sql.conf.ext для Dovecot?

Чтобы Dovecot аутентифицировал виртуальных пользователей через базу данных, а не через системные учетные записи, необходимо настроить файл auth-sql.conf.ext.
С помощью этой настройки Dovecot может получать информацию о пользователях из PostgreSQL и производить аутентификацию.


Настройка SQL аутентификации для Dovecot (auth-sql.conf.ext)

Основные элементы, которые необходимо настроить для подключения Dovecot к PostgreSQL, следующие:

1. Путь к файлу конфигурации

Файл конфигурации располагается по следующему пути.

/etc/dovecot/conf.d/auth-sql.conf.ext

Если файл отсутствует, его можно создать следующей командой:

sudo touch /etc/dovecot/conf.d/auth-sql.conf.ext

2. Основные элементы настройки

driver = sql
connect = host=localhost dbname=mail user=mailadmin password=yourpassword

default_pass_scheme = SHA256-CRYPT

password_query = SELECT email AS user, password FROM mail_users WHERE email='%u';

user_query = SELECT home_directory AS home FROM mail_users WHERE email='%u';

Описание настроек

  • driver = sql → Использование аутентификации на основе SQL
  • connect = host=localhost dbname=mail user=mailadmin password=yourpassword → Информация о подключении к PostgreSQL
  • default_pass_scheme = SHA256-CRYPT → Указание алгоритма хеширования паролей по умолчанию. Если используется bcrypt, установить 'BLF-CRYPT'
  • password_query → Сравнение введенного пользователем пароля с хешем, полученным из базы данных
  • user_query → Возврат пути хранения почты пользователя

3. Перезапуск службы Dovecot

После применения настроек необходимо перезапустить Dovecot.

sudo systemctl restart dovecot

Тестирование интеграции Dovecot и PostgreSQL

Чтобы проверить, правильно ли применены настройки, используйте следующую команду.

1. Тест аутентификации

doveadm auth test user@example.com password123

Если настройки выполнены корректно, аутентификация с помощью passdb должна пройти успешно.

2. Проверка логов на ошибки

Если настройки применены некорректно, можно проверить логи для анализа причины.

journalctl -xe | grep dovecot

Безопасная аутентификация на почтовом сервере

Способы хеширования паролей (Сравнение и применение MD5, SHA-256, BCRYPT)

Когда Dovecot и PostgreSQL интегрируются, пароли должны храниться только в хешированном виде.
Поскольку разные способы хеширования имеют различную безопасность и производительность, следует быть внимательным при их выборе.

1. Сравнение методов хеширования

Метод хеширования Уровень безопасности Скорость Примеры использования
MD5 Уязвимый (возможны коллизии) Быстрый Не рекомендован
SHA-256 Средний (относительная безопасность) Умеренный При необходимости общей безопасности
BCRYPT Высокая безопасность Медленный При высоких требованиях к безопасности

Поскольку у MD5 известна уязвимость, его лучше не использовать.
SHA-256 обычно широко используется и сбалансирован между скоростью и безопасностью.
BCRYPT предлагает наивысший уровень безопасности, но имеет более медленную скорость, что может потребовать учета производительности в специфичных условиях.


Хеширование паролей с использованием команды Dovecot (doveadm pw)

Вы также можете непосредственно хешировать пароли в Dovecot.

1. Хеширование SHA-256

doveadm pw -s SHA256-CRYPT

После ввода пароля будет сгенерировано следующее хеш-значение.

{SHA256-CRYPT}$5$rounds=5000$abc123def456$ABCDEF1234567890ABCDEF1234567890

2. Хеширование BCRYPT

doveadm pw -s BLF-CRYPT

Пример вывода:

{BLF-CRYPT}$2a$05$abcdefghij1234567890ABCDEFGHIJKL$CDEFGHIJKLMNOPQRSTUVWXYZ123456

Это хеш-значение необходимо сохранить в таблице mail_users PostgreSQL.


Хеширование непосредственно в PostgreSQL с использованием расширения pgcrypto

С помощью расширения pgcrypto в PostgreSQL вы можете хешировать пароли без doveadm.

1. Активируйте расширение pgcrypto

CREATE EXTENSION IF NOT EXISTS pgcrypto;

2. Хранение пароля с хешированием SHA-256

INSERT INTO mail_users (domain_id, email, password, home_directory)
VALUES (1, 'user@example.com', crypt('mypassword', gen_salt('bf')), '/var/mail/vmail/user@example.com');

3. Хранение пароля с хешированием BCRYPT

INSERT INTO mail_users (domain_id, email, password, home_directory)
VALUES (1, 'user@example.com', crypt('mypassword', gen_salt('bf', 12)), '/var/mail/vmail/user@example.com');

Итоги и следующие шаги

Темы, рассмотренные в этой статье - Как настроить auth-sql.conf.ext для Dovecot
- Как протестировать интеграцию Dovecot с PostgreSQL
- Как применить хеширование SHA-256 и BCRYPT
- Как хешировать напрямую в PostgreSQL

Анонс следующей части: Интеграция SMTP аутентификации Postfix и Dovecot
Теперь, когда Dovecot настроен, следующий шаг - это настройка Postfix для использования аутентификации Dovecot.

👉 Следующая часть: Интеграция SMTP аутентификации Postfix и Dovecot (Скоро!)