Заставить postfix использовать sasl / auth plain для исходящей почты на сервер ретрансляции

Заставить postfix использовать sasl / auth plain для исходящей почты на сервер ретрансляции

Мой postfix не отправляет AUTH PLAIN на исходящий сервер ретрансляции. Должно быть, это работало пару дней назад, но теперь я получаю обратные письма с сообщением "relay not allowed".

Почтовая система работает в Alpine Linux VM с использованием postfix, fetchmail и dovecot. Postfix использует Cyrus SASL lib, а не dovecot.

Соответствующая часть main.cf:

relayhost = [RELAY_HOST]
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/mailsrv/etc/postfix/sasl_passwd
smtp_sasl_security_options =

sasl_passwd:

[RELAY_HOST] USER:PASSWORD

Я захватил исходящий сеанс с помощью tcpdump, и AUTH PLAIN не отправляется. Я протестировал отправку почты вручную с помощью telnet, используя правильную строку AUTH PLAIN, и это сработало.

Таким образом, я интерпретирую это так: Postfix в какой-то момент не решает использовать SASL / AUTH PLAIN.

В чем может быть проблема?

Разрешения должны быть в порядке, postmap был вызван, postfix перезапущен и перезагружен, libsasl установлен, и postfix сообщает, что был собран с помощью cyrus. Я знаю, что это клише, но система работала пару дней назад. Может ли быть проблема в истечении срока действия сертификата, которого я не вижу в журналах?

решение1

postfix отправляет HELO, который не создает строки AUTH PLAIN

HELO — это исходная команда рукопожатия без возможности согласования расширений. Прежде чем клиент сможет использовать SASL, он должен отправить EHLO (расширенное приветствие) и проверить, что серверрекламируетжелаемые механизмы SASL.

По умолчанию многие клиенты SMTP, включая Postfix, отправляют EHLO только тогда, когда встречается слово «ЕСМТП" отображается в приветственном баннере сервера (например 220 foo.example.com ESMTP Sendmail, ). Предполагается, что серверы, не поддерживающие ESMTP, также не поддерживают SASL.

  • Если приветствие сервера правильное, убедитесь, что вы случайно не включили параметры smtp_never_send_ehloили .smtp_pix_workarounds

  • Если приветствие сервера неверно, но он тем не менее принимает EHLO, вы можете принудительно использовать EHLO, включив его smtp_always_send_ehlo = yesв конфигурации Postfix.


Если вы управляете сервером, попробуйте исправить его приветствие, так как это, скорее всего, также повлияет на доставку входящих сообщений с других доменов — например, без ESMTP не будет и оппортунистического STARTTLS.

Например, если на сервере также работает Postfix, необходимо включить «ESMTP» в smtpd_bannerопцию:

smtpd_banner = $myhostname ESMTP $mail_name

(Также может быть, что соединение проходит через антиспамовый шлюз, который использует этот метод, пытаясь запретить использование STARTTLS — вместо того, чтобы просто удалить его из ответа EHLO, он пытается запретить сам EHLO.)


Обратите внимание, что обычно порт 25 предназначен только для приема сообщений (входящей доставки с других доменов) — порты 587 или 465 предназначены для «отправки» сообщений (исходящих от клиентов).

Поэтому, если ваш Postfix действует как локальный клиент (потому что у него есть узел-реле и он хочет использовать аутентификацию), ему действительно следует подключиться к узлу-реле через порт 587.

Обратите внимание, что для подключения к порту 465 требуется smtp_tls_wrappermode = yes, так как он использует TLS с самого начала. (Это на самом деле преимущество, поскольку не позволяет брандмауэрам вмешиваться в рукопожатие.)

При использовании порта 587 TLS необязателен (активируется только с помощью команды «STARTTLS»), но вы также можетедействительно долженпринудительно использовать TLS, если сервер его поддерживает. Для этого установите smtp_tls_security_level = verify.

Связанный контент