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

    Общий рейтинг статьи: 0 (проголосовало 0 )
    Опубликовано:  [просмотров 994]


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

    В первой части обзора мы рассмотрим настройку 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-папки несколько писем. Они в свою очередь будут автоматически созданы в соответствующих почтовых каталогах на сервере.


    Обсуждение статьи

    Ваш комментарий: