Files
knowledge-base/decisions/2026-03-03-mailserver-setup-scenario.md

3.9 KiB
Raw Permalink Blame History

date, type, tags
date type tags
2026-03-03 decision
decision
mail

Сценарий настройки почтового сервера (Mailcow)

Отработан на niikn.com (2026-03-03). Следующий: dttb.ru.

Предусловия

  • Mailcow установлен и запущен (docker compose)
  • Белый IP есть
  • Домен на Spaceweb DNS

Шаги

1. MikroTik — проброс почтовых портов

/ip firewall nat add chain=dstnat dst-port=25 protocol=tcp action=dst-nat to-addresses=<MAILCOW_IP> comment="SMTP"
/ip firewall nat add chain=dstnat dst-port=465 protocol=tcp action=dst-nat to-addresses=<MAILCOW_IP> comment="SMTPS"
/ip firewall nat add chain=dstnat dst-port=587 protocol=tcp action=dst-nat to-addresses=<MAILCOW_IP> comment="Submission"
/ip firewall nat add chain=dstnat dst-port=993 protocol=tcp action=dst-nat to-addresses=<MAILCOW_IP> comment="IMAPS"
/ip firewall nat add chain=dstnat dst-port=995 protocol=tcp action=dst-nat to-addresses=<MAILCOW_IP> comment="POP3S"
/ip firewall nat add chain=dstnat dst-port=4190 protocol=tcp action=dst-nat to-addresses=<MAILCOW_IP> comment="Sieve"

Порты 80/443 НЕ пробрасываем если NPM уже занимает их.

2. NPM — proxy host для mail.domain.com

  • Создать proxy host: mail.<DOMAIN>https://<MAILCOW_IP>:443
  • Scheme: https (Mailcow сам обслуживает HTTPS)
  • SSL: Let's Encrypt через NPM
  • ssl_forced: true

3. DNS записи через Spaceweb API

Скрипт: snippets/spaceweb-dns-api.py

# Получить текущие записи
python3 spaceweb-dns-api.py info <DOMAIN>

# A запись для mail (если нет)
python3 spaceweb-dns-api.py add-a <DOMAIN> mail <PUBLIC_IP>

# MX
python3 spaceweb-dns-api.py add-mx <DOMAIN> mail.<DOMAIN> 10

# SPF
python3 spaceweb-dns-api.py add-txt <DOMAIN> @ "v=spf1 mx a:mail.<DOMAIN> ~all"

# DMARC
python3 spaceweb-dns-api.py add-txt <DOMAIN> _dmarc "v=DMARC1; p=none; rua=mailto:admin@<DOMAIN>"

# DKIM (получить ключ из Mailcow → Configuration → ARC/DKIM)
python3 spaceweb-dns-api.py add-txt <DOMAIN> dkim._domainkey "<DKIM_KEY>"

⚠️ Капча: после 2-3 запросов подряд нужна новая сессия (перезапустить скрипт).

4. Mailcow — домен и ящики

Через API (X-API-Key) или веб-интерфейс:

  1. Добавить домен
  2. Получить DKIM ключ (Configuration → ARC/DKIM)
  3. Создать ящики

5. Пароль admin

# Через API:
curl -X POST https://mail.<DOMAIN>/api/v1/edit/admin \
  -H "Content-Type: application/json" \
  -H "X-API-Key: <API_KEY>" \
  -d '{"items":["admin"],"attr":{"password":"<PASS>","password2":"<PASS>"}}'

6. PTR (rDNS)

Обратиться к провайдеру: <PUBLIC_IP>mail.<DOMAIN>

7. Nextcloud SMTP (если есть)

Администрирование → Основные параметры → Email:

  • SMTP, хост: <MAILCOW_IP>, порт: 587
  • STARTTLS, LOGIN auth
  • Логин: noreply@, пароль

Проверка

dig mail.<DOMAIN> A +short        # → <PUBLIC_IP>
dig <DOMAIN> MX +short            # → mail.<DOMAIN>
dig <DOMAIN> TXT +short           # → v=spf1 ...
dig _dmarc.<DOMAIN> TXT +short    # → v=DMARC1 ...
dig dkim._domainkey.<DOMAIN> TXT +short  # → v=DKIM1 ...

https://www.mail-tester.com/ — отправить письмо, проверить оценку.

Применение для dttb.ru

Параметр niikn.com (выполнено) dttb.ru (план)
Mailcow IP 192.168.1.128 ? (новая VM или LXC)
MikroTik 192.168.1.1 (AI/OL260380eg) 10.0.0.250 или роутер dttb
NPM 192.168.1.22 10.0.0.195
Публичный IP 85.235.181.190 ?
DNS домен niikn.com dttb.ru