Здравствуйте, уважаемые читатели моего блога!

Сегодня я поделюсь с Вами опытом развёртывания почтовых серверов на базе Dovecot и Exim в операционных системах Astra Linux SE 1.5-1.7 в сетях без выхода в ГИС «Интернет».

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

В своей сети я настроил аутентификацию через Kerberos (использую freeipa). На astra-wiki есть хорошая статья по данной теме – если есть желание настроить систему таким образом, перейдите по ссылке.

Подготовительные мероприятия.

Начнём с того, что в вашей сети должен работать DNS сервер, содержащий записи MX для маршрутизации почты (это тема отдельной статьи, и в скором времени я её опубликую).

Если Вы установили чистую систему – рекомендую в обязательном порядке её обновить до актуальной версии обновления в соответствии с рекомендациями, изложенными на astra-wiki.

Это поможет избежать багов программного обеспечения (и получить новые баги :-)), увеличить стабильность и безопасность системы.

Установка Dovecot.

После обновления системы приступим непосредственно к установке почтового сервера и начнём с Dovecot.

Выполним команду установки пакета dovecot-imapd:

apt-get install dovecot-imapd

В конфигурационном файле dovecot.conf убедимся, что dovecot будет использовать протокол imap, если интерфейсов у сервера несколько – можно установить переменной listen ip адрес интерфейса, на котором Dovecot будет принимать входящие соединения.

mcedit /etc/dovecot/dovecot.conf
protocols = imap
listen = *

В версиях Astra Linux SE 1.6 и выше данные настройки указаны по умолчанию, в SE 1.5

Остальные параметры конфигурационного файла не трогаем, сохраняем изменения.

Аутентификацию будем использовать простую, открытым текстом – по аутентификации с использованием Kerberos.

Отредактируем конфигурационный файл 10-auth.conf, разрешив аутентификацию по паролю открытым текстом:

mcedit /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain

Отключим использование ssl в Dovecot, отредактировав конфигурационный файл 10-ssl.conf:

mcedit /etc/dovecot/conf.d/10-ssl.conf
ssl = no

Настроем  Dovecot для аутентификации пользователей Exim4.

Отредактируем 10-master.conf.

mcedit /etc/dovecot/conf.d/10-master.conf

В секцию service auth добавим:

unix_listener auth-client {
    mode = 0666
    user = Debian-exim
}

Для Astra Linux SE 1.5 (для версий 1.6, 1.7 не требуется):

Откроем:

mcedit /etc/pam.d/dovecot

И приведём файл /etc/pam.d/dovecot к виду:

@include common-auth
@include common-account
@include common-session

Далее, перезагрузим службу Dovecot и настроем её автозапуск:

service dovecot restart

Для Astra Linux SE 1.6 и выше:

systemctl enable dovecot

Для Astra Linux SE 1.5:

chkconfig dovecot on

В Astra Linux SE 1.5 был баг, из-за которого почтовые каталоги на клиенте становились пустыми.

В новых версиях почта работает намного стабильнее, но даже на SE 1.6 с последним обновлением я получал oops из-за проблем с мандатными метками (об этом далее), поэтому для Astra Linux SE 1.5 в файл crontab обязательно добавим следующую строку:

mcedit /etc/crontab
*/1 *    * * *    root      find /var/mail/ -maxdepth 1 -type d -exec astrase-fix-maildir {} \;

Настраивать ли подобное в старших версиях Astra Linux — вопрос.

Мой сервер на SE 1.6 работает без подобной настройки, но на этапе ввода он пару раз намертво зависал. Причина зависания была записана в журнале и выглядела так:

Oct  5 22:16:59 mail1 kernel: [ 2739.131808] Lbl of parent dir 'mail' (0:0:0:0) is less than child 'MAC-2-0x0.dovecot.index.log.newlock' new lbl (2:0:0:0), EACESS will be returned 4 process imap(9302)

То есть, я так понимаю, случилось страшное, и подкаталог получил мандатную метку выше, чем у родительского каталога. После этого сообщение появляется циклическое oops, и всё встаёт колом.

Oops… По другому и не скажешь 🙂

После перезагрузки я выполнил:

astrase-fix-maildir /var/mail/

И больше эта проблема у меня не воспроизводилась.

Установка Exim4.

Далее установим и настроим базовую конфигурацию Exim4.

Если в системе ранее был пакет exim4-daemon-ligth, удалим его и установим  exim4-daemon-heavy:

apt-get purge exim4-daemon-light
apt-get install exim4-daemon-heavy

Настроим Exim4, запустив соответствующую команду:

dpkg-reconfigure exim4-config

Ответим на вопросы программы конфигурации:

1. Тип конфигурации почтового сервера:

интернет-сайт; прием и отправка почты напрямую, используя SMTP”.

2. Почтовое имя системы (почтовый домен):

azbuka.mfp.oc

3. IP-адреса, с которых следует ожидать входящие соединения SMTP:

Можно оставить пустым, либо указать ip адрес конкретного интерфейса, например 10.10.20.20

4. Другие места назначения, для которых должна приниматься почта:

azbuka.mfp.oc

5. Домены, для которых доступна релейная передача почты:

оставим пустым

6. Машины, для которых доступна релейная передача почты:

Укажем подсеть, в которой работает почтовый сервер, например  10.0.0.0/9

7. Сокращать количество DNS-запросов до минимума (дозвон по требованию):

нет

8. Метод доставки локальной почты:

Maildir формат

9. Разделить конфигурацию на маленькие файлы:

Да

Очистим почтовый каталог, выполнив команду:

rm -R /var/mail/*

Настроим аутентификацию exim4 через dovecot создав конфигурационный файл 05_dovecot_login :

mcedit /etc/exim4/conf.d/auth/05_dovecot_auth
dovecot_plain:
    driver = dovecot
    public_name = plain
    server_socket = /var/run/dovecot/auth-client
    server_set_id = $auth1

В файле 200_exim4-config_primary в секции dnslookup в параметре ignore_target_hosts удалим сети в случае, если Вы их используете для отправки почты – например, если почта работает через VPN, удалите 10.0.0.0/8.

mcedit /etc/exim4/conf.d/router/200_exim4-config_primary

Если пропускная способность канала связи оставляет желать лучшего – ограничьте максимальный размер пересылаемого сообщения, отредактировав 02_exim4-config_options:

mcedit /etc/exim4/conf.d/main/02_exim4-config_options

Найдите строку .ifdef MESSAGE_SIZE_LIMIT и добавьте перед ней строку, например:

MESSAGE_SIZE_LIMIT = 7M

Для Astra Linux SE 1.6 и выше – настроим подтверждение о доставке почты (опционально):

mcedit /etc/exim4/conf.d/main/02_exim4-config_options

В самое начало конфигурационного файла добавим строку:

dsn_advertise_hosts = *

Увы, версия Exim4 в Astra Linux SE 1.5 не поддерживает отчёты о доставке сообщений (ещё один повод двигаться вперёд, а не использовать старьё, верно?).

По умолчанию exim4 очень исполнительный — он будет пытаться отправить почту (до второго пришествия и, возможно, после него :-)), даже если у вас проблемы с сетью. Я предпочитаю, чтобы он сдавался намного раньше — для этого отредактируем файл 30_exim4-config:

mcedit  /etc/exim4/conf.d/retry/30_exim4-config
*          *          F,1h,5m

Далее перезагрузим службу Exim4 и настроем её автозапуск:

service exim4 restart

Для Astra Linux SE 1.6 и выше:

systemctl enable exim4

Для Astra Linux SE 1.5:

chkconfig exim4 on

Создание адресов электронной почты (локальных пользователей)

Создадим пользователей (они же наши почтовые адреса) на почтовом сервере:

useradd -s /bin/false mail

Установим максимальный мандатный уровень (3 – сов.секретно, 2-секретно, 1-для служебного пользования, несекретно-0). Первое число — минимальный уровень, второе максимальный.

Для Astra Linux SE 1.5:

pdpl-user -m 0:3 mail

Для Astra Linux SE 1.6 и выше:

pdpl-user -l 0:3 mail

Установим пароль для данной учётной записи:

passwd mail

Использование почтовых псевдонимов.

После создания нескольких почтовых ящиков мы можем использовать alias, для создания псевдонима почты. Что это даёт? Вы можете настроить систему таким образом, что у нескольких почтовых ящиков будет общий адрес и вся почта,  поступающая на них будет направляться сразу на все указанные почтовые ящики.

Отредактируем файл aliases:

mcedit /etc/aliases

Добавим строку

mail: mail, opo, pto

И почта, поступающая на адрес mail@azbuka.mfp.oc, будет также поступать на opo@azbuka.mfp.oc, pto@azbuka.mfp.oc.

Либо придумаем псевдоним nemail@azbuka.mfp.oc, поступающая на него почта будет сохраняться в почтовом ящике mail@azbuka.mfp.oc, если добавить в /etc/aliases следующую строку:

nemail: mail

Настройка почтового клиента thunderbird.

Сама по себе настройка почтового клиента не отличается особой сложностью, однако в ней тоже есть пару «хитростей», которые сделают работу в нём более комфортной.

Настройки производим на нулевом (несекретном) уровне — дальше мы скопируем их на остальные уровни, сэкономив время.

Начнём с того, что изменим тип хранилища писем с mbox на mdir, для этого в Astra Linux SE 1.6 и выше зайдём в настройки почтового клиента и в строке поиска введём maildir. Изменим содержание параметра с mbox на mdir.

Меняем тип хранилища на MailDir

Зачем это нужно? Так как вы используете операционную систему Astra Linux, то, скорее всего механизм гарантированного затирания так же будет настроен. Если хранить все письма в монолитном файле,  при периодическом сжатии писем система будет намертво зависать, ожидая окончания удаления старой версии монолитного файла.

В случае если настроен maildir система работает намного лучше, оперируя с мелкими файлами.

Далее создадим учётную запись Thunderbird – выберем «Создать электронную почту», либо, если программа будет запущена впервые – она сама попросит вас создать учётную запись.

Укажем полное имя кириллицей в свободной форме, адрес электронной почты (mail@azbuka.mfp.oc) и пароль от учётной записи mail.

Далее Thunderbird выдаст сообщение о том, что не удалось найти настройки для учётной записи (в разных версиях Astra Linux клиенты Thunderbird разных версий, расположение полей может быть разным, но данные указываются одни и те же).

Сервер входящей почты:

Протокол: IMAP

Имя сервера: доменное имя сервера на котором развёрнута почта, например – astra.azbuka.mfp.oc.

Порт: 143

Защита соединения: нет

Метод аутентификации: обычный пароль

Имя пользователя: mail

Сервер исходящей почты:

Имя сервера: аналогично серверу входящей почты – astra.azbuka.mfp.oc.

Порт: 25

Защита соединения: нет

Метод аутентификации: обычный пароль

Имя пользователя: admsys

Почтовый клиент предупредит Вас о риске использования незашифрованного протокола, согласитесь и продолжите.

Учётная запись будет создана, но для получения уведомления о доставке (без установки соответствующей галочки каждый раз при отправлении письма – берегите своих пользователей) нужно провести ещё одну операцию – зайдём в настройки почтового клиента, пролистаем до конца и нажмём на кнопку «Редактор настроек».

В поиске укажем dsn и дважды нажмём на mail.dsn.always_request_on, чтобы параметр false заменился на true.

Настройка автоматического запроса подтверждения о доставке

Вы можете сконфигурировать почтовый клиент в нулевом режиме как угодно, а потом перенести настройки в остальные режимы – откройте консоль, войдите в учётную запись администратора системы, далее выполните (где вместо mail укажите пользователя использующего почтовый клиент):

sudo mc /home/mail /home/.pdp/mail/

Далее скопируйте каталог .thunderbird (он будет с левой стороны) во все каталоги справа (открывайте каталоги вида l1i0c0x0t0x0 поочерёдно — в дальнейшем, если захотите можете написать простой скрипт).

Копирование настроек почтового клиента между мандатными уровнями

Если справа уже есть каталог thunderbird, и там нет ничего важного, его нужно удалить перед копированием.

Что дальше?

Конфигурация работает и это прекрасно, но она базовая.

Для начала я бы активировал ssl в dovecot, сгенерировав необходимые ключи и сертификаты, внеся изменения в файл 10-ssl.conf.

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

Следующим вопросом стала бы установка почтового антивируса, например Kaspersky for Mail servers.

Ну и наконец, подумал бы о резервировании, ответив на вопрос – «Что будем делать, если железо на сервере внезапно умрёт?»

Второй резервный сервер? Или это будет виртуализация и миграция виртуальной машины?

Вопрос резервного копирования – это важный, отдельный вопрос, выходящий за рамки данной заметки.

На этом прощаюсь с Вами, до скорых встреч!

Добавить комментарий

Ваш e-mail не будет опубликован.