VPSРейтинг
Почта27 февраля 2026 · обновлено 4 сентября · 16 мин чтения

Stalwart Mail Server на VPS: свой почтовый сервер за 30 минут

Своя почта на своём домене — это профессионально. А ещё это независимость от Google и Microsoft, полный контроль над данными и ноль ежемесячной платы за почтовый хостинг. Stalwart — современный почтовый сервер на Rust: ставится одной командой, настраивается через веб-интерфейс, сам управляет сертификатами.

1. Зачем свой почтовый сервер

Корпоративная почта на Google Workspace стоит $7 в месяц за каждый ящик при годовой оплате и $8,40 — при помесячной. Команда из пяти человек — это $35 в месяц, или $420 в год. Почта на Яндекс 360 тоже стала платной. А VPS с почтовым сервером — один и тот же счёт за любое число ящиков.

КритерийGoogle WorkspaceStalwart на VPS
Стоимость (5 ящиков)$35/месЦена одного VPS
Число ящиковПлатить за каждыйБез ограничений
ХранилищеПо тарифуВесь диск VPS
Контроль данныхНа серверах GoogleТолько ваш сервер
Зависимость от сервисаВысокаяНулевая
НастройкаНичего не нужноОдин раз, по этому гайду
Технические навыкиНе нужныБазовые знания Linux

Stalwart — это почтовый сервер нового поколения, написанный на Rust. Поддерживает все нужные протоколы: SMTP для отправки/получения, IMAP для почтовых клиентов, JMAP (современный протокол вместо IMAP), CalDAV и CardDAV для календарей и контактов. Всё это в одном процессе без зависимостей.

Честное предупреждение

Почтовый сервер — это не Nginx и не Docker-контейнер. Это сложная система с репутацией IP, DNS-записями, чёрными списками и строгими проверками у получателей. Гайд максимально упрощает процесс, но будьте готовы уделить настройке DNS особое внимание — от этого зависит доставляемость писем.

2. Что нужно до начала

🖥️

VPS с открытым портом 25

Это самое важное. Порт 25 — стандартный порт для передачи почты между серверами: по нему письма и приходят к вам, и уходят от вас. Провайдеры закрывают его для борьбы со спамом — иногда только исходящий, иногда оба. Политика разная у всех, и мы это поле не сверяем: спросите в поддержке до оплаты, открыты ли входящий и исходящий 25. Минимум RAM: 1 ГБ (лучше 2 ГБ), диск: 20+ ГБ.

🌐

Домен

Нужен зарегистрированный домен, например example.ru. Купите у любого регистратора: REG.RU, 2domains, Namecheap. У вас должен быть доступ к управлению DNS-записями домена — именно туда вы будете добавлять MX, SPF, DKIM и DMARC.

📡

Статический IP-адрес

На большинстве VPS он уже есть. Статический — значит не меняется при перезапуске. Именно на этот IP будут указывать DNS-записи и PTR-запись. Проверьте: нет ли вашего IP в спам-базах. Используйте MXToolbox Blacklist Check.

📝

Поддомен для почтового сервера

Рекомендуется использовать поддомен mail.example.ru как FQDN (полное имя) почтового сервера. Основной домен example.ru остаётся для сайта. На mail.example.ru указывает A-запись на IP вашего VPS.

Проверьте порт 25 до покупки VPS

Если VPS уже есть — проверьте, что исходящий порт 25 не заблокирован. Подключитесь к серверу и выполните команду:

Пробуем подключиться к почтовому серверу Google на порту 25
timeout 5 bash -c 'exec 3<>/dev/tcp/gmail-smtp-in.l.google.com/25; head -n 1 <&3'

Если появилась строка вида 220 mx.google.com ESMTP — порт открыт, можно продолжать. Если команда молчит пять секунд и завершается — порт заблокирован, свяжитесь с провайдером. Ничего доустанавливать не нужно: это встроенная возможность bash.

Учтите: так проверяется только исходящий порт. Входящий с самого сервера не проверить — про него надо прямо спросить поддержку.

Если сервера ещё нет

2 ГБ RAM · 20 ГБ диска

Почтовый сервер хранит и письма, и поисковый индекс: 20 ГБ расходуются быстрее, чем кажется. Открытого порта 25 в наших данных нет, уточняйте в поддержке.

В каталоге под эти требования подходит 105 тарифов, самый дешёвый за 429 ₽/мес (AdminVPS, 2 ГБ, 30 ГБ NVMe).

Добавьте A-запись для поддомена mail

Сделайте это до установки: по этому имени Stalwart сам получит TLS-сертификат, а без рабочей A-записи получить его неоткуда. DNS-записи распространяются до 24 часов (обычно быстрее, 10–30 минут). В панели вашего DNS-провайдера добавьте:

ТипИмяЗначениеTTL
AmailIP вашего VPS3600

Это создаст запись mail.example.ru → ваш IP. Stalwart будет использовать этот адрес как своё имя.

3. Установка Stalwart

Stalwart распространяется с официальным скриптом установки. Он сам определяет архитектуру сервера, скачивает нужный бинарник, создаёт системного пользователя, настраивает systemd-службу и запускает сервер. Это самый простой способ.

Шаг 1: обновите систему

Заодно ставим dnsutils — в нём команда dig, которой мы будем проверять DNS-записи в разделах 5 и 6.

Обновление пакетов Ubuntu
apt update && apt upgrade -y
apt install -y dnsutils

Шаг 2: установите Stalwart

Скрипт неинтерактивный и вопросов не задаёт — вся настройка будет дальше, в браузере.

Скачать и запустить установщик Stalwart
curl --proto '=https' --tlsv1.2 -sSf https://get.stalw.art/install.sh -o install.sh
sudo sh install.sh

Куда всё установится

  • программа — /usr/local/bin/stalwart
  • настройки — /etc/stalwart/
  • письма и база — /var/lib/stalwart/
  • логи — /var/log/stalwart/
  • служба systemd — stalwart

Сразу после установки сервер поднимается в режиме первичной настройки: почтовые порты ещё закрыты, работает только веб-мастер на порту 8080. Пройдём его в разделе 4.

Временный пароль администратора сервер печатает в свой лог при запуске. Достаньте его оттуда — он понадобится через пару минут:

Временный пароль для первого входа
journalctl -u stalwart -n 200 | grep -A8 'bootstrap mode'

В выводе будет пара строк вида username: admin и password: …. Это одноразовые данные только для мастера настройки — постоянный пароль он выдаст в конце сам.

Шаг 3: откройте порты в файрволе

Stalwart слушает сразу несколько портов. Первым правилом обязательно разрешите SSH — иначе последняя команда отрежет вам доступ к серверу:

Открыть порты для почтового сервера
# SSH — строго первым, иначе потеряете доступ к серверу
ufw allow 22/tcp

# SMTP — приём почты от других серверов
ufw allow 25/tcp

# SMTP Submission — отправка из почтового клиента
ufw allow 587/tcp
ufw allow 465/tcp

# IMAP — получение почты в клиенте
ufw allow 143/tcp
ufw allow 993/tcp

# HTTPS — веб-панель и автоматический TLS-сертификат
ufw allow 443/tcp

ufw enable

Порт 8080 наружу не открываем: мастер настройки работает на нём по обычному HTTP, и пароль администратора ушёл бы по сети открытым текстом. Для первого входа мы пробросим его через SSH — это следующий раздел. Дальше панель живёт на 443 по HTTPS, и 8080 снаружи уже не нужен.

Шаг 4: проверьте, что служба запустилась

Статус службы Stalwart
systemctl status stalwart

Должно быть Active: active (running). Если статус failed — смотрите детали командой journalctl -u stalwart -n 50.

Альтернатива: Docker Compose

⚠️ Образ переименован

Старый образ stalwartlabs/mail-server на Docker Hub архивирован (последнее обновление ~год назад). Используйте новый stalwartlabs/stalwart:latest. Если на сервере уже стоял старый — он не получает обновлений безопасности.

Stalwart сам управляет TLS через ACME, поэтому отдельный Nginx или Traefik ему не нужен — и ставить их рядом не получится: порт 443 занят самим Stalwart.

/opt/stalwart/docker-compose.yml
services:
  stalwart:
    image: stalwartlabs/stalwart:latest
    container_name: stalwart
    restart: unless-stopped
    ports:
      - "25:25"
      - "587:587"
      - "465:465"
      - "143:143"
      - "993:993"
      - "443:443"
      - "127.0.0.1:8080:8080"  # Только localhost: Docker обходит UFW
    volumes:
      - stalwart-etc:/etc/stalwart
      - stalwart-data:/var/lib/stalwart

volumes:
  stalwart-etc:
  stalwart-data:
Запустить
mkdir -p /opt/stalwart
cd /opt/stalwart
# Создайте здесь docker-compose.yml с конфигом выше
docker compose up -d

# Временный пароль для первого входа
docker logs stalwart 2>&1 | grep -A8 'bootstrap mode'

Тома именованные, а не папки хоста — так и в официальной документации: контейнер работает от непривилегированного пользователя и на каталогах хоста спотыкается о права. Дальше всё как в варианте со скриптом, только служба перезапускается командой docker restart stalwart.

4. Первый вход и мастер настройки

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

Проброс порта: терминал не закрывать, пока не закончите настройку
ssh -L 8080:localhost:8080 root@ВАШ_IP

Пока это окно открыто, откройте в браузере http://localhost:8080/admin и войдите с логином admin и временным паролем из лога. Тот же приём работает и для установки через Docker.

Мастер настройки: пять шагов

Значения по умолчанию уже подходят для одиночного VPS. Руками нужно заполнить только первый шаг, на остальных достаточно нажимать Next:

  1. Server Identity — Server Hostname: mail.example.ru, Default Email Domain: example.ru. Галочки на сертификате и ключах подписи оставьте включёнными — Stalwart сам получит сертификат Let's Encrypt и сгенерирует DKIM-ключи.
  2. Storage — RocksDB для основной базы, остальные три слоя переиспользуют её. Просто Next.
  3. Account Directory — встроенный каталог пользователей. Next.
  4. Logging — логи в файл. Next.
  5. Automatic DNS Management — оставьте ручной режим: записи мы добавим сами в разделе 5.

Почему имя сервера так важно

При отправке письма ваш сервер представляется получателю командой EHLO, называя своё имя. Если это имя не совпадает с PTR-записью вашего IP — многие почтовые серверы отклонят письмо или пометят как спам. Поэтому здесь должно стоять ровно то же имя, что вы пропишете в PTR в разделе 6.

Сохраните постоянный пароль

На последнем экране мастер создаст постоянную учётную запись администратора и покажет логин с паролем. Больше он их не покажет — выпишите сразу. Затем перезапустите сервер, чтобы новая конфигурация вступила в силу:

Перезапуск после мастера настройки
systemctl restart stalwart

Через минуту-другую, когда сертификат будет получен, панель откроется по HTTPS — https://mail.example.ru/admin, и SSH-туннель больше не нужен. Пароль меняется в Account → Credentials → Password, а имя сервера, если понадобится его поправить, — в Settings → Network → General.

5. DNS-записи домена

Это самая важная часть — именно от DNS-записей зависит, попадут ли ваши письма в папку «Входящие» или в спам.

Возьмите готовые записи из панели

Домен вы уже указали в мастере, и DKIM-ключи для него сгенерированы. Осталось забрать записи: Management → Domains → Domains, кнопка «…» в строке домена → View Zone File. Stalwart покажет готовую зону с правильными значениями — её нужно перенести в панель вашего DNS-провайдера.

Какие записи нужно добавить

Обязательный минимум — четыре записи ниже, вот что каждая из них означает. Остальное из зоны (SRV, CAA, MTA-STS) можно добавить позже, а вот autoconfig и autodiscover стоит перенести сразу: по ним почтовые клиенты настраиваются сами, без ручного ввода портов.

MX

MX-запись — куда доставлять почту

Главная запись. Говорит другим серверам: «Для домена example.ru письма нужно отправлять на mail.example.ru». Без неё вам не смогут написать.

example.ru. MX 10 mail.example.ru.
SPF

SPF — кто имеет право отправлять от имени домена

Защищает от подделки отправителя. Записью TXT вы объявляете: только сервер, указанный в MX, может отправлять письма от @example.ru.

example.ru. TXT "v=spf1 mx -all"
DKIM

DKIM — цифровая подпись писем

Каждое исходящее письмо подписывается криптографическим ключом. Получатель проверяет подпись и убеждается, что письмо не изменялось в пути. Ключи Stalwart создал сам в мастере настройки: ed25519 (короткий) и RSA (длинный — для совместимости).

selector._domainkey.example.ru. TXT "v=DKIM1; k=ed25519; p=..."
DMARC

DMARC — политика для писем, не прошедших SPF/DKIM

Говорит получателям, что делать с письмами, которые пришли от вашего имени, но не прошли SPF или DKIM — отклонять (reject), отправлять в спам (quarantine) или принимать (none). Начните с none, потом ужесточайте.

_dmarc.example.ru. TXT "v=DMARC1; p=none; rua=mailto:postmaster@example.ru"

Важно: используйте точные значения из Stalwart

Не копируйте примеры выше — они для иллюстрации. Реальные значения DKIM-ключей и остальные детали берите из зоны, которую показывает панель: Management → Domains → Domains → «…» → View Zone File.

Проверьте, что записи применились

После добавления записей подождите 10–30 минут и проверьте из командной строки:

Проверка MX-записи
# MX-запись домена
dig MX example.ru +short

# SPF-запись
dig TXT example.ru +short

# DKIM-запись (подставьте ваш селектор из зоны Stalwart)
dig TXT СЕЛЕКТОР._domainkey.example.ru +short

6. PTR-запись: обратный DNS

PTR-запись (она же rDNS, обратный DNS) — это запись, которая по IP-адресу возвращает имя хоста. Обычный DNS работает в сторону «имя → IP», PTR работает в сторону «IP → имя».

Почтовые серверы крупных провайдеров (Gmail, Outlook, Mail.ru) обязательно проверяют PTR. Если проверка провалится — письмо попадёт в спам или будет отклонено. Это один из самых частых камней преткновения при настройке почтового сервера.

PTR не настраивается в панели DNS вашего домена

PTR-запись настраивается у вашего VPS-провайдера, в его панели управления. Только провайдер владеет IP-адресом, поэтому только он может задать обратную запись.

Найдите в панели вашего провайдера раздел «Обратный DNS», «rDNS» или «PTR». Введите значение:

Что ввести в поле PTR/rDNS у провайдера
# IP вашего VPS → mail.example.ru
# Например: 185.123.45.67 → mail.example.ru

Проверьте через пару минут:

Проверка PTR-записи
# Замените на IP вашего VPS
dig -x 185.123.45.67 +short

# Должно вернуть: mail.example.ru.

Проверка согласованности

Убедитесь, что всё согласовано: IP → mail.example.ru (PTR) и mail.example.ru → IP (A-запись). Обе должны совпадать. И Server Hostname в Stalwart тоже должен быть mail.example.ru.

7. Создание почтовых ящиков

После настройки DNS создайте первый почтовый ящик. Идём в веб-панель: Management → Directory → Accounts и создаём новую учётную запись.

ПолеЧто вводить
Usernameivan — только часть до собаки
Domainexample.ru — выбирается из списка
Full NameИван Иванов
CredentialsНадёжный пароль
RolesUser
Email AliasesДополнительные адреса, если нужны

Адрес ящика собирается сам: Username плюс Domain дают ivan@example.ru. Именно этот полный адрес будет логином в почтовом клиенте.

Добавьте алиас postmaster

По стандарту RFC 5321 у каждого почтового домена должен быть адрес postmaster@example.ru: на него шлют отчёты о недоставке и жалобы, и его наличие проверяют некоторые почтовые системы. Добавьте его первому ящику в поле Email Aliases.

Алиасы и перенаправления

Один пользователь может получать почту на несколько адресов. Например, ivan@example.ru, info@example.ru и support@example.ru — все в один ящик. Добавьте нужные адреса в поле Email Aliases аккаунта.

8. Подключение в Thunderbird

У Stalwart пока нет встроенного веб-почтового интерфейса (webmail) — используйте отдельный почтовый клиент. Thunderbird — бесплатный, кроссплатформенный (Windows, macOS, Linux) и отлично работает с IMAP.

Roadmap: разработчики Stalwart планируют встроенный webmail на Rust+Dioxus после выхода стабильной v1.0 (по их публичному roadmap — в течение 2026). Пока используйте внешний клиент — Thunderbird (десктоп) или один из webmail-вариантов в конце раздела.

Откройте Thunderbird: меню ☰ → Add Account → Email (или File → New → Email Account). Введите имя, адрес ivan@example.ru и пароль. Если вы добавили в DNS записи autoconfig из зоны Stalwart, клиент подхватит настройки сам. Если нет — нажмите «Настроить вручную» и введите:

ПараметрЗначение
Тип входящей почтыIMAP
Сервер входящей почтыmail.example.ru
Порт IMAP993
Защита IMAPSSL/TLS
Сервер исходящей почты (SMTP)mail.example.ru
Порт SMTP587
Защита SMTPSTARTTLS
Метод аутентификацииNormal password
Имя пользователяivan@example.ru

Настройка мобильного приложения

На Android: используйте FairEmail или K-9 Mail — оба бесплатны. На iOS: встроенное приложение «Почта» — самый простой вариант, или Canary Mail. Настройки IMAP/SMTP — те же, что в таблице выше.

Веб-почта: Bulwark или Roundcube

Если нужен браузерный интерфейс — два варианта на выбор:

🆕 Bulwark (рекомендуется)

Современный JMAP-клиент специально для Stalwart (bulwarkmail.org). Использует JMAP-протокол вместо IMAP — это быстрее и эффективнее по трафику. Помимо почты включает календарь, контакты и файлы. Open source.

Установка: github.com/bulwarkmail/webmail — есть готовый Docker-образ.

Roundcube (классика)

Хорошо проверенный временем веб-клиент через IMAP. Работает с любым почтовым сервером, интерфейс стабильный, документации много. Подходит, если важна предсказуемость.

Конфиг ниже.

Вариант с Roundcube — Docker:

/opt/roundcube/docker-compose.yml
services:
  roundcube:
    image: roundcube/roundcubemail:latest
    container_name: roundcube
    restart: unless-stopped
    ports:
      - "127.0.0.1:8090:80"  # Только localhost: Docker обходит UFW
    environment:
      - ROUNDCUBEMAIL_DEFAULT_HOST=ssl://mail.example.ru
      - ROUNDCUBEMAIL_DEFAULT_PORT=993
      - ROUNDCUBEMAIL_SMTP_SERVER=tls://mail.example.ru
      - ROUNDCUBEMAIL_SMTP_PORT=587
    volumes:
      - roundcube-db:/var/roundcube/db

volumes:
  roundcube-db:
Запустить
mkdir /opt/roundcube && cd /opt/roundcube
# Создайте docker-compose.yml с конфигом выше
docker compose up -d

Префиксы ssl:// и tls:// обязательны: без них Roundcube пойдёт на сервер по открытому каналу, и Stalwart не примет пароль. Том нужен, чтобы настройки и адресная книга пережили пересоздание контейнера.

Порт 8090 привязан к localhost, и заходить в Roundcube проще всего тем же SSH-туннелем, что и в панель: ssh -L 8090:localhost:8090 root@ВАШ_IP. Публичный адрес с HTTPS на этом же сервере не сделать — порт 443 занят Stalwart, и Nginx или Caddy рядом просто не запустятся. Если веб-почта нужна всем и с любого устройства, выносите её на отдельный сервер.

9. Проверка доставляемости

Прежде чем начать использовать сервер по-настоящему — проверьте доставляемость. Иначе вы будете думать, что письма отправились, а они тихо ложатся в спам.

mail-tester.com — главный инструмент

Зайдите на mail-tester.com. Сайт даёт вам временный адрес вида test-abc123@mail-tester.com. Отправьте на него письмо из Thunderbird. Затем нажмите «Check your score» на сайте.

Вы получите оценку по десятибалльной шкале с детальным отчётом: что настроено правильно, что нет, и как исправить. Стремитесь к 9/10 или 10/10. Бесплатно даётся три проверки в сутки, поэтому сначала прочитайте отчёт целиком и исправьте всё разом, а не по одной записи за раз.

Что проверяет mail-testerКритичность
SPF-записьВысокая
DKIM-подпись на письмеВысокая
DMARC-записьСредняя
PTR / обратный DNSВысокая
IP не в блок-листахВысокая
Правильный HELO hostnameСредняя
HTML-письмо не выглядит как спамНизкая

Проверка через MXToolbox

Зайдите на mxtoolbox.com → MX Lookup → введите ваш домен. Убедитесь, что MX-запись найдена и ведёт на ваш сервер. Там же в разделе Blacklist Check — проверьте, что ваш IP не в спам-листах.

Отправьте тестовое письмо на Gmail

Отправьте письмо на любой Gmail-адрес. В Gmail нажмите на письмо → кнопка "⋮" → «Show original» / «Показать оригинал». Вы увидите заголовки письма. Проверьте строки:

Что искать в заголовках Gmail
# Хорошо выглядит так:
Authentication-Results: mx.google.com;
   dkim=pass header.i=@example.ru;
   spf=pass smtp.mailfrom=example.ru;
   dmarc=pass (p=NONE) action=none header.from=example.ru

# Если dkim=fail или spf=fail — проверьте DNS-записи

10. Частые проблемы

Почте нужны статичный IP с чистой репутацией и обратная DNS-запись. Уточняйте это у провайдера: такого поля в наших данных нет.

Рейтинг провайдеров →

Смотрите также