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_lookuplmtp_host_lookup = dns smtp_host_lookup = dns
- 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И почта заработает.
Такая настройка полезна в специфичных сценариях:
- изолированные сети: ваш сервер не имеет выхода в глобальный интернет и должен отправлять почту через внутренний релей
- тестовые окружения: вы используете несуществующие в реальном DNS домены (например, .local или .test)
Важно
Специалисты Postfix не рекомендуют использовать smtp_host_lookup = native для обычных серверов, работающих в интернете . Это может привести к проблемам:
- Поиск через
nativeможет некорректно обрабатывать полностью определенные доменные имена (FQDN), добавляя к ним поисковые суффиксы из/etc/resolv.conf. - Режим
nativeнесовместим с технологиями верификации каналов связи, такими как DANE/DNSSEC .


