Я получаю временный сбой поиска адреса получателя при попытке отправить электронное письмо с помощью Postfix и Gmail с компьютера, отличного от хоста, в той же сети. Он отлично работает при тестировании на хосте Postfix. EDIT: у меня есть клиентский узел в той же локальной сети, который просит этот сервер Postfix отправить для него электронное письмо. Сервер отказывается, ссылаясь на временный сбой поиска.
Чтобы добраться туда, где я нахожусь, я выполнил следующие инструкции:
https://rtcamp.com/tutorials/linux/ubuntu-postfix-gmail-smtp/
Затем я изменил параметр mynetworks, чтобы включить любой узел в подсети .3 нашей локальной сети.
Что я пытался исправить:
1) добавление псевдонимов для определенных адресов электронной почты, затем запуск newaliases
2) добавление relay_domains в main.cf
3) изменение файла sasl_passwd, чтобы он содержал: smtp.gmail.com или COMPANYNAME.com
4) изменение значения relay_host на smtp.gmail.com или smtp.COMPANYNAME.com в main.cf
5) изменение значений mydestinations в main.cf
Вот мой main.cf:
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = hans
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = smtp.COMPANYNAME.com, COMPANYNAME.com, smtp.gmail.com, localhost.localdomain, localhost
relayhost = [smtp.gmail.com]:587
relay_domains = COMPANYNAME.com, gmail.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128, 192.168.3.0/255
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_use_tls = yes
ОБНОВЛЕНИЕ: вот мой mail.log, сейчас я решаю проблему с сетевой маской. Все еще не знаю, как исправить проблему временного поиска.
Jan 30 15:42:07 hans postfix/smtpd[10994]: NOQUEUE: reject: RCPT from unknown[192.168.3.3]: 451 4.3.0 <user@companyname.com>: Temporary lookup failure; from=<helpdesk@companyname.com> to=<user@companyname.com> proto=SMTP helo=<localhost>
Jan 30 15:42:07 hans postfix/smtpd[10994]: warning: bad net/mask pattern: "192.168.3.0/255"
ОБНОВЛЕНИЕ 2: Я внес много изменений в свой main.cf. Вот последний.
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = hans
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = hans, localhost.localdomain, localhost
relayhost = [smtp.gmail.com]:587
relay_transport = relay
relay_domains = mail.companyname.com, companyname.com, gmail.com
mynetworks_style = subnet
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 [192.168.3.0]/255
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_use_tls = yes
smtp_sasl_tls_security_options = noanonymous
smtp_connection_cache_destinations = smtp.gmail.com
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
permit_auth_destination,
reject_unauth_destination
smtpd_sender_restrictions =
permit_mynetworks,
check_relay_domains
Последний журнал ошибок:
Это последние сообщения, но я их достаточно исправил, поэтому они больше не актуальны.
Feb 3 15:10:17 hans postfix/smtpd[18037]: fatal: parameter "smtpd_recipient_restrictions": specify at least one working instance of: check_relay_domains, reject_unauth_destination, reject, defer or defer_if_permit
Совет от других людей: кто-то сказал мне, что мне нужен правильный DNS между клиентами и сервером Postfix. Очевидно, что быть в подсети, указанной в моей конфигурации, недостаточно. Я не уверен, что это актуально, потому что все дело в том, что Postfix не должен выполнять локальный поиск, а отправлять электронную почту в Gmail. Я ошибаюсь?
В самом Postfix есть документация по как отлаживать когда что-то идет не так. Для отладки постфиксного процесса почтовый журнал был вашим другом. Первым шагом отладки является выдача этой команды
egrep '(warning|error|fatal|panic):' /some/log/file | more
Из почтового журнала мы видим, что postfix жалуются на bad net/mask pattern: "192.168.3.0/255"
. От твоего main.cf
, мы можем подтвердить, что один из IP-адресов в mynetworks
(192.168.3.0/255) имеет неправильный шаблон. Может вы имеете ввиду 192.168.3.0/32.
Хорошо, но почему работает с локального хоста, а не на других узлах в локальной сети
Некоторые умозрительные ответы:
mail
команда для отправки электронной почты с locahost. В этом режиме постфикс даже не потрудится использовать mynetworks
параметр.telnet localhost 25
). В этом режиме postfix проверяет только первую запись mynetworks
(т.е. 127.0.0.0/8) и выясните, что клиент соответствует этой записи, поэтому postfix даже не потрудится проверить остальную часть списка mynetworks
записи.