Настройка почтового сервера Postfix + Dovecot + DKIM на Debian: полное руководство

Linux 24 марта 2026 12 мин чтения Автор: Евгений Семёнов
Настройка Postfix Dovecot DKIM на Debian

Собственный почтовый сервер — это полный контроль над корпоративной перепиской, независимость от внешних сервисов и экономия на лицензиях. Но настройка Postfix + Dovecot с нуля вызывает массу вопросов: от DNS-записей до проблем с доставкой в Mail.ru и Gmail. В этом руководстве мы разберём весь процесс пошагово, а также ответим на самые частые вопросы — собранные из 441 комментария к оригинальной инструкции.

Из нашей практики: в ITfresh мы развернули более 30 почтовых серверов на Postfix+Dovecot для компаний от 10 до 500 сотрудников. Ниже — все грабли, на которые мы наступали, и решения, которые работают в 2026 году.

Какие DNS-записи нужны для почтового сервера?

Одна из самых частых ошибок — неполная настройка DNS. Без правильных записей письма будут уходить в спам или вообще отклоняться. Вот полный список необходимых записей:

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

# A-запись — IP вашего сервера
mail.example.com.  IN  A  203.0.113.10

# SPF — разрешает отправку только с вашего IP
example.com.    IN  TXT  "v=spf1 ip4:203.0.113.10 -all"

# DKIM — публичный ключ (после генерации)
mail._domainkey.example.com.  IN  TXT  "v=DKIM1; k=rsa; p=MIGfMA0G..."

# DMARC — политика обработки писем без SPF/DKIM
_dmarc.example.com.  IN  TXT  "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"

# PTR (reverse DNS) — запрашивается у хостера
203.0.113.10  IN  PTR  mail.example.com.
Частая ошибка из комментариев: Mail.ru и Яндекс отклоняют письма, если PTR-запись не настроена. PTR устанавливается не в вашей DNS-панели, а у хостера/провайдера VPS. Обязательно создайте тикет с просьбой установить PTR для вашего IP.

Как установить и настроить Postfix на Debian?

Начнём с установки всех необходимых пакетов. Команды актуальны для Debian 12 (Bookworm) и Debian 13 (Trixie):

# Обновляем систему
apt update && apt upgrade -y

# Устанавливаем Postfix с поддержкой MySQL
apt install -y postfix postfix-mysql

# При установке выбираем "Internet Site"
# System mail name: example.com

Основная конфигурация /etc/postfix/main.cf:

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

# Виртуальные домены из MySQL (PostfixAdmin)
virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp

# TLS настройки
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem
smtpd_tls_security_level = may
smtp_tls_security_level = may

# Ограничения
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
    reject_rbl_client zen.spamhaus.org

# SASL аутентификация через Dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

# Лимиты
message_size_limit = 52428800
mailbox_size_limit = 0
Из нашей практики: всегда добавляйте reject_rbl_client zen.spamhaus.org — это отсекает до 90% спама на входе без нагрузки на сервер.

Как настроить Dovecot для работы с виртуальными ящиками?

Dovecot отвечает за хранение почты и IMAP/POP3 доступ. Устанавливаем:

apt install -y dovecot-core dovecot-imapd dovecot-pop3d   dovecot-lmtpd dovecot-mysql

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

mail_location = maildir:/var/vmail/%d/%n
mail_uid = vmail
mail_gid = vmail
first_valid_uid = 150

# Создаём пользователя vmail
# groupadd -g 150 vmail
# useradd -g 150 -u 150 -d /var/vmail -m vmail

Настройка аутентификации /etc/dovecot/conf.d/10-auth.conf:

auth_mechanisms = plain login
disable_plaintext_auth = yes
!include auth-sql.conf.ext
Проблема Dovecot 2.4 в Debian 13: плагин mailbox_alias удалён! Если вы обновились и получаете ошибку «Unknown plugin: mailbox_alias», решение — использовать special_use вместо алиасов. Это один из самых частых вопросов в комментариях.

Как решить проблему mailbox_alias в Dovecot 2.4?

В Dovecot 2.4 (поставляется с Debian 13 Trixie) плагин mailbox_alias полностью удалён. Вместо него используйте стандартный механизм special_use:

# /etc/dovecot/conf.d/15-mailboxes.conf
namespace inbox {
  mailbox Drafts {
    special_use = \Drafts
    auto = subscribe
  }
  mailbox Junk {
    special_use = \Junk
    auto = subscribe
  }
  mailbox Trash {
    special_use = \Trash
    auto = subscribe
  }
  mailbox Sent {
    special_use = \Sent
    auto = subscribe
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
}

Также в Dovecot 2.4 изменился формат ряда директив. Проверьте конфигурацию после обновления:

# Проверка конфигурации Dovecot
doveconf -n

# Если видите deprecated warnings — исправьте по подсказкам
# Типичное изменение: ssl_cert и ssl_key теперь без < символа
ssl_cert = /etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = /etc/letsencrypt/live/mail.example.com/privkey.pem

Как получить SSL-сертификат для почтового сервера?

Многие в комментариях сталкиваются с ошибкой «cannot get RSA certificate from file». Причина — отсутствие или повреждение сертификата. Используйте Let's Encrypt:

# Устанавливаем certbot
apt install -y certbot

# Получаем сертификат (порт 80 должен быть свободен)
certbot certonly --standalone -d mail.example.com

# Или через webroot, если уже есть веб-сервер
certbot certonly --webroot -w /var/www/html -d mail.example.com

# Автообновление — проверяем таймер
systemctl status certbot.timer

Пропишите пути в Postfix и Dovecot:

# Postfix: /etc/postfix/main.cf
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem

# Dovecot: /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = /etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = /etc/letsencrypt/live/mail.example.com/privkey.pem
Совет: добавьте хук для перезапуска сервисов после обновления сертификата: certbot renew --deploy-hook "systemctl restart postfix dovecot"

Как настроить DKIM-подпись для одного и нескольких доменов?

DKIM — обязательный элемент для доставки писем в 2026 году. Без него Gmail и Яндекс помечают письма как подозрительные.

# Устанавливаем OpenDKIM
apt install -y opendkim opendkim-tools

# Создаём директорию для ключей
mkdir -p /etc/opendkim/keys/example.com

# Генерируем ключ
opendkim-genkey -b 2048 -d example.com -D /etc/opendkim/keys/example.com -s mail -v

# Устанавливаем права
chown -R opendkim:opendkim /etc/opendkim
chmod 600 /etc/opendkim/keys/example.com/mail.private

Конфигурация /etc/opendkim.conf:

Syslog          yes
LogWhy          yes
Mode            sv
Canonicalization relaxed/simple
Domain          example.com
Selector        mail
KeyFile         /etc/opendkim/keys/example.com/mail.private
Socket          inet:8891@localhost
PidFile         /run/opendkim/opendkim.pid
UserID          opendkim
TrustAnchorFile /usr/share/dns/root.key

# Для нескольких доменов:
KeyTable        /etc/opendkim/KeyTable
SigningTable    refile:/etc/opendkim/SigningTable
ExternalIgnoreList  refile:/etc/opendkim/TrustedHosts
InternalHosts   refile:/etc/opendkim/TrustedHosts

Настройка нескольких доменов

# /etc/opendkim/KeyTable
mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private
mail._domainkey.example2.com example2.com:mail:/etc/opendkim/keys/example2.com/mail.private

# /etc/opendkim/SigningTable
*@example.com mail._domainkey.example.com
*@example2.com mail._domainkey.example2.com

# /etc/opendkim/TrustedHosts
127.0.0.1
localhost
example.com
example2.com
# Проверяем DKIM после добавления DNS-записи
opendkim-testkey -d example.com -s mail -vvv

Как добавить второй домен в PostfixAdmin?

Это один из самых популярных вопросов. При использовании виртуальных доменов через PostfixAdmin добавление второго домена не требует изменений в main.cf:

  1. Откройте PostfixAdmin (https://mail.example.com/postfixadmin)
  2. Domain List → Add Domain → введите новый домен
  3. Создайте нужные почтовые ящики
  4. Настройте DNS-записи (MX, SPF, DKIM, DMARC) для нового домена
  5. Сгенерируйте отдельный DKIM-ключ для нового домена
Из нашей практики: при добавлении домена в PostfixAdmin не забудьте добавить его в /etc/opendkim/TrustedHosts, KeyTable и SigningTable. Без этого DKIM для нового домена работать не будет.

Почему Mail.ru и Яндекс отклоняют мои письма?

Это боль номер один из комментариев. Крупные провайдеры очень строги к новым почтовым серверам. Чек-лист для прохождения проверок:

  1. PTR-запись — должна указывать на mail.example.com, а A-запись mail.example.com — обратно на IP
  2. HELO должен совпадать с PTR: в main.cf установите myhostname = mail.example.com
  3. SPF — запись с -all (hard fail), а не ~all
  4. DKIM — проверьте через opendkim-testkey
  5. DMARC — минимум p=quarantine
  6. IP не в блеклистах — проверьте на mxtoolbox.com
# Быстрая проверка всех записей
dig +short MX example.com
dig +short TXT example.com
dig +short TXT mail._domainkey.example.com
dig +short TXT _dmarc.example.com
dig -x 203.0.113.10 +short
Важно: после настройки нового сервера первые письма на Mail.ru/Яндекс могут попадать в спам. Это нормально — репутация IP нарабатывается 1-2 недели. Отправляйте небольшие объёмы и убедитесь, что получатели помечают письма как «не спам».

Как установить PostfixAdmin и Roundcube?

PostfixAdmin — веб-панель для управления доменами и ящиками. Roundcube — веб-почта для пользователей.

# Устанавливаем MariaDB и веб-сервер
apt install -y mariadb-server nginx php-fpm php-mysql php-mbstring   php-imap php-intl php-xml php-zip php-curl

# Создаём базу данных
mysql -e "CREATE DATABASE postfixadmin CHARACTER SET utf8mb4;"
mysql -e "CREATE USER 'postfixadmin'@'localhost' IDENTIFIED BY 'StrongPass123!';"
mysql -e "GRANT ALL ON postfixadmin.* TO 'postfixadmin'@'localhost';"

# Скачиваем PostfixAdmin
cd /var/www
wget https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.3.13.tar.gz
tar xzf postfixadmin-3.3.13.tar.gz
mv postfixadmin-postfixadmin-3.3.13 postfixadmin
chown -R www-data:www-data postfixadmin
# Roundcube
apt install -y roundcube roundcube-mysql roundcube-plugins

# Или скачиваем последнюю версию
cd /var/www
wget https://github.com/roundcube/roundcubemail/releases/download/1.6.9/roundcubemail-1.6.9-complete.tar.gz
tar xzf roundcubemail-1.6.9-complete.tar.gz
mv roundcubemail-1.6.9 roundcube
chown -R www-data:www-data roundcube
Совет: используйте отдельные поддомены: admin.mail.example.com для PostfixAdmin и webmail.example.com для Roundcube. Это упрощает настройку nginx и сертификатов.

Как перейти с Яндекс.Почты на собственный сервер?

В комментариях многие спрашивают о миграции с VK WorkSpace (бывший Яндекс.Коннект) и Яндекс.Почты для домена.

  1. Экспортируйте письма — используйте imapsync для переноса писем:
    apt install -y imapsync
    
    # Перенос одного ящика
    imapsync   --host1 imap.yandex.ru --port1 993 --ssl1   --user1 user@example.com --password1 "OldPass"   --host2 localhost --port2 993 --ssl2   --user2 user@example.com --password2 "NewPass"
  2. Создайте ящики в PostfixAdmin до переноса
  3. Перенесите DNS — измените MX-запись последним шагом, когда всё проверено
  4. Установите TTL=300 за сутки до миграции для быстрого переключения
Из нашей практики: не меняйте MX-запись, пока не убедились, что DKIM, SPF и PTR настроены. Иначе входящие письма будут приходить на новый сервер, а исходящие — отклоняться.

Как защитить почтовый сервер от спама и брутфорса?

Обязательные меры безопасности после установки:

# Fail2ban для Postfix и Dovecot
apt install -y fail2ban

# /etc/fail2ban/jail.local
[postfix-sasl]
enabled = true
port = smtp,465,587,submission
filter = postfix[mode=auth]
logpath = /var/log/mail.log
maxretry = 3
bantime = 3600

[dovecot]
enabled = true
port = pop3,pop3s,imap,imaps
filter = dovecot[mode=aggressive]
logpath = /var/log/mail.log
maxretry = 3
bantime = 3600
# Ограничение скорости отправки в Postfix
# /etc/postfix/main.cf
smtpd_client_message_rate_limit = 100
smtpd_client_recipient_rate_limit = 200
anvil_rate_time_unit = 60s

Подробнее о защите — в нашей статье Защита SSH и Fail2ban.

Как проверить, что всё работает правильно?

После настройки проведите полную диагностику:

# Отправляем тестовое письмо
echo "Test body" | mail -s "Test subject" test@gmail.com

# Проверяем логи
tail -f /var/log/mail.log

# Проверяем очередь
postqueue -p

# Очищаем очередь (если нужно)
postsuper -d ALL

# Проверяем DKIM
opendkim-testkey -d example.com -s mail -vvv

# Проверяем TLS
openssl s_client -connect mail.example.com:587 -starttls smtp

# Онлайн-проверка — отправьте письмо на:
# check-auth@verifier.port25.com
# и получите полный отчёт о SPF/DKIM/DMARC
Из нашей практики: сервис mail-tester.com показывает оценку вашего сервера от 1 до 10. Стремитесь к 10/10 — для этого нужны все записи (SPF, DKIM, DMARC, PTR) и отсутствие в блеклистах.

Какие типичные ошибки встречаются при настройке?

Собрали топ проблем из комментариев:

Ошибка: «cannot get RSA certificate from file»

Причина: путь к сертификату неверный или файл пуст. Проверьте:

ls -la /etc/letsencrypt/live/mail.example.com/
# Файлы fullchain.pem и privkey.pem должны существовать и быть непустыми
cat /etc/letsencrypt/live/mail.example.com/fullchain.pem | head -1
# Должно показать: -----BEGIN CERTIFICATE-----

Ошибка: устаревший формат хешей паролей в MariaDB

При использовании MariaDB 10.11+ формат хеширования по умолчанию изменился:

# Если PostfixAdmin не может аутентифицироваться
mysql -e "ALTER USER 'postfixadmin'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('StrongPass123!');"

Письма не доставляются — «Relay access denied»

# Проверьте, что домен есть в виртуальных доменах
postmap -q example.com mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
# Должен вернуть: example.com

Автоматизация бэкапа почты

Почта — критичные данные. Настройте ежедневный бэкап:

#!/bin/bash
# /opt/scripts/mail-backup.sh
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup/mail/$DATE"
mkdir -p "$BACKUP_DIR"

# Бэкап почтовых ящиков
rsync -az /var/vmail/ "$BACKUP_DIR/vmail/"

# Бэкап конфигов
tar czf "$BACKUP_DIR/mail-configs.tar.gz"   /etc/postfix/ /etc/dovecot/ /etc/opendkim/   /var/www/postfixadmin/config.local.php

# Бэкап базы данных
mysqldump postfixadmin | gzip > "$BACKUP_DIR/postfixadmin.sql.gz"

# Удаление бэкапов старше 30 дней
find /backup/mail/ -maxdepth 1 -mtime +30 -exec rm -rf {} \;

echo "Backup completed: $BACKUP_DIR"
# Добавляем в cron
echo "0 3 * * * /opt/scripts/mail-backup.sh" | crontab -

Подробнее о стратегиях бэкапа — в статье Бэкап Linux-сервера.

Мониторинг очереди и логов Postfix

# Размер очереди
postqueue -p | tail -1

# Топ причин недоставки
grep "status=bounced" /var/log/mail.log | tail -20

# Статистика за сутки (pflogsumm)
apt install -y pflogsumm
pflogsumm /var/log/mail.log

# Мониторинг в реальном времени
tail -f /var/log/mail.log | grep -E "(reject|error|warning)"

Для комплексного мониторинга сервера смотрите Мониторинг Debian: htop, btop, sysstat.

IT-аутсорсинг для бизнеса

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

Специалисты ITfresh настроят корпоративную почту на вашем сервере: Postfix, Dovecot, DKIM, антиспам и мониторинг. Полная настройка за 1 рабочий день.

30+почтовых серверов
10/10оценка mail-tester
24/7мониторинг

Читайте также