Здравствуйте, уважаемые читатели моего блога!
Сегодня я поделюсь с Вами опытом развёртывания почтовых серверов на базе 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, и всё встаёт колом.
После перезагрузки я выполнил:
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_auth:
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.
Зачем это нужно? Так как вы используете операционную систему 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
Защита соединения: нет
Метод аутентификации: обычный пароль
Имя пользователя: mail
Почтовый клиент предупредит Вас о риске использования незашифрованного протокола, согласитесь и продолжите.
Учётная запись будет создана, но для получения уведомления о доставке (без установки соответствующей галочки каждый раз при отправлении письма – берегите своих пользователей) нужно провести ещё одну операцию – зайдём в настройки почтового клиента, пролистаем до конца и нажмём на кнопку «Редактор настроек».
В поиске укажем 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.
Ну и наконец, подумал бы о резервировании, ответив на вопрос – «Что будем делать, если железо на сервере внезапно умрёт?»
Второй резервный сервер? Или это будет виртуализация и миграция виртуальной машины?
Вопрос резервного копирования – это важный, отдельный вопрос, выходящий за рамки данной заметки.
На этом прощаюсь с Вами, до скорых встреч!
Добрый день, Александр.
спасибо за статью.
Никак не могу победить frozen message unroutable address …
Здравствуйте! Какой-то адрес он не может разрешить. Обратите внимание на работу DNS — причём во всех режимах! Named обязательно должен быть в parsec.
Здравствуйте. Спасибо за информацию. Пытаюсь использовать её в работе. Сервисы exim4*dovecot на почтовом сервере настроены и внешне работает штатно. В качестве клиента используется Thunderbird по схеме: юзеры коннектятся с своих хостов (через XRDP) к почтовому серверу, попадают в на свой рабочий стол с ограниченным функционалом (доступен Thunderbird, возможность смены пароля, выход из сессии). Пользователи через Thunderbird успешно отправляют сообщения, но которые никто не может получить, при попытке опроса сервера все получают сообщение: «На сервере нет новых сообщений». Не могут отправить и сами себе. Что м.б. не так ? И вопрос: при настройке сервера исходящей почты SMTP у вас указана учётка admsys, я правильно понимаю что это учетка локального админа почтового сервера ?
Напишите на sandro331k@yandex.ru, я отправлю Вам WhatsApp.