У меня проблемы с отправкой электронной почты на мой узел ретрансляции. Вся почта доставляется напрямую.
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.