8.2.26 Встановлення та налаштування Mailcow на сервері

The Host Banner

Mailcow — це self-hosted поштовий серверний пакет, зібраний навколо Docker-контейнерів. Він потрібен тим, хто втомився довіряти листування «великим добрим корпораціям» і хоче тримати листи під власним контролем.

Основні особливості:

  • Контейнеризація: усе запускається в Docker, кожен сервіс ізольований (Postfix, Dovecot, Rspamd, ClamAV, MariaDB, Redis тощо).
  • Web-інтерфейс: зручна адмінка на PHP/NGINX для керування доменами, поштовими скриньками, аліасами, антиспамом.
  • Безпека: вбудовані DKIM, SPF, DMARC, підтримка TLS, автоматичне оновлення сертифікатів через ACME/Let’s Encrypt.
  • Антиспам/антивірус: фільтрація листів через Rspamd і ClamAV.
  • Гнучкість: підтримка SOGo (вебкалендар, контакти, webmail), API для інтеграції, розширюваність за рахунок налаштування сервісів.

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

Вимоги

Змінні середовища

  • SERVER_IP — зовнішня IP-адреса сервера, на якому запускається Mailcow.
  • MAILCOW_HOSTNAME — повне доменне ім’я, яке буде використовуватися як основний хост поштового сервісу.
  • MAILCOW_TIMEZONE — часовий пояс сервера (наприклад, Europe/Kyiv), необхідний для коректного логування і планувальника.
  • ADMIN_EMAIL — e-mail адміністратора, куди надходитимуть сповіщення та звіти.
  • BACKUP_DIR — директорія для зберігання резервних копій (рекомендується окремий диск або мережеве сховище).

Встановлення залежностей

Встановіть рекомендовані залежності:

sudo apt update && sudo apt install -y git openssl curl gawk coreutils grep jq

sudo_apt

Встановлення Docker і Compose

Повну інструкцію дивіться в нашій статті: Docker and Docker Compose

Необхідні мінімальні версії: Docker >= 24.0.0, Docker Compose >= 2.0. Перевірте:

docker --version
docker compose version

docker_version

Якщо версії нижчі, оновіть Docker/Compose за інструкцією вище перед продовженням.

Клонування репозиторію Mailcow

Отримайте актуальний код Mailcow з офіційного репозиторію GitHub, щоб розгорнути поштовий стек в останній стабільній версії.

sudo mkdir -p /opt && cd /opt
sudo git clone https://github.com/mailcow/mailcow-dockerized
cd /opt/mailcow-dockerized

mkdir

Генерація конфігурації

Для генерації стартової конфігурації виконайте скрипт:

./generate_config.sh

Вкажіть:

  • Mail server hostname (FQDN): введіть MAILCOW_HOSTNAME (наприклад, mail.example.com).
  • Timezone: MAILCOW_TIMEZONE (наприклад, Europe/Kyiv).

Скрипт створить mailcow.conf, у якому ви за потреби налаштуєте порти та додаткові SAN/серверні імена.

Підказка: у разі потреби внести ручні правки в конфігураційний файл MailCow, виконайте команду: nano /opt/mailcow-dockerized/mailcow.conf

Відкриття портів у фаєрволі

Дозволимо поштові та вебпорти.

UFW -- дозволяємо потрібні порти
sudo ufw allow 25,80,110,143,443,465,587,993,995,4190/tcp
sudo ufw reload
sudo ufw status numbered

UFW

iptables -- дозволяємо потрібні порти
sudo iptables -A INPUT -p tcp -m multiport --dports 25,80,110,143,443,465,587,993,995,4190 -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Налаштування DNS-записів

Для коректної роботи пошти необхідно буде налаштувати DNS-записи Вашого домену MAILCOW_HOSTNAME. Детальніше з процесом налаштування можете ознайомитися в нашій інструкції.

Запуск контейнерів

Запустіть контейнери та підтягніть необхідні образи:

docker compose pull
docker compose up -d

Після старту відкрийте https://MAILCOW_HOSTNAME/admin і увійдіть під логіном admin, паролем moohoo. Одразу змініть пароль адміністратора.

web ui

Після виконання зазначених дій Ви потрапите в адміністративну панель:

admin panel welcome

Перевірка портів/доступності

Переконайтеся, що потрібні порти прослуховуються і доступні ззовні (особливо 25, 80, 443, 587, 993, 995, 110, 143, 4190):

ss -tlpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'

Перевірка портів, що прослуховуються

Швидкий розбір колонок ss -lntp

  • LISTEN — сокет очікує вхідні з’єднання
  • Local Address:Port — куди саме «прив’язаний» порт
  • 0.0.0.0:PORT — слухає на всіх IPv4-інтерфейсах
  • [::]:PORT або *:PORT — слухає на всіх IPv6
  • 127.0.0.1:PORT — доступно лише локально
  • users:(… pid=…) — який процес утримує порт (ім’я та PID).

Налаштування сервісу

Додавання доменного імені

Створіть домен і вкажіть його як основний для приймання та відправлення пошти. Після додавання система автоматично запропонує згенерувати DKIM-ключ і підкаже необхідні DNS-записи для коректної роботи (MX, SPF, DKIM, DMARC).

Для цього перейдіть E-mail → Конфігурація → Додати домен

adding domain

Налаштування додаткових функцій

Реверс-проксі (Nginx/Traefik)

  • Прив’яжіть вебінтерфейс Mailcow до 127.0.0.1 через HTTP_BIND/HTTPS_BIND, а назовні публікуйте через проксі.
  • Якщо використовуєте домен інтерфейсу, відмінний від MAILCOW_HOSTNAME, заповніть ADDITIONAL_SERVER_NAMES (через кому, без пробілів) і тільки потім перезапустіть стек.
docker compose down && docker compose up -d

SSL і Let’s Encrypt

Типово вбудований ACME-контейнер випустить сертифікат для MAILCOW_HOSTNAME та імен із ADDITIONAL_SAN. Для примусового оновлення сертифікатів перезапустіть ACME-контейнер:

docker compose restart acme-mailcow

Підказка: для коректного випуску сертифіката переконайтеся в тому, що 80/TCP порт відкритий.

Резервні копії та відновлення

Mailcow надає скрипт helper-scripts/backup_and_restore.sh для резервного копіювання/відновлення. Виконайте зазначену команду, перебуваючи в корені проєкту MailCow(/opt/mailcow-dockerized).

# Резервна копія всіх компонентів із видаленням бекапів старше 14 днів
sudo ./helper-scripts/backup_and_restore.sh backup all --delete-days 14 --target BACKUP_DIR

# Відновлення з каталогу з бекапами
sudo ./helper-scripts/backup_and_restore.sh restore --target BACKUP_DIR

Плануйте CRON-завдання та перевіряйте журнали виконання бекапу.

Безпека

Керуйте політиками банів у Fail2Ban, для цього перейдіть у System і виберіть розділ Configuration.

failtoBan

У відкритому вікні виберіть Options і відкрийте розділ Fail2Ban parameters.

failtoBan

Оновлення

Для виконання оновлень у директорії проєкту виконайте команду:

./update.sh

Поширені помилки

Помилка / Симптом Причина Рішення Діагностика
ACME не випускає/не подовжує сертифікат Порт 80 закритий або некоректні ADDITIONAL_SAN/налаштування проксі Відкрийте 80/TCP, скоригуйте SAN/проксі та перезапустіть acme-mailcow docker compose logs -f acme-mailcow
Немає вхідної пошти 25/TCP закритий ззовні або фільтрується провайдером Відкрийте 25/TCP; у разі блокування у провайдера використайте відповідний VPS telnet <SERVER_IP> 25 із зовнішньої мережі
Конфлікт 80/443 На хості вже слухає вебсервер Використайте реверс-проксі, прив’яжіть Mailcow до 127.0.0.1 ss -tlpn grep -E '80 / 443'
Некоректні бінди HTTP(S) Використаний формат IP:PORT для HTTP/HTTPS Застосовуйте HTTP_PORT/HTTPS_PORT і HTTP_BIND/HTTPS_BIND окремо Перевірка mailcow.conf
Помилка портів у Compose (:443:443) Некоректний синтаксис публікації порту Вкажіть коректне значення порту без порожнього префікса : Валідація docker compose config
Не вдається увійти в панель після оновлення Змінилися маршрути логіна у 2025-03 Використовуйте https://<HOST>/admin для адміністратора Перевірте примітки до релізу

Корисні посилання