Мой 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
.