SSD Nodes Learn Hosting plans →
Руководства Matt ConnorАвтор: Matt Connor · Обновлено 2026-09-06

Почтовый сервер Stalwart на VPS: обзор и настройка

Узнайте, как Stalwart заменяет стек Postfix и Dovecot одним бинарным файлом на Rust. Разберем ограничения версии v0.16.19 и сравним с mailcow для выбора оптимального решения.

Что Stalwart объединяет в одном бинарном файле

Stalwart — это почтовый сервер, который запускается на одном VPS как единый бинарный файл на языке Rust. Он обрабатывает протоколы SMTP, IMAP, POP3, JMAP, CalDAV, CardDAV и WebDAV в рамках одного процесса и включает в себя собственный спам-фильтр, хранилище сообщений и ACME-клиент. Традиционный стек выполняет ту же работу с помощью Postfix, Dovecot, Rspamd, базы данных для учетных записей и отдельного инструмента для управления сертификатами. Stalwart заменяет всё это одним сервисным юнитом и одним конфигурационным файлом по пути /etc/stalwart/config.json.

Все цифры, названия настроек и команды ниже взяты из документации Stalwart, страниц релизов и скрипта установки, актуальных на 28 августа 2026 года для версии v0.16.19 (опубликована 24 августа 2026 года). Это команды для выполнения на вашем собственном сервере. После каждой из них приведена проверка, подтверждающая успешность выполнения.

Stalwart распространяется по двойной лицензии: GNU Affero General Public License v3.0 (AGPL-3.0) и Stalwart Enterprise License v2. Некоторые функции доступны только в корпоративной версии. Список HTTP-эндпоинтов в документации помечен /scim/v2/* соответствующим образом. Ознакомьтесь с условиями лицензии, прежде чем планировать развертывание с использованием функций, которые вы еще не тестировали самостоятельно.

Один бинарный файл действительно сокращает количество движущихся частей. Однако это не сокращает количество факторов, от которых зависит доставка вашей почты.

Порт 25 и репутация DNS не зависят от используемого ПО

Исходящий TCP-порт 25 — это первый барьер. Многие провайдеры VPS блокируют его по умолчанию для новых аккаунтов, а заблокированный 25-й порт означает, что ваш сервер может общаться только сам с собой, но не с внешним миром. Проверьте его до того, как что-либо устанавливать.

sudo apt update && sudo apt install -y netcat-openbsd
nc -vz -w 5 alt1.aspmx.l.google.com 25

При нормальной работе команда выводит Connection to alt1.aspmx.l.google.com ... 25 port [tcp/smtp] succeeded! примерно через секунду. Если порт заблокирован, соединение зависнет на пять секунд, а затем выведет nc: connect to alt1.aspmx.l.google.com port 25 (tcp) failed: Connection timed out, так как пакеты отбрасываются вышестоящим оборудованием и не возвращают сигнал сброса. Если вы видите это, создайте тикет в поддержку вашего провайдера. Ни один почтовый сервер не сможет обойти отброшенные пакеты.

Второй барьер — это то, как принимающие сети оценивают ваш IP-адрес и домен. Сюда входят обратная DNS-запись (PTR) для IP, SPF, DKIM, DMARC и история отправки почты для диапазона адресов, в который вы попали. Страница настройки DNS в Stalwart прямо указывает, где выполняется эта работа: обратные DNS-записи «обычно настраиваются хостинг-провайдером, а не самим Stalwart». То же самое касается и остальных пунктов. Они настраиваются в вашей DNS-зоне и панели управления провайдера, а не в почтовом сервере.

Поэтому на данной странице мы не будем повторять руководство по этим записям. У нас есть отдельный материал: настройка SPF, DKIM и DMARC один раз для всех почтовых отправлений. Если вы еще не решили, стоит ли вообще запускать собственный почтовый сервер, начните с нашего честного обзора о том, имеет ли смысл хостинг почты своими силами. Выбор Stalwart не меняет сути этих расчетов.

Что нужно небольшому VPS для работы почтового сервера Stalwart

Страница системных требований Stalwart, изученная 28 августа 2026 года, приводит следующие показатели. Потребление памяти в режиме простоя составляет около 100 MB. Небольшое развертывание для 5–10 пользователей стабильно работает на 1 GB RAM. Конфигурация с низкой нагрузкой для 5 пользователей работает на одном ядре CPU, при этом на странице указано, что «по мере роста параллелизма и активности потребуется больше ядер CPU для поддержания низкой задержки и высокой пропускной способности». Лимит по умолчанию составляет 8,192 одновременных соединения для всех сервисов, и его можно настроить.

На этой странице не указан минимальный размер диска, поэтому рассчитывайте объем хранилища исходя из ожидаемого объема почты с учетом запаса для процесса сжатия данных.

Три исходящих пути должны быть открыты, иначе сервер будет выглядеть неработоспособным по причинам, не связанным с почтой. Сервер загружает пакет веб-интерфейса с https://github.com/stalwartlabs/webui/releases/latest/. Он обращается к https://acme-v02.api.letsencrypt.org/directory для получения сертификатов. Ему необходим доступ к DNS по протоколам UDP и TCP на порту 53 для поиска MX-записей и записей аутентификации. Если настроен строгий исходящий файрвол, блокирующий первый адрес, вы получите работающий почтовый сервер без административного интерфейса.

Установка фиксированного релиза вместо "latest"

Официальный установщик представляет собой shell-скрипт. Изучите его содержимое перед запуском.

curl --proto '=https' --tlsv1.2 -sSf https://get.stalw.art/install.sh -o install.sh
less install.sh
sudo sh install.sh

Анализ этого скрипта по состоянию на 28 августа 2026 года показывает, что именно он выполняет. Скрипт создает сервисную учетную запись stalwart и необходимые ей директории. Затем он загружает данные из https://github.com/stalwartlabs/stalwart/releases/latest/download. Бинарный файл размещается в /usr/local/bin/stalwart с правами 0755. Конфигурация сохраняется в /etc/stalwart/config.json, данные — в /var/lib/stalwart, логи — в /var/log/stalwart; для всех трех директорий устанавливаются права 0750 и владелец stalwart. Файл окружения записывается в /etc/stalwart/stalwart.env с правами 0640 и владельцем root:stalwart. Скрипт принимает один необязательный префикс установки и флаг --fdb для сборки FoundationDB. Аргумент версии не поддерживается.

Последний пункт важен. Скрипт всегда загружает самый свежий релиз, поэтому на двух серверах, развернутых с разницей в неделю, будет запущена разная версия кода. Зафиксируйте версию бинарного файла самостоятельно сразу после установки; это также является штатным путем обновления, указанным в примечаниях к релизу v0.16.19: "При обновлении с версии v0.16.x замените бинарный файл (или выполните docker pull)".

STALWART_TAG=v0.16.19
curl -fsSLO "https://github.com/stalwartlabs/stalwart/releases/download/${STALWART_TAG}/stalwart-x86_64-unknown-linux-gnu.tar.gz"
tar zxf stalwart-x86_64-unknown-linux-gnu.tar.gz
sudo systemctl stop stalwart
sudo install -m 0755 -o root -g root stalwart /usr/local/bin/stalwart
sudo systemctl start stalwart
systemctl is-active stalwart

systemctl is-active stalwart должен выводить active. Если вывод отличается, изучите journalctl -u stalwart -n 50. Каждый релиз поставляется с соответствующим пакетом .sigstore.json, поэтому подпись загружаемого файла можно проверить перед установкой.

Юнит, создаваемый скриптом, запускается от имени User=stalwart и устанавливает AmbientCapabilities=CAP_NET_BIND_SERVICE. Эта возможность позволяет непривилегированной учетной записи привязываться к портам 25, 443, 465 и 993. Если вы позже создадите собственный юнит и пропустите эту строку, сервис не запустится, так как обычный пользователь не может привязаться к портам ниже 1024.

Где отображается первый пароль администратора

Stalwart запускается в режиме начальной загрузки (bootstrap) и один раз записывает временный 16-символьный пароль в журнал службы.

sudo journalctl -u stalwart -n 200 | grep -A8 'bootstrap mode'

Мастер настройки ожидает подключения по обычному HTTP на порту 8080, поэтому не открывайте этот порт вовне. Вместо этого создайте SSH-туннель со своего локального компьютера:

ssh -N -L 8080:127.0.0.1:8080 you@your-vps

Затем откройте http://127.0.0.1:8080/admin и войдите под именем admin, используя пароль из журнала. Мастер запросит имя хоста сервера, домен почты по умолчанию, параметры TLS, хранилище, каталог учетных записей, настройки логирования и обработки DNS. После завершения работы мастера перезапустите службу, в дальнейшем используйте https://<your-host>/admin.

Если пароль ушел из лога, установите фиксированный пароль. В /etc/stalwart/stalwart.env есть закомментированные записи именно для этого случая, включая STALWART_RECOVERY_ADMIN=admin:changeme, STALWART_RECOVERY_MODE=true и STALWART_RECOVERY_MODE_PORT (по умолчанию 8080). Раскомментируйте их, перезапустите службу, войдите в систему, а затем снова закомментируйте эти строки. На странице рекомендаций по безопасности Stalwart указано, что эти учетные данные следует хранить только для экстренных случаев и никогда не использовать учетную запись администратора для входа в IMAP, JMAP или WebDAV.

На той же странице перечислены порты, которые следует оставить: 25 для входящего SMTP, 465 для отправки с неявным TLS, 993 для IMAPS и 443 для всех HTTP-запросов. Порты 587, 143, 4190, 110, 995 и 8080 считаются второстепенными; после завершения настройки порт 8080 рекомендуется отключить.

Запуск в Docker с фиксацией тега

Документированный образ — stalwartlabs/stalwart. Тег v0.16.19 присутствовал на Docker Hub 28 августа 2026 года наряду с вариантом -alpine. Фиксируйте версию патча, а не плавающий тег v0.16, по той же причине, что и для бинарного файла выше.

services:
  stalwart:
    image: stalwartlabs/stalwart:v0.16.19
    container_name: stalwart
    restart: unless-stopped
    ports:
      - "25:25"
      - "465:465"
      - "993:993"
      - "443:443"
      - "127.0.0.1:8080:8080"
    volumes:
      - stalwart-etc:/etc/stalwart
      - stalwart-data:/var/lib/stalwart
volumes:
  stalwart-etc:
  stalwart-data:

Этот файл представляет собой документированную команду docker run, записанную в формате Compose, с исключением второстепенных слушателей и привязкой порта настройки к localhost. Запустите его и прочитайте ту же строку начальной загрузки:

docker compose up -d
docker compose logs stalwart 2>&1 | grep -A8 'bootstrap mode'

На странице Docker также описан способ -e STALWART_RECOVERY_ADMIN=admin:mySecretPass для установки фиксированных учетных данных при запуске, что соответствует ключу environment: в Compose, если вы предпочитаете этот метод чтению логов.

Полный список документированных портов и причина, по которой этот файл короче

Страница Stalwart в Docker публикует порты 443, 8080, 25, 587, 465, 143, 993, 110, 995 и 4190. Страница по обеспечению безопасности называет порты 587, 143, 110, 995 и 4190 второстепенными и рекомендует отключить 8080 после завершения настройки. Добавляйте только те порты, которые действительно требуются вашим клиентам. Если телефон требует STARTTLS submission, опубликуйте 587. Если ваши пользователи создают правила Sieve через десктопный клиент, опубликуйте 4190.

Если вы новичок в Compose, наше руководство по Docker Compose для VPS описывает структуру файлов и используемую здесь модель именованных томов. Одно предостережение, критичное именно для почтовых серверов: Docker публикует порты, записывая собственные правила брандмауэра, и эти правила проверяются раньше правил ufw, поэтому ufw deny 8080 не закрывает порт, опубликованный через Compose. Привязка к 127.0.0.1 в сопоставлении портов — это то, что действительно закрывает порт, поэтому в файле выше используется именно этот метод, а SSH-туннель остается актуальным.

TLS без certbot и связанные с этим издержки

Stalwart реализует протокол ACME (automatic certificate management environment) напрямую, поэтому certbot и хуки для обновления сертификатов не требуются. В документации описаны четыре метода проверки. HTTP-01 отвечает на запрос проверки через порт 80. TLS-ALPN-01 предъявляет специально созданный сертификат на порту 443, используя протокол ALPN, специфичный для ACME. DNS-01 публикует временные TXT-записи и является одним из двух методов, позволяющих выпускать wildcard-сертификаты. DNS-PERSIST-01 использует долгоживущие TXT-записи авторизации вместо создания новой записи при каждом обновлении.

Издержка заключается в том, что Stalwart требует монопольного доступа к порту. Метод TLS-ALPN-01 работает за счет самостоятельного завершения TLS-рукопожатия, поэтому он не может успешно пройти, если перед ним находится reverse proxy, выполняющий TLS termination. Если nginx или Caddy уже занимают порт 443 на этом сервере, либо переключите Stalwart на метод DNS-01, либо выделите ему отдельный IP-адрес.

DANE, MTA-STS и стандартные настройки, которые необходимо знать

Оба механизма настраиваются для каждой стратегии TLS в объекте MtaTlsStrategy, в разделе Settings, MTA, Outbound, TLS Strategies веб-интерфейса. Поле dane по умолчанию имеет значение optional: в этом режиме выполняется проверка DANE, если получатель публикует записи TLSA, а при их отсутствии используется обычный STARTTLS. Установите значение require, чтобы доставка осуществлялась только при наличии проверяемой записи TLSA. Поле mtaSts работает аналогичным образом, значение по умолчанию — optional. Соответствующие тайм-ауты: tlsTimeout (по умолчанию 3 минуты) и mtaStsTimeout (по умолчанию 5 минут).

Для входящей почты Stalwart может публиковать вашу собственную политику MTA-STS по адресу https://mta-sts.<domain>/.well-known/mta-sts.txt, для чего требуется открытый 443 порт. Синглтон MtaSts содержит параметры mode (по умолчанию testing), maxAge (по умолчанию 7 дней) и mxHosts; если последний не задан, используются имена хостов из вашего TLS-сертификата. Вам необходимо создать две DNS-записи: CNAME mta-sts, указывающую на почтовый хост, и TXT-запись _mta-sts, содержащую идентификатор политики.

dig +short TXT _mta-sts.example.org
curl -s https://mta-sts.example.org/.well-known/mta-sts.txt

Запрос TXT должен возвращать строку v=STSv1; id=..., а команда curl — тело политики. Если curl ничего не возвращает, значит, порт 443 закрыт или сертификат для mta-sts.example.org не был выпущен.

Оставьте mode в значении testing, пока обе проверки не будут пройдены успешно. Политика в режиме enforce при неисправном сертификате блокирует доставку почты от других серверов, и вы узнаете об этом от пользователей, а не из логов. У DANE есть аналогичная ловушка: требуется зона, подписанная DNSSEC, а запись TLSA, фиксирующая конечный сертификат (leaf certificate), должна переиздаваться при каждом обновлении ACME. Фиксируйте (pin) выпускающий CA или будьте готовы к регулярному обновлению записей.

Шифрование данных в покое — это не сквозное шифрование

Эту функцию понимают неверно чаще всего, поэтому ниже приведено точное описание из документации. Сообщения каждого пользователя в открытом виде автоматически шифруются с использованием их сертификата OpenPGP или S/MIME перед записью на диск. encryptAtRest включено по умолчанию и применяется к сообщениям, поступающим по SMTP или LMTP, при условии, что получатель зарегистрировал ключ шифрования. encryptOnAppend по умолчанию имеет значение false, «что оставляет добавленные сообщения без изменений, чтобы клиенты сохраняли полный контроль над содержимым, которое они хранят». OpenPGP использует PGP/MIME вместо устаревшего PGP/Inline с алгоритмами AES-256 или AES-128. Stalwart не генерирует ключи: пользователи экспортируют открытый ключ в формате ASCII-armored и регистрируют его как объект PublicKey в разделе Account, Public Keys.

Таким образом, это защищает данные в случае кражи образа диска, кражи резервной копии или чтения хранилища оператором после доставки. Без закрытого ключа сохраненные байты невозможно прочитать, и администратор также не может их расшифровать.

Это не защищает сообщение при передаче. Сообщение проходит через интернет с использованием любого TLS, о котором договорились два сервера, поступает в открытом виде, и Stalwart шифрует его в этот момент. Отправитель, провайдер отправителя и любой узел, который удалил TLS, уже видели открытый текст.

Стоит четко обозначить еще три ограничения. Ваши папки Sent и Drafts записываются вашим клиентом, что является операцией добавления, а encryptOnAppend по умолчанию имеет значение false, поэтому они остаются в открытом виде, если вы не измените эту настройку. Документация, которую я читал 28 августа 2026 года, описывает только содержимое сообщений и не утверждает, что данные конверта, заголовки или записи индекса зашифрованы, поэтому не стоит этого предполагать. В ней также не сказано, что сообщения, уже сохраненные до загрузки ключа, перешифровываются, поэтому исходите из того, что это не так, и проверьте самостоятельно. Работает ли полнотекстовый поиск по зашифрованным телам писем, также не указано. Протестируйте это на тестовой учетной записи, прежде чем обещать такую возможность кому-либо.

И если пользователь теряет свой закрытый ключ, его почта пропадает. Пути восстановления не существует, это заложено в архитектуру.

WKD — это задача для веб-сервера, а не для почтового сервера

WKD (Web Key Directory) — это вторая часть инфраструктуры OpenPGP, решающая иную задачу. Она публикует ваш открытый ключ по фиксированному HTTPS-адресу в вашем домене, чтобы почтовый клиент отправителя мог найти его и зашифровать сообщение еще до того, как оно покинет его компьютер. Это и есть сквозное шифрование (end-to-end encryption). Шифрование данных в покое (at-rest encryption) в Stalwart относится к копиям писем, хранящимся на вашем диске. Настройка одного не обеспечивает работу другого.

Stalwart не обслуживает WKD. Его документированные HTTP-эндпоинты, актуальные на 28 августа 2026 года, включают стандартные пути для jmap, caldav, carddav, oauth-authorization-server, openid-configuration, acme-challenge, mta-sts.txt, mail-v1.xml и автоконфигурации. Путь openpgpkey отсутствует. Обслуживайте его с помощью обычного статического веб-сервера.

Спецификация определяет два варианта структуры. Продвинутый метод использует https://openpgpkey.example.org/.well-known/openpgpkey/example.org/hu/iy9q119eutrkn8s1mk4r39qejnbu3n5q?l=Joe.Doe. Прямой метод использует https://example.org/.well-known/openpgpkey/hu/iy9q119eutrkn8s1mk4r39qejnbu3n5q?l=Joe.Doe. Эта 32-символьная строка представляет собой SHA-1 хеш локальной части адреса (в нижнем регистре), закодированный в z-base-32, поэтому не создавайте эти имена файлов вручную. GnuPG создает их за вас.

gpg --export --armor you@example.org > you.asc
gpg-wks-client --print-wkd-url you@example.org
gpg-wks-client --install-key you.asc you@example.org

--print-wkd-url выводит URL, который будет запрашивать клиент, используя формат поддомена. --install-key записывает ключ в локальное дерево каталогов, повторяющее структуру WKD, внутри корневой директории, которая по умолчанию называется openpgpkey (ее можно изменить с помощью -C dir). Скопируйте это дерево в корневой каталог вашего веб-сервера, добавьте необходимый файл policy рядом с директорией hu (пустой файл допустим) и выполните запрос к своему URL с помощью curl, чтобы убедиться, что сервер возвращает байты ключа, а не ошибку 404.

Хранение данных на одном VPS

Stalwart разделяет хранилище на четыре роли: хранилище данных для структурированных записей (например, состояния почтовых ящиков), хранилище больших объектов (blob store) для самих сообщений и вложений, хранилище поиска для полнотекстовой индексации и хранилище в оперативной памяти для ограничителей частоты запросов, токенов аутентификации и данных сессий. Каждая роль может использовать свой бэкенд. Поддерживаются RocksDB, FoundationDB, PostgreSQL, MySQL, SQLite, S3-совместимые объектные хранилища, Azure Blob Storage, Redis, ElasticSearch и Meilisearch.

Для одного VPS ответ прост. В документации RocksDB названа «рекомендуемым бэкендом для одноузловых инсталляций Stalwart из-за её скорости и надежности». Redis поддерживается только в качестве хранилища в оперативной памяти и не может выступать в роли хранилища данных или больших объектов, поэтому для начала работы отдельный контейнер с Redis не требуется. Если объем почтовых ящиков превысит размер диска, хранилище больших объектов можно будет перенести в S3.

Резервное копирование зависит от используемого бэкенда. Для внешних баз данных используйте штатные процедуры этих СУБД. Для встроенных хранилищ в FAQ указано, что необходимо копировать каталог /var/lib/stalwart. Делайте это только при остановленном сервисе либо с помощью снимка файловой системы или тома. Копирование файлов работающего хранилища типа «ключ-значение» может произойти в момент записи, и вы узнаете об этом только при попытке восстановления.

Спам-фильтр, заменяющий Rspamd

Фильтрация выполняется внутри того же процесса, поэтому нет необходимости поддерживать работу второго демона. Классификатор настраивается в SpamClassifier singleton в разделе Settings, Spam Filter, Classifier. Он использует алгоритм FTRL-Proximal с хешированием признаков. FtrlFh является рекомендуемым значением по умолчанию для большинства развертываний. FtrlCcfh заменяет его на cuckoo feature hashing для уменьшения коллизий хешей и предназначен для крупномасштабных систем. Обучение происходит непрерывно: когда пользователи помечают сообщение как спам или обычное письмо, эта метка сразу учитывается при принятии будущих решений.

Вокруг классификатора расположены DNS-черные списки, greylisting, обнаружение фишинга, спам-ловушки и Pyzor, а также возможность вызова SpamAssassin через milter, если у вас есть правила, от которых вы не готовы отказаться.

Когда mailcow остается верным решением

В Stalwart отсутствует веб-интерфейс почты. Это самый существенный недостаток, и другие даже близко не стоят. В документации mailcow, изученной 28 августа 2026 года, перечислено шестнадцать компонентов, включая SOGo, который предоставляет пользователям доступ к почтовому ящику через браузер, а также интерфейсы CalDAV и CardDAV «из коробки». В дорожной карте Stalwart от 20 июня 2025 года указано, что встроенный веб-интерфейс «входит в наши планы, но в данный момент не является приоритетной задачей». Его планируют написать на Rust с использованием Dioxus после версии 1.0, «вероятнее всего, когда-то в 2026 году». По состоянию на 28 августа 2026 года в блоге проекта нет публикаций об анонсе такого функционала. Таким образом, со Stalwart вам придется либо разворачивать Roundcube самостоятельно, либо просить каждого пользователя настраивать почтовый клиент вручную.

В Stalwart есть веб-интерфейс администратора, так что это не тот пробел, которого ожидают пользователи. Второй пробел — зрелость версии. В FAQ указано, что Stalwart находится на стадии 0.x, а структура данных и конфигурация могут измениться до выхода v1.0, что может потребовать миграции. Собственная публикация проекта от июня 2026 года называется «Ноль открытых отчетов об ошибках: путь к Stalwart 1.0», что говорит о текущем положении дел: проект близок к цели, но еще не достиг её.

Третий пробел — тот, который никто не включает в список функций. У Postfix, Dovecot и Rspamd за плечами десятилетие накопленных ответов на любые вопросы. В два часа ночи, когда почта стоит в очереди, а пользователи ждут, поиск, выдающий точное совпадение ошибки, стоит дороже, чем элегантная архитектура. Если вы оказались в такой ситуации, наше руководство по установке mailcow охватывает весь стек целиком, и это поможет вам быстрее закончить работу.

Выбирайте Stalwart, если вам нужен один бинарный файл, один конфигурационный файл и поддержка JMAP, а также если вы готовы к работе с ранним ПО. Выбирайте mailcow, если вам нужен веб-интерфейс почты уже сегодня и доступ к обширной базе готовых решений.

Перенос существующей почты

Стандартный путь — использование протокола IMAP с инструментом imapsync, которому не важно, какое ПО запущено на стороне источника и получателя. Сначала выполните пробный запуск.

imapsync --dry \
  --host1 old.example.org --user1 you@example.org --passfile1 /root/.old.pw \
  --host2 mail.example.org --user2 you@example.org --passfile2 /root/.new.pw

Флаг --dry заставляет imapsync «ничего не делать по-настоящему; программа просто выводит список действий», поэтому изучите этот вывод перед тем, как убрать флаг. Каждый файл паролей содержит пароль на первой строке, поэтому chmod 600 оба файла и удалите их после завершения работы.

Stalwart также поставляется с новыми инструментами, которые еще не описаны в большинстве сторонних руководств. В блоге проекта задокументированы Vandelay (импортер и экспортер JMAP от 29 мая 2026 года) и прокси для миграции, обеспечивающий обновление без простоя (от 10 июня 2026 года). Ознакомьтесь с обоими материалами перед планированием крупного переноса, так как они новее практически любой другой информации, которую вы найдете в других источниках.

Типичные сбои и сообщения об ошибках

Административный интерфейс не загружается. В FAQ этот случай описан прямо: при первом запуске бандл веб-интерфейса скачивается с GitHub, поэтому на сервере без исходящего HTTPS-доступа к github.com вы получите работающий сервис и пустую страницу. Проверьте соединение с помощью curl -sI https://github.com/stalwartlabs/webui/releases/latest/ прямо с сервера. Другие частые причины, указанные там же: несовпадение схемы HTTP или HTTPS и обратный прокси-сервер, который не передает IP-адрес клиента.

В логах отсутствует пароль для первичной настройки (bootstrap password). Он выводится один раз, при запуске в режиме bootstrap. Если с тех пор сервис перезапускался, увеличьте окно вывода с помощью sudo journalctl -u stalwart --since today | grep -A8 'bootstrap mode'. Если пароль действительно утерян, установите STALWART_RECOVERY_ADMIN в файле /etc/stalwart/stalwart.env и перезапустите сервис.

Релей через локальный прокси отклоняется. В примечаниях к выпуску v0.16.19 зафиксировано исправление ошибки, из-за которой маршруты релея отклонялись с сообщением host resolves loopback address. Если вы видите именно эту строку, значит, вы используете устаревшую сборку. Обновитесь до актуальной версии, не пытайтесь использовать обходные пути.

Сервис не запускается после создания собственного юнита. Без AmbientCapabilities=CAP_NET_BIND_SERVICE пользователь stalwart не может занять порты 25, 443, 465 или 993, и запуск прерывается на первом же слушателе. Скопируйте строку с параметром capability из юнита, который был создан установщиком.

Сертификаты не выпускаются. Для метода HTTP-01 необходимо, чтобы порт 80 был доступен и свободен. Для TLS-ALPN-01 необходимо, чтобы сам Stalwart отвечал на TLS-рукопожатие на порту 443. Если какой-либо другой процесс на сервере занимает любой из этих портов, ACME будет молча выдавать ошибки, хотя внешне всё остальное будет выглядеть исправно.

FAQ

Заменяет ли Stalwart Postfix, Dovecot и Rspamd на одном VPS?

Да. Один бинарный файл на языке Rust обеспечивает работу SMTP, IMAP, POP3, JMAP, CalDAV, CardDAV и WebDAV, а также включает в себя спам-фильтр, хранилище сообщений и ACME-клиент. Вместо четырех демонов и связующего ПО используется один systemd-юнит и один файл конфигурации по пути /etc/stalwart/config.json. Stalwart не заменяет вашу DNS-зону или политику провайдера в отношении 25 порта — именно от них зависит успех или неудача самостоятельного хостинга почты.

Сколько оперативной памяти нужно почтовому серверу Stalwart?

На странице системных требований Stalwart, изученной 28 августа 2026 года, указано потребление около 100 МБ в режиме простоя и рекомендуется 1 ГБ ОЗУ для небольшого развертывания на 5–10 пользователей. Конфигурация с низким трафиком для 5 пользователей работает на одном ядре CPU. Лимит по умолчанию составляет 8,192 одновременных соединения для всех сервисов и поддается настройке, поэтому верхний предел нагрузки растет вместе с количеством соединений и объемом почты, а не только с числом пользователей. Минимальный размер диска не регламентирован, поэтому рассчитывайте объем исходя из количества хранимых писем.

Улучшит ли переход на Stalwart доставляемость моих писем?

Нет. Доставляемость определяется тем, открыт ли исходящий TCP-порт 25 на вашем VPS, настроена ли обратная DNS-запись (PTR) для вашего IP, а также наличием записей SPF, DKIM и DMARC для вашего домена. Stalwart поддерживает DANE, MTA-STS и отчетность SMTP TLS, а также может публиковать вашу политику MTA-STS, но эти механизмы отвечают за безопасность передачи, а не за доверие принимающей сети к вашему адресу. Перед установкой любого ПО проверьте доступность 25 порта с помощью nc -vz -w 5 alt1.aspmx.l.google.com 25.

Включает ли Stalwart веб-интерфейс для почты (webmail)?

По состоянию на 28 августа 2026 года — нет. В состав входит веб-интерфейс администратора, что является другим инструментом. В дорожной карте проекта от 20 июня 2025 года указано, что почтовый веб-клиент на Rust с использованием Dioxus запланирован после версии 1.0, «вероятнее всего, когда-то в 2026 году», однако в блоге проекта анонсов пока не было. Если вашим пользователям нужен доступ к почте через браузер прямо сейчас, разверните Roundcube параллельно или используйте стек, включающий SOGo.

От чего защищает шифрование данных в покое (encryption at rest) в Stalwart?

Оно шифрует сообщения каждого пользователя с помощью его собственного открытого ключа OpenPGP или S/MIME перед записью на диск. Это защищает содержимое в случае кражи диска, кражи резервной копии или попытки администратора прочитать хранилище. Это не сквозное шифрование (end-to-end): сообщение поступает в открытом виде и шифруется только при доставке, поэтому все промежуточные узлы до этого момента видели его содержимое. Параметр encryptOnAppend по умолчанию имеет значение false, поэтому папки «Отправленные» (Sent) и «Черновики» (Drafts), созданные вашим клиентом, остаются в открытом виде, если вы не измените настройки. Документация описывает только содержимое сообщений и не содержит информации о метаданных, записях индекса или перешифровании почты, сохраненной до загрузки ключа, поэтому проверяйте эти аспекты самостоятельно, не полагаясь на предположения.

#stalwart#email#self-hosting#mail-server#smtp