Top.Mail.Ru
OSEN-НИЙ SAAALEСкидка 50% на виртуальный хостинг и VDS
до 30.11.2025 Подробнее
Выберите продукт

Собственная почта на VDS: Postfix + Dovecot + Rspamd, TLS и антиспам

Своя почта на VDS даёт контроль над данными и доставляемость, но требует аккуратной настройки и поддержки. В статье — установка Postfix, Dovecot и Rspamd, включение TLS, SPF/DKIM/DMARC, пользователи и ящики, порты SMTP/IMAP, антиспам и проверка работы пошагово.
Собственная почта на VDS: Postfix + Dovecot + Rspamd, TLS и антиспам

Запуск собственной почты на VDS остаётся задачей для тех, кто ценит контроль, приватность и гибкость. Почтовая связка Postfix (SMTP), Dovecot (IMAP/POP3/LMTP) и Rspamd (антиспам/антивирусная интеграция/подпись DKIM) — проверенное решение, которое при грамотной настройке обеспечивает защищённую доставку (TLS), фильтрацию спама и корректную аутентификацию домена (SPF, DKIM, DMARC). В этом руководстве — практические шаги, минимальные, но безопасные конфиги и советы по диагностике доставляемости.

Что потребуется и на что обратить внимание

Перед стартом убедитесь, что у вас есть:

  • VDS с публичным статическим IPv4 (желательно и IPv6), root/ssh-доступ и открытые исходящие соединения на порт 25/tcp (иногда провайдеры ограничивают исходящую почту).
  • Домен, для которого вы будете поднимать почту. Часто используют поддомен mail.example.ru как имя SMTP/IMAP-сервера.
  • Корректный PTR (rDNS), указывающий на ваш почтовый хостнейм (например, mail.example.ru). Без реверсной записи велика вероятность блокировок у принимающих сторон.
  • Открытые порты на фаерволе: входящие 25 (SMTP), 465 (SMTPS), 587 (Submission), 993 (IMAPS). POP3 обычно отключают.
  • Синхронизация времени (NTP), уникальный и корректный hostname сервера, валидный сертификат TLS для вашего хостнейма.

Если сервера ещё нет — подойдёт VDS; для домена — оформите его через регистрацию доменов.

Поднимайте собственную почту только если готовы сопровождать сервис: обновления, мониторинг, бэкапы, поддержание репутации IP/домена и реакции на инциденты.

FastFox VDS
Облачный VDS-сервер в России
Аренда виртуальных серверов с моментальным развертыванием инфраструктуры от 195₽ / мес

DNS-база: A/MX, SPF, DKIM, DMARC

Минимально необходимый набор DNS-записей для домена example.ru:

  • A для mail.example.ru на IP вашего VDS.
  • MX домена на mail.example.ru (приоритет 10).
  • SPF для исходящей аутентификации: v=spf1 a mx ip4:1.2.3.4 ~all.
  • DKIM: TXT-запись по селектору (например, mail._domainkey) с публичным ключом.
  • DMARC: TXT для _dmarc.example.ru, например: v=DMARC1; p=quarantine; rua=mailto:dmarc@example.ru; ruf=mailto:dmarc@example.ru; fo=1; adkim=s; aspf=s.

Если домена нет — начните с регистрации доменов. Подбор и верификация записей разобраны в нашей шпаргалке: DNS-записи для SPF/DKIM/DMARC.

PTR (rDNS) обязательно должен соответствовать имени вашего почтового сервера. Настраивается у оператора IP. HELO/EHLO, который шлёт Postfix, и PTR должны смотреть на один и тот же хостнейм.

Установка Postfix, Dovecot и Rspamd в терминале

Установка пакетов

Далее — для Debian/Ubuntu-подобных систем. Аналоги для RHEL/Alma/CentOS выбираются пакетным менеджером вашей ОС.

apt update && apt install -y postfix dovecot-imapd dovecot-lmtpd rspamd redis-server certbot

При установке Postfix выберите «Internet Site», укажите mail.example.ru как системный почтовый узел.

Сертификат TLS для почты

Выпустите сертификат для mail.example.ru. В простейшем случае можно остановить слушающие сервисы на 80/443 (если заняты) и выполнить standalone-выпуск. Важно: используйте тот же сертификат в Postfix и Dovecot. Рекомендации по криптографическим настройкам — в материале TLS: практики 2025. Для корпоративных сценариев можно оформить платные SSL-сертификаты.

systemctl stop nginx apache2 || true
certbot certonly --standalone -d mail.example.ru
ls -l /etc/letsencrypt/live/mail.example.ru/

Ключевые пути (понадобятся в конфигах):

  • /etc/letsencrypt/live/mail.example.ru/fullchain.pem
  • /etc/letsencrypt/live/mail.example.ru/privkey.pem
FastFox SSL
Надежные SSL-сертификаты
Мы предлагаем широкий спектр SSL-сертификатов от GlobalSign по самым низким ценам. Поможем с покупкой и установкой SSL бесплатно!

Почтовое хранилище и пользователи (Dovecot виртуальные ящики)

Используем виртуальных пользователей Dovecot (без отдельной SQL-БД) — логины и хэши паролей в файле, а письма — в Maildir под /var/mail/vhosts. Это просто и подходит для малого и среднего числа ящиков.

adduser --system --group --uid 150 vmail
mkdir -p /var/mail/vhosts/example.ru
chown -R vmail:vmail /var/mail/vhosts
chmod -R 0750 /var/mail/vhosts

Сгенерируйте хэш пароля и добавьте пользователя:

doveadm pw -s SHA512-CRYPT
# введите пароль, получите хэш, затем добавьте строку вида:
# user@example.ru:{SHA512-CRYPT}<HASH>
echo 'user@example.ru:{SHA512-CRYPT}<HASH>' >> /etc/dovecot/users
chown root:root /etc/dovecot/users
chmod 0640 /etc/dovecot/users

Конфигурация Dovecot (IMAP/LMTP и TLS)

Базовый конфиг для IMAP, обязательного TLS и LMTP-связки с Postfix:

cat > /etc/dovecot/dovecot.conf <<'EOF'
protocols = imap lmtp
listen = *
mail_location = maildir:/var/mail/vhosts/%d/%n

ssl = required
ssl_cert = </etc/letsencrypt/live/mail.example.ru/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.ru/privkey.pem

auth_mechanisms = plain login

passdb {
  driver = passwd-file
  args = scheme=SHA512-CRYPT /etc/dovecot/users
}
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
  }
}

protocol imap {
  mail_max_userip_connections = 20
}
EOF
systemctl enable --now dovecot

Теперь IMAP доступен на 993/tcp только по TLS, а Postfix сможет доставлять почту в Dovecot через LMTP.

Конфигурация Postfix: SMTP, Submission, TLS и SASL

Настроим TLS, аутентификацию через Dovecot и интеграцию с Rspamd (milter). Будем хранить почту в Maildir через LMTP.

postconf -e 'myhostname = mail.example.ru'
postconf -e 'myorigin = /etc/mailname'
postconf -e 'inet_interfaces = all'
postconf -e 'inet_protocols = ipv4'
postconf -e 'mynetworks = 127.0.0.0/8 [::1]/128'
postconf -e 'smtpd_helo_required = yes'

# TLS
postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.ru/fullchain.pem'
postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.ru/privkey.pem'
postconf -e 'smtpd_tls_security_level = may'
postconf -e 'smtp_tls_security_level = may'
postconf -e 'smtpd_tls_loglevel = 1'
postconf -e 'smtpd_tls_received_header = yes'

# Виртуальные домены/ящики и LMTP в Dovecot
postconf -e 'virtual_mailbox_domains = example.ru'
postconf -e 'virtual_mailbox_base = /var/mail/vhosts'
postconf -e 'virtual_mailbox_maps = hash:/etc/postfix/virtual_mailbox'
postconf -e 'virtual_minimum_uid = 150'
postconf -e 'virtual_uid_maps = static:150'
postconf -e 'virtual_gid_maps = static:150'
postconf -e 'virtual_transport = lmtp:unix:private/dovecot-lmtp'

# SASL через Dovecot и ограничения для входящей почты
postconf -e 'smtpd_sasl_type = dovecot'
postconf -e 'smtpd_sasl_path = private/auth'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'smtpd_tls_auth_only = yes'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination'

# Интеграция с Rspamd (milter proxy 11332)
postconf -e 'milter_default_action = accept'
postconf -e 'milter_protocol = 6'
postconf -e 'smtpd_milters = inet:127.0.0.1:11332'
postconf -e 'non_smtpd_milters = $smtpd_milters'

Укажите виртуальные ящики домена в /etc/postfix/virtual_mailbox и сгенерируйте db:

cat > /etc/postfix/virtual_mailbox <<'EOF'
user@example.ru example.ru/user/
EOF
postmap /etc/postfix/virtual_mailbox
systemctl restart postfix

Включим Submission (587) и SMTPS (465) в master.cf:

postconf -M submission/inet='submission inet n - y - - smtpd'
postconf -P 'submission/inet/syslog_name=postfix/submission'
postconf -P 'submission/inet/smtpd_tls_security_level=encrypt'
postconf -P 'submission/inet/smtpd_sasl_auth_enable=yes'
postconf -P 'submission/inet/smtpd_reject_unlisted_sender=no'
postconf -P 'submission/inet/smtpd_client_restrictions=permit_sasl_authenticated,reject'
postconf -P 'submission/inet/milter_macro_daemon_name=ORIGINATING'

postconf -M smtps/inet='smtps inet n - y - - smtpd'
postconf -P 'smtps/inet/syslog_name=postfix/smtps'
postconf -P 'smtps/inet/smtpd_tls_wrappermode=yes'
postconf -P 'smtps/inet/smtpd_sasl_auth_enable=yes'
postconf -P 'smtps/inet/smtpd_client_restrictions=permit_sasl_authenticated,reject'
postconf -P 'smtps/inet/milter_macro_daemon_name=ORIGINATING'

systemctl restart postfix

Rspamd: антиспам, Redis и DKIM-подпись

Rspamd работает через milter-прокси на порту 11332 (по умолчанию). Подключим Redis, включим DKIM-подпись и полезные модули (greylist, ratelimit, bayes, dmarc).

Redis:

systemctl enable --now redis-server

Подключение Redis к Rspamd:

mkdir -p /etc/rspamd/local.d
cat > /etc/rspamd/local.d/redis.conf <<'EOF'
servers = 127.0.0.1:6379;
EOF

Генерация DKIM-ключа и публикация TXT:

mkdir -p /var/lib/rspamd/dkim
chown -R _rspamd:_rspamd /var/lib/rspamd/dkim
rspamadm dkim_keygen -b 2048 -s mail -d example.ru -k /var/lib/rspamd/dkim/example.ru.mail.key > /tmp/mail._domainkey.example.ru.txt
cat /tmp/mail._domainkey.example.ru.txt

Содержимое выведите в TXT-запись mail._domainkey.example.ru (строка p=... — публичный ключ). Конфиг DKIM-подписи:

cat > /etc/rspamd/local.d/dkim_signing.conf <<'EOF'
path = "/var/lib/rspamd/dkim/$domain.$selector.key";
selector = "mail";
domain = "*";
sign_authenticated = true;
sign_local = true;
allow_hdrfrom_mismatch = false;
allow_username_mismatch = true;
try_fallback = true;
EOF

DMARC и отчётность:

cat > /etc/rspamd/local.d/dmarc.conf <<'EOF'
reporting = true;
# настройте адрес отправителя отчётов при необходимости:
# rua_reporter = "dmarc-reports@example.ru";
EOF

Серый список и ограничение скорости отправки (для исходящего submission):

cat > /etc/rspamd/local.d/greylist.conf <<'EOF'
enabled = true;
whitelist = [ "127.0.0.0/8" ];
EOF

cat > /etc/rspamd/local.d/ratelimit.conf <<'EOF'
rates {
  user = [
    { selector = "user.lower"; bucket = "1m"; rate = "20"; burst = 30; },
    { selector = "user.lower"; bucket = "1h"; rate = "200"; burst = 400; }
  ];
}
EOF

Байес и автотренировка:

cat > /etc/rspamd/local.d/classifier-bayes.conf <<'EOF'
backend = "redis";
autolearn = true;
autolearn_threshold_spam = 6.0;
autolearn_threshold_ham = -2.0;
EOF

Проверьте и перезапустите Rspamd:

rspamadm configtest
systemctl restart rspamd

Схема DKIM-подписи и фильтрации сообщений в Rspamd

Фаервол и порты

Откройте нужные порты. Для UFW:

ufw allow 25/tcp
ufw allow 465/tcp
ufw allow 587/tcp
ufw allow 993/tcp
ufw reload

Если используете firewalld:

firewall-cmd --permanent --add-service=smtp
firewall-cmd --permanent --add-service=smtps
firewall-cmd --permanent --add-service=submission
firewall-cmd --permanent --add-service=imaps
firewall-cmd --reload

Проверка: аутентификация, TLS, отправка

Проверка аутентификации Dovecot:

doveadm auth test user@example.ru 'ВашПароль'

Проверка TLS на 25/587/465:

echo | openssl s_client -starttls smtp -connect mail.example.ru:25 -servername mail.example.ru 2>/dev/null | openssl x509 -noout -subject -issuer -dates
echo | openssl s_client -starttls smtp -connect mail.example.ru:587 -servername mail.example.ru 2>/dev/null | openssl x509 -noout -subject -issuer -dates
echo | openssl s_client -connect mail.example.ru:465 -servername mail.example.ru 2>/dev/null | openssl x509 -noout -subject -issuer -dates

Тестовая отправка через submission (swaks удобен, но можно и через openssl/netcat). Пример со swaks:

apt install -y swaks
swaks --to you@example.net --from user@example.ru \
  --server mail.example.ru --port 587 --auth LOGIN \
  --auth-user user@example.ru --auth-password 'ВашПароль' --tls

Проверьте логи:

journalctl -u postfix -u dovecot -u rspamd -f

DMARC/SPF/DKIM: что проверят принимающие

После первых отправок проверьте заголовки письма у получателя: должен быть DKIM-Signature вашей подписи, Authentication-Results с spf=pass (или neutral для форвардов) и dmarc=pass при совпадении доменов. Если dkim=fail — чаще всего неверен TXT ключ (лишние переносы/кавычки) или подпись идёт от другого домена/селектора.

Приём входящей почты

Чтобы принять письмо, у домена должен смотреть MX на ваш сервер, Postfix — слушать 25/tcp, а Dovecot обеспечивать хранение и доступ IMAP для пользователей. Минимум антиспама у нас уже включён Rspamd. При риске перегрузки включайте и настраивайте greylist, ratelimit, а также карантин (Sieve/IMAPSieve) при необходимости.

Fail2ban и базовая защита

Защитить аутентификацию поможет fail2ban с фильтрами для Postfix и Dovecot. Включите тюремные камеры на аутентификационные ошибки и перебор паролей, установите разумные bantime/findtime. Также:

  • Запретите PLAIN без TLS (smtpd_tls_auth_only = yes уже задано).
  • Оставьте только IMAPS (993) и отключите незащищённый 143/110 либо требуйте TLS в Dovecot.
  • Ограничьте релеи: приём без аутентификации только на собственные домены (reject_unauth_destination).

Жизненный цикл: бэкапы, обновления, мониторинг

Почта — критичные данные. Резервируйте каталоги /var/mail/vhosts, конфиги /etc/postfix, /etc/dovecot, /etc/rspamd, ключи DKIM, а также базу Redis при необходимости. Обновляйте пакеты безопасности, мониторьте очередь Postfix (postqueue -p), статистику Rspamd (rspamc stat), свободное место и время ответа на IMAP/SMTP. Для периодических задач пригодится планирование через cron и systemd timers: cron vs systemd-timers.

Типичные проблемы и их диагностика

  • Исходящая почта не уходит (порт 25 заблокирован). Некоторые провайдеры блокируют 25/tcp исходящий. Решение — уточнить политику или использовать согласованный с провайдером SMTP relay. Логика Postfix позволит направить исходящую почту через relayhost.
  • Сбой TLS/сертификата. Проверьте пути в Postfix/Dovecot, права на privkey.pem (читаем только почтовыми сервисами), совпадение имени сервера и сертификата.
  • Авторизация не работает. Сверьте /etc/dovecot/users, механизм plain login, сокет /var/spool/postfix/private/auth (права и владелец).
  • Письма не доставляются в ящик. Проверьте LMTP-сокет private/dovecot-lmtp и настройки virtual_transport. Посмотрите journalctl -u dovecot.
  • DKIM=fail. Неверно склеенный ключ в TXT, не тот селектор, или Rspamd не видит приватный ключ (права файла/директории, владелец _rspamd).
  • SPF=softfail/neutral. В SPF не указан ваш адрес/хост. Добавьте a mx ip4:1.2.3.4 (или IPv6).
  • DMARC=fail. Не совпадает домен в From: с доменом, прошедшим SPF/DKIM, или слишком строгая политика без соответствий (adkim=s, aspf=s).
  • Слишком агрессивный антиспам. Отрегулируйте пороги Rspamd, обучайте байес на ваших данных, используйте whitelist для надёжных отправителей.

Тонкая настройка: Sieve, квоты, несколько доменов

Для фильтрации по правилам на стороне сервера включите IMAPSieve/Dovecot Sieve и настройте сценарии по папкам (например, перемещать письма со спам-скором >= 6 в Spam). Квоты можно включить через плагин Dovecot quota. Для поддержки нескольких доменов добавляйте их в virtual_mailbox_domains, а пользователей — в /etc/dovecot/users с соответствующим %d/%n в пути хранения.

Контроль репутации и доставляемости

Следите за очередью (postqueue -p), процентом отклонений, временем доставки, TLS-статистикой. Включайте DMARC-отчёты на адрес rua, анализируйте причины отказов (550, 421, 554) в логах. Поддерживайте чистым список получателей и не допускайте компрометации паролей: утечка учётных данных быстро бьёт по репутации IP/домена.

Итог

При соблюдении базовых требований (PTR, корректный HELO, TLS, SPF/DKIM/DMARC) и грамотной настройке Postfix/Dovecot/Rspamd собственная почта на VDS работает стабильно и предсказуемо. Начните с минимальной связки, проверьте весь путь доставки, затем добавляйте автоматизацию, Sieve, квоты и мониторинг. Это даст вам контроль над данными и гибкость при прозрачной управляемости инфраструктуры.

Поделиться статьей

Вам будет интересно

Nginx SSI и подзапросы: сборка страниц из блоков с кэшированием OpenAI Статья написана AI Fastfox

Nginx SSI и подзапросы: сборка страниц из блоков с кэшированием

Практическое руководство по Nginx SSI и subrequest: сборка страницы из блоков, фрагментное кэширование, разделение гостей и автори ...
Мониторинг OPcache: метрики, алерты и быстрая диагностика утечек OpenAI Статья написана AI Fastfox

Мониторинг OPcache: метрики, алерты и быстрая диагностика утечек

OPcache ускоряет PHP, но под нагрузкой может «захлебнуться»: заканчивается память, растёт фрагментация, падает hit rate. Разбираем ...
rclone для больших файлов: multipart‑загрузки, параллелизм и контроль памяти OpenAI Статья написана AI Fastfox

rclone для больших файлов: multipart‑загрузки, параллелизм и контроль памяти

Большие файлы и S3 требуют точной настройки rclone: multipart‑загрузка, параллелизм потоков, контроль памяти и полосы, устойчивост ...