Установка и настройка почтового сервера iRedMail с веб-клиентом SOGo и сертификатами Let's Encrypt

  • Автор:

iRedMail-SOGo-LetsEncrypt-000.pngТема создания собственного почтового сервера снова приобрела повышенную актуальность, но для многих администраторов это весьма непростая задача. А так как почта является для многих организаций чувствительным сервисом, то плохо работающий почтовый сервер способен доставить массу неприятностей. Поэтому, если вам необходима собственная почта, но нет времени и желания глубоко вдаваться в тему, то лучше всего выбрать готовую сборку, которая поможет быстро получить гарантированно работающее решение. Сегодня мы рассмотрим одну из таких сборок - iRedMail.

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

iRedMail - это бесплатное почтовое решение на базе открытого ПО, под капотом вы найдете все те же Postfix и Dovecot, плюс ряд дополнительных служб и настроек, которые разработчики продукта заботливо соединили между собой в единый комплекс. При этом никаких собственных "импровизаций" iRedMail не добавляет, весь софт настраивается стандартным образом через стандартные файлы конфигурации, что позволяет, при необходимости, производить тонкую настройку вручную.

А так как просто почта сегодня уже мало кого интересует, то мы добавим немного групповой работы при помощи веб-клиента SOGo, который предоставляет работу с календарями и задачами, а также синхронизацию через ActiveSync и работу по MAPI с Microsoft Outlook. Также в данной статье мы рассмотрим получение сертификатов при помощи Let's Encrypt, что позволит повысить безопасность нашего сервера.

Доменные имена и DNS-зона

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

Итак:

  • it-31.ru - используемый домен
  • mk-61 - почтовый сервер, полное доменное имя (FQDN) mk-61.it-31.ru
  • mail - псевдоним для более удобного обращения к почте
  • 203.0.113.25 - IP-адрес почтового сервера

Итак, нам потребуется следующий базовый набор записей:

@ IN MX 10 mk-61
mail IN CNAME mk-61
mk-61 IN A 203.0.113.25

Обратите внимание, что в качестве MX-записи мы используем реальное имя сервера, а не IP-адрес и не запись псевдонима.

Также сразу добавим SPF и DMARС-записи:

@ IN TXT "v=spf1 +a +mx ~all"
_dmarc TXT "v=DMARC1; p=none; rua=mailto:report@it-31.ru"

SPF-запись говорит о том, что почту могут отправлять узлы указанные в A и MX-записях домена, остальным узлам, скорее всего, почту отправлять запрещено, но прямого указания блокировать таких отправителей нет. DMARC предписывает не предпринимать никаких действий и только присылать отчеты на указанный ящик. Впоследствии, отладив работу сервера, эти правила следует изменить на более строгие, подробнее об этом можно прочитать в нашей статье:

Настраиваем свой почтовый сервер. Что нужно знать. Ликбез

Затем просим провайдера или хостера, предоставившего нам выделенный IP-адрес добавить в обратную зону PTR-запись:

25.113.0.203 IN PTR mk-61.it-31.ru.

Еще раз напомним, PTR-запись создается владельцем IP-адреса и содержит имя сервера фактически отправляющего почту с этого адреса.

Перед тем, как приступать к дальнейшим настройкам следует убедиться, что работают как минимум A и MX-записи.

Предварительная настройка сервера

Прежде всего определимся с выбором операционной системы, решающим фактором здесь будет поддержка SOGo Groupware, что ограничивает выбор между Debian 11 и Ubuntu 20.04 LTS, поэтому наш выбор - Debian 11. Также обратите внимание на то, что SOGo недоступен для архитектуры ARM.

iRedMail рассчитан на установку в чистую систему, поэтому следует выполнить минимальную установку Debian или заказать сервер в минимальной конфигурации. Для этого можете воспользоваться следующим руководством:

Linux - начинающим. Установка и первоначальная настройка Debian 11 для сервера

Для начала правильно установим часовой пояс:

timedatectl set-timezone Europe/Moscow

Получить список зон можно командой:

timedatectl list-timezones

Теперь установим имя хоста:

hostnamectl set-hostname mk-61

Важно - в данной команде указываем короткое имя сервера.

Затем приведем файл /etc/hosts к следующему виду:

127.0.0.1 mk-61.it-31.ru mk-61 localhost localhost.localdomain

Теперь проверим настройки, в ответ на команду:

hostname

Сервер должен сообщить нам короткое имя. а на команду:

hostname - f 

Полное, т.е. FQDN.

Установка и базовая настройка iRedMail

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

Выполним переход в домашнюю директорию, скачаем и распакуем архив:

cd 
wget https://github.com/iredmail/iRedMail/archive/refs/tags/1.6.2.tar.gz
tar -xzvf 1.6.2.tar.gz

Теперь перейдем в распакованную папку и запустим инсталлятор:

cd iRedMail-1.6.2
bash iRedMail.sh

Скрипт сначала выполнит скачивание необходимых пакетов, после чего вас встретит псевдографический установщик.

iRedMail-SOGo-LetsEncrypt-001.pngПрежде всего вам будет задан вопрос о месте хранения почты, вы можете использовать как предложенное значение, так и указать собственное расположение хранилища, здесь все зависит от структуры вашей дисковой подсистемы и предполагаемых объемов почты.

iRedMail-SOGo-LetsEncrypt-002.pngВ качестве веб-сервера безальтернативно предлагается NGINX:

iRedMail-SOGo-LetsEncrypt-003.pngА вот в качестве базы данных мы будем использовать PostgreSQL - это надежное и производительное решение для работы с любыми объемами данных, в т.ч. и большими.

iRedMail-SOGo-LetsEncrypt-004.pngЗатем указываем имя домена, который будет обслуживать наш сервер, в нашем случае просто it-31.ru

iRedMail-SOGo-LetsEncrypt-005.pngСледующим шагом будет создана учетная запись администратора с именем postmaster и вам будет предложено установить на нее пароль, при этом он не должен содержать специальных символов и не может быть пустым. Также, потом, вас попросят установить пароль для суперпользователя СУБД.

iRedMail-SOGo-LetsEncrypt-006.pngВ следующем окне выбираем SOGo и все остальное, с Roundcubemail выбор нужно обязательно снять! В противном случае фильтрация почты в SOGo работать не будет, так как они используют несовместимые настройки.

iRedMail-SOGo-LetsEncrypt-007.pngПосле чего вам еще раз будут показаны все выбранные настройки и предложено подтвердить выбор, после утвердительного ответа начнется процесс установки, все пакеты скачиваются из штатных репозиториев системы. В процессе установки вас могут несколько раз спросить о применении тех или иных настроек, на все из них отвечаем утвердительно. В самом конце вы можете увидеть ошибку обновления ClamAV, что связано с недоступностью серверов обновлении из РФ.

iRedMail-SOGo-LetsEncrypt-008.png

В этом случае, после завершения процесса установки, откройте файл /etc/clamav/freshclam.conf и добавьте туда строку:

DatabaseMirror https://pivotal-clamav-mirror.s3.amazonaws.com

Все остальные строки с зеркалами нужно закомментировать. После чего следует удалить файл freshclam.dat и перезапустить службу:

rm -f /var/lib/clamav/freshclam.dat
systemctl restart clamav-freshclam

После чего сервер потребуется перезагрузить.

Несколько слов о безопасности

После установки в директории с установщиком iRedMail окажутся два файла: iRedMail.tips и config. Первый содержит подробную информацию об установленных пакетах и их настройках, а также об установленных для них логинов и паролей, эта же информация будет продублирована на почтовый адрес администратора. Второй - списки паролей для различных пользователей и служб.

Данную информацию следует сохранить в надежном месте, а саму директорию с инсталлятором удалить:

rm -rf ~/iRedMail-1.6.2

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

Настройка DKIM-записи

При установке iRedMail ключ для первого обслуживаемого домена создается автоматически, его можно найти в iRedMail.tips или вывести командой:

amavisd-new showkeys

Нам потребуется блок из скобок, в котором следует удалить переносы строк и лишние кавычки.

iRedMail-SOGo-LetsEncrypt-009.pngСама DNS-запись должна выглядеть так:

dkim._domainkey TXT "v=DKIM1; p=MIIBIjANBgk...DQIDAQAB"

Это позволит серверам-получателям проверить подлинность отправителя и существенно повысит вероятность успешной доставки почты адресату.

Начало работы, проверка основных функций

В целом, наш почтовый сервер готов и можно начинать с ним работать. Но сначала просмотрим на доступные нам инструменты управления, в частности нам доступна бесплатная версия панели iRedAdmin, чтобы попасть в нее наберите адрес mail.it-31.ru/iredadmin. Панель простая, если не сказать - примитивная. Вам доступно создание нового домена, нового администратора и нового пользователя.

iRedMail-SOGo-LetsEncrypt-010.pngНе следует удивляться, для полноценного управления существует коммерческая iRedAdmin-Pro, но можно прекрасно обходиться и без нее, ниже мы расскажем, как, а для начала и этого достаточно. Создадим нового пользователя для проверки и покинем консоль.

Для повседневной работы мы будем использовать веб-интерфейс SOGo, он доступен по адресу почтового сервера или по псевдониму: mail.it-31.ru. Советуем везде использовать псевдоним, так как почтовый сервер в последующем вы можете и поменять, а псевдоним позволяет не менять настройки у пользователей, достаточно будет изменить единственную DNS-запись.

SOGo представляет простой и удобный веб-клиент с достаточным количеством настроек и функциями для групповой работы. Поддерживается адресная книга и календари.

iRedMail-SOGo-LetsEncrypt-011.pngПроверку почты следует начать с внутренней доставки, для нее требуется только правильная настройка сервера, отправим письмо с одного ящика на другой. Не ленитесь, заполните все поля и приложите вложение. Если что-то пойдет не так, то лучше узнать об этом сейчас, чем от пользователей, которые начнут работать с системой.

iRedMail-SOGo-LetsEncrypt-012.pngОтправили, переходим в другой почтовый ящик и проверяем получение:

iRedMail-SOGo-LetsEncrypt-013.pngСледующим шагом проверим отправку писем внешним получателям, например, на ящик публичной почтовой службы. Если вы все сделали правильно и все нужные DNS-записи присутствуют, то письмо будет успешно доставлено, в противном случае не забываем проверить папку Спам. В нашем случае письмо успешно пришло на Яндекс, и мы можем убедиться, что наш сервер использовал шифрование и DKIM-подпись, которая успешно прошла проверку.

iRedMail-SOGo-LetsEncrypt-014.pngИ теперь обратный тест, отправка почты извне на свой сервер. Для того, чтобы эта попытка увенчалась успехом нам нужно иметь рабочие MX и A-записи. Причем они должны обновиться именно для сервера-отправителя, в противном случае он не сможет выполнить доставку. Поэтому основные DNS-записи следует изменять заранее, оптимально - за несколько дней до настройки почтового сервера.

Мы надеемся, что у вас все сделано правильно и внешнюю почту вы также успешно получите.

iRedMail-SOGo-LetsEncrypt-015.pngЗатем можно попробовать настроить почтовый клиент, в нашем случае это будет Thunderbird. Для настройки достаточно просто указать адрес почты и пароль от почтового ящика, клиент сам определит не только основные, но и дополнительные настройки, предложив вам подключить адресные книги и календарь.

iRedMail-SOGo-LetsEncrypt-016.pngВсе содержимое почты и календаря будет синхронизировано с клиентом, и синхронизация будет работать в обе стороны. Т.е. спокойно можно использовать почтовый клиент совместно в веб-интерфейсом, не испытывая никаких неудобств и затруднений.

iRedMail-SOGo-LetsEncrypt-017.pngТакже можем сразу проверить работу фильтров, для проверки антиспама отправьте в теле письма строку:

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

Отправитель должен получить репорт от системы антиспама, а у получателя письмо сразу должно упасть в папку Спам.

Для проверки антивируса отправьте во вложении файл со строкой:

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Отправка будет блокирована, и отправитель также получит репорт.

iRedMail-SOGo-LetsEncrypt-018.pngНа этом проверку основных функций почтового сервера можно считать законченной.

Получение сертификатов Let's Encrypt

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

Для начала установим certbot:

apt install certbot

После чего проверим возможность получения сертификата:

certbot certonly --webroot --dry-run -w /var/www/html -d mail.it-31.ru -d mk-61.it-31.ru 

Ключ --dry-run как раз указывает на то, что нужно выполнить проверку без реального получения сертификата, ключи -d указывают домены, для которых мы хотим получить сертификат. При этом в общее имя (CN) сертификата будет записан домен указанный первым, остальные домены будут указаны в поле альтернативное имя. Никакого существенного значения это не имеет, но "для красоты" мы поставили первым псевдоним.

Если проверка прошла удачно, то получаем сертификаты командой:

certbot certonly --webroot -w /var/www/html -d mail.it-31.ru -d mk-61.it-31.ru 

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

Никаких настроек по продлению делать не нужно, certbot сам добавит в планировщик необходимые задания. А вот после получения нам потребуется выполнить ряд действий: скопировать сертификаты в хранилище iRedMail и перезапустить службы. Для этого воспользуемся дополнительными возможностями certbot.

Откроем файл с настройками нашего домена /etc/letsencrypt/renewal/mail.it-31.ru.conf и внесем в секцию [renewalparams] следующую опцию:

[renewalparams]
...
renew_hook = /etc/iRedMail_ssl.sh

Теперь создадим сам файл скрипта (если вы используете встроенный редактор mc, то замените в команде nano на mcedit):

nano /etc/iRedMail_ssl.sh

И внесем в него следующее содержимое:

#!/bin/bash

rm -f /etc/ssl/private/iRedMail.key
rm -f /etc/ssl/certs/iRedMail.crt
ln -s /etc/letsencrypt/live/mail.it-31.ru/privkey.pem /etc/ssl/private/iRedMail.key
ln -s /etc/letsencrypt/live/mail.it-31.ru/fullchain.pem /etc/ssl/certs/iRedMail.crt

systemctl restart dovecot
systemctl restart postfix
systemctl restart nginx

Данный скрипт удаляет старые сертификаты и создает на их месте новые, точнее символические ссылки на новые сертификаты, а затем перезапускает службы. Он будет автоматически запускаться certbot при каждом успешном обновлении сертификатов. А пока сделаем его исполняемым:

chmod +x /etc/iRedMail_ssl.sh

И выполним:

/etc/iRedMail_ssl.sh

Тем самым мы проверим его работоспособность и выполним замену самоподписанных сертификатов на полученные нами от Let's Encrypt. Если скрипт отработал без ошибок, то снова идем в веб-интерфейс почты и убеждаемся что мы работаем теперь с полноценным сертификатом.

iRedMail-SOGo-LetsEncrypt-019.pngТеперь наш почтовый сервер полностью готов к эксплуатации.

Дополнительные инструменты управления

Как мы уже успели увидеть, родная панель управления крайне скудна по возможностям, поэтому в сети встречается достаточно решений разной степени удобности и полезности. Но все они сводятся к тому, чтобы внести необходимые изменения в базу данных SQL. От установки различных веб-панелей и прочих веб-скриптов лучше всего отказаться, так как это все создаст дополнительные угрозы безопасности, особенно если сервер у вас находится не в пределах периметра, а на внешнем хостинге.

Со своей стороны мы можем порекомендовать набор скриптов iRedMail-scripts, основное их достоинство в том, что они работают исключительно локально и просто преобразуют ваши запросы в SQL-команды, которые вы потом должны выполнить на сервере СУБД. При этом вы полностью контролируете ситуацию и можете дополнительно проверить, дополнить или изменить результат их работы.

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

Для получения скриптов установим git:

apt install git 

Перейдем в домашнюю директорию и клонируем репозиторий:

cd 
git clone https://github.com/jeekkd/iRedMail-scripts.git

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

В нашем примере мы создадим несколько алиасов и привяжем их к почтовом аккаунту администратора. Для начала перейдем в директорию со скриптами:

 cd ~/iRedMail-scripts/Scripts

Затем создадим первый алиас, вывод команд мы будем выполнять в SQL-файл.

./create-alias.sh report@it-31.ru > ~/output.sql

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

Теперь второй алиас:

./create-alias.sh admin@it-31.ru >> ~/output.sql

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

Теперь свяжем с нашими алиасами существующие почтовые ящики, к каждому алиасу можно привязать несколько ящиков, и вся почта направленная на алиас будет перенаправляться в каждый из них.

./add-user-to-alias.sh report@it-31.ru postmaster@it-31.ru >> ~/output.sql
./add-user-to-alias.sh admin@it-31.ru postmaster@it-31.ru >> ~/output.sql

В нашем случае мы все замкнули на админский ящик.

Если мы откроем теперь файл output.sql, то увидим в нем обычные SQL-команды, которые можем исправлять, дополнять, копировать. Никаких глубоких знаний здесь не нужно, достаточно базовых познаний в SQL.

iRedMail-SOGo-LetsEncrypt-020.pngПосле того, как файл с командами сформирован остается только загрузить его в СУБД, для этого скопируем его в домашнюю папку суперпользователя базы данных и изменим владельца:

cp ~/output.sql /var/lib/postgresql/
chown postgres:postgres /var/lib/postgresql/output.sql

Теперь войдем под пользователем postgres:

su postgres

Откроем консоль psql к нужной базе:

psql -d vmail

И загрузим файл, после чего выйдем из консоли:

 \i ~/output.sql
\q

iRedMail-SOGo-LetsEncrypt-021.pngТеперь, для проверки, можем направить почту на алиас и проконтролировать ее получение в основном почтовом ящике.

Мониторинг

Контроль над настроенным и установленным сервером требует наличия инструментов мониторинга основных показателей. В случае с iRedMail вам не нужно дополнительно ничего делать, так как из коробки была установлена система мониторинга netdata, если вы, конечно, не сняли галочку на этапе установки. Чтобы попасть в ее графический интерфейс наберите mail.it-31.ru/netdata и войдите под учетной записью администратора почтового сервера postmaster.

Веб-интерфейс предоставляет быстрый доступ к основным показателям в реальном времени.

iRedMail-SOGo-LetsEncrypt-022.pngНиже можно просмотреть графики основных метрик и ознакомиться со статистикой всех используемых служб сервера, например, количество забаненых Fail2ban адресов.

iRedMail-SOGo-LetsEncrypt-023.pngБолее подробно разбирать систему мониторинга мы не будем, она достаточно проста и освоить ее самостоятельно не составит труда.

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

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Поддержи проект!

Или подпишись на наш Телеграм-канал: Подпишись на наш Telegram-канал



Loading Comments