Перейти к основному содержанию

Postfix и DNS

Mail

Postfix обращается к DNS для доставки исходящей почты. Это критически важный процесс, который позволяет вашему почтовому серверу найти конечный пункт назначения для отправляемого письма.

И работать с DNS Postfix может по-разному, в зависимости от настроек. К примеру, у вас корпоративная система, в которой Postfix работает на отправку писем. И вы закручиваете гайки безопасности, закрыв всем своим серверам доступ в Интернет по UDP 53, кроме ваших локальных DNS серверов. В результате отправка писем у вас сломается, несмотря на то, что на сервере с Postfix у вас прописаны верные локальные DNS серверы и доступ к ним никто не запрещает.

Зачем Postfix обращается к DNS?

Главная цель — найти MX запись получателя. Когда вы отправляете письмо на адрес вроде user@example.com, Postfix должен выяснить, какой сервер в интернете отвечает за прием почты для домена example.com. Postfix выполняет DNS-запрос к глобальной системе DNS, чтобы получить MX записи (Mail Exchange) домена получателя. Запрос возвращает список серверов-получателей, отсортированный по приоритету (например, mail.example.com с приоритетом 10).

MX-запрос возвращает только имя хоста почтового сервера (например, mail.example.com), но не его IP-адрес. Чтобы установить соединение по протоколу SMTP, Postfix должен узнать IP-адрес. Postfix выполняет второй DNS-запрос, чтобы найти A-запись (для IPv4) или AAAA запись (для IPv6) для имени хоста, полученного из MX записи. Запрос возвращает IP адрес, по которому можно отправить письмо.

Если у домена получателя нет MX записи (редкий случай для публичных доменов, но частый для небольших почтовых сервисов), Postfix не сдается. По стандартам SMTP, Postfix пытается найти A запись для самого домена example.com. Письмо отправляется непосредственно на IP адрес, указанный в A-записи домена.

И так для каждого письма.

А если у вас на сервере прикручен антиспам с антивирусом, то добавляются дополнительные DNS запросы. Если почтовый сервер отвечает ещё и за приём сообщений, то ещё дополнительные DNS запросы. Но мы пока про сам Postfix.

К какому DNS обращается Postfix?

А вот тут прикол. По умолчанию Postfix сам лезет в Интернет на DNS серверы получателей, игнорируя нативный механизм операционной системы.

http://www.postfix.org/postconf.5.html#smtp_host_lookup

postconf | grep host_lookup
lmtp_host_lookup = dns
smtp_host_lookup = dns

postfix

  • dns — хост ищется в DNS (записи /etc/hosts тоже игнорируются)
  • native — используется нативный механизм (nsswitch.conf или эквивалент)
  • dns, native — хост ищется в DNS, если не найден, то используется нативный механизм

По умолчанию Postfix использует только DNS-резолвер самого Postfix. При этом полностью игнорируется файл /etc/hosts. Чтобы изменить поведение Postfix и использовать нативный механизм, меняем настройки на native, и перезагружаем postfix:

postconf lmtp_host_lookup=native
postconf smtp_host_lookup=native
service postfix restart

postfix

И почта заработает.

Такая настройка полезна в специфичных сценариях:

  • изолированные сети: ваш сервер не имеет выхода в глобальный интернет и должен отправлять почту через внутренний релей
  • тестовые окружения: вы используете несуществующие в реальном DNS домены (например, .local или .test)

Важно

Специалисты Postfix не рекомендуют использовать smtp_host_lookup = native для обычных серверов, работающих в интернете . Это может привести к проблемам:

  • Поиск через native может некорректно обрабатывать полностью определенные доменные имена (FQDN), добавляя к ним поисковые суффиксы из /etc/resolv.conf.
  • Режим native несовместим с технологиями верификации каналов связи, такими как DANE/DNSSEC .

Полезные ссылки

Postfix и кэширование nscd

Теги

 

Похожие материалы

Keepalived для Postfix

Есть два сервера с операционной системой Ubuntu 20.04.4 LTS. На обоих серверах развёрнут Postfix сервер. Почтовики работают только на отправку писем, на них всё уже настроено. Пришла задача объединить их в один отказоустойчивый кластер Master — Slave с плавающим виртуальным IP-адресом с помощью keepalived. Главная задача: принимать почту на один IP адрес и обеспечить резервирование postfix.

Теги

Postfix с SMTP аутентификацией Cyrus

Понадобилось сделать Postfix с SMTP аутентификацией. Раньше не настраивал, перерыл кучу статей. Очень сумбурно всё изложено, поэтому пришлось написать свой вариант. Если кто-то знает хорошую инструкцию по данному вопросу без лишней воды — пишите в комментариях.

Теги