Назад | Перейти на главную страницу

Postfix полностью игнорирует настройку relayhost в main.cf

У меня проблемы с отправкой электронной почты на мой узел ретрансляции. Вся почта доставляется напрямую.

postconf -n:

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
inet_interfaces = loopback-only
inet_protocols = all
mailbox_size_limit = 0
mydestination =
myhostname = webserver.example.com
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost = smtp.example.com
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes

Mailq и журнал показывают, что почта пытается подключиться напрямую к mail.h-email.net вместо моего релейного сервера.

Выход mailq:

root@webserver:/etc/postfix# mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
9F79E60224      382 Thu Jun 25 09:19:49  root@webserver.example.com
         (connect to mail.h-email.net[107.21.213.75]:25: Connection timed out)
                                         tguadagnin@gmail.com

-- 0 Kbytes in 1 Request.

Вывод mail.log

Jun 25 09:20:20 webserver postfix/smtp[6998]: 9F79E60224: to=<tguadagnin@gmail.com>, relay=none, delay=31, delays=0.02/0/31/0, dsn=4.4.1, status=deferred (connect to mail.h-email.net[107.21.213.75]:25: Connection timed out)

Журнал показывает relay=none в то время как все мои другие серверы с такой же конфигурацией отправляют электронное письмо правильно и сообщают как relay=smtp.example.com в своих журналах.

Единственная разница с этим сервером заключается в том, что он находится в другом сегменте сети, который является одной из моих DMZ.

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

dpkg-reconfigure postfix и установив систему как спутниковая система не снимает проблемы. mailutils пакет предоставляет mail команда.

Может кто-нибудь мне помочь? Я изо всех сил пытался понять, как правильно это исправить.

Похоже, что постфикс полностью игнорирует /etc/hosts.

Если настройка relayhost = FQDN вместо IP-адреса он попытается разрешить полное доменное имя для своего IP-адреса и не будет использовать /etc/hosts найти это. Он будет использовать настроенную систему resolv.conf файл, если smtp_host_lookup установлен на родной.

Поскольку он не смог разрешить мой хост-ретранслятор, он вместо этого просто попытался доставить почту прямо в эфир. Я не могу найти подробностей, правильно ли это.

Установка узла ретрансляции на IP-адрес ИЛИ обеспечение возможности разрешения полного доменного имени узла реле БЕЗ использования /etc/hosts устраняет эту проблему.

Я полностью решил ту же проблему с прямым подключением к mail.h-email.net вместо моего релейного сервера. При этом мой sendmail пытается подключиться к mail.h-email.net независимо от домена назначения моей почты.

Имя моего сервера = server.domain.org.ua

Неправильно указано реле как IP = 192.168.2.4

Отправляю тестовое письмо @ ukr.net, который не имеет ничего общего с mail.h-email.net.

Я неправильно настроил relayhost в sendmail, указав IP-адрес вместо hostname_of_relayhost. Sendmail пытается разрешить MX для «IP 192.168.2.4» и неожиданно получает существующее имя «4.org.ua» и MX «mail.h-email.net». для этого.

== отладка ==

= top output =
 sendmail: ./v3LJRuji049269 mail.h-email.net.: user open (sendmail)
 sendmail: ./v3LJhCr0049454 mail.h-email.net.: user open (sendmail)

= # tcpdump -vvv -i wan_if udp =
    server.domain.org.ua.9764 > google-public-dns-b.google.com.domain:  
    MX? 192.168.2.4.org.ua.

    google-public-dns-b.google.com.domain > server.domain.org.ua.9764: 
    q: MX? 192.168.2.4.org.ua. 1/0/1 192.168.2.4.org.ua. [59m59s] MX mail.h-email.net.

    server.domain.org.ua.36133 > google-public-dns-a.google.com.domain: 
     A? mail.h-email.net.

        23:28:28.687538 IP (tos 0x0, ttl 45, id 27064, offset 0, flags [none], proto UDP (17), length 329)
            google-public-dns-a.google.com.domain > server.domain.org.ua.36133: [udp sum ok] 29530 q: A? mail.h-email.net. 16/0/1 mail.h-email.net. [3m28s] A 198.133.159.124, mail.h-email.net. [3m28s] A 198.133.159.123, mail.h-email.net. [3m28s] A 198.133.159.125, mail.h-email.net. [3m28s] A 198.133.159.133, mail.h-email.net. [3m28s] A 198.133.159.137, mail.h-email.net. [3m28s] A 198.133.159.119, mail.h-email.net. [3m28s] A 198.133.159.121, mail.h-email.net. [3m28s] A 198.133.159.122, mail.h-email.net. [3m28s] A 198.133.159.132, mail.h-email.net. [3m28s] A 198.133.159.126, mail.h-email.net. [3m28s] A 198.133.159.139, mail.h-email.net. [3m28s] A 198.133.159.135, mail.h-email.net. [3m28s] A 198.133.159.136, mail.h-email.net. [3m28s] A 198.133.159.120, mail.h-email.net. [3m28s] A 198.133.159.138, mail.h-email.net. [3m28s] A 198.133.159.134 ar: . OPT UDPsize=512 OK (301)

    =check=
    $ nslookup -ty=mx 4.org.ua

    Non-authoritative answer:
    4.org.ua    mail exchanger = 5 mail.h-email.net.

Поэтому я указываю «хост ретрансляции» как «имя хоста» и решаю проблему.

Если вы пересылаете ВСЮ электронную почту заданному /etc/hosts хост (обычно локальный IP-адрес) и не получающий почту, добавьте это в /etc/postfix/main.cf :

mydestination= # Don't deliver anything locally

smtp_dns_support_level = disabled # native lookup only (/etc/hosts)

relayhost = hostname.mydomain.tld #*

(* /etc/hosts вход hostname.mydomain.tld вы хотите использовать в качестве IP - т.е. mail.mydomain.local)

Это переопределит поиск DNS / MX и будет использовать /etc/hosts (если в нем находится данный хост). Он никогда не будет использовать поиск DNS.

Примечание: поиск также не выполняется для входящих. Это для исходящего (единственного) сервера к реле, которое находится в / etc / hosts для разрешения его имен - что во многих случаях подходит. (Это полезно, если вы хотите, чтобы сервер отправлял только корневые электронные письма / предупреждения cronjob / и т. Д. На фактический почтовый сервер для доставки), но никогда не принимал почту.

Ссылка: smtp_dns_support_level


smtp_host_lookup = native может быть использован на месте smtp_dns_support_level выше.

Это будет использовать "только собственный сервис имен", также известный как "системный" поиск.

Так и будет как обычно первый запрос /etc/hosts (через /etc/nsswitch.conf). Если не найден, он запросит DNS-сервер (по умолчанию в большинстве систем *). В этом отношении / etc / hosts все еще может отменять поиск. Это может быть более подходящим, если ваш сервер также получает внешнюю почту или должен использовать DNS-поиск для чего-либо еще, чего нет в / etc / hosts. Также обратите внимание на вариант lmtp_host_lookup.

* Пример nsswitch.conf: hosts: files dns -> запрашивает файлы (/ etc / hosts), затем DNS.

Ссылка smtp_host_lookup , lmtp_host_lookup

только что обнаружил, что postfix имеет / может иметь свой собственный файл hosts / var / spool / postfix / etc / hosts. У меня такая же проблема, как и сообщалось, и с помощью команды «postfix check» я смог найти эту проблему. Обновлена ​​/ добавлена ​​запись хоста в / var / spool / postfix / etc / hosts, и теперь postfix читает полное доменное имя для файла хоста вместо DNS.