Вопрос или проблема
Я пытаюсь перенастроить (в данный момент работающую) конфигурацию postfix на Debian 10, так как мы перешли на Office365 в качестве SMTP-сервера. Конфигурация почты postfix используется только для отправки писем, которые сервер генерирует сам (например, письма от logcheck и т. д.).
Единственное изменение, которое, как я думал, мне нужно было сделать, это изменить настройку relayhost
с: relayhost = some.mail.provider:465
на: relayhost = smtp.office365.com:587
Проблема:
Тем не менее, это не сработало. В /var/log/syslog
я получаю
21 сен 15:03:30 pasteur postfix/smtp[16877]: SSL_connect error to smtp.office365.com[40.101.137.34]:587: -1
21 сен 15:03:30 pasteur postfix/smtp[16877]: warning: TLS library problem: error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../ssl/record/ssl3_record.c:332:
21 сен 15:03:30 pasteur postfix/smtp[16877]: EC2809EF92: Cannot start TLS: handshake failure
Вопрос: Кто-нибудь знает решение?
Я экспериментировал с различными настройками postfix в /etc/postfix/main.cf, но это не сработало. Например, изменение smtp_tls_security_level = encrypt
на ... = may
приводит к появлению записей в syslog, таких как smtp_tls_wrappermode требует "smtp_tls_security_level = encrypt" (или более строгий)
Мои настройки postfix в /etc/postfix/main.cf
следующие:
# Управляемый Ansible
smtpd_banner = $myhostname ESMTP $mail_name
biff = no
# добавление .domain - это задача MUA.
append_dot_mydomain = no
# Раскомментируйте следующую строку, чтобы создать предупреждения о "задержанных письмах"
#delay_warning_time = 4h
readme_directory = no
# Смотрите http://www.postfix.org/COMPATIBILITY_README.html
# по умолчанию 2 при свежих установках.
compatibility_level = 2
# Параметры TLS
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
# Включить аутентификацию SASL
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = static:<someuser>:************
smtp_sasl_security_options = noanonymous
smtp_tls_wrappermode = yes
smtp_use_tls = yes
smtp_tls_security_level = encrypt
# Общие настройки
myhostname = pasteur.<ourdomain>.com
myorigin = /etc/mailname
mydestination = $myhostname localhost.$mydomain localhost pasteur
mynetworks = "127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128"
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
relayhost = smtp.office365.com:587
На данный момент я обошёл проблему, используя подход “прямой отправки”, описанный Microsoft по адресу
https://docs.microsoft.com/en-us/exchange/mail-flow-best-practices/how-to-set-up-a-multifunction-device-or-application-to-send-email-using-microsoft-365-or-office-365
Это означает, что мне пришлось изменить настройку relayhost
(URL и порт) и несколько настроек TLS
Слой шифрования отличается между портом 465 и 587:
- Порт 465 ожидает связи по протоколу SSL
- Порт 587 ожидает первоначальную связь в открытом тексте с командой
STARTTLS
в самом начале сессии
Я полагаю, что исправление заключается в изменении
smtp_tls_security_level = may
Ответ или решение
Ошибка Postfix с Office 365: Проблема с библиотекой TLS – неверный номер версии
Когда вы настраиваете Postfix для работы с Office 365 в качестве SMTP-сервера, может возникнуть ошибка, связанная с TLS, о которой идет речь. Данная проблема часто вызвана неправильной конфигурацией шифрования при попытке установить соединение через неправильный порт. В данном случае проблема заключается в использовании порта 587, который требует явного использования команды STARTTLS
для старта TLS-соединения.
Анализ проблемы
Вы переключили relayhost
на smtp.office365.com:587
, так как этот порт используется для отправки электронной почты с использованием STARTTLS
. Ошибка в логах:
SSL_connect error to smtp.office365.com[40.101.137.34]:587: -1
warning: TLS library problem: error:1408F10B:SSL routines:ssl3_get_record:wrong version number
Cannot start TLS: handshake failure
это указывает на то, что Postfix не может правильно установить защищенное соединение, вероятно, из-за конфликта настроек TLS.
Решение проблемы
-
Настройки TLS: Убедитесь, что ваши параметры конфигурации TLS корректны. Откройте файл конфигурации
/etc/postfix/main.cf
и проверьте следующие параметры:smtp_tls_security_level = encrypt smtp_tls_wrappermode = no smtp_use_tls = yes
Обратите внимание, что
smtp_tls_wrappermode
должен быть установлен вno
, так как вы используетеSTARTTLS
для шифрования. -
Убедитесь, что
smtp_sasl_auth_enable
включен: Это необходимо для аутентификации при отправке электронной почты через Office 365:smtp_sasl_auth_enable = yes smtp_sasl_password_maps = static:<someuser>:<password> smtp_sasl_security_options = noanonymous
-
Удаление старых настроек для SSL: Если у вас были ранее настроены параметры для SSL на порту 465, убедитесь, что они удалены или корректно переопределены для работы с
STARTTLS
. -
Перезапустите Postfix: После внесения всех изменений перезапустите службу Postfix:
sudo systemctl restart postfix
-
Проверяйте журналы: После перезапуска следите за тем, чтобы увидеть, устранилась ли ошибка, проверяя
/var/log/syslog
или/var/log/mail.log
.
Альтернативный подход
Если вышеуказанные шаги не устранит проблему, рассмотрите возможность отправки электронной почты без использования Relay, как вы упомянули в своем вопросе. Следование рекомендациям Microsoft по прямой отправке может также помочь избежать дополнительных телодвижений с установкой TLS.
Пройдите по документации Microsoft для получения более подробной информации о конфигурациях.
Заключение
Проблема "TLS library problem – wrong version number" в Postfix при попытке подключения к Office 365 может быть решена с помощью точной настройки параметров CLS и SASL, а также путем использования правильного порта и режима шифрования. Убедитесь, что все параметры соответствуют требованиям Office 365, и проделайте необходимые шаги по тестированию и отладке.