8.2.27 Mail-in-a-Box (MIAB): встановлення та налаштування поштового сервера

Банер 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

Корисні посилання та матеріали

Офіційна документація