Почтовый сервер на VPS с нуля для юридической фирмы ЮрКонсалт

Зачем юристам свой почтовый сервер

Юридическая фирма «ЮрКонсалт» (18 сотрудников) использовала бесплатную почту на Яндексе. Проблемы накапливались: письма клиентам попадали в спам, конфиденциальные вложения хранились на чужих серверах, а при блокировке Яндекс.Почты в 2024 году офис остался без почты на двое суток. Руководство приняло решение перейти на собственный почтовый сервер.

Требования к itfresh.ru:

  • Полный контроль над данными — переписка не покидает инфраструктуру клиента
  • Доставляемость писем 9/10+ на mail-tester.com
  • Веб-интерфейс для сотрудников (Roundcube)
  • Спам-фильтрация входящих (Rspamd)
  • Автоматическое шифрование TLS для всех соединений
  • IMAP-доступ для мобильных клиентов

Мы арендовали VPS у провайдера с чистой IP-репутацией: Debian 12, 2 vCPU, 4 GB RAM, 100 GB SSD. Критично: IP-адрес не должен быть в чёрных списках. Проверили через multirbl.valli.org — чисто.

DNS-записи: SPF, DKIM, DMARC, MX

Правильные DNS-записи — фундамент доставляемости. Без них письма гарантированно попадут в спам. Настраиваем полный набор:

# MX-запись — указывает, куда доставлять почту для домена
urconsult.ru.    IN  MX  10  mail.urconsult.ru.

# A-запись для почтового сервера
mail.urconsult.ru.  IN  A  203.0.113.25

# Обратная запись (PTR) — запрашиваем у хостера
# 25.113.0.203.in-addr.arpa.  IN  PTR  mail.urconsult.ru.

# SPF — разрешаем отправку почты только с нашего IP
urconsult.ru.  IN  TXT  "v=spf1 ip4:203.0.113.25 mx -all"

# DMARC — политика reject: отклонять письма без валидного SPF/DKIM
_dmarc.urconsult.ru.  IN  TXT  "v=DMARC1; p=reject; adkim=s; aspf=s; pct=100; rua=mailto:dmarc@urconsult.ru"

# DKIM — добавляется после генерации ключа (см. раздел Rspamd)

SPF с -all (hard fail) вместо ~all (soft fail) — строже, но для корпоративного домена это правильный выбор. Мы также ставим adkim=s и aspf=s в DMARC — strict alignment, чтобы домен в заголовке From точно совпадал с доменом в DKIM и SPF.

Postfix: настройка SMTP-сервера

Устанавливаем Postfix и настраиваем для production-использования:

apt install -y postfix postfix-pgsql

# Выбираем 'Internet Site', hostname: mail.urconsult.ru

Основные параметры /etc/postfix/main.cf:

# Базовые параметры
myhostname = mail.urconsult.ru
mydomain = urconsult.ru
myorigin = $mydomain
mydestination = $myhostname, localhost

# Виртуальные домены через PostgreSQL
virtual_mailbox_domains = pgsql:/etc/postfix/pgsql-virtual-domains.cf
virtual_mailbox_maps = pgsql:/etc/postfix/pgsql-virtual-mailbox.cf
virtual_alias_maps = pgsql:/etc/postfix/pgsql-virtual-alias.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp

# TLS — обязательное шифрование
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.urconsult.ru/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.urconsult.ru/privkey.pem
smtpd_tls_security_level = may
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_security_level = dane
smtp_dns_support_level = dnssec

# Размер письма — 50 MB
message_size_limit = 52428800

# Ограничения для защиты от спама
smtpd_helo_required = yes
smtpd_helo_restrictions =
    permit_mynetworks,
    reject_non_fqdn_helo_hostname,
    reject_invalid_helo_hostname

smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
    reject_non_fqdn_recipient,
    reject_unknown_recipient_domain

smtpd_sender_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_non_fqdn_sender,
    reject_unknown_sender_domain

# SASL через Dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

Submission-порт (587) для отправки почты аутентифицированными клиентами — в /etc/postfix/master.cf:

submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

Dovecot: IMAP и аутентификация

Dovecot обеспечивает IMAP-доступ и аутентификацию для Postfix:

apt install -y dovecot-imapd dovecot-lmtpd dovecot-pgsql dovecot-sieve

Конфигурация /etc/dovecot/conf.d/10-mail.conf:

# Формат хранения — Maildir
mail_location = maildir:/var/vmail/%d/%n/Maildir
mail_home = /var/vmail/%d/%n

# Пользователь и группа для хранения почты
mail_uid = vmail
mail_gid = vmail
first_valid_uid = 150
last_valid_uid = 150

SSL/TLS в /etc/dovecot/conf.d/10-ssl.conf:

ssl = required
ssl_cert = 

LMTP для приёма почты от Postfix — /etc/dovecot/conf.d/20-lmtp.conf:

protocol lmtp {
  mail_plugins = $mail_plugins sieve
  postmaster_address = postmaster@urconsult.ru
}

Аутентификация через PostgreSQL — /etc/dovecot/conf.d/auth-sql.conf.ext:

passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}

Sieve-фильтры для автоматической сортировки — пример глобального правила:

# /var/vmail/sieve/global.sieve
require ["fileinto", "mailbox"];

# Рассылки — в отдельную папку
if header :contains "List-Unsubscribe" "" {
    fileinto :create "Newsletters";
    stop;
}

# Уведомления от сервисов — в папку Notifications
if header :contains "From" ["noreply@", "no-reply@", "notification@"] {
    fileinto :create "Notifications";
    stop;
}

Rspamd: спам-фильтрация и DKIM-подпись

Мы выбрали Rspamd вместо SpamAssassin по трём причинам: в 5-10 раз быстрее на многопоточных системах, встроенная поддержка DKIM/ARC-подписи, современный веб-интерфейс для управления.

apt install -y rspamd redis-server

Генерация DKIM-ключей:

mkdir -p /var/lib/rspamd/dkim
rspamadm dkim_keygen -b 2048 -s 20260405 -d urconsult.ru \
  -k /var/lib/rspamd/dkim/urconsult.ru.20260405.key \
  > /var/lib/rspamd/dkim/urconsult.ru.20260405.pub

chown -R _rspamd:_rspamd /var/lib/rspamd/dkim
chmod 440 /var/lib/rspamd/dkim/*.key

Публичный ключ из .pub файла добавляем в DNS:

20260405._domainkey.urconsult.ru.  IN  TXT  "v=DKIM1; k=rsa; p=MIIBIjANBg..."

Конфигурация DKIM-подписи — /etc/rspamd/local.d/dkim_signing.conf:

path = "/var/lib/rspamd/dkim/$domain.$selector.key";
selector = "20260405";

# ARC-подпись для пересылаемых писем
enable = true;
use_domain = "header";
allow_hdrfrom_mismatch = false;

ARC (Authenticated Received Chain) — критично для случаев пересылки. Без ARC письма, пересланные через mailing list, теряют DKIM-валидацию. Конфигурация /etc/rspamd/local.d/arc.conf:

path = "/var/lib/rspamd/dkim/$domain.$selector.key";
selector = "20260405";

enable = true;
use_domain = "header";

Greylisting — задерживаем первое письмо от неизвестного отправителя на 5 минут. Спам-боты обычно не повторяют доставку:

# /etc/rspamd/local.d/greylist.conf
enabled = true;
timeout = 300;  # 5 минут
expire = 86400;
whitelist_domains_url = "/etc/rspamd/local.d/greylist-whitelist.inc";

Интеграция с Postfix через milter — в /etc/postfix/main.cf:

milter_protocol = 6
smtpd_milters = inet:localhost:11332
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

DANE/TLSA и Roundcube

DANE (DNS-Based Authentication of Named Entities) привязывает TLS-сертификат к DNS-записи, предотвращая MITM-атаки на уровне CA. Для юридической фирмы это дополнительный слой защиты:

# Генерируем TLSA-запись из сертификата
certbot certificates -d mail.urconsult.ru

# Хеш для TLSA (3 1 1 — DANE-EE, публичный ключ, SHA-256)
openssl x509 -in /etc/letsencrypt/live/mail.urconsult.ru/cert.pem \
  -noout -pubkey | openssl pkey -pubin -outform DER | \
  openssl dgst -sha256 -binary | xxd -p -c 64

DNS-запись TLSA:

_25._tcp.mail.urconsult.ru.  IN  TLSA  3 1 1 a1b2c3d4e5f6...полный_хеш
_993._tcp.mail.urconsult.ru. IN  TLSA  3 1 1 a1b2c3d4e5f6...полный_хеш

Roundcube — веб-интерфейс для сотрудников:

apt install -y roundcube roundcube-pgsql roundcube-plugins

# Nginx конфигурация для Roundcube
server {
    listen 443 ssl http2;
    server_name webmail.urconsult.ru;

    ssl_certificate /etc/letsencrypt/live/mail.urconsult.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mail.urconsult.ru/privkey.pem;

    root /var/lib/roundcube/public_html;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Запрещаем доступ к конфигам
    location ~ /config {
        deny all;
    }
}

В конфигурации Roundcube включаем плагины для удобства юристов: managesieve (управление фильтрами), archive (архивирование), zipdownload (скачивание вложений архивом).

Тестирование и результаты

Проверяем доставляемость через mail-tester.com — отправляем тестовое письмо и получаем оценку:

# Отправляем тестовое письмо
echo "Test mail from urconsult.ru" | mail -s "Deliverability Test" test-xxxxx@mail-tester.com

Результат: 10/10 на mail-tester.com. Все проверки пройдены:

  • SPF: pass (hard fail для чужих серверов)
  • DKIM: pass (2048-bit RSA, селектор 20260405)
  • DMARC: pass (policy: reject, strict alignment)
  • Reverse DNS (PTR): совпадает с HELO
  • Нет в чёрных списках (проверено 30+ RBL)
  • HTML/текстовый формат — корректный
  • ARC: настроен для пересылки

Дополнительные проверки:

# Проверяем DANE
dig TLSA _25._tcp.mail.urconsult.ru +short
# 3 1 1 a1b2c3d4e5f6...

# Проверяем TLS отчёты
# Настраиваем smtp_tls_policy_maps для мониторинга

# Проверяем DKIM вручную
opendkim-testkey -d urconsult.ru -s 20260405 -vvv

Управление IP-репутацией — критически важный аспект, которому не уделяют внимания в большинстве руководств. Мы настроили мониторинг репутации через postmaster.google.com и регулярную проверку через multirbl.valli.org.

Итоги проекта для «ЮрКонсалт»:

  • Полная независимость от внешних почтовых сервисов
  • Доставляемость писем: 10/10 по mail-tester.com
  • Конфиденциальность: вся переписка хранится на собственном VPS
  • Спам-фильтрация: Rspamd блокирует 97% входящего спама
  • 18 почтовых ящиков, 5 алиасов, Sieve-правила для автосортировки
  • Стоимость: 800 руб/мес за VPS вместо 5 400 руб/мес за коммерческую почту

Команда itfresh.ru обеспечивает ежемесячное обслуживание: обновление сертификатов (автоматизировано через certbot), мониторинг очередей Postfix, ротация DKIM-ключей каждые 6 месяцев, проверка IP-репутации.

Часто задаваемые вопросы

Rspamd в 5-10 раз быстрее SpamAssassin на многопоточных системах, написан на C (а не Perl), имеет встроенную поддержку DKIM/ARC-подписи без отдельных демонов, и предоставляет веб-интерфейс для управления. SpamAssassin — проверенное решение, но для новых установок Rspamd объективно лучше.
Рекомендуется ротация каждые 6-12 месяцев. При ротации создаётся новый ключ с новым селектором (например, дата), публикуется в DNS, а старый ключ остаётся в DNS ещё 48 часов для писем в транзите. Длина ключа — минимум 2048 бит, 1024 бит уже считается небезопасной.
Да, и мы рекомендуем. Let's Encrypt сертификаты полностью поддерживаются Postfix и Dovecot. Единственное ограничение — при использовании DANE (TLSA) нужно обновлять DNS-записи при каждом обновлении сертификата. Решение: использовать TLSA тип 3 1 1 (привязка к публичному ключу), который не меняется при обновлении сертификата.
Немедленно: проверьте, что сервер не рассылает спам (просмотрите очередь Postfix командой postqueue -p). Затем запросите delisting через сайт конкретного RBL (у каждого своя форма). Самые важные: Spamhaus, Barracuda, SpamCop. Процесс занимает от часа до 48 часов.
Новый IP без репутации нужно «прогревать»: первая неделя — до 50 писем в день, вторая — до 200, третья — до 500. Через месяц — до 2000. Резкий скачок объёма с нового IP гарантированно приведёт к попаданию в чёрные списки.

Нужна помощь с проектом?

Специалисты АйТи Фреш помогут с архитектурой, DevOps, безопасностью и разработкой — 15+ лет опыта

📞 Связаться с нами
#postfix#dovecot#rspamd#dkim#dmarc#spf#arc#dane
Комментарии 0

Оставить комментарий

загрузка...