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

Ошибка подключения к хосту ретрансляции Postfix: время ожидания истекло при получении начального приветствия сервера

У меня есть серверный ящик Elastix, с которого я хочу отправлять по электронной почте уведомления о голосовых сообщениях. Я хотел бы отправить их по электронной почте нашей компании (размещенной у провайдера общего веб-хостинга Bluehost). Я выполнил инструкции по использованию Postfix в качестве сервера ретрансляции. Электронные письма не уходят. Я получаю в журналах следующее (слегка запутанное):

Sep 27 16:31:51 TD1000 postfix/smtp[9757]: 1B2C357117: to=<me@mycompany.com>, relay=boxNNN.bluehost.com[a.b.c.d]:465, delay=5241, delays=5076/0.03/165/0, dsn=4.4.2, status=deferred (lost connection with boxNNN.bluehost.com[a.b.c.d] while receiving the initial server greeting)

Различные источники предполагают, что это может быть проблема с занесением в черный список. Однако похоже, что это будет проблемой и для моего Outlook, работающего на моем компьютере. Я пытаюсь заставить постфикс действовать как Outlook и отправлять через Bluehost, используя SSL. (мои настройки Outlook: boxNNN.bluehost.com:465, SSL, требуется аутентификация)

Когда я поднимаюсь на уровень отладки, я получаю следующее сообщение:

dns_query: boxNNN.bluehost.com (MX): Host found but no data record of requested type

Но поскольку окончательное сообщение - это отсутствие ответа, и оно находит IP-адрес для сервера, я не считаю, что проблема с DNS.

postconf -n показывает:

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
debug_peer_level = 5
debug_peer_list = boxNNN.bluehost.com
html_directory = no
inet_interfaces = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost
mydomain = cenginc-office.local
myhostname = td1000.my-office.local
mynetworks = /etc/postfix/network_table
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.5.6/README_FILES
relayhost = boxNNN.bluehost.com:465
sample_directory = /usr/share/doc/postfix-2.5.6/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtp_connect_timeout = 300
smtp_enforce_tls = yes
smtp_helo_name = my-phone-system
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
smtp_sasl_type = cyrus
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd
unknown_local_recipient_reject_code = 550
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_domains =
virtual_transport = lmtp:unix:/var/lib/imap/socket/lmtp

(мы используем Postifix 2.3.3 в соответствии с пользовательским интерфейсом Elastix, поэтому я не уверен, почему в примерах указано 2.5.6)

Когда я подключаюсь через telnet к ящику и порту bluehost, соединение остается открытым в течение короткого времени, а затем закрывается, я думаю, потому что я не использую SSL.

Я использовал этот сайт (среди прочего) для настройки, но не вижу, что мне не хватает. https://www.zulius.com/how-to/set-up-postfix-with-a-remote-smtp-relay-host/

Есть идеи о том, что я делаю неправильно? Моя теория заключается в том, что postfix не делает того, чего ожидает bluehost при первоначальном подключении, но я понятия не имею, что именно. Спасибо за вашу помощь.

У нас есть два факта

  • Вы подключаетесь к bluehost через порт 465
  • Postfix сообщил об ошибке: потеряна связь с boxNNN.bluehost.com [a.b.c.d] при получении начального приветствия сервера

Одно из возможных объяснений: Клиент SMTP в Postfix 2.11 или более ранней версии не поддерживает SSL.

Объяснение

В SMTP есть схема двух шифров: STARTTLS и SMTPS. Разница в том, что (1) SMTPS требует SSL-шифрование от первого байта и (2) STARTTLS сначала требует текстовый режим, и, необязательно, клиент и сервер выполняют согласование SSL после команды STARTTLS.

SMTP-сервер Postfix (smtpd) поддерживать оба протокола. Проблема в SMTP-клиенте (до postfix 3.0) - тот, кто отправляет письмо на удаленный сервер - не поддерживает SMTPS-соединение. Он поддерживает только режим обычного текста или режим STARTTLS.

Здесь происходит следующее: SMTP-клиент Postfix использует режим обычного текста для подключения к Bluehost, потому что postfix хочет установить STARTTLS. Но Bluehost ожидает, что первый байт был согласованием SSL, а не простым текстом. Это несоответствие заставляет сервер Bluehost молча отбрасывать данные и отключать постфикс. Postfix не знает, что здесь происходит, поэтому выдает ошибку в maillog

Sep 27 16:31:51 TD1000 postfix/smtp[9757]: 1B2C357117: to=<me@mycompany.com>, relay=boxNNN.bluehost.com[a.b.c.d]:465, delay=5241, delays=5076/0.03/165/0, dsn=4.4.2, status=deferred (lost connection with boxNNN.bluehost.com[a.b.c.d] while receiving the initial server greeting)

Решение

Документация Postfix TLS предоставляет здесь обходной путь для использования stunnel. Так решение от MrPhilTX был правильным для Postfix <3.0.

В postfix 3.0 Wietse Venema решила предоставить дополнительную функцию SMTPS для postfix SMTP-клиента. Благодаря этой функции решение stunnel здесь не требуется. Здесь есть два варианта:

а) Включите SMTPS для всех исходящих SMTP-соединений

Обычно в этом случае postfix имеет SMTPS-only relayhost как проблема OP. Так

# Client-side SMTPS requires "encrypt" or stronger.
smtp_tls_security_level = encrypt
smtp_tls_wrappermode = yes
# The [] suppress MX lookups.
relayhost = [mail.example.com]:465

б) Включить SMTPS на несколько хостов

В другом случае вам понадобится собственный транспорт и transport_maps для выборочного включения SMTPS.

# /etc/postfix/main.cf:
transport_maps = hash:/etc/postfix/transport

# /etc/postfix/transport:
example.com  relay-smtps:example.com:465

#/etc/postfix/master.cf:
relay-smtps  unix  -       -       n       -       -       smtp
    # Client-side SMTPS requires "encrypt" or stronger.
    -o smtp_tls_security_level=encrypt
    -o smtp_tls_wrappermode=yes

Я не уверен, что это то место, где я должен это разместить, но вот как у меня это работает.

Итак, kworr и befreeandgood направили меня на правильный путь. Smtp_sasl_ * ничего не делает с SSL, только с аутентификацией.

Я выполнил комбинацию инструкций из следующих ссылок: Это меня близко http://www.eglug.org/book/export/html/1923 но упустил некоторые настройки. Вот этот http://tech.surveypoint.com/blog/relay-mail-with-postfix-and-stunnel/ добавлено inet_interfaces = loopback_only.

Эти параметры привели меня к некоторым проблемам с почтовым сервером, отклоняющим различные имена заголовков, такие как «от» и «ответ на». Я исправил их с помощью некоторых инструкций, которые я нашел через поиск в Google (но мне не разрешено публиковать эти ссылки, поскольку я уже превысил свою квоту на ссылки).

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
html_directory = no
inet_interfaces = loopback-only
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost
mydomain = my-office.local
myhostname = td1000.my-office.local
mynetworks = /etc/postfix/network_table
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.5.6/README_FILES
relayhost = 127.0.0.1:5001
sample_directory = /usr/share/doc/postfix-2.5.6/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtp_connect_timeout = 60
smtp_generic_maps = hash:/etc/postfix/generic
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
smtp_sasl_type = cyrus
smtp_use_tls = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd
smtpd_tls_auth_only = no
smtpd_tls_loglevel = 2
smtpd_tls_received_header = no
unknown_local_recipient_reject_code = 550
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_domains =
virtual_transport = lmtp:unix:/var/lib/imap/socket/lmtp

Таким образом, smtp_generic_maps использовался для переименования различных адресов, которые подошли к некоторому адресу, который действительно существует. Мне пришлось сделать это для двух разных имен, которые я нашел, просмотрев файл / var / log / maillog.

Итак, сводка для подключения к Bluehost:

  • Включить аутентификацию smtp_sasl
  • Использовать stunnel создать туннель SSL
  • Использовать smtp_generic_maps для сопоставления несуществующих имен пользователей, которые использует звездочка.
  • Изучение mydomain и тому подобное может помочь вам обойти общие требования к картам. Я также видел кого-то ссылку $myorigin как потенциальный обходной путь.

Когда в целевом домене нет записей MX, SMTP-сервер должен попытаться доставить почту на любую из записей домена A. Для example.net это будет любой адрес example.net.

Если соединение с зашифрованным портом не удается, вам нужно обратиться к руководству postfix о smtp_tls_security_level параметр. Вы можете найти там подробное объяснение, но я думаю, что в большинстве случаев вам просто нужно добавить в свою конфигурацию:

smtp_tls_security_level=may