РазделПочта
Почтовый сервер
Реализовано 2026-09-07, проверено на Ubuntu 24.04 (postfix 3.8.6, dovecot 2.3.21, opendkim 2.11, Roundcube 1.7.4).
Панель поднимает полноценный почтовый сервер для доменов, которые она обслуживает: приём и отправка (SMTP), доступ к ящикам (IMAP/POP3), подпись писем (DKIM) и вебпочту (Roundcube). Как и везде в MonoPanel, источник истины — база панели: конфигурация postfix и dovecot перегенерируется целиком при каждом изменении, а руками её править не нужно.
1. Из чего собрано
| Компонент | Роль | Почему так |
|---|---|---|
| postfix | SMTP: приём на 25, отправка клиентами на 587/465, транспорт наружу | Стандарт де-факто, предсказуемая конфигурация, дешёвый в поддержке набор карт |
| dovecot | IMAP, POP3, LMTP-доставка, SASL для postfix, квоты, sieve-фильтры | Один демон отвечает за ящики целиком: пароли, доставку, квоты и фильтры. postfix не трогает файлы почты вообще |
| opendkim | Подпись исходящих и проверка входящих | Отдельный milter вместо встроенных решений: ключи лежат отдельно от postfix, ротация не трогает MTA |
| Roundcube | Вебпочта | Ставится обычным сайтом панели: свой php-fpm пул, свой сертификат, свой владелец |
Пользователи почты не unix-аккаунты: все ящики принадлежат системному пользователю vmail, а адреса, пароли и квоты живут в базе панели.
2. Что где лежит
| Путь | Что это |
|---|---|
/etc/postfix/main.cf, master.cf | Генерируются панелью целиком |
/etc/postfix/monopanel/domains|mailboxes|aliases|senders | Карты (hash:), после записи собираются postmap |
/etc/postfix/monopanel/submission_header_checks | Убирает Received и X-Originating-IP у писем, отправленных через 587/465 |
/etc/dovecot/dovecot.conf | Генерируется целиком; conf.d дистрибутива намеренно не подключается |
/etc/dovecot/monopanel/users | passwd-файл: адрес, хеш {BLF-CRYPT}, userdb_quota_rule |
/etc/opendkim.conf, /etc/opendkim/KeyTable, SigningTable, TrustedHosts | Таблицы подписи |
/etc/opendkim/keys/<домен>/<селектор>.private | Приватный ключ (0600, opendkim); копия хранится в базе панели зашифрованной |
/var/mail/monopanel/<домен>/<ящик>/ | Maildir, владелец vmail |
Панель хранит домены, ящики и алиасы в таблицах mail_domains, mailboxes, mail_aliases (миграция 0011_mail.sql); серверные настройки — в settings под ключом mail.
3. Путь письма
Входящее: :25 smtpd → проверки (HELO, домен отправителя, reject_unlisted_recipient, при желании RBL) → opendkim проверяет подпись → virtual_transport = lmtp:unix:private/dovecot-lmtp → dovecot кладёт в Maildir, применяет sieve-фильтры и считает квоту.
Исходящее от клиента: :587 (STARTTLS) или :465 (сразу TLS) → SASL к dovecot по private/auth → reject_sender_login_mismatch (отправлять можно только от своего адреса или от алиаса, ведущего в этот ящик) → submission-header-cleanup убирает следы IP клиента → opendkim подписывает → доставка.
Письма сайтов: PHP mail() идёт через /usr/sbin/sendmail → pickup → тот же путь, включая подпись DKIM.
4. Порты
| Порт | Что | Комментарий |
|---|---|---|
| 25 | SMTP | Приём почты снаружи. Если порт занят другим демоном, установка это видит по баннеру и выключает приём (port25=false), а не роняет postfix |
| 587, 465 | Submission, SMTPS | Только с авторизацией и TLS |
| 143, 993 | IMAP, IMAPS | ssl = required, plaintext-логин без TLS запрещён |
| 110, 995 | POP3, POP3S | Отключаются целиком (mp mail settings --pop3 false) |
| 4190 | ManageSieve | Фильтры из Roundcube |
| 2096 (любой) | Вебпочта | Необязательный: Roundcube на имени и сертификате почтового сервера |
Порты открываются в firewall панели автоматически. Панель не верит systemd на слово: после применения конфигурации она проверяет, что порты действительно отвечают (юнит postfix — обёртка и рапортует «active», даже когда мастер не поднялся).
5. TLS
Сертификат берётся по имени почтового сервера из хранилища панели (тот же ACME, что и у сайтов). Если сертификата нет, панель выпускает самоподписанный, чтобы демоны стартовали, и пишет об этом в предупреждения. Когда ACME-сертификат для этого имени выпускается или продлевается, задача cert.issue сама перегенерирует конфигурацию почты и перезапустит postfix и dovecot.
6. DNS
mp mail domain dns <домен> (и кнопка «DNS» в Web UI) показывает нужные записи и то, что опубликовано сейчас — запросы идут к публичным резолверам (1.1.1.1, 8.8.8.8), а не к системному:
Aпочтового хоста → адрес сервера;MXдомена → почтовый хост;TXTSPF:v=spf1 mx a:<хост> -all;TXT<селектор>._domainkey.<домен>— открытый ключ DKIM (RSA 2048);TXT_dmarc.<домен>;PTRдля IP — его настраивает хостер; без него письма чаще попадают в спам.
7. Команды
mp mail install --hostname mail.example.com # postfix + dovecot + opendkim, сертификат, порты
mp mail status # сервисы, порты, TLS, предупреждения
mp mail settings --pop3 false --max-size 25 --rbl zen.spamhaus.org
mp mail domain add example.com --user alex # + ключ DKIM
mp mail domain dns example.com # что прописать в DNS и что уже опубликовано
mp mail domain dkim example.com # новый ключ
mp mail box add ivan@example.com --quota 2048 # пароль сгенерируется и покажется один раз
mp mail box set ivan@example.com --password … # или без флагов — сгенерировать новый
mp mail alias add info@example.com ivan@example.com
mp mail alias add @example.com ivan@example.com # catch-all
mp mail webmail webmail.example.com --user alex # Roundcube отдельным сайтом
mp mail apply # перегенерировать конфигурациюВыключенный ящик (--active false) исчезает и из карты postfix, и из паролей dovecot: почта на него не принимается, войти нельзя, письма на диске остаются.
8. Домен-приёмник
Обычному домену панель не отдаст письмо от отправителя с несуществующим доменом или с кривым HELO — и правильно сделает. Но есть домены, для которых входящее письмо не корреспонденция, а предмет анализа: диагностический приёмник обязан увидеть именно то письмо, которое остальные отвергли, иначе он не сможет объяснить отправителю, что у него сломано.
Для таких доменов есть флаг «приёмник» (mp mail domain add … --lenient, mp mail domain set <домен> --lenient true). Технически он кладёт домен в карту check_recipient_access, а строгие проверки HELO и отправителя перенесены в общий список с получателем — OK из карты обрывает его до того, как до них дойдёт дело. Приём остаётся закрытым для чужих доменов (reject_unauth_destination) и для несуществующих ящиков.
Так на dev-хосте панели уживаются почтовый сервер и mail-tester: postfix слушает 25-й порт, домен тестера объявлен приёмником с catch-all в отдельный служебный ящик, а сам тестер забирает письма из этого ящика по IMAP ([imap] enabled = yes) и берёт IP отправителя, HELO и TLS из заголовка Received, который добавил postfix. Тестеру больше не нужен свой SMTP-демон, а панели — не нужно уступать порт.
9. Вебпочта
mp mail webmail <домен> создаёт обычный сайт панели, скачивает официальный архив Roundcube (версия и sha256 зашиты в панель), распаковывает его от root (код не принадлежит владельцу сайта и не переписывается через веб), делает базу MySQL, загружает схему и пишет config/config.inc.php: IMAP и SMTP — на почтовый хост через TLS, плагины archive, zipdownload, managesieve, newmail_notifier, каталог installer удаляется. Дальше это обычный сайт: свой сертификат, свой пул php-fpm, своя версия PHP.
Порт вместо домена. --port 2096 (или mp mail settings --webmail-port 2096) публикует ту же установку на порту почтового хоста: https://<почтовый хост>:2096/. Панель пишет отдельный серверный блок nginx в http.d/monopanel-webmail.conf с именем и сертификатом почтового сервера, открывает порт в firewall и слушает заодно на петле, чтобы проверки с самого хоста работали. Отдельная запись в DNS и отдельный сертификат для вебпочты при этом не нужны — удобно, когда почта поднимается на сервере, у которого уже есть имя. --port 0 убирает публикацию.
10. Границы
- Debian/Ubuntu. На EL пакеты есть, но конфигурация не проверялась — установка отказывается сразу, а не ломается на полпути.
- dovecot 2.3. В 2.4 (Debian 13) синтаксис конфигурации изменился; панель это видит по версии пакета и отказывается писать конфигурацию, которую не проверяли. Шаблон для 2.4 — следующий шаг.
- Антиспам — только средства postfix: проверки HELO/отправителя, лимиты соединений и опциональные RBL. Полноценного контент-фильтра (rspamd) пока нет; входящие письма проходят проверку DKIM, но по её результату ничего не отклоняется.
- Квоты считает dovecot (
maildir:User quota); превышение отдаётся отправителю как552 5.2.2 Mailbox is full. - Смены пароля ящика из вебпочты нет: пароли меняются в панели.
- Ключ DKIM начинает подписывать письма сразу, а проверяется получателями по записи в DNS — до её публикации подпись будет «не сходится». Публикуйте TXT-запись сразу после добавления домена (
mp mail domain dns) или добавляйте домен с--no-dkim, если ключ пока некуда прописать.