Почтовый сервер Postfix [211.1]

Рейтинг: 70.1% · 9 голосов
Курс LPIC-2 (201-450 и 202-450): емкостное планирование, ядро, хранилище и RAID/LVM, продвинутая сеть, DNS/BIND, Apache/Nginx, Samba/NFS, DHCP/LDAP, почта, безопасность и VPN.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Почтовый сервер Postfix [211.1]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-2 и уровень инженера
  2. Измерение и устранение проблем с ресурсами [200.1]
  3. Прогнозирование потребности в ресурсах
  4. Компоненты ядра Linux [201.1]
  5. Сборка ядра из исходников [201.2]
  6. Управление модулями ядра в рантайме [201.3]
  7. Кастомизация запуска системы [202.1]
  8. Восстановление системы [202.2]
  9. Альтернативные загрузчики [202.3]
  10. Работа с файловой системой Linux [203.1]
  11. Обслуживание файловых систем [203.2]
  12. Создание и настройка опций ФС [203.3]
  13. Программный RAID [204.1]
  14. Тюнинг доступа к устройствам хранения [204.2]
  15. Менеджер логических томов LVM [204.3]
  16. Базовая конфигурация сети [205.1]
  17. Продвинутая конфигурация сети [205.2]
  18. Диагностика сетевых проблем [205.3]
  19. Сборка и установка программ из исходников [206.1]
  20. Резервное копирование [206.2]
  21. Оповещение пользователей о событиях
  22. DNS-сервер BIND: базовая настройка [207.1]
  23. Зоны DNS: создание и сопровождение [207.2]
  24. Безопасность DNS-сервера [207.3]
  25. Веб-сервер Apache: базовая настройка [208.1]
  26. Apache и HTTPS [208.2]
  27. Кэширующий прокси Squid [208.3]
  28. Веб-сервер и обратный прокси Nginx [208.4]
  29. Файловый сервер Samba [209.1]
  30. Файловый сервер NFS [209.2]
  31. DHCP-сервер [210.1]
  32. Аутентификация PAM и SSSD [210.2]
  33. Использование LDAP-клиента
  34. Сервер OpenLDAP [210.4]
  35. Почтовый сервер Postfix [211.1] (вы здесь)
  36. Управление доставкой почты и Sieve [211.2]
  37. Доступ к почтовым ящикам: Dovecot [211.3]
  38. Linux как маршрутизатор и фильтр [212.1]
  39. FTP-серверы [212.2]
  40. SSH углублённо [212.3]
  41. Безопасность, IDS и VPN [212.4 + 212.5]
Урок 34. Почтовый сервер Postfix [211.1]

Электронная почта до сих пор держит инфраструктуру компаний: уведомления, регистрации, переписку. Задача инженера - поднять MTA, который надёжно принимает и отправляет письма, не превращаясь при этом в открытый релей для спамеров. В этом уроке разбираем роль MTA и путь письма по протоколу SMTP, два главных конфига Postfix (main.cf и master.cf), ключевые параметры (myhostname, mydestination, mynetworks), виртуальные домены и алиасы, ретрансляцию через провайдера, работу с очередью (postqueue, postsuper), базовую защиту от спама и инструмент postconf.

Изображение

Как это работает

MTA (Mail Transfer Agent) - это сервер, который перевозит письма между хостами по протоколу SMTP. Путь письма такой: почтовый клиент (MUA) сдаёт письмо своему MTA, тот по DNS находит MX-запись домена получателя, соединяется с принимающим MTA на порту 25 и передаёт письмо. На приёмной стороне MTA кладёт письмо в локальный почтовый ящик через агент доставки (MDA, например Dovecot или procmail), а пользователь забирает его по IMAP/POP3. Postfix играет роль MTA: он и отправляет, и принимает SMTP.

Внутри Postfix - не один процесс, а семейство демонов под управлением мастер-процесса master. Каждый кусок работы делает отдельный демон: smtpd принимает входящие соединения, smtp отправляет наружу, cleanup переписывает заголовки и кладёт письмо в очередь, qmgr (queue manager) решает, что и когда доставлять, local доставляет в локальные ящики. Такая раздробленность - намеренная архитектура безопасности: демоны работают под непривилегированным пользователем postfix, общаются через очередь на диске, и компрометация одного не открывает всю систему.

Конфигурация живёт в двух файлах. main.cf задаёт параметры (кто мы, какие домены принимаем, кому доверяем) в формате имя = значение. master.cf описывает сами демоны и сервисы: какой процесс на каком порту/сокете слушает, под каким пользователем, с какими ограничениями. Грубо: main.cf - это что делать, master.cf - кто это делает.

Ключевые параметры main.cf. myhostname - полное FQDN-имя хоста (mail.example.com), оно же подставляется в SMTP-приветствие и Message-ID. mydomain обычно отрезает первую часть от myhostname. myorigin - домен, который дописывается к письмам от локальных пользователей. mydestination - список доменов, которые Postfix считает СВОИМИ и доставляет локально (если домена тут нет и это не релей-получатель, письмо отвергается или релеится). mynetworks - доверенные сети (CIDR), которым разрешено слать письма наружу без аутентификации. Вот тут и кроется главная опасность: слишком широкий mynetworks (например 0.0.0.0/0) превращает сервер в открытый релей, и его за час найдут спамеры.

Виртуальные домены - это домены, которые сервер обслуживает, но без системных Unix-аккаунтов. Их два режима. Виртуальные алиасы (virtual_alias_maps) перенаправляют адрес на другой адрес - удобно, когда домен только пересылает почту. Виртуальная доставка (virtual_mailbox_domains + virtual_mailbox_maps) кладёт письма в файлы-ящики, привязанные не к Unix-юзерам, а к записям в карте (часто в БД). Локальные алиасы для системных пользователей задаются в /etc/aliases (например root: admin@example.com), и после правки обязателен newaliases, который компилирует текст в бинарную хеш-карту.

Команды и примеры

Установка различается по семействам. Конфиги в обоих случаях лежат в /etc/postfix/.

Код: Выделить всё

# Debian 13 / Ubuntu 24.04
apt install postfix
# во время установки выбирается профиль (Internet Site / Satellite)

# RHEL 10 / Fedora 41+
dnf install postfix
systemctl enable --now postfix
Параметры удобнее читать и менять через postconf, а не редактировать файл вручную - он показывает реальные значения с учётом дефолтов.

Код: Выделить всё

postconf myhostname mydestination mynetworks   # показать конкретные
postconf -d mydestination                       # значение ПО УМОЛЧАНИЮ
postconf -n                                      # только НЕдефолтные (что вы реально настроили)
postconf -e 'myhostname = mail.example.com'      # безопасно записать в main.cf
postconf -M                                      # содержимое master.cf
Типичный фрагмент main.cf для домена example.com:

Код: Выделить всё

myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8, 192.168.10.0/24
home_mailbox = Maildir/
Виртуальный алиас-домен (просто пересылка) - две строки и карта:

Код: Выделить всё

# main.cf
virtual_alias_domains = forward.example.com
virtual_alias_maps = hash:/etc/postfix/virtual

# /etc/postfix/virtual
info@forward.example.com   admin@example.com
sales@forward.example.com  bob@example.com
После правки текстовых карт их компилируют и перечитывают конфиг:

Код: Выделить всё

postmap /etc/postfix/virtual    # создаёт virtual.db (hash-карта)
newaliases                      # компилирует /etc/aliases -> aliases.db
postfix reload                  # перечитать конфиг без обрыва соединений
Ретрансляция через smarthost провайдера (полезно, когда исходящий 25 порт закрыт или нет PTR). relayhost в квадратных скобках отключает MX-lookup и бьёт прямо в хост:

Код: Выделить всё

# main.cf
relayhost = [smtp.provider.net]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt
Очередь - сердце эксплуатации. Письмо не исчезает: оно лежит в очереди, пока не доставится или не истечёт срок.

Код: Выделить всё

postqueue -p           # показать очередь (псевдоним mailq)
postqueue -j           # то же в JSON (удобно скриптовать)
postqueue -f           # flush: попытаться доставить всё прямо сейчас
postsuper -d ALL       # удалить ВСЕ письма из очереди
postsuper -d <QUEUEID> # удалить одно конкретное
postsuper -r ALL       # перевести в активную очередь (requeue)
postsuper -h <id>      # hold: придержать письмо
postcat -q <QUEUEID>   # посмотреть содержимое письма в очереди
Базовая защита от спама на этапе SMTP-диалога - это smtpd_recipient_restrictions. Главное правило reject_unauth_destination отвергает попытки релея на чужие домены; permit_mynetworks разрешает своим. Плюс DNS-блоклисты и проверки HELO:

Код: Выделить всё

# main.cf
smtpd_helo_required = yes
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
    reject_rbl_client zen.spamhaus.org
Частые грабли
  • Открытый релей. Поставили mynetworks слишком широко или забыли reject_unauth_destination - сервер шлёт чужой спам, IP попадает в блоклисты, своя почта перестаёт доходить. Проверяйте postconf -n и тестируйте релей снаружи.
  • Забыли postmap/newaliases после правки текстовой карты. Postfix читает скомпилированный .db, а не текст - изменения не применятся, ошибок не будет.
  • Путают postfix reload и restart с newaliases. reload перечитывает main.cf/master.cf, но НЕ перекомпилирует карты - для карт нужен postmap.
  • Домен в mydestination И одновременно в virtual_mailbox_domains - Postfix ругается на конфликт, доставка ломается. Домен должен быть в чём-то одном.
  • inet_interfaces = localhost (дефолт во многих сборках) - сервер слушает только loopback и не принимает внешнюю почту. Для приёма нужно all или конкретный IP.
  • relayhost без квадратных скобок заставляет искать MX у самого smarthost - часто не то, что нужно. Скобки [host] отключают MX-резолв.
  • Письма копятся в очереди, а смотрят только в логи. Сначала postqueue -p и postcat - причина (deferred) видна прямо там.
Мини-лаба
  • Установите Postfix и через postconf -e задайте myhostname, mydomain, myorigin = $mydomain и mydestination со своим доменом.
  • Ограничьте mynetworks только 127.0.0.0/8 и своей подсетью; выполните postconf -n и убедитесь, что 0.0.0.0/0 там нет.
  • Создайте в /etc/aliases строку для root (root: youruser), выполните newaliases, отправьте письмо root и проверьте доставку.
  • Заведите файл /etc/postfix/virtual с алиасом домена, выполните postmap и postfix reload.
  • Остановите доставку (например, временно поднимите defer) и отправьте пару писем; посмотрите их через postqueue -p и postcat -q.
  • Освободите очередь через postqueue -f, затем удалите оставшееся через postsuper -d ALL.
  • Добавьте reject_unauth_destination в smtpd_recipient_restrictions и снаружи попробуйте релей на чужой домен - убедитесь, что получаете отказ.
Контрольные вопросы
  • Чем отличается роль MTA от MDA и MUA, и на каком порту MTA принимает входящую почту по умолчанию?
  • Что задают параметры mydestination и mynetworks и почему ошибка в mynetworks опаснее всего?
  • За что отвечают main.cf и master.cf и какой инструмент безопасно правит main.cf?
  • В чём разница между virtual_alias_maps и virtual_mailbox_domains?
  • Зачем нужны postmap и newaliases и чем они отличаются от postfix reload?
  • Какое правило в smtpd_recipient_restrictions закрывает сервер от использования как открытый релей?
👍 ❤️4 🔥1 😄 🤔
Аватара пользователя
swashy112465
Сообщения: 1
Зарегистрирован: 22 май 2026, 07:07

Re: Почтовый сервер Postfix [211.1]

Сообщение swashy112465 »

Не понял разницу: relayhost через smarthost провайдера и mynetworks - это про одно и то же доверие или нет? У меня исходящий 25 закрыт, поставил relayhost на 587 с sasl, заработало
👍1 ❤️1 🔥 😄 🤔2
Аватара пользователя
solidity6
Сообщения: 1
Зарегистрирован: 07 июн 2026, 18:45

Re: Почтовый сервер Postfix [211.1]

Сообщение solidity6 »

После правки /etc/postfix/virtual письма не пересылались пока не сделал postmap. reload не помогал, теперь понятно почему - он карты не компилит
👍2 ❤️ 🔥 😄 🤔2
Ответить
← Предыдущая глава
Сервер OpenLDAP [210.4]
Следующая глава →
Управление доставкой почты и Sieve [211.2]

Все главы курса «LPIC-2: инженер Linux (201 + 202)»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-2: инженер Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость