8.2.27 Mail-in-a-Box (MIAB): установка и настройка почтового сервера

Banner The Host

Mail-in-a-Box(MAIB) — автоматизированный инсталлятор почтового стека. Он разворачивает и объединяет: Postfix (SMTP), Dovecot (IMAP/POP3), авторитетный DNS и рекурсор (unbound), Nginx, Fail2ban, Roundcube, админ-панель со статус-проверками, Let’s Encrypt, политики SPF/DKIM/DMARC, резервные копии (локально/S3/SSH) и Nextcloud (CalDAV/CardDAV, ActiveSync).

Преимущества

  • Устраняет ручную сборку MTA/IMAP/антиспама/TLS.
  • Единая админ-панель /admin со статус-чеками и рекомендациями.
  • Встроенный авторитетный DNS избавляет от ручного управления записями у регистратора.
  • Типовые сценарии: корпоративная почта, тестовые домены, изоляция от SaaS.

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

Требования

Переменные окружения

  • YOUR_HOSTNAME — FQDN сервера, например box.YOUR_DOMAIN.
  • YOUR_DOMAIN — основной домен, например example.com.
  • PUBLIC_IP, PUBLIC_IPV6 — внешние адреса.
  • ADMIN_EMAIL — первичная админ-учётка, например admin@YOUR_DOMAIN.
  • TIMEZONE — часовой пояс, например Europe/Kyiv.

Базовая подготовка ОС

Выполните последовательность команд. Это обновит систему, выставит часовой пояс.

sudo apt-get update && sudo apt-get -y upgrade
sudo timedatectl set-timezone Europe/Kyiv
# опционально — заранее задать hostname, MIAB возьмёт его как PRIMARY_HOSTNAME
sudo hostnamectl set-hostname YOUR_HOSTNAME

Подсказка: вы можете заранее задать hostname, MIAB возьмёт его как PRIMARY_HOSTNAME.

Сетевая безопасность и порты

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

UFW
sudo ufw allow 25,53,80,110,143,443,465,587,993,995,4190/tcp
sudo ufw allow 53/udp
sudo ufw reload
sudo ufw status numbered
iptables
# сначала разрешаем уже установленные соединения
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# затем открываем нужные TCP-порты
sudo iptables -A INPUT -p tcp -m multiport --dports 25,80,110,143,443,465,587,993,995,4190,53 -j ACCEPT
# и UDP для DNS
sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT
# при необходимости сохраните правила (например, через netfilter-persistent)

Подготовка DNS у регистратора

Выберите один из сценариев делегации. От этого зависит дальнейшая конфигурация и эксплуатация сервиса.

Сценарий A. MIAB как авторитетный DNS (рекомендуется для простоты):

Создайте A/AAAA для поддомена box.YOUR_DOMAIN на PUBLIC_IP/PUBLIC_IPV6, назначьте поддомену следующие NS:

  • ns1.box.YOUR_DOMAIN

  • ns2.box.YOUR_DOMAIN

Если у регистратора требуется, добавьте glue-записи для ns1 и ns2.

Сценарий B. Внешний DNS:

После установки перенесите все записи, которые MIAB предложит в панель DNS Вашего текущего регистратора.

PTR/rDNS

Настройте PTR (rDNS) на box.YOUR_DOMAIN. Без корректного rDNS возможны понижение репутации отправки и отказы доставки.

Установка Mail-in-a-Box

Конфликты служб

Важно: перед установкой MAIB убедитесь, что на сервере не запущены сторонние MTA/DNS/Nginx/HTTP-службы. MIAB установит нужные компоненты самостоятельно.

Запустите установочный скрипт. Он проверит совместимость ОС, скачает актуальную версию и выполнит развертывание.

curl -s https://mailinabox.email/setup.sh | sudo bash

Ключевые ответы установщика

Укажите значения параметров. От них зависят выпуск сертификатов, корректность DNS и почтовая репутация.

  • PRIMARY_HOSTNAME: box.YOUR_DOMAIN

  • PUBLIC_IP / PUBLIC_IPV6: оставьте автоопределение, если корректно
  • ADMIN_EMAIL: admin@YOUR_DOMAIN

  • Пароль для административной панели: надежный, сохраните в менеджере паролей

Обратите внимание: будут развернуты Postfix, Dovecot, nsd (авторитетный DNS), unbound (рекурсор), Nginx, Fail2ban, Roundcube, Nextcloud (CalDAV/CardDAV), ActiveSync, а также выпущены сертификаты Let’s Encrypt и сгенерированы ключи DKIM.

Первый вход и проверка статусов

Доступ в админ-панель

Откройте адрес панели и авторизуйтесь под учетной записью администратора, созданной на этапе установки.

https://box.YOUR_DOMAIN/admin

Статус-чеки

В административной панели откройте раздел System, затем вкладку Status Checks. Последовательно устраните все предупреждения до зеленого статуса.

  • При использовании внешнего DNS перенесите записи A/AAAA, MX, TXT (SPF/DKIM/DMARC), CAA, SRV к вашему регистратору.
  • Проверьте доступность портов извне, корректность A/AAAA для box.YOUR_DOMAIN и наличие PTR.
  • Если порты 80/443 были закрыты во время установки, перевыпустите сертификаты после открытия портов.

Неинтерактивная установка (автоматизация/CI)

Используйте переменные окружения. Это позволит проводить развертывание по умолчанию без диалогов.

command
export NONINTERACTIVE=1
export PUBLIC_IP=auto
export PUBLIC_IPV6=auto
export PRIMARY_HOSTNAME=box.YOUR_DOMAIN
# опционально:
# export STORAGE_ROOT=/home/user-data
# export STORAGE_USER=user-data
curl -s https://mailinabox.email/setup.sh | sudo bash

Переменная NONINTERACTIVE=1 включает неинтерактивный режим; остальные параметры будут взяты из окружения или определены автоматически.

Проверка работы и тестирование

Базовые проверки с сервера

Выполните команды для подтверждения состояния служб и корректности DNS-записей. Это поможет обнаружить проблемы до запуска в эксплуатацию.

# версия дистрибутива
lsb_release -ds || cat /etc/os-release

# текстовое меню MIAB (версия продукта в шапке)
sudo mailinabox

# состояние ключевых служб
systemctl --no-pager --type=service | egrep 'postfix|dovecot|nginx|fail2ban|nsd|unbound'

# проверка TCP-портов почты
nc -vz box.`YOUR_DOMAIN` 587
nc -vz box.`YOUR_DOMAIN` 993

# проверка критичных DNS-записей
dig +short txt _dmarc.`YOUR_DOMAIN`
dig +short mx `YOUR_DOMAIN`

Ожидаемый результат: все основные службы в состоянии active (running), MX указывает на box.YOUR_DOMAIN, присутствуют корректные TXT-записи SPF/DKIM/DMARC.

Тест отправки и приема почты

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

  • Откройте веб-почту по адресу https://box.YOUR_DOMAIN/mail/.
  • Отправьте письмо на внешний ящик и проверьте заголовки: ожидается SPF=pass, DKIM=pass, DMARC=pass.
  • Ответьте с внешнего ящика на свой домен и подтвердите получение во «Входящих».
Симптом Причина Решение
Сертификаты не выпущены Порты 80/443 закрыты внешним фаерволом Откройте порты и в панели инициируйте обновление сертификатов
DKIM/DMARC не валидируются При внешнем DNS не перенесены предложенные записи Перенесите записи, дождитесь применения TTL
Письма попадают в спам Отсутствует PTR или низкая репутация исходящего IP Настройте rDNS на box.YOUR_DOMAIN, проверьте RBL-списки
Нет подключения к IMAP/SMTP Порты блокирует провайдер/хостер Откройте 587/993; уточните политику по порту 25

Дополнительная конфигурация

Использование внешнего DNS

В административной панели откройте раздел System, затем вкладку External DNS. Включите режим внешнего DNS и перенесите записи A/AAAA, MX, TXT (SPF/DKIM/DMARC), CAA, SRV к текущему регистратору. Учтите, что применение изменений может занимать до 24 часов из-за TTL.

Резервные копии в S3-совместимые хранилища и по SSH

В административной панели откройте раздел «System», затем вкладку «Backups». Укажите параметры провайдера и выполните тест записи, а затем тест восстановления.

параметры S3
S3_ENDPOINT=<endpoint>
S3_BUCKET=<bucket>
S3_ACCESS_KEY=<access_key>
S3_SECRET_KEY=<secret_key>

Для SSH/SFTP укажите хост, порт и путь назначения согласно вашей политике резервного копирования.

Политика DMARC и обработка отчетов

Начните с мягкой политики p=none, соберите и проанализируйте агрегированные отчеты, затем ужесточайте до quarantine или reject для повышения стойкости к подделке домена.

_dmarc.`YOUR_DOMAIN` TXT
v=DMARC1; p=quarantine; sp=quarantine; rua=mailto:dmarc@EXAMPLE.COM; ruf=mailto:dmarc@EXAMPLE.COM; adkim=s; aspf=s; fo=1

Логирование и Fail2ban

Выполните проверку активных «тюрем» Fail2ban и просмотрите логи основных сервисов за текущий день. Это позволит оперативно выявлять неверные попытки аутентификации и сетевые аномалии.

command
sudo fail2ban-client status
sudo journalctl -u postfix -u dovecot -u nginx --since 'today'

Рекомендуется интегрировать внешний мониторинг и почтовые фильтры администратора для оперативных уведомлений.

Диагностика и устранение неисправностей

Команды для оперативного анализа

  • Почта: journalctl -u postfix -u dovecot -e

  • Веб: tail -n 200 /var/log/nginx/error.log

  • DNS: journalctl -u nsd -u unbound -e

  • Очередь писем: postqueue -p (удаление застрявших: postsuper -d ALL)

Ниже приведены частые симптомы с причинами, действиями и точками входа для диагностики.

Ошибка / симптом Причина Решение Диагностика
550 Relay denied Неверная SMTP-аутентификация клиента Проверьте логин/пароль, используйте порт 465/587 и STARTTLS Просмотрите логи Postfix и клиентские журналы
TLS handshake failed Несинхронизированное время или неполная цепочка сертификатов Синхронизируйте время и перевыпустите сертификат Выполните timedatectl, затем в панели откройте раздел «System» и вкладку «TLS»
SERVFAIL в DNS Некорректные NS или отсутствующие glue-записи Проверьте NS у регистратора, убедитесь в наличии A/AAAA для ns1/ns2 Выполните dig NS YOUR_DOMAIN +trace
DKIM=neutral Просроченный ключ или отсутствует TXT-запись Перегенерируйте DKIM и обновите TXT В панели откройте раздел «Mail», вкладку «DNS»; дополнительно dig txt mail._domainkey.YOUR_DOMAIN

Полезные ссылки и материалы

Официальная документация