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)