Настройка почтового сервера: Postfix, Dovecot, DKIM, SPF и DMARC

Свой почтовый сервер — это не просто «хочу отправлять письма с домена». Это полноценная инфраструктура, которая требует понимания протоколов, внимания к деталям и постоянного контроля репутации. В этой статье мы построим работающий почтовый сервер с нуля: от установки Postfix и Dovecot до настройки защитных записей, которые гарантируют, что ваши письма будут доходить до адресатов, а не в спам.

Мы разберём:

  • Как работает электронная почта: SMTP, IMAP, POP3, MX-записи.
  • Установку и настройку Postfix как MTA.
  • Установку и настройку Dovecot для хранения и доступа к почте.
  • Настройку DNS-записей: MX, SPF, DKIM, DMARC, PTR.
  • Защиту от спама и вирусов.
  • Тестирование и отладку.
  • Частые ошибки и способы их решения.

1. Как работает электронная почта

Прежде чем что-то настраивать, важно понять, как устроена доставка писем. Это поможет избежать ошибок и понять, почему что-то не работает.

1.1 Основные протоколы

  • SMTP (Simple Mail Transfer Protocol) — протокол для отправки почты. Используется как для отправки писем от клиента на сервер, так и для передачи между серверами.
  • IMAP (Internet Message Access Protocol) — протокол для доступа к почтовым ящикам. Позволяет читать почту с нескольких устройств, синхронизируя папки.
  • POP3 (Post Office Protocol 3) — устаревший протокол для скачивания почты. Обычно скачивает письма и удаляет их с сервера (хотя можно настроить хранение).
ПортНазначение
25Передача между серверами (MTA → MTA), часто заблокирован у провайдеров
587Отправка почты клиентами (submission), TLS
465Отправка почты клиентами, неявный TLS (smtps)
143 / 993IMAP / IMAPS
110 / 995POP3 / POP3S

1.2 Ключевые DNS-записи

  • MX-запись — указывает, какой сервер принимает почту для домена. Например: example.com MX 10 mail.example.com.
  • A-запись — IP-адрес почтового сервера.
  • PTR-запись (обратная зона) — сопоставляет IP-адрес с доменным именем. Многие почтовые серверы отклоняют письма, если PTR не совпадает с A-записью.
  • SPF (Sender Policy Framework) — список серверов, которым разрешено отправлять почту от имени домена.
  • DKIM (DomainKeys Identified Mail) — цифровая подпись писем, подтверждающая, что письмо отправлено с вашего домена и не изменено.
  • DMARC (Domain-based Message Authentication, Reporting and Conformance) — политика, которая указывает, что делать с письмами, не прошедшими SPF/DKIM, и куда отправлять отчёты.

1.3 Схема доставки

  1. Отправитель (клиент) подключается к своему SMTP-серверу и отправляет письмо.
  2. SMTP-сервер отправителя ищет MX-запись домена получателя.
  3. Сервер отправителя подключается к MX-серверу получателя и передаёт письмо.
  4. Сервер получателя проверяет SPF, DKIM, DMARC, репутацию IP и принимает решение: принять, отклонить или пометить как спам.
  5. Если письмо принято, оно попадает в почтовый ящик, доступ к которому осуществляется по IMAP/POP3.

2. Установка и настройка Postfix

Postfix — это MTA (Mail Transfer Agent), который отвечает за отправку и приём почты.

2.1 Установка Postfix

Ubuntu/Debian:

Bash
sudo apt update
sudo apt install postfix mailutils

В процессе установки выберите Internet Site и укажите ваш домен (например, example.com).

CentOS/RHEL/Rocky Linux:

Bash
sudo dnf install postfix
sudo systemctl enable postfix
sudo systemctl start postfix

2.2 Базовая настройка Postfix

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

Минимальные настройки:

Настройка /etc/postfix/master.cf:

ВАЖНО! Без этого раздел про SASL-аутентификацию (4.4) не будет работать на практике.

2.3 Настройка TLS

Для шифрования соединений используйте сертификаты Let’s Encrypt.

Если уже есть сертификат для домена, можно использовать его или выпустить дополнительный. Получение сертификата:

Bash
sudo certbot certonly --standalone -d mail.example.com

2.4 Настройка SASL-аутентификации

Чтобы пользователи могли отправлять почту через ваш сервер, нужна аутентификация. Используем Dovecot как SASL-провайдер.

2.5 Ограничения и защита

2.6 Перезапуск Postfix

Bash
sudo systemctl restart postfix
sudo systemctl status postfix

3. Установка и настройка Dovecot

Dovecot отвечает за хранение почты и доступ к ней по IMAP/POP3, а также предоставляет SASL для Postfix.

3.1 Установка Dovecot

Ubuntu/Debian:

Bash
sudo apt install dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd

CentOS/RHEL:

Bash
sudo dnf install dovecot

3.2 Основные настройки Dovecot

Конфигурационные файлы находятся в /etc/dovecot/.

/etc/dovecot/dovecot.conf:

/etc/dovecot/conf.d/10-mail.conf:

ini
mail_location = maildir:~/Maildir
mail_privileged_group = mail

/etc/dovecot/conf.d/10-auth.conf:

/etc/dovecot/conf.d/10-ssl.conf:

/etc/dovecot/conf.d/10-master.conf:

Настройка сокета для Postfix SASL:

3.3 Создание пользователей и почтовых ящиков

Пользователи могут быть системными (Linux) или виртуальными (хранятся в БД). Для простоты используем системных пользователей.

Bash
# Создание пользователя
sudo useradd -m -s /bin/bash user1
sudo passwd user1

# Создание Maildir
sudo -u user1 maildirmake ~user1/Maildir

ВАЖНО! Команда maildirmake доступна только если установлен dovecot-imapd с утилитами. На некоторых системах её нет. Альтернатива:

Bash
sudo -u user1 mkdir -p ~user1/Maildir/{cur,new,tmp}

Это всегда работает и делает то же самое — создаёт структуру Maildir.

3.4 Перезапуск Dovecot

Bash
sudo systemctl restart dovecot
sudo systemctl status dovecot

4. Настройка DNS-записей

Это критически важный этап. Без правильных DNS-записей ваши письма будут попадать в спам или отклоняться.

4.1 MX-запись

Укажите домен, который будет принимать почту:

Если у вас несколько серверов, можно указать приоритеты:

4.2 A-запись для почтового сервера

4.3 PTR-запись (обратная зона)

PTR-запись обычно настраивается у хостинг-провайдера или в панели управления IP-адресом. Она должна указывать на mail.example.com. Многие почтовые серверы проверяют соответствие PTR и A-записи.

4.4 SPF-запись

SPF-запись создаётся как TXT-запись для домена:

  • v=spf1 — версия SPF.
  • mx — разрешить серверы из MX-записей.
  • a:mail.example.com — разрешить IP из A-записи.
  • ip4:192.0.2.1 — разрешить конкретный IP.
  • -all — запретить все остальные (жёсткая политика). Можно ~all (мягкая).

4.5 DKIM
DKIM требует генерации ключей и добавления публичного ключа в DNS.

Генерация ключей:

Bash
sudo mkdir /etc/opendkim/keys/example.com
cd /etc/opendkim/keys/example.com
sudo opendkim-genkey -s mail -d example.com
sudo chown opendkim:opendkim mail.private

Публичный ключ будет в файле mail.txt. Добавьте его как TXT-запись:

Настройка OpenDKIM:

Установите opendkim и opendkim-tools. В /etc/opendkim.conf:

ini
Domain example.com
KeyFile /etc/opendkim/keys/example.com/mail.private
Selector mail
Socket inet:12301@localhost
Mode              sv
Canonicalization  relaxed/relaxed

Mode sv — означает signing + verifying (подписывать исходящие, проверять входящие). Без Mode по умолчанию может работать только проверка. Canonicalization relaxed/relaxed — стандарт для большинства почтовых систем, снижает риск ложных сбоев подписи при минимальных изменениях письма.

Подключите OpenDKIM к Postfix в /etc/postfix/main.cf:

Перезапустите сервисы:

Bash
sudo systemctl restart opendkim postfix

4.6 DMARC

DMARC-запись указывает, что делать с письмами, не прошедшими проверку SPF/DKIM, и куда отправлять отчёты.

  • p=quarantine — помещать в спам (можно none для мониторинга или reject для отклонения).
  • rua — адрес для агрегированных отчётов.
  • ruf — адрес для отчётов о сбоях.
  • fo=1 — отправлять отчёт при любой ошибке.

5. Защита от спама и вирусов

5.1 RBL (Real-time Blackhole Lists)

Postfix может проверять IP-адреса отправителей по чёрным спискам.

5.2 Greylisting

Greylisting временно отклоняет письма с новых IP-адресов, заставляя отправителя повторить попытку через некоторое время. Спамеры обычно не повторяют.

Установите postgrey:

Bash
sudo apt install postgrey

В Postfix:

5.3 Антивирус (ClamAV)

Установите ClamAV и интегрируйте с Postfix через clamav-milter.

Bash
sudo apt install clamav clamav-daemon clamav-milter

В Postfix:

5.4 SpamAssassin

SpamAssassin анализирует содержимое письма и ставит оценку спама.

Bash
sudo apt install spamassassin

Настройте его как milter или через spamc.

В Postfix:

Или через content_filter:

ВАЖНО! SpamAssassin устарел.

SpamAssassin последний крупный релиз был в 2018 году, проект фактически заброшен. Современная замена — rspamd, который активно развивается, работает быстрее и лучше интегрируется с Postfix через milter.

6. Тестирование и отладка

6.1 Проверка портов

Убедитесь, что порты 25, 465, 587, 143, 993, 110, 995 открыты.

Bash
sudo ss -tulpn | grep -E ':(25|465|587|143|993|110|995)'

6.2 Отправка тестового письма

Bash
echo "Test email body" | mail -s "Test Subject" user@example.com

6.3 Проверка логов

  • Postfix: /var/log/mail.log или /var/log/maillog
  • Dovecot: /var/log/dovecot.log
  • OpenDKIM: /var/log/mail.log (или отдельный)
Bash
tail -f /var/log/mail.log

6.4 Проверка SPF, DKIM, DMARC

Отправьте письмо на сервис проверки (например, check-auth@verifier.port25.com) и получите отчёт.

Или используйте утилиты:

Bash
dig TXT example.com
dig TXT mail._domainkey.example.com
dig TXT _dmarc.example.com

6.5 Проверка PTR

Bash
dig -x 192.0.2.1

7. Частые ошибки и как их избежать

ОшибкаПроявлениеРешение
Отсутствует PTR-записьПисьма отклоняются или попадают в спамНастройте PTR у провайдера, чтобы он указывал на mail.example.com.
Неправильная SPF-записьПисьма не проходят SPFПроверьте синтаксис, убедитесь, что все отправляющие IP включены.
DKIM не работаетПодпись не проходит проверкуПроверьте, что OpenDKIM запущен, ключи на месте, селектор совпадает.
DMARC слишком строгийПисьма отклоняютсяНачните с p=none, мониторьте отчёты, затем ужесточайте.
Postfix не принимает почтуОшибка в логахПроверьте mydestinationmynetworks, ограничения.
Dovecot не подключаетсяIMAP не работаетПроверьте SSL-сертификаты, права на Maildir, сокет для SASL.
Письма попадают в спамНизкая репутация IPПроверьте IP в чёрных списках, настройте SPF/DKIM/DMARC, прогрейте IP.
Открытый релейВаш сервер рассылает спамУбедитесь, что mynetworks ограничен, и аутентификация обязательна.

ВАЖНО! Новый почтовый IP нужно «прогревать»: первые 1–2 недели отправляйте небольшими объёмами (десятки писем в день), постепенно увеличивая. Пишите только реальным получателям, которые ждут ваших писем. Проверьте IP через  или  перед стартом.

Свой почтовый сервер — это контроль и независимость. Но это и ответственность. Если всё сделать правильно, ваши письма будут доходить до адресатов, а репутация домена — только расти.

Нашли ошибку? Напишите нам!