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

Ошибка поиска Postfix: работает с локального хоста, а не на других узлах в локальной сети

Я получаю временный сбой поиска адреса получателя при попытке отправить электронное письмо с помощью 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 параметр.
  • Вы используете smtpd для отправки электронной почты ( telnet localhost 25). В этом режиме postfix проверяет только первую запись mynetworks (т.е. 127.0.0.0/8) и выясните, что клиент соответствует этой записи, поэтому postfix даже не потрудится проверить остальную часть списка mynetworks записи.