Найти в Дзене
Тюнинг Админа

Почтовый сервер на Ubuntu 24.04LTS + Modoboa

Modoboa - это один из лучших почтовых серверов с открытым исходным кодом, альтернатива MailCow, Iredmail, Poste.io. Разрабатывается на Python 3 с учетом модульности и использует фреймворки Django, jQuery и Bootstrap. В основе решения лежит: Для него нужно больше ресурсов, чем например для MailCow, но в целом достойное решение Параметры VDS в готовом настроенном виде в режиме простоя: Итак для компании со штатом сотрудников 200+ человек и почтовой базой 3ТБ+, потребовался собственный надежный почтовый сервер с низкими системными требованиями: Прежде всего пишем письмо интернет провайдеру, в котором попросите прописать PTR запись у себя в DNS. Проверить можно командой: nslookup -type=PTR ip_адрес --- или --- dig -x ip_адрес Если у вас нет домена, нужно приобрести советую nethouse.ru - работаю с ним не один год, всё DNS записи очень быстро обновляются. Итак создаём записи: Останется только после установки и настройки почтового сервера прописать DKIM запись На локальных DNS серверах рекоме
Оглавление

Modoboa - это один из лучших почтовых серверов с открытым исходным кодом, альтернатива MailCow, Iredmail, Poste.io. Разрабатывается на Python 3 с учетом модульности и использует фреймворки Django, jQuery и Bootstrap.

В основе решения лежит:

  • Сервер баз данных (PostgreSQL или MySQL)
  • Nginx and uWSGI
  • Postfix
  • Dovecot
  • Amavis (SpamAssassin и ClamAV)
  • automx (autoconfiguration service)
  • OpenDKIM
  • Radicale (CalDAV и CardDAV server)

Содержание статьи

  • Возможности решения
  • Системные требования
  • Задачи компании
  • План мероприятий
  • Настройка DNS у провайдера
  • Настройка локальных DNS
  • Проброс портов на маршрутизаторе
  • Подготовка сервера
  • Варианты установки решения
  • Локальная установка
  • Установка решения в Docker
  • Настройка почтового сервера
  • Добавление Домена
  • Создание почтовых ящиков
  • Демонстрация пользовательского интерфейса
  • Тестирование работоспособности
  • Сертификаты SSL
  • Синхронизация общей адресной книги в LDAP
  • Миграция почты с Mail.ru
  • Резервное копирование и восстановление
  • Миграция с сервера на сервер
  • Заключение

Возможности решения

  • Web-интерфейс для пользователей
  • Web Панель администратора
  • Управление календарями
  • Управление адресными книгами
  • Создание правил фильтрации для организации писем
  • Автоответчик
  • Неограниченное создание доменов, почтовых ящиков и псевдонимов
  • Инструменты администратора: статистика, инструмент миграции...
  • Защита репутации: проверки DNSBL, отчеты DMARC и многое другое
  • Фронтенд Amavis
  • Графическая статистика по email-трафику

Системные требования

  • Процессор: от 2 ядер от 2ГГц
  • Оперативная память: от 2ГБ
  • Накопитель: от 10ГБ

Для него нужно больше ресурсов, чем например для MailCow, но в целом достойное решение

Параметры VDS в готовом настроенном виде в режиме простоя:

-2

Задачи компании

Итак для компании со штатом сотрудников 200+ человек и почтовой базой 3ТБ+, потребовался собственный надежный почтовый сервер с низкими системными требованиями:

  • Наличие web интерфейса для управления администраторам
  • Наличие удобного web интерфейса для пользователей
  • Работа на 4 ядрах и 8гб оперативной памяти
  • Наличие антивируса и антиспама
  • Перенос почты с Mail.ru

План мероприятий

  • Всех пользователей извещаем о том, чтобы они создали пароли для внешний приложений в аккаунте на mail.ru и прислали вам
  • Отправляем письмо интернет провайдеру с просьбой прописать PTR запись у себя в DNS
  • Настраиваем DNS у хостинг провайдера и в локальной сети
  • Делаем проброс портов на маршрутизаторе
  • Поднимаем виртуальную машину с Ubuntu 24.04LTS на гипервизоре Proxmox
  • Подготавливаем сервер и устанавливаем docker
  • Запускаем и настраиваем решение
  • Тестируем работоспособность, в том числе делаем проверки онлайн ресурсами
  • Создаем почтовые ящики пользователей
  • Выполняем миграцию почты с Mail.ru

Настройка DNS у провайдера

Прежде всего пишем письмо интернет провайдеру, в котором попросите прописать PTR запись у себя в DNS.

Проверить можно командой:

nslookup -type=PTR ip_адрес --- или --- dig -x ip_адрес

Если у вас нет домена, нужно приобрести советую nethouse.ru - работаю с ним не один год, всё DNS записи очень быстро обновляются.

Итак создаём записи:

-3

Останется только после установки и настройки почтового сервера прописать DKIM запись

Настройка локальных DNS

На локальных DNS серверах рекомендую создать зону:

tuning-admina.ru

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

  • Запись типа А --> mail --> IP_Address
  • Запись типа MX --> mail.tuning-admina.ru --> 10
-4

Проброс портов на маршрутизаторе

На маршрутизаторе нужно создать правила типа DNAT для следующих портов:

SMTP_PORT=25

SMTPS_PORT=465

SUBMISSION_PORT=587

IMAP_PORT=143

IMAPS_PORT=993

POP_PORT=110

POPS_PORT=995

SIEVE_PORT=419

Эти порты для хождения почты

443 - для доступа к web интерфейсу.

Получатель ip адрес почтового сервера.

Подготовка сервера

Все действия в системе я произвожу под root:

sudo -s

Настраиваем сеть:

Удаляем дефолтные конфиги:

rm /etc/netplan/*.*

Создаем конфигурационный файл:

nano /etc/netplan/config.yaml

network:

ethernets:

ens18:

dhcp4: false

addresses: [192.168.1.200/24]

gateway4: 192.168.1.254

nameservers:

addresses: [192.168.1.201,192.168.1.202]

Сохраняем файл, выходим из редактора:

CTRL+O, CTRL+X

Применяем настройки:

netplan apply

Обновляем систему:

apt update -y && apt upgrade -y

Устанавливаем имя нашему серверу:

hostnamectl set-hostname mail.tuning-admina.ru

Устанавливаем временную зону:

timedatectl set-timezone Europe/Moscow

Устанавливаем дополнительные пакеты:

apt install mc net-tools git -y

Устанавливаем пакет для синхронизации времени:

apt install chrony -y

Проверяем статус службы:

systemctl status chrony

-5

Перезагружаем систему:

reboot

Варианты установки решения

В реализации текущего продукта, как и в большинстве современных решений существует два варианта установки:

  • Локальная установка
  • Установка в Docker

Оба этих варианта мы с вами рассмотрим

Локальная установка

Скачиваем решение с GitHub:

git clone https://github.com/modoboa/modoboa-installer

-6

Переходим в папку проекта:

cd modoboa-installer

Существует несколько вариантов запуска установочного скрипта:

  • Стандартный - по умолчанию:

python3 run.py tuning-admina.ru

  • Ручной - интерактивный режим:

./run.py --interactive tuning-admina.ru

  • Режим настройки файла ответов перед запуском установочного скрипта:

./run.py --stop-after-configfile-check tuning-admina.ru

Мы же с вами не ищем легких путей поэтому запускаем интерактивный режим:

./run.py --interactive tuning-admina.ru

Нас приветствует установщик и первое о чем он у нас спрашивает, это выберите режим использования SSL:

  • self-signed - само заверяющий сертификат
  • letsencrypt - бесплатный сертификат от корневого центра сертификации, я выбираю этот метод
  • manual - ручной режим, когда вы используете свои ранее купленные сертификаты или переносите с другого сервера
-7

Нас просят ввести адрес нашего почтового ящика для регистрации в letsencrypt:

-8

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

-9

Нас просят задать пароль для учетной записи пользователя postgres:

-10

Теперь необходимо указать пароль для пользователя Modoboa:

-11

Указываем пароль для пользователя amavis:

-12

Указываем пароль для пользователя spamassassin:

-13

Указываем пароль для пользователя OpenDKIM:

-14

Нас предупреждают, что прежде чем выполнить установку сервера, необходимо добавить следующие записи в DNS, в нашем случае у нас эти записи присутствуют и мы смело пишем Y и устанавливаем перечисленные компоненты сервера:

-15

Процедура не быстрая, сидим и ждем окончания.

-16

Установка завершена

Установка решения в Docker

Добавим GPG key от репозитория Docker:

Устанавливаем права на директорию:

install -m 0755 -d /etc/apt/keyrings

Скачиваем ключ репозитория:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

Меняем права на файл ключа репозитория:

chmod a+r /etc/apt/keyrings/docker.asc

Добавим репозиторий Docker:

echo \

"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \

$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \

tee /etc/apt/sources.list.d/docker.list > /dev/null

Обновим сведения о пакетах в репозиториях:

apt update

Устанавливаем Docker:

apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

Проверяем статус службы Docker:

systemctl status docker

-17

Клонируем проект из репозитория GitHub:

git clone https://github.com/modoboa/modoboa.git

Переходим в каталог:

cd modoboa

Создаем и запускаем контейнеры:

docker-compose up

Проверяем статус контейнеров:

Поздравляю установка завершена

Настройка почтового сервера

Переходим в браузер по адресу:

https://mail.tuning-admina.ru

Логин по умолчанию: admin

Пароль по умолчанию: password

-18
-19

Мы можем перейти в новый административный интерфейс:

-20
-21

Первым делом заходим в параметры аккаунта:

-22

Меняем язык интерфейса:

-23

Меняем пароль администратора:

-24

Добавление Домена

Переходим в раздел Домены и нажимаем +New:

-25

Выбираем Domain:

-26

Указываем доменное имя:

-27

Включаем параметр Enable DKIM signing и выбираем размер ключа:

-28

Указываем квоту домена и квоту для почтовых ящиков:

-29

Создаем администратора домена, например это будут другие системные администраторы или ваш веб разработчик, а также переключаю тумблер, давая возможность добавлять администраторов:

-30

Проверяем настройки и нажимаем Создать:

-31

При необходимости можно добавить дополнительного администратора:

-32
-33

Через некоторое время система выдаст статистику по корректности ваших DNS записей, а пока приступим к созданию почтовых ящиков:

-34

Создание почтовых ящиков

Переходим в раздел Пользователи и в правом вернем углу нажимаем на кнопку NEW --> Добавить аккаунт

-35

Выбираем Обычный пользователь и нажимаем на кнопку Следующая:

-36

Указываем имя пользователя, данные сотрудника, пароль и нажимаем Следующая:

-37

На этом шаге мы можем указать лимит почтовому ящику, нажимаем Следующая:

-38

Тут мы можем указать синоним почтовому ящику, нажимаем Следующая:

-39

Проверяем введенные данные и если все хорошо, нажимаем Создать:

-40

Видим в списке созданного пользователя:

-41

Демонстрация пользовательского интерфейса

Переходим в браузере по адресу:

https://mail.tuning-admina.ru

Авторизовываемся под пользователем и попадаем в пользовательский интерфейс:

-42

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

-43

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

-44

Пересылка писем

Пересылка писем, тот самый случай когда вы в отпуске или на больничном и нужно, чтобы кто-то вас подменял, переходим в настройки аккаунта в правом верхнем углу --- вкладка Перенаправленные:

-45

Указываем почтовые адреса которым необходимо пересылать письма, ставим галочку сохранять локально (у вас во входящих) и нажимаем Обновление:

-46

Тестирование работоспособности

Существует множество онлайн сервисов для проверки работоспособности вашего почтового сервера, а также присутствие всех нужных записей в DNS, один из таких ресурсов я вам продемонстрирую:

https://mail-tester.com

Заходим на сайт и видим предложение отправить письмо на сгенерированный специально для вас почтовый обработчик, копируем адрес и с вашего почтового ящика отправляем письмо:

-47

После того как отправили письмо, возвращаемся на страницу ресурса и нажимаем Затем проверьте оценку и если вы все верно настроили, то у вас получиться тот же результат, что и у меня:

-48

Сейчас посмотрим почему 9 из 10, это очень хороший показатель, но нюансы нужно знать и учитывать:

-49

Мы не настроена запись типа TXT с ключом DKIM в настройках DNS у хостинг провайдера.

Переходим в раздел Домены и видим статистика статус Проблема, щелкаем по домену:

-50

Видим, что действительно у нас не настроена запись DKIM:

-51

Нажимаем на значок подсказки:

-52

У вас отобразится окно с DNS записями, которые необходимы для нормальной работы почтового сервера, копируем запись DKIM и отправляемся к провайдеру в DNS панель администрирования:

-53

Добавляем txt запись для DKIM:

-54

НИЖЕ ИДЕТ РЕДАКТИРУЕМЫЙ МАТЕРИАЛ --- ПЛАНИРУЮ ЗАКОНЧИТЬ НА ЭТОЙ НЕДЕЛЕ

Сертификаты SSL

Если вы хотите использовать сертификаты от letsencrypt, то в решении присутствует клиентское приложение certbot, нам лишь нужно в планировщике заданий Cron указать время для запуска приложения с прификсом для перевыпуска сертификатов, после чего перезапустить nginx, postfix и dovecot.

Запускаем правку заданий планировщика:

crontab -e

Выбираем редактор nano: 1

Добавляем строку:

0 1 1 */2 * certbot renew -q && systemctl reload nginx postfix dovecot

Сохраняем файл и выходим из редактора:

CTRL+O, CTRL+X

Если у вас есть приобретенные сертификаты, то их необходимо переместить в каталог:

Синхронизация общей адресной книги в LDAP

Эта функция не включена по умолчанию, чтобы активировать ее необходимо добавьте в файл settings.py следующий блок :

modoboa.ldapsyncMODOBOA_APPSsettings.py

MODOBOA_APPS = ( 'modoboa', 'modoboa.core', 'modoboa.lib', 'modoboa.admin', 'modoboa.transport', 'modoboa.relaydomains', 'modoboa.limits', 'modoboa.parameters', 'modoboa.dnstools', 'modoboa.ldapsync', )

и включите его из админки.

Миграция почты с Mail.ru

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

Работает он следующим образом:

  • Сначала вы указываете, что нужно перенести, в основном домен(ы), которыми вы владеете, и где их можно найти. Сделав это, вы разрешите учетным записям, размещенным на платформе/у провайдера, с которого вы переходите, входить на ваш сервер Modoboa
  • Когда старая учетная запись (полученная от вашего предыдущего провайдера) впервые успешно входит в Modoboa, создается специальная задача миграции
  • На регулярной основе (как правило, каждый час) задание cron отвечает за создание конфигурационного файла OfflineIMAP, включающего инструкции по переносу всех заявленных миграций и запуск OfflineIMAP для начала/продолжения миграций

Предупреждение

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

Конфигурация

Modoboa не возьмет на себя установку OfflineIMAP, поэтому вы Нужно делать это самостоятельно. В этом вам поможет следующая инструкция.После этого новый интерфейс администратора (v2) позволит вам:

Определите необходимую информацию для подключения к вашей старой платформе/провайдеру

Определите, что должно быть перенесено (т.е. учетные записи)

настроить поведение OfflineIMAP: перейдите в раздел «Параметры > миграции IMAP» из левого менюПредупреждениеДля реализации этой функции должна быть включена опция автоматического создания доменаработа. Перейдите в раздел «Параметры > администрирования > почтовых ящиков» и проверьте, есть ли Дело в том.Чтобы сгенерировать конфигурационный файл OfflineIMAP, выполните следующую команду:> python manage.py generate_offlineimap_config

Сценарий синхронизации должен быть настроен на периодическое выполнение на ваш новый сервер. Так как он будет копировать содержимое почтовых ящиков до его конечного destination, должны соблюдаться права доступа к файловой системе. Для этого он должны выполняться пользователем, которому принадлежат почтовые ящики (в общем случае).vmailНиже приведен пример конфигурации, в котором скрипт выполняется каждый раз Часов. Вы можете скопировать его внутри файла:/etc/cron.d/modoboaPYTHON=/srv/modoboa/env/bin/python

INSTANCE=/srv/modoboa/instance

0 */1 * * * vmail cd /srv/vmail && $PYTHON $INSTANCE/manage.py generate_offlineimap_config --output .offlineimaprc && /usr/local/bin/offlineimap > /dev/null 2>&1

Резервное копирование и восстановление

Миграция с сервера на сервер

Заключение

Modoboa безусловно одно из лучших готовых решений в качестве почтового сервера для малого и среднего бизнеса. Решение попадает в мой список ТОП-10 почтовых серверов. Функционал достойный и радует своими возможностями и при этом ничего лишнего, скромно и со вкусом.