Создание корпоративного почтового сервера (IMAP-сервер Dovecot)

HELP-ME-24.COM (Freelance Team), Черноусов Антон

Достаточно часто нам приходится настраивать почтовые сервера и мы подготовили несколько инструкций описывающих каждый аспект построения корпоративной почтовой системы любой сложности.

В первой части обзора мы рассмотрим настройку POP3 и IMAP-сервера Dovecot.

Почтовый сервер Dovecot

Для построения корпоративной почтовой системы можно конечно использовать и Zimbra Collaboration Solution, но эта информационная система предъявляет очень высокие требования к аппаратной платформе на которой она разворачивается. Помимо повышенных требований к аппаратной платформе за ее внешней простатой скрывается довольно сложная в администрировании внутренняя система. Например вопрос установки сертификата совершенно нетривиальный и рассматривался нами в статье "Установка и обновление сертификата Let's encrypt для почтового сервера Zimbra"

Гораздо проще построить программный комплекс из открытых (Open Source) компонентов полностью удовлетворяющий требованиям на данный момент и постепенно расширять его функционал.

Первое, что требуется заказчикам, это естественно возможность принимать и отправлять почту при этом не попадая под фильтры. Учетные данные пользователей предпочтительно хранить в базе данных не пересекаясь с авторизацией пользователей операционной системы (PAM-авторизация Linux).

Начнем с создания базы данных пользователей и алиасов

Создадим две таблицы базы данных MySQL, описывающие пользователей почтового сервера (адрес электронной почты и пароль) и алиасы учетной записи (адрес электронной почты и псевдоним электронной почты), обратите внимание, что в таблице алиасов должна содержаться запись псевдонима указывающего на свой-же адрес почты (это несколько упрощает конфигурацию).

Таблица для хранения учтных записей пользователей:

CREATE TABLE `mail_auth` (
  `user` varchar(250) NOT NULL,
  `password` varchar(250) DEFAULT NULL,
  PRIMARY KEY (`user`),
  UNIQUE KEY `user_UNIQUE` (`user`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Таблица для хранения алиасов пользователей:

CREATE TABLE `mail_alias` (
  `user_mail` varchar(250) DEFAULT NULL,
  `alias` varchar(250) NOT NULL,
  PRIMARY KEY (`alias`),
  UNIQUE KEY `alias_UNIQUE` (`alias`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

На первом этапе двух таблиц для хранения информации вполне достаточно. В дальнейшем мы добавим таблицы для хранения данных о пересылке почты (для сотрудников в отпуске) и общих почтовых ящиков отделов.

Настройка Dovecot (обслуживание почтовых ящиков пользователей по IMAP-протоколу)

Настройку Dovecot для обслуживания POP3 мы не будем рассматривать, так как этот протокол уже морально устарел и создает больше проблем чем от него пользы. Вы всегда сможете его подключить и настроить добавив соответствующий плагин открыв порт в Firewall.

Обязательно перед настройкой почтового сервера настройте часовой пояс по умолчанию для почтового сервера и настройте синхронизацию времени с часами точного времени в интернет. 

# apt-get install ntp
# /etc/init.d/ntp start
# update-rc.d ntp enable
# ntpq -pn

Устанавливаем пакеты необходимые для работы почтового сервера Dovecot (с поддержкой баз данных mysql):

# aptitude install dovecot-mysql dovecot-common dovecot-core
# aptitude install dovecot-pop3d
# aptitude install dovecot-imapd

Конфигурация почтового сервера Dovecot в соответствии с последними тенденциями Ubuntu Server разбита на множество конфигурационных файлов в каталоге /etc/dovecot/conf.d/. Для того чтобы на этапе настройки проверять обобщенную конфигурацию, используйте команду:

# doveconf -n

По умолчанию Dovecot принимает подключения только на локальный интерфейс. Для разрешения подключений в конфигурационном файле /etc/dovecot/dovecot.conf измените параметр:

listen = *

Базовые настройки авторизации пользователей

За блок авторизации отвечает файл конфигурации 10-auth.conf (все описываемые файлы расположены в каталоге /etc/dovecot/conf.d/).

В данном файле необходимо отключить auth-system.conf.ext и включить auth-sql.conf.ext. Так же необходимо установить следующие параметры:

disable_plaintext_auth = no
auth_username_format = %Lu
auth_mechanisms = plain login digest-md5 cram-md5
!include auth-sql.conf.ext
#auth-system.conf.ext

Обязательно отключите auth-system.conf.ext, в противном случае будет активирована pam-авторизация, но будет отключена md5-авторизация.

Так же активируйте параметр:

auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@

Это правило ограничивает возможности использования эксплойтов.

Авторизация пользователей по учетным данных из базы данных MySQL

Для обработки запросов к базе данных используется конфигурационный файл /etc/dovecot/dovecot-sql.conf.ext, в случае нашей схемы данных файл настроек выглядит следующим образом:

driver = mysql
connect = host=127.0.0.1 dbname=hm24_mail user=mail password=xxxMAILxxx
default_pass_scheme = PLAIN

password_query = SELECT user, password FROM mail_auth WHERE user='%u';
user_query = SELECT user_mail, CONCAT('maildir:/home/mailboxes/maildir/',`user_mail`) as mail,
CONCAT('/home/mailboxes/home/', `user_mail`) as home, 106 as uid, 115 as gid
FROM mail_alias WHERE alias='%u';

Обратите внимание на два SQL-запроса password_query и user_query. Они построены таким образом, чтобы возвращать данные о пользователе относительно каталогов /home/mailboxes (для хранения параметров почтового ящика и писем). Так же вам необходимо определить uid и gid пользователя dovecot и указать их в запросе. Сделать это можно командой:

# id dovecot

UID и GID пользователя дополнительно, необходимо указать в конфигурационном файле 10-mail.conf в двух параметрах.

Для UID:

first_valid_uid = 106
last_valid_uid = 106

Для GID:

first_valid_gid = 115
last_valid_gid = 115

Для обработки авторизации пользователей также отредактируйте конфигурационный файл /etc/dovecot/conf.d/auth-sql.conf.ext, приведя его к следующему виду:

passdb {
 driver = sql
 args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
 driver = prefetch
}
userdb {
 driver = sql
 args = /etc/dovecot/dovecot-sql.conf.ext
}

Для перезапуска службы Dovecot используется команда:

# service dovecot restart

После перезапуска необходимо проверить подсистему аутентификации и подсистему запроса сведений о почтовом хранилище пользователя. Авторизация должна проходить по учетным данным указанным в базе данных и для всех алиасов почтового ящика должны выдаваться идентичные сведения о хранилище почты.

Обратите внимание, что в нашем случае используется хранение учетных записей в незашифрованном виде.

default_pass_scheme = PLAIN

Такой вариант приемлем только на этапе тестирования и учетные данные необходимо хранить в виде хэш-функций и желательно сложнее MD5.

Проверка авторизации:

# doveadm auth test chernousov@help-me-24.com "xxxUSERPASSWORDxxx"

Если проверка данных прошла успешно, то вы получите сообщение:

passdb: chernousov@help-me-24.com auth succeeded

В противном случае проверьте запрос и доступ к базе данных.

Запрос данных о хранилище почты для пользователя и его алиасов:

Для получения данных о настройках почтового ящика пользователя используется команда:

# doveadm user -u "chernousov@help-me-24.com"

Вывод сведений для пользователя и алиаса должен быть идентичным:

# doveadm user -u "freelance@help-me-24.com"
userdb: freelance@help-me-24.com
  user_mail : chernousov@help-me-24.com
  mail      : maildir:/home/mailboxes/maildir/chernousov@help-me-24.com
  home      : /home/mailboxes/home/chernousov@help-me-24.com
  uid       : 106
  gid       : 115

Создание каталогов хранилища:

Создадим каталоги хранилища почты и назначим для них владельца.

# mkdir -p /home/mailboxes/maildir/
# chown -R dovecot /home/mailboxes/
# chown -R dovecot /home/mailboxes/maildir/
# chgrp -R dovecot /home/mailboxes/
# chgrp -R dovecot /home/mailboxes/maildir/

Тестирование работы Dovecot

По завершении описанных выше манипуляций вы можете попробовать подключиться к почтовому серверу используя клиент Thunderbird и скопировать в IMAP-папки несколько писем. Они в свою очередь будут автоматически созданы в соответствующих почтовых каталогах на сервере.

Оставьте комментарий

Вы должны быть вошедший в чтобы отправить комментарий