Перейти к содержанию

Vaultwarden SMTP через Yandex 360 (VAULT-03)

Цель: включить email-уведомления в Vaultwarden — приглашения в orgs, 2FA email, verification emails, password hint.

Провайдер: Yandex 360 for Business (у тебя есть корпоративный домен alatyr-service.ru с Y360 — уже используется для основной почты).

Разделение работы: - Агент подготовил — env-переменные, порядок работы, тестовые команды - Ты выполнишь — создать application-password в Y360, обновить .env, рестарт


Шаг 1 · Создать выделенный ящик в Y360 (или использовать существующий)

Рекомендация: отдельный технический ящик noreply@alatyr-service.ru (или vault@alatyr-service.ru) — чтобы не палить свой основной адрес.

Y360 admin panel (https://admin.yandex.ru/): 1. Пользователи → Добавить сотрудника 2. Логин: noreply (или vault) 3. Пароль: сгенерь через openssl rand -base64 24 4. Сохрани в Vaultwarden: запись "Y360 · noreply@alatyr-service.ru"

Если жалко место в тарифе — используй свой основной ящик, но тогда SMTP_FROM_NAME поставь Alatyr Vaultwarden, чтобы получатели понимали что это сервисные письма.


Шаг 2 · Application password в Y360

⚠️ Обычный пароль не работает. Yandex требует app-password для SMTP через сторонние клиенты (у них 2FA обязательна для админов).

Порядок: 1. Логин в почту как noreply@alatyr-service.ru (https://360.yandex.ru/) 2. Управление аккаунтом → Безопасность → Пароли приложений 3. Создать → название Vaultwarden SMTP 4. Тип: Почта 5. Yandex покажет одноразовый 16-символьный пароль вида abcd efgh ijkl mnop 6. Скопировать без пробелов: abcdefghijklmnop 7. Сразу сохранить в Vaultwarden: запись "Y360 · noreply · SMTP app password"

⚠️ Пароль показывается только один раз. Если потерял — удали и создай новый.


Шаг 3 · Обновить .env Vaultwarden

# На VPS 46.17.99.183 от root:
sudo nano /opt/vaultwarden/.env

# Добавить (или обновить) блок:
# ============================================================================
# SMTP через Yandex 360 — VAULT-03, ссылка на vaultwarden-smtp-y360.md
# ============================================================================

# --- Основа ---
SMTP_HOST=smtp.yandex.ru
SMTP_PORT=465
SMTP_SECURITY=force_tls          # порт 465 → SSL/TLS обязателен
SMTP_USERNAME=noreply@alatyr-service.ru
SMTP_PASSWORD=<APP_PASSWORD_16_CHARS>   # из шага 2, без пробелов
SMTP_FROM=noreply@alatyr-service.ru
SMTP_FROM_NAME=Alatyr Vaultwarden

# --- Опционально ---
# SMTP_AUTH_MECHANISM=Login             # обычно определяется автоматически
# SMTP_TIMEOUT=15                       # секунды — default OK
# SMTP_ACCEPT_INVALID_CERTS=false       # НЕ включать в prod
# SMTP_ACCEPT_INVALID_HOSTNAMES=false   # НЕ включать в prod

# --- Триггеры уведомлений ---
SIGNUPS_ALLOWED=false                   # уже стоит — регистрация закрыта
SIGNUPS_VERIFY=true                     # включаем — новые аккаунты подтверждают email
SIGNUPS_VERIFY_RESEND_TIME=3600
SIGNUPS_VERIFY_RESEND_LIMIT=6
SIGNUPS_DOMAINS_WHITELIST=alatyr-service.ru  # только с рабочего домена
INVITATIONS_ALLOWED=true                # приглашения в орги — включаем
EMERGENCY_ACCESS_ALLOWED=true           # emergency contacts — включаем

⚠️ БЕЗ КЛЮЧЕЙ В GIT. Файл .env в /opt/vaultwarden/.env — в .gitignore. Только env.example (без значений) коммитим.

sudo chmod 600 /opt/vaultwarden/.env
sudo chown root:root /opt/vaultwarden/.env

Шаг 4 · Рестарт Vaultwarden

cd /opt/vaultwarden
sudo docker compose down
sudo docker compose up -d
sleep 10
sudo docker compose ps
# Ожидание: vaultwarden Up X seconds (healthy)

Шаг 5 · Тест — отправить пробное письмо

Вариант А — через UI: 1. Открой https://vault.alatyr-service.ru 2. Settings → Account → Emergency Access → Invite новый контакт 3. Или: Organization → Manage → Invite user (если у тебя есть Organization) 4. Введи любой валидный email куда ты можешь принять письмо 5. Отправить 6. Через 30 сек — письмо должно упасть в inbox

Вариант Б — через логи (без UI):

# На VPS смотри лог отправки:
sudo docker logs -f --since 5m vaultwarden 2>&1 | grep -iE "smtp|email|mail"

# В другом терминале — тригер отправки:
# зайти в UI и Send test email (Admin → SMTP test если admin_token настроен)

Success выглядит так:

[INFO] Sending email: <recipient@example.com>
[INFO] Email sent successfully to <recipient@example.com>

Failure выглядит так:

[ERROR] Failed to send email: connect timeout
[ERROR] SMTP AUTH failed: 535 5.7.8 Error: authentication failed


Шаг 6 · Обновить документацию

  • В vaultwarden.md — секция "SMTP" из "не настроено" → "✅ Y360 noreply@"
  • В 00_INDEX.md — если есть пункт про email

Диагностика

Симптом Причина Действия
connect timeout Файрвол блокирует 465/tcp наружу sudo ufw status, разрешить ufw allow out 465/tcp (обычно уже открыт)
AUTH failed 535 Пароль не сменил на app-password Пересмотри шаг 2, создай новый app-password
AUTH failed + всё правильно В логине забыл @alatyr-service.ru Полный адрес обязателен: noreply@alatyr-service.ru
Письма в спам SPF/DKIM не настроены В Reg.ru DNS: SPF v=spf1 include:_spf.yandex.net ~all, DKIM берётся из Y360 admin → Домены → DKIM
Yandex блокирует SMTP Слишком много писем сразу Y360 free-tier лимит ~250 писем/сут. Для Vaultwarden хватает.

Дополнительно — SPF / DKIM / DMARC

Правильный SPF/DKIM усиливает доставляемость. Если письма падают в спам — это первое куда смотреть.

SPF-запись в Reg.ru DNS для alatyr-service.ru:

TXT @  "v=spf1 include:_spf.yandex.net ~all"

DKIM — из Y360 admin panel скопировать значение, вставить как TXT-запись <selector>._domainkey.alatyr-service.ru.

DMARC (мягкая политика):

TXT _dmarc  "v=DMARC1; p=none; rua=mailto:noreply@alatyr-service.ru"

Проверка через https://www.mail-tester.com — отправь письмо на выданный адрес, получи score 8+/10.


Что дальше — расширение

После настройки SMTP можно включить: - Organization invites — приглашать других (жена, сотрудники) в свой Vaultwarden - Emergency Access — на случай если что-то случится, доверенный человек может получить доступ - Password hints — восстановление пароля (если забыл master, дают подсказку)

Тот же SMTP переиспользовать для: - alatyr-service (задача 41x — уведомления клиентам) - Uptime Kuma (задача 28 — email-алерты, дополнительно к Telegram) - Cron backup-скриптов (уведомление админу при провале бэкапа)

Раздельные ящики: noreply@ для сервисных, hi@ или info@ для клиентских.


Оценка времени

  • Y360 admin ящик + app password: 10 минут
  • Обновление .env + рестарт: 5 минут
  • Тест отправки + проверка: 10 минут
  • SPF/DKIM/DMARC (если нужно): 20 минут

Итого: 25–45 минут.


Автор: агент, 08.08.2026