Stalwart - это полноценный почтовый сервер в одной программе: SMTP для отправки и приёма, IMAP и JMAP для чтения, спам-фильтр, DKIM-подпись и веб-админка, из которой всем этим управляют. Настройка сводится к пяти решениям, принятым по порядку: имя хоста сервера, домены, которые он обслуживает, учётные записи на этих доменах, DKIM-ключи, которыми подписывается их почта, и DNS-записи, которые сообщают миру обо всём перечисленном. Сделайте это в таком порядке - и первое тестовое письмо придёт с тремя pass в заголовках. Нарушите порядок, особенно опубликуйте DNS до того, как определились с именем хоста, - и проведёте вечер в погоне за несовпадениями.
Это руководство идёт в том же порядке. Оно держится ближе к понятиям, чем к точным путям в меню, потому что веб-админку Stalwart между релизами переделывали уже не раз. Там, где важно название экрана, указано, к какой версии оно относится.
Что такое Stalwart и как он устроен#
Stalwart написан на Rust и поставляется одним бинарным файлом. Там, где классическая схема объединяет Postfix, Dovecot, Rspamd и OpenDKIM, Stalwart делает всё это в одном процессе с одним хранилищем конфигурации. Части, с которыми вы столкнётесь:
- MTA - сторона SMTP. Принимает входящую почту на порту
25, принимает письма от ваших пользователей на587и465, ставит исходящую почту в очередь и доставляет её - либо напрямую на MX-хосты получателей, либо через relay. - Почтовое хранилище - ящики, папки, письма и их поисковый индекс. Stalwart может держать данные во встроенной базе (обычно по умолчанию это RocksDB) или во внешней, например PostgreSQL, а крупные тела писем при желании - в объектном хранилище. Для одного сервера правильный выбор - встроенное хранилище.
- Протоколы доступа - IMAP (и IMAP4rev1, и IMAP4rev2), JMAP поверх HTTPS и POP3. Фильтрация Sieve с ManageSieve для клиентов, которые редактируют правила.
- Каталог - место, где живут учётные записи и пароли. По умолчанию используется внутренний каталог; LDAP, SQL и OpenID Connect - варианты для организаций, у которых уже есть хранилище пользователей.
- Фильтр спама и фишинга - встроенный, основанный на правилах и баллах, со статистической классификацией и проверками по DNS-блок-листам.
- Аутентификация почты - DKIM-подпись на выходе; проверка SPF, DKIM, DMARC и ARC на входе; отчёты DMARC и TLS в обе стороны.
- Веб-админка - браузерный интерфейс ко всему перечисленному, плюс очередь, логи и отчёты.
В итоге почти всё в этом руководстве происходит в веб-админке. К конфигурационным файлам прикасаться приходится редко.
Первый вход в веб-админку#
Свежая установка Stalwart стартует в режиме, который в проекте называют bootstrap: почтовые службы не работают, сервер слушает только HTTP-порт 8080 и ровно один раз выводит в консоль временный пароль администратора. Мастер настройки по адресу http://<host>:8080/admin спрашивает имя хоста сервера, домен по умолчанию, где хранить данные и по какому каталогу проверять пароли. Закончив, он записывает конфигурацию, создаёт постоянного администратора и перезапускается, после чего веб-админка переезжает на HTTPS по настроенному имени хоста.
На арендованном сервере установка уже выполнена за вас, так что первый шаг - просто войти. Найдите учётные данные администратора, с которыми был создан сервер, - посмотрите вкладку Startup в панели и вывод консоли при первом запуске, а если их нет ни там, ни там, спросите поддержку, вместо того чтобы что-то сбрасывать, - и откройте веб-админку по адресу и порту, которые панель показывает для вашего сервера.
Войдя, прежде всего сделайте две вещи:
- Смените пароль администратора на тот, что хранится в менеджере паролей, и включите двухфакторную аутентификацию для учётной записи администратора, если ваша версия это поддерживает.
- Один раз просмотрите логи. Именно туда вы первым делом пойдёте, когда пропадёт письмо, а если знать, как выглядит норма, отклонения бросаются в глаза.
Имя хоста и сертификаты#
Имя хоста сервера - это имя, которое он называет в каждом SMTP-диалоге (приветствие EHLO), имя в ваших MX-записях и имя в TLS-сертификате, который видят клиенты. Выберите его один раз и не меняйте: mail.example.com - привычный вариант, и он работает.
Это одно имя должно совпадать в четырёх местах:
| Где | Должно быть |
|---|---|
| Имя хоста сервера в Stalwart | mail.example.com |
Запись A | mail.example.com указывает на IP сервера |
Запись MX | MX домена указывает на mail.example.com |
Запись PTR для IP | разрешается в mail.example.com (её настраивает владелец IP) |
Последняя запись не находится в вашей зоне - обратный DNS принадлежит владельцу адреса. Почему это важно и что делать, если настроить её нельзя, объясняется в статье обратный DNS и PTR для почтовых серверов.
Сертификат покрывает имя хоста, к которому клиенты ваших пользователей подключаются по IMAP и для отправки. В Stalwart есть встроенный ACME-клиент, и он умеет сам получать и продлевать сертификаты с помощью проверок TLS-ALPN, HTTP или DNS. Какая проверка сработает, зависит от того, какие порты доходят до сервера, поэтому на тарифе с фиксированным набором портов спросите поддержку, как лучше всего обращаться с сертификатами на вашем сервере, а не гадайте. Просроченный или не совпадающий по имени сертификат на почтовом хосте - классический инцидент «в понедельник жалуются все телефоны в офисе».
Домены, учётные записи и алиасы#
Домен в Stalwart - это имя, для которого сервер принимает почту. Сначала добавьте домен: без него учётные записи существовать не могут.
Затем создайте учётные записи. У каждой есть логин, пароль, один или несколько адресов электронной почты и, по желанию, квота. Несколько соглашений, которые избавят от проблем в будущем:
- Логин и адрес - разные вещи. Учётная запись
annaможет держать адресаanna@example.com,a.smith@example.comиanna@example.org. Пользователи входят с тем логином, который вы задали; скажите им, с каким. - Задайте квоту каждой учётной записи. Ящик без квоты - это диск, который заполняется по расписанию, которым вы не управляете. 2-5 GB - разумная отправная точка для офисной почты.
- Для ролей используйте алиасы, а не учётные записи.
info@,sales@иbilling@лучше сделать дополнительными адресами у тех, кто их обрабатывает, или группой, чем учётными записями с собственными паролями, которые кому-то придётся помнить. - Группы и списки рассылки доставляют письма на один адрес нескольким учётным записям. Группа подходит, когда команда делит адрес и ей нужен общий доступ, список - когда речь только о рассылке.
- Catch-all - приём писем на любой адрес домена - звучит удобно и собирает огромное количество спама. Избегайте его, если нет конкретной причины.
- Адрес postmaster. RFC 5321 требует, чтобы
postmaster@существовал для каждого домена, на который вы принимаете почту. Направьте его живому человеку.
Для устройств каждого пользователя по возможности используйте пароли приложений, если ваша версия их поддерживает: тогда потеря телефона означает отзыв одного пароля, а не сброс основного пароля пользователя. О клиентской стороне - в статье настройка почтового клиента для IMAP и SMTP.
DKIM-ключи и DNS-записи для публикации#
Когда вы добавляете домен, Stalwart генерирует для него DKIM-ключи. Свежие версии по умолчанию создают два - Ed25519 и RSA - и подписывают исходящую почту обоими. Это сделано намеренно: подписи Ed25519 компактные и современные, но проверяют их пока не все получатели, поэтому большинство из них на деле проверяет RSA-подпись. Публикуйте обе. У каждой свой селектор, и в последних релизах шаблон селектора по умолчанию выглядит как v1-ed25519-20260101 - что бы ни сгенерировал ваш сервер, копируйте это в точности.
Кроме того, Stalwart вычисляет полный набор записей, которые он ожидает для каждого домена, и показывает их в веб-админке в виде зоны, которую можно скопировать. Считайте её источником истины, а не перепечатывайте записи из блога, потому что DKIM-ключи у вашего сервера уникальны. Для example.com на mail.example.com с адресом 203.0.113.25 всё выглядит так:
mail IN A 203.0.113.25@ IN MX 10 mail.example.com.@ IN TXT "v=spf1 mx -all"v1-rsa-20261008._domainkey IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkq..."v1-ed25519-20261008._domainkey IN TXT "v=DKIM1; k=ed25519; p=11qYAYKx..."_dmarc IN TXT "v=DMARC1; p=none; rua=mailto:postmaster@example.com"В списке, который покажет Stalwart, будут и записи, которые можно добавить позже: MTA-STS и TLS-RPT для принудительного TLS на входящей почте, SRV-записи для автообнаружения клиентами и CNAME-записи для autoconfig и autodiscover. Начните с пяти записей выше; остальные добавьте, когда почта пойдёт.
На чём спотыкаются:
- Имя DKIM-записи относительное. В большинстве DNS-редакторов в поле имени вводится
v1-rsa-20261008._domainkey, а не полное имя с доменом. Если ввести полное имя, получится...example.com.example.com. - Длинные RSA-ключи разбиваются на строки. 2048-битный ключ длиннее 255 символов, поэтому его нужно хранить в виде нескольких строк в кавычках. Большинство редакторов делают это сами; если проверка не проходит, начните с этого.
- SPF с `mx` разрешает отправку вашим MX-хостам. Если вы отправляете через relay, добавьте
include:этого relay и оставьте одну запись. - Начинайте DMARC с `p=none`. Когда его ужесточать, объясняется в статье отчёты DMARC и поэтапное ужесточение политики.
О ротации ключей, в том числе о том, как Stalwart может автоматизировать её, если у него есть доступ к API вашего DNS-провайдера, - в статье DKIM-ключи и их ротация.
Порты и какие службы открывать наружу#
Stalwart может слушать все стандартные почтовые порты. На собственной машине вы открыли бы те, которыми пользуетесь; на тарифе с фиксированным числом портов выбирать приходится.
| Порт | Служба | Кто подключается | Нужен? |
|---|---|---|---|
25 | SMTP | Чужие почтовые серверы, доставляющие вам почту | Да, чтобы вообще что-то получать |
587 | Submission, STARTTLS | Почтовые клиенты ваших пользователей | Один из 587 или 465 |
465 | Submission, неявный TLS | Почтовые клиенты ваших пользователей | Один из 587 или 465 |
993 | IMAP поверх TLS | Почтовые клиенты, читающие почту | Да, для большинства клиентов |
443 | HTTPS: JMAP, веб-админка | JMAP-клиенты, администратор | Для JMAP и админки |
143 / 995 / 110 | IMAP без шифрования, POP3 | Устаревшие клиенты | Редко |
4190 | ManageSieve | Клиенты, редактирующие правила фильтрации | По желанию |
Никогда не открывайте IMAP без шифрования на 143 или POP3 на 110 без обязательного STARTTLS: пароли пойдут по сети в читаемом виде. На тарифе RE:NODE Mail Server нужно распределить пять портов, чего хватает на один порт для отправки, IMAPS, HTTPS и ещё пару, - а сам порт 25 пробрасывает поддержка по запросу, потому что контейнер не может сам открыть его на публичном адресе. В клиентах используйте номера портов, которые панель показывает для вашего сервера; если какой-то из них нестандартный, клиенту просто нужно его указать.
Спам-фильтр и исходящая доставка#
Спам-фильтр Stalwart оценивает каждое входящее письмо тегами - результатами аутентификации, попаданиями в блок-листы, странностями в заголовках, признаками содержимого, вердиктом статистического классификатора - и суммирует их баллы. Порог спама по умолчанию - 5.0. По умолчанию ничего не отклоняется только из-за балла; спам помечается и раскладывается по папкам. Каждое письмо получает два заголовка, которые стоит научиться читать:
X-Spam-Status: No, score=-1.20X-Spam-Result: DKIM_ALLOW (-0.20), DMARC_POLICY_ALLOW (-0.50), SPF_ALLOW (-0.20), ...X-Spam-Result перечисляет каждое сработавшее правило и его вклад, и вопрос «почему это попало в Junk» из загадки превращается в справку. Пороги и баллы настраиваются в параметрах спам-фильтра в веб-админке; о настройке, обучении и ложных срабатываниях - в статье фильтрация спама на почтовом сервере.
Для исходящей почты есть две стратегии. Прямая доставка находит MX каждого получателя и подключается к его порту 25. Relay передаёт всё одному smarthost, который доставляет почту от вашего имени. В свежих версиях Stalwart relay - это маршрут типа Relay в настройках исходящей почты, где указаны адрес relay, порт, используется ли неявный TLS (порт 465) или согласуемый (587 со STARTTLS), а также имя пользователя и секрет для аутентификации; стратегия исходящей доставки затем отправляет внешнюю почту по этому маршруту. Stalwart по-прежнему подписывает письма вашими DKIM-ключами до передачи, так что подпись доходит нетронутой. О выборе relay и о том, как при этом поменять SPF, - в статье SMTP relay для исходящей почты.
Проверка и поиск неисправностей#
Проверяйте снаружи и в таком порядке.
# DNS: every record you published$ dig +short MX example.com$ dig +short TXT example.com$ dig +short TXT _dmarc.example.com$ dig +short TXT v1-rsa-20261008._domainkey.example.com# Inbound SMTP reachable, with a banner and STARTTLS offered$ openssl s_client -starttls smtp -connect mail.example.com:25 -crlf -quiet# Submission with authentication, using swaks$ swaks --to you@gmail.com --from anna@example.com \ --server mail.example.com:587 --tls --auth-user annaЗатем отправьте настоящее письмо из клиента на адрес в Gmail или Outlook, к которому у вас есть доступ, и прочитайте заголовок Authentication-Results: spf=pass, dkim=pass и dmarc=pass с header.from=example.com - это конечное состояние. Ответьте на это письмо, чтобы проверить входящую почту.
Сбои, с которыми сталкиваются на практике:
- Снаружи ничего не приходит. Порт
25не доходит до сервера. Убедитесь, что цель MX разрешается в правильный адрес, затем проверьте порт с машины вне вашей сети. На арендованном тарифе уточните, настроен ли проброс порта 25. - Себе отправляется, а в Gmail - нет. Исходящий
25заблокирован, и почта стоит в очереди. Посмотрите очередь в веб-админке; если попытки заканчиваются таймаутом, настройте relay. - `dkim=fail` или `dkim=neutral`. Опубликованная запись не совпадает с ключом - обычно значение обрезано или неправильно разбито, либо неверно имя селектора.
- Клиенты предупреждают о сертификате. Имени, к которому они подключаются, нет в сертификате, или его срок истёк.
- Вход из клиентов не работает, а в веб-админке работает. Клиент использует полный адрес, хотя логин другой, или выбран неправильный режим безопасности для порта (STARTTLS на
465или неявный TLS на587).
FAQ#
Нужен ли Stalwart отдельный сервер баз данных?
Нет. Встроенное хранилище используется по умолчанию и правильно подходит для одного сервера. Внешние базы и объектное хранилище нужны для кластерных развёртываний из нескольких узлов.
Может ли один сервер Stalwart обслуживать несколько доменов?
Да. Добавьте каждый домен, дайте каждому собственные DKIM-ключи и DNS-записи и создавайте учётные записи с адресами на любом из них. Одна учётная запись может даже держать адреса на нескольких доменах.
Зачем Stalwart подписывает письма двумя DKIM-ключами?
Один ключ Ed25519 и один RSA. Ed25519 - современный алгоритм, но поддержка у проверяющих пока неровная, поэтому большинство получателей проверяет RSA-подпись. Письмо, у которого проходит хотя бы одна подпись, проходит DKIM.
Нужен ли мне POP3?
Почти наверняка нет. IMAP держит почту на сервере и синхронизирует её между устройствами; POP3 скачивает её и обычно удаляет. Оставьте его выключенным, если только он не нужен какому-то конкретному старому устройству.
Что нужно включать в резервную копию?
Всё хранилище данных целиком: в нём вместе лежат ящики, учётные записи, DKIM-ключи и настройки. В RE:NODE слоты резервных копий хранятся вне машины, которую они защищают, и их можно скачать, так что держите одну свежую копию ещё и где-нибудь у себя. Один раз восстановите её на временный сервер, чтобы убедиться, что резервная копия рабочая.




Комментарии
Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.