Запуск собственной почты на 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/домена и реакции на инциденты.
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 должны смотреть на один и тот же хостнейм.

Установка пакетов
Далее — для 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
Почтовое хранилище и пользователи (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

Фаервол и порты
Откройте нужные порты. Для 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, квоты и мониторинг. Это даст вам контроль над данными и гибкость при прозрачной управляемости инфраструктуры.


