1. Блог
  2. Мануали

Mailcow: власний поштовий сервер на VPS

Mailcow: власний поштовий сервер на VPS

Mailcow — готовий поштовий сервер у контейнерах Docker. Він об’єднує Postfix, Dovecot, антиспам Rspamd, антивірус, вебпошту SOGo та панель адміністратора в одну систему, яка встановлюється кількома командами й оновлюється одним скриптом. Це найпростіший спосіб отримати повноцінну пошту на власному домені без ручного збирання десятка сервісів.

Перед встановленням: що потрібно перевірити

Поштовий сервер вибагливіший за звичайний сайт. Переконайтеся заздалегідь:

  • Ресурси. Мінімум 6 ГБ оперативної пам’яті та 20 ГБ диска. За меншого обсягу доведеться вимкнути антивірус ClamAV. Підберіть відповідний тариф VPS.
  • Порт 25. Багато провайдерів типово блокують вихідний порт 25 для захисту від спаму. Уточніть це в підтримці хостингу до встановлення.
  • Зворотний DNS-запис (PTR). IP-адреса сервера має розв’язуватися в ім’я поштового сервера. PTR-запис встановлюється на боці хостингу — зазвичай у панелі керування або за запитом у підтримку.
  • Чиста IP-адреса. Перевірте адресу за базами чорних списків, наприклад на mxtoolbox.com.
  • Чиста система. На сервері не повинно бути інших поштових і вебсерверів, що займають порти 25, 80, 443, 587, 993.

Крок 1. DNS-записи

Припустімо, поштовий домен — example.com, сервер називатиметься mail.example.com, його адреса — 203.0.113.10.

Тип Ім’я Значення
A mail 203.0.113.10
MX @ mail.example.com (пріоритет 10)
CNAME autodiscover mail.example.com
CNAME autoconfig mail.example.com
TXT @ v=spf1 mx -all

PTR-запис для 203.0.113.10 має вказувати на mail.example.com. Записи DKIM і DMARC додаються після встановлення.

Крок 2. Підготовка сервера

Встановіть Docker і Docker Compose за інструкцією. Перевірте час і часовий пояс — від них залежать позначки листів:

timedatectl

Відкрийте порти у файрволі:

sudo ufw allow 25,80,443,465,587,993,995,4190/tcp

Крок 3. Встановлення

Команди виконуються від імені root:

su
umask 0022
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized

Створіть конфігурацію:

./generate_config.sh

Скрипт запитає повне ім’я поштового сервера — вкажіть mail.example.com — і часовий пояс. Результат зберігається у файлі mailcow.conf. Якщо пам’яті менше ніж 6 ГБ, скрипт запропонує вимкнути ClamAV.

Завантажте образи й запустіть систему:

docker compose pull
docker compose up -d

Перший запуск триває кілька хвилин. SSL-сертифікат Let’s Encrypt для mail.example.com випускається автоматично.

Крок 4. Перший вхід

Відкрийте https://mail.example.com і увійдіть у панель адміністратора з логіном admin і паролем moohoo.

Крок 5. Домен і поштові скриньки

  1. Відкрийте розділ керування поштою й перейдіть на вкладку Domains.
  2. Натисніть Add domain, вкажіть example.com і натисніть Add domain and restart SOGo.
  3. На вкладці Mailboxes натисніть Add mailbox, задайте ім’я скриньки та пароль.

Користувачі входять у вебпошту SOGo за адресою https://mail.example.com/SOGo.

Крок 6. DKIM і DMARC

Без цих записів листи потраплятимуть у спам.

DKIM. У панелі адміністратора відкрийте налаштування ключів DKIM (ARC/DKIM keys), оберіть домен, довжину ключа 2048 біт і натисніть Add. Скопіюйте отримане значення в TXT-запис:

Тип Ім’я Значення
TXT dkim._domainkey v=DKIM1;k=rsa;t=s;s=email;p=...

DMARC. Почніть із режиму спостереження:

Тип Ім’я Значення
TXT _dmarc v=DMARC1; p=none; rua=mailto:postmaster@example.com

Через кілька тижнів, переконавшись за звітами, що легітимні листи проходять перевірку, змініть політику на p=quarantine, а потім на p=reject.

У списку доменів є кнопка DNS: вона показує, які записи Mailcow очікує побачити і які з них уже налаштовано правильно.

Крок 7. Перевірка

Надішліть лист на адресу, яку видає сервіс mail-tester.com, і перегляньте оцінку: вона покаже проблеми з SPF, DKIM, PTR і чорними списками. Мета — 10 із 10.

Перевірте й зворотний напрямок: надішліть лист на нову скриньку із зовнішньої адреси.

Підключення поштових програм

Протокол Сервер Порт Шифрування
IMAP mail.example.com 993 SSL/TLS
SMTP mail.example.com 465 SSL/TLS
SMTP mail.example.com 587 STARTTLS

Логін — повна адреса пошти. Завдяки записам autodiscover і autoconfig більшість програм визначають налаштування автоматично.

Оновлення

cd /opt/mailcow-dockerized
./update.sh

Скрипт оновлює сам Mailcow, образи контейнерів і застосовує зміни конфігурації. Запускайте його регулярно: виправлення безпеки для поштового сервера критичні.

Резервні копії

До складу входить скрипт резервного копіювання:

cd /opt/mailcow-dockerized
MAILCOW_BACKUP_LOCATION=/var/backups/mailcow ./helper-scripts/backup_and_restore.sh backup all

Копіюйте отриманий каталог за межі сервера — наприклад, за допомогою rclone або на сховище бекапів. Запуск за розкладом налаштовується через cron.

Перенесення пошти зі старого сервера

У Mailcow вбудовано інструмент синхронізації: у налаштуваннях скриньки додайте завдання Sync job, вказавши адресу старого сервера, логін і пароль. Листи буде скопійовано через IMAP. Принцип роботи описано в статті про перенесення пошти з imapsync.

Якщо листи не доходять

  • Листи не надсилаються. Перевірте, чи не заблоковано вихідний порт 25: nc -vz gmail-smtp-in.l.google.com 25.
  • Листи потрапляють у спам. Перевірте PTR-запис, SPF, DKIM і репутацію IP-адреси через mail-tester.com.
  • Сертифікат не випустився. A-запис mail має вказувати на сервер, а порт 80 — бути відкритим.
  • Журнали. У панелі адміністратора є розділ із журналами всіх служб; із консолі — docker compose logs --tail=100 postfix-mailcow.

Чи варто тримати пошту в себе

Власний поштовий сервер дає повний контроль над даними й необмежену кількість скриньок, але потребує уваги: оновлення, контроль репутації IP-адреси, розбір звітів DMARC. Якщо пошта критична для бізнесу, а адмініструвати її нікому, розгляньте готовий поштовий сервіс — і залиште Mailcow для проєктів, де контроль важливіший за зручність.

Відеоінструкція

Відео записано для ранішої версії: інтерфейс оновився, порядок встановлення залишився той самий.

YouTube video