Postfix + Dovecot + DKIM: настройка почтового сервера на Debian
Свой почтовый сервер — это не модный тренд, а вполне конкретная история про контроль. Полный контроль над корпоративной перепиской, независимость от Gmail, Яндекса и прочих облаков, гибкая настройка под задачи бизнеса. В этом руководстве мы пройдём всю цепочку: Postfix для отправки и приёма писем, Dovecot для доступа через IMAP, PostfixAdmin для администрирования, Roundcube для веб-интерфейса и OpenDKIM для цифровой подписи.
Зачем нужен собственный почтовый сервер и кому он подходит?
Кому это реально нужно? Компаниям с высокими требованиями к конфиденциальности переписки, организациям, работающим с персональными данными по 152-ФЗ, и бизнесу, который не хочет зависеть от настроений облачных провайдеров. На практике выяснилось: свой сервер даёт полный доступ к логам, любые фильтры и правила — без ограничений тарифного плана. А при грамотной конфигурации DKIM, SPF и DMARC письма стабильно попадают в Inbox, а не в спам.
Но есть обратная сторона. Собственный mail-сервер требует квалифицированного обслуживания — это факт. Ошибки в настройке быстро приводят к попаданию в чёрные списки, потере писем и дырам в безопасности. Мы это видели не раз. Если штатного администратора нет — честно рассмотрите аутсорсинг этой задачи, дешевле выйдет.
Какие компоненты входят в почтовый стек и как они взаимодействуют?
Почтовый сервер на Linux — это не один демон, а связка из нескольких компонентов, каждый отвечает за своё:
- Postfix (MTA) — принимает входящие письма по SMTP (порт 25) и отправляет исходящие через submission (порт 587)
- Dovecot (MDA/IMAP-сервер) — обеспечивает доступ к почтовым ящикам через IMAP (порт 993) и выполняет локальную доставку
- PostfixAdmin — веб-панель управления доменами, ящиками и алиасами
- Roundcube — веб-интерфейс для чтения и отправки почты (webmail)
- OpenDKIM — подписывает исходящие письма цифровой подписью DKIM
- Let's Encrypt / Angie — SSL-сертификаты для шифрования соединений
Как подготовить сервер 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 и Яндекс будут молча отклонять вашу почту. Проверено на собственном опыте.
Как установить и настроить 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
}
}
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..."
Как получить 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. Лучше не тянуть и разобраться с этим до того, как он начнёт отказывать в авторизации.
Как проверить работоспособность почтового сервера?
Когда всё настроено, не торопитесь считать работу законченной. Прогоните полный чек-лист:
- Отправка тестового письма:
echo "Test" | mail -s "Test" user@gmail.com - Проверка DKIM: отправьте письмо на check-auth@verifier.port25.com — в ответ придёт подробный отчёт по каждому пункту
- Проверка SPF/DMARC: используйте MXToolbox — быстро и наглядно
- Проверка чёрных списков:
mxtoolbox.com/blacklists.aspx— проверяет сразу по десяткам баз - Логи Postfix:
tail -f /var/log/mail.log— держите открытым во время тестов - Логи 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
Как обеспечить отказоустойчивость и мониторинг почтового сервера?
Почтовый сервер — это не веб-сайт, который можно поднять за час после падения. Пропущенные письма никто не вернёт. Поэтому надёжность закладывается сразу:
- Бэкап: ежедневное резервное копирование
/var/vmail/, всех конфигов и базы данных PostfixAdmin — минимум на внешнее хранилище - Мониторинг: следите за размером очереди Postfix (
mailq), свободным местом на диске и загрузкой CPU — забитый диск кладёт почту мгновенно - Логирование: настройте ротацию через logrotate, минимальный срок хранения — 30 дней; при разборе инцидентов вы скажете себе спасибо
- Резервный MX: если есть второй сервер — настройте MX-запись с приоритетом 20, почта не потеряется при плановых работах
- Fail2ban: защита от brute-force по SASL-аутентификации — без этого боты ломятся постоянно, мы видели по 10 000 попыток в сутки
# Настройка 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
Как обновлять почтовый сервер без простоя?
Обновления — отдельная история. Почтовый стек не любит сюрпризов, поэтому у нас есть жёсткий порядок действий:
- Сначала полный бэкап конфигов и данных — без исключений, даже если «просто патч безопасности»
- Обновляйте пакеты поочерёдно: сначала Dovecot, потом Postfix — одновременное обновление пару раз нас подводило
- Проверяйте совместимость конфигов с новыми версиями — особенно если прыгаете на Dovecot 2.4, там изменений накопилось немало
- Держите staging-сервер для тестирования обновлений — разворачивается из бэкапа за час, экономит нервы и репутацию
- После обновления обязательно прогоните отправку и приём через тестовые ящики — убедитесь, что всё работает, прежде чем закрывать задачу
Заключение: почтовый сервер как инвестиция в инфраструктуру
Честно говоря, полноценная настройка 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 на базе МТС.