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

Настройка почтового сервера Stalwart на VPS

Узнайте, как Stalwart заменяет стек Postfix и Dovecot одним бинарным файлом на Rust. Разбираем ограничения версии v0.16.26 и критерии выбора между Stalwart и 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 года) и повторно проверена 12 октября 2026 года, когда актуальным релизом был v0.16.26 (опубликован 11 октября 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 зависает на пять секунд, а затем выводит nc: connect to alt1.aspmx.l.google.com port 25 (tcp) failed: Connection timed out. Если же файрвол отклоняет пакеты, он отправляет в ответ ошибку ICMP (netfilter по умолчанию отправляет port unreachable, если не настроено иное, например, administratively prohibited), поэтому ошибка возвращается мгновенно, обычно как Connection refused или No route to host. В любом случае создайте тикет в поддержку вашего провайдера.

Если провайдер отказывается открыть порт, единственный способ обойти ограничение — использовать релей. Stalwart может передавать всю исходящую почту на smarthost через маршрут Relay, порт которого по умолчанию равен 25, но принимает любые значения от 1 до 65535, с переключателем implicitTls и полями authUsername и authSecret для аутентифицированного релея на портах 465 или 587. В этом случае почта будет отправляться с репутацией релея, а не вашего сервера.

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

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

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

На странице системных требований Stalwart, изученной 12 октября 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

Изучение этого скрипта по состоянию на 12 октября 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.26: "Если вы обновляетесь с v0.16.x, замените бинарный файл (или запустите docker pull)". В период с 24 августа по 11 октября 2026 года вышло семь патч-релизов, некоторые из них содержали исправления безопасности, поэтому фиксируйте актуальную версию и обновляйте её осознанно.

STALWART_TAG=v0.16.26
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.26 присутствовал на Docker Hub 12 октября 2026 года наряду с вариантом -alpine. Страница Stalwart в Docker рекомендует минорный тег v0.16 для промышленной эксплуатации. Зафиксируйте версию патча по той же причине, что и для бинарного файла выше.

services:
  stalwart:
    image: stalwartlabs/stalwart:v0.16.26
    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-handshake. Метод TLS-ALPN-01 завершает рукопожатие самостоятельно, поэтому он не может работать за reverse proxy, который выполняет TLS termination. Если nginx или Caddy уже занимают порт 443 на этом сервере, есть три способа решения. В руководстве Stalwart по nginx предлагается настроить nginx как TCP passthrough с помощью listen 443; proxy_pass 127.0.0.1:10443; proxy_protocol on;, чтобы TLS-соединение доходило до Stalwart в неизменном виде. Это передает все соединения на порту 443 в Stalwart, поэтому такой вариант подходит для сервера, где nginx не обслуживает другие сервисы на этом порту. В противном случае переведите Stalwart на использование DNS-01 или HTTP-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 записываются вашим клиентом, что является операцией добавления (append), а encryptOnAppend по умолчанию имеет значение false, поэтому они остаются в открытом виде, если вы не измените эту настройку. Документация, которую я перечитал 12 октября 2026 года, описывает только содержимое сообщений и не утверждает, что данные конверта, заголовки или записи индекса зашифрованы, поэтому не стоит этого предполагать. В ней также не сказано, что сообщения, уже сохраненные до загрузки ключа, подвергаются повторному шифрованию, поэтому исходите из того, что это не так, и проверьте самостоятельно. Работает ли полнотекстовый поиск по зашифрованным телам писем, также не указано. Протестируйте это на тестовой учетной записи, прежде чем обещать такую возможность кому-либо.

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

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

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

Stalwart не обслуживает WKD. Его документированные HTTP-эндпоинты, актуальные на 12 октября 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, изученной 12 октября 2026 года, перечислено шестнадцать компонентов, включая SOGo, который предоставляет пользователям доступ к почтовому ящику через браузер, а также интерфейсы CalDAV и CardDAV «из коробки». В публикации о планах развития Stalwart от 20 июня 2025 года указано, что встроенный веб-клиент «входит в наши планы, но в данный момент не является приоритетной задачей». Его планируют написать на Rust с использованием Dioxus после выхода версии 1.0, «вероятнее всего, когда-то в 2026 году». По состоянию на 12 октября 2026 года в блоге проекта нет записей об анонсе такого функционала. Таким образом, при использовании Stalwart вам придется либо разворачивать Roundcube самостоятельно, либо просить каждого пользователя настраивать почтовый клиент вручную.

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

Третий пробел — тот, который никто не включает в список функций. У 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, сервис запустится, но все запросы к веб-интерфейсу будут возвращать 404. Проверьте доступность с помощью curl -sI https://github.com/stalwartlabs/webui/releases/latest/ прямо с сервера. Другие распространенные причины, указанные в FAQ: несовпадение схемы 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, актуальной на 12 октября 2026 года, сервер потребляет около 100 МБ в режиме простоя, а 1 ГБ ОЗУ достаточно для небольшого развертывания на 5–10 пользователей. Конфигурация с низким трафиком для 5 пользователей работает на одном ядре CPU. Лимит по умолчанию составляет 8,192 одновременных соединения для всех сервисов, и его можно изменить; таким образом, требования к ресурсам растут вместе с количеством соединений и объемом почты, а не только с количеством пользователей. Минимальный размер диска не указан, поэтому рассчитывайте объем исходя из количества хранимых писем.

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

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

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

По состоянию на 12 октября 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