8.2.27 Mail-in-a-Box (MIAB): установка и настройка почтового сервера
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.
Подготовка сервера
Требования
- Виртуальный или выделенный сервер.
- Ubuntu 22.04 LTS x86_64 (чистая система).
- Публичный IPv4 (желательно также IPv6).
- Ресурсы: 1 vCPU, 1–2 ГБ RAM, SSD от 20 ГБ (минимум).
Переменные окружения
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. После применения правил проверьте их действие извне.
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
# сначала разрешаем уже установленные соединения
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)
Используйте переменные окружения. Это позволит проводить развертывание по умолчанию без диалогов.
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_ENDPOINT=<endpoint>
S3_BUCKET=<bucket>
S3_ACCESS_KEY=<access_key>
S3_SECRET_KEY=<secret_key>
Для SSH/SFTP укажите хост, порт и путь назначения согласно вашей политике резервного копирования.
Политика DMARC и обработка отчетов
Начните с мягкой политики p=none
, соберите и проанализируйте агрегированные отчеты, затем ужесточайте до quarantine
или reject
для повышения стойкости к подделке домена.
v=DMARC1; p=quarantine; sp=quarantine; rua=mailto:dmarc@EXAMPLE.COM; ruf=mailto:dmarc@EXAMPLE.COM; adkim=s; aspf=s; fo=1
Логирование и Fail2ban
Выполните проверку активных «тюрем» Fail2ban и просмотрите логи основных сервисов за текущий день. Это позволит оперативно выявлять неверные попытки аутентификации и сетевые аномалии.
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 |
Полезные ссылки и материалы
Официальная документация
- Официальный сайт: https://mailinabox.email/
- Репозиторий: https://github.com/mail-in-a-box/mailinabox
- Трекер проблем: https://github.com/mail-in-a-box/mailinabox/issues
- Спецификации: DMARC (RFC 7489), DKIM (RFC 6376)