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

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

Свой почтовый сервер — это не модный тренд, а вполне конкретная история про контроль. Полный контроль над корпоративной перепиской, независимость от Gmail, Яндекса и прочих облаков, гибкая настройка под задачи бизнеса. В этом руководстве мы пройдём всю цепочку: Postfix для отправки и приёма писем, Dovecot для доступа через IMAP, PostfixAdmin для администрирования, Roundcube для веб-интерфейса и OpenDKIM для цифровой подписи.

Зачем нужен собственный почтовый сервер и кому он подходит?

Кому это реально нужно? Компаниям с высокими требованиями к конфиденциальности переписки, организациям, работающим с персональными данными по 152-ФЗ, и бизнесу, который не хочет зависеть от настроений облачных провайдеров. На практике выяснилось: свой сервер даёт полный доступ к логам, любые фильтры и правила — без ограничений тарифного плана. А при грамотной конфигурации DKIM, SPF и DMARC письма стабильно попадают в Inbox, а не в спам.

Но есть обратная сторона. Собственный mail-сервер требует квалифицированного обслуживания — это факт. Ошибки в настройке быстро приводят к попаданию в чёрные списки, потере писем и дырам в безопасности. Мы это видели не раз. Если штатного администратора нет — честно рассмотрите аутсорсинг этой задачи, дешевле выйдет.

Какие компоненты входят в почтовый стек и как они взаимодействуют?

Почтовый сервер на Linux — это не один демон, а связка из нескольких компонентов, каждый отвечает за своё:

Совет: Все компоненты устанавливаются на один сервер. Для офиса до 50 человек достаточно VPS с 2 ядрами, 4 ГБ RAM и 40 ГБ SSD.

Как подготовить сервер Debian к установке почтового сервера?

Берём чистую установку Debian 12 (Bookworm) или Debian 13 (Trixie). Первым делом — hostname. Он должен точно совпадать с FQDN вашего почтового сервера, иначе потом будете долго отлаживать непонятные отказы:

hostnamectl set-hostname mail.example.ru
echo "212.69.85.169 mail.example.ru mail" >> /etc/hosts

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

apt update && apt upgrade -y
apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-https

PTR-запись (обратная DNS) — это один из тех моментов, которые легко пропустить и потом долго чесать голову. Настраивается у хостинг-провайдера, должна указывать на FQDN вашего сервера — например, mail.example.ru. Без PTR Mail.ru, Gmail и Яндекс будут молча отклонять вашу почту. Проверено на собственном опыте.

Важно: Если ваш провайдер не позволяет настроить PTR-запись — забудьте об исходящей почте на Mail.ru. Это обязательное требование.

Как установить и настроить Postfix для отправки и приёма писем?

Ставим Postfix с поддержкой MySQL — нам нужно хранить виртуальные домены и ящики в базе:

apt install -y postfix postfix-mysql

В процессе установки выбираем «Internet Site» и вводим FQDN сервера. После этого открываем основной конфиг /etc/postfix/main.cf и правим под себя:

# Основные параметры
myhostname = mail.example.ru
mydomain = example.ru
myorigin = $mydomain
mydestination = localhost
mynetworks = 127.0.0.0/8

# Виртуальные домены
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias.cf

# TLS
smtpd_tls_cert_file = /etc/ssl/certs/mail.example.ru.pem
smtpd_tls_key_file = /etc/ssl/private/mail.example.ru.key
smtpd_use_tls = yes
smtpd_tls_auth_only = yes

# SASL авторизация через Dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

# Ограничения
smtpd_recipient_restrictions =
  permit_mynetworks,
  permit_sasl_authenticated,
  reject_unauth_destination

В /etc/postfix/master.cf включаем submission (порт 587) — он нужен для авторизованной отправки от клиентов:

submission inet n - y - - smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_reject_unlisted_recipient=no

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

Dovecot — это IMAP/POP3-сервер, через который почтовые клиенты достают письма из ящиков. Плюс он же занимается локальной доставкой (LDA). Устанавливаем:

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

Основная конфигурация — файл /etc/dovecot/dovecot.conf:

protocols = imap lmtp
listen = *

# SSL
ssl = required
ssl_cert = </etc/ssl/certs/mail.example.ru.pem
ssl_key = </etc/ssl/private/mail.example.ru.key
ssl_min_protocol = TLSv1.2

# Аутентификация
auth_mechanisms = plain login
passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf
}
userdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf
}

# Доставка
mail_location = maildir:/var/vmail/%d/%n
mail_uid = vmail
mail_gid = vmail

# Сокет для Postfix SASL
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}
Внимание (Dovecot 2.4+): Если вы используете Debian 13 с Dovecot 2.4, плагин mailbox_alias удалён из стандартной поставки. Вместо него используйте секцию mailbox с атрибутами special_use и auto = subscribe. Это частая проблема при обновлении — письма перестают доходить до ящиков.

Как развернуть PostfixAdmin для управления доменами и ящиками?

PostfixAdmin — PHP-приложение для управления виртуальными доменами, ящиками и алиасами. Удобная вещь, особенно когда ящиков больше десятка. Сначала ставим зависимости:

apt install -y nginx php-fpm php-mysql php-mbstring php-imap php-curl
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

Создаём базу данных MySQL/MariaDB:

mysql -u root -p
CREATE DATABASE postfixadmin CHARACTER SET utf8mb4;
CREATE USER 'postfixadmin'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD';
GRANT ALL ON postfixadmin.* TO 'postfixadmin'@'localhost';
FLUSH PRIVILEGES;

PostfixAdmin конфигурируется через config.local.php. После этого открываем setup.php в браузере — там инициализируется база и создаётся суперадмин. Один раз, и больше к этому файлу не возвращаемся.

Как установить Roundcube для веб-доступа к почте?

Roundcube — это webmail. Сотрудники заходят через браузер и работают с почтой без настройки почтовых клиентов. Для компаний, где люди переключаются между устройствами в течение дня, это реально удобно:

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

В конфиге Roundcube прописываем подключение к IMAP через Dovecot и SMTP через Postfix:

$config['imap_host'] = 'ssl://localhost:993';
$config['smtp_host'] = 'tls://localhost:587';
$config['smtp_user'] = '%u';
$config['smtp_pass'] = '%p';

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

DKIM — цифровая подпись, которая доказывает получателю, что письмо действительно отправлено с вашего домена, а не подделано. Без DKIM шансы улететь в спам очень высоки — особенно на Mail.ru и Яндексе:

apt install -y opendkim opendkim-tools

# Генерируем ключ DKIM
mkdir -p /etc/opendkim/keys/example.ru
opendkim-genkey -D /etc/opendkim/keys/example.ru -d example.ru -s mail
chown -R opendkim:opendkim /etc/opendkim

Правим /etc/opendkim.conf:

Syslog yes
UMask 007
Mode sv
SubDomains no
AutoRestart yes
AutoRestartRate 10/1M
Background yes

Canonicalization relaxed/simple
SignatureAlgorithm rsa-sha256

KeyTable /etc/opendkim/key.table
SigningTable refile:/etc/opendkim/signing.table
InternalHosts /etc/opendkim/trusted.hosts

Socket inet:8891@localhost

Публичный ключ из файла mail.txt добавляем в DNS как TXT-запись. Там же настраиваем SPF и DMARC — без этой троицы репутация домена будет хромать:

# SPF запись
example.ru. IN TXT "v=spf1 ip4:212.69.85.169 mx -all"

# DMARC запись
_dmarc.example.ru. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.ru"

# DKIM запись (из файла mail.txt)
mail._domainkey.example.ru. IN TXT "v=DKIM1; k=rsa; p=MIG..."
Совет: DKIM привязан к домену, а не к FQDN сервера. Если вы обслуживаете несколько почтовых доменов на одном сервере, вам нужно добавить DKIM-запись для каждого домена, но сертификат SSL остаётся один — на имя почтового сервера.

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

Для шифрования IMAP и SMTP нужен валидный SSL-сертификат. Самоподписанный не подойдёт — клиенты будут ругаться, а некоторые почтовые серверы вообще откажутся соединяться. Берём бесплатный Let's Encrypt через certbot:

apt install -y certbot python3-certbot-nginx
certbot certonly --nginx -d mail.example.ru

# Обновляем пути в Postfix и Dovecot
# /etc/postfix/main.cf:
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.ru/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.ru/privkey.pem

# /etc/dovecot/dovecot.conf:
ssl_cert = </etc/letsencrypt/live/mail.example.ru/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.ru/privkey.pem

Настраиваем автообновление сертификата и перезагрузку служб — вручную следить за сроком действия никто не будет:

echo '0 3 * * * root certbot renew --quiet --post-hook "systemctl reload postfix dovecot nginx"' > /etc/cron.d/certbot-mail

Какие проблемы чаще всего возникают при настройке и как их решать?

За несколько лет обслуживания почтовых серверов у клиентов мы собрали коллекцию граблей, на которые наступают чаще всего:

Письма не доходят до Mail.ru

Mail.ru — один из самых придирчивых получателей. Три условия, без которых письма туда просто не дойдут: корректная PTR-запись, рабочие SPF и DKIM, и чистый IP без попаданий в блэклисты. PTR проверяйте командой dig -x YOUR_IP — это первое, что я смотрю при проблемах с доставкой. Отдельная история — домены, которые раньше сидели на VK WorkSpace (бывший Mail.ru для бизнеса): они иногда «застревают» в старых записях. Решается подачей заявки через support.mcs.mail.ru с добавлением TXT-записи для подтверждения владения доменом.

Dovecot 2.4: плагин mailbox_alias не найден

Обновились на Debian 13 с Dovecot 2.4 — и сразу Fatal: Plugin 'mailbox_alias' not found. Знакомая картина. Плагин выпилили, и сервер просто отказывается стартовать. Лечится быстро: убираете упоминание плагина из конфигурации. Его функции теперь полностью закрывает встроенный IMAP SPECIAL-USE по RFC 6154 — работает даже лучше, чем старый костыль.

Несколько доменов на одном сервере

SSL-сертификат выпускается на имя почтового сервера — mail.example.ru — а не на сам почтовый домен. Это вечный источник путаницы у тех, кто настраивает сервер впервые. На практике один сервер с одним сертификатом спокойно тянет десятки доменов. Единственное, что нужно сделать для каждого нового домена — добавить свою DKIM-запись в DNS. Это не сложно, но про это часто забывают.

Ошибки аутентификации после миграции

Переходите со старых схем хранения паролей — MD5 или PLAIN — на нормальные, BLF-CRYPT или SHA512-CRYPT? Пароли пользователей придётся пересоздать: просто перехэшировать их не выйдет, исходники вы не знаете. Dovecot 2.4 на слабые схемы уже ругается вслух — помечает их как deprecated. Лучше не тянуть и разобраться с этим до того, как он начнёт отказывать в авторизации.

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

Когда всё настроено, не торопитесь считать работу законченной. Прогоните полный чек-лист:

  1. Отправка тестового письма: echo "Test" | mail -s "Test" user@gmail.com
  2. Проверка DKIM: отправьте письмо на check-auth@verifier.port25.com — в ответ придёт подробный отчёт по каждому пункту
  3. Проверка SPF/DMARC: используйте MXToolbox — быстро и наглядно
  4. Проверка чёрных списков: mxtoolbox.com/blacklists.aspx — проверяет сразу по десяткам баз
  5. Логи Postfix: tail -f /var/log/mail.log — держите открытым во время тестов
  6. Логи Dovecot: doveadm log find
# Быстрая проверка SMTP
openssl s_client -connect mail.example.ru:587 -starttls smtp
EHLO test
AUTH LOGIN

# Проверка IMAP
openssl s_client -connect mail.example.ru:993
a1 LOGIN user@example.ru password
a2 LIST "" "*"

Как настроить антиспам-фильтрацию входящей почты?

Базовую защиту от спама на уровне Postfix можно поднять буквально за 15 минут — несколько строк в конфиге отсеивают большую часть мусора ещё на этапе SMTP-сессии:

# /etc/postfix/main.cf - дополнительные ограничения
smtpd_helo_required = yes
smtpd_helo_restrictions =
  permit_mynetworks,
  reject_non_fqdn_helo_hostname,
  reject_invalid_helo_hostname

smtpd_sender_restrictions =
  permit_mynetworks,
  reject_non_fqdn_sender,
  reject_unknown_sender_domain

smtpd_relay_restrictions =
  permit_mynetworks,
  permit_sasl_authenticated,
  defer_unauth_destination

Если нужна серьёзная фильтрация — ставьте SpamAssassin или Rspamd. Мы в последнее время предпочитаем Rspamd: активно развивается, умеет машинное обучение, и настраивается куда удобнее, чем SpamAssassin. Подключается так:

apt install -y rspamd
# Интеграция с Postfix через milter
milter_protocol = 6
smtpd_milters = inet:localhost:11332
non_smtpd_milters = inet:localhost:11332

Как обеспечить отказоустойчивость и мониторинг почтового сервера?

Почтовый сервер — это не веб-сайт, который можно поднять за час после падения. Пропущенные письма никто не вернёт. Поэтому надёжность закладывается сразу:

# Настройка Fail2ban для Postfix
apt install -y fail2ban
cat > /etc/fail2ban/jail.local << 'EOF'
[postfix-sasl]
enabled = true
filter = postfix[mode=auth]
port = smtp,465,submission
logpath = /var/log/mail.log
maxretry = 3
bantime = 3600
EOF
systemctl restart fail2ban

Как обновлять почтовый сервер без простоя?

Обновления — отдельная история. Почтовый стек не любит сюрпризов, поэтому у нас есть жёсткий порядок действий:

  1. Сначала полный бэкап конфигов и данных — без исключений, даже если «просто патч безопасности»
  2. Обновляйте пакеты поочерёдно: сначала Dovecot, потом Postfix — одновременное обновление пару раз нас подводило
  3. Проверяйте совместимость конфигов с новыми версиями — особенно если прыгаете на Dovecot 2.4, там изменений накопилось немало
  4. Держите staging-сервер для тестирования обновлений — разворачивается из бэкапа за час, экономит нервы и репутацию
  5. После обновления обязательно прогоните отправку и приём через тестовые ящики — убедитесь, что всё работает, прежде чем закрывать задачу

Заключение: почтовый сервер как инвестиция в инфраструктуру

Честно говоря, полноценная настройка Postfix + Dovecot + DKIM на Debian занимает один-два рабочих дня у человека, который делал это раньше. Зато на выходе получаете полный контроль над корпоративной почтой, соответствие 152-ФЗ и независимость от любых облачных провайдеров — что в последние пару лет становится всё актуальнее. Три вещи, про которые нельзя забыть: PTR-запись, корректные DNS (SPF, DKIM, DMARC) и своевременное обновление компонентов. Если времени разбираться нет или первый опыт закончился стопкой непонятных ошибок — приходите, поможем.

Документация: Postfix Official Docs, Dovecot Documentation

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

Можно ли использовать один SSL-сертификат для нескольких почтовых доменов?

Да. Сертификат выдаётся на имя почтового сервера (например, mail.example.ru), а не на почтовый домен. Один сервер может обслуживать десятки доменов с одним сертификатом. Для каждого домена нужно добавить отдельную DKIM-запись в DNS.

Почему письма не доходят до Mail.ru после настройки DKIM и SPF?

Три обязательных условия для доставки на Mail.ru: корректная PTR-запись (обратная DNS), настроенные SPF и DKIM, и отсутствие IP-адреса сервера в чёрных списках. Без PTR-записи Mail.ru откажется принимать вашу почту. Проверьте PTR командой dig -x YOUR_IP.

Что делать с ошибкой Plugin mailbox_alias not found в Dovecot 2.4?

В Dovecot 2.4 (Debian 13) плагин mailbox_alias удалён из стандартной поставки. Удалите упоминание плагина из конфигурации и используйте секцию mailbox с атрибутами special_use и auto = subscribe. Функционал IMAP SPECIAL-USE (RFC 6154) полностью заменяет этот плагин.

Сколько ресурсов нужно серверу для корпоративной почты на 50 пользователей?

Для офиса до 50 пользователей достаточно VPS с 2 ядрами CPU, 4 ГБ оперативной памяти и 40 ГБ SSD. При активном использовании вложений рекомендуется увеличить дисковое пространство до 100 ГБ и настроить квоты на почтовые ящики.

Как перенести домен с VK WorkSpace (Mail.ru для бизнеса) на собственный сервер?

После переноса MX-записей на свой сервер Mail.ru может продолжать считать домен своим. Подайте заявку через support.mcs.mail.ru — вас попросят добавить TXT-запись в DNS для подтверждения владения доменом. После верификации проблема решается.

Нужно ли менять hostname на FQDN почтового сервера?

Это не критично для работы Postfix и Dovecot, так как все значения берутся из конфигов. Однако рекомендуется для порядка — чтобы hostname соответствовал тому, как сервер резолвится в DNS. Команда: hostnamectl set-hostname mail.example.ru.

Какую базу данных лучше использовать — MySQL или PostgreSQL?

Для PostfixAdmin стандартно используется MySQL/MariaDB. Если вы работаете на ARM64 или предпочитаете PostgreSQL — PostfixAdmin поддерживает обе СУБД. На новых системах можно также использовать lmdb вместо MySQL для хранения карт Postfix.

Нужна помощь специалистов?

ООО «АйТи Фреш» возьмёт это на себя

Не хватает времени или своих специалистов — мы настроим, оптимизируем и возьмём вашу IT-инфраструктуру на постоянное сопровождение. Работаем с юридическими лицами в Москве и регионах. Собственный дата-центр, команда из 8 серверов Dell Xeon Platinum 8280 на базе МТС.

15+лет опыта
25+клиентов
40Gсвоя сеть
24/7поддержка