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. Домен і поштові скриньки
- Відкрийте розділ керування поштою й перейдіть на вкладку Domains.
- Натисніть Add domain, вкажіть
example.comі натисніть Add domain and restart SOGo. - На вкладці 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 для проєктів, де контроль важливіший за зручність.
Відеоінструкція
Відео записано для ранішої версії: інтерфейс оновився, порядок встановлення залишився той самий.



