Новичок в Postfix столкнулся с проблемой шифров TLS 1.2, чтобы сервер Synology MailPlus принимал SMTP-соединение от Lorex DVR.

Вопрос или проблема

Моя цель и проблема

Я хочу, чтобы мой Lorex DVR использовал мой сервер Synology NAS MailPlus Server для отправки уведомлений по электронной почте, но происходит сбой подключения TLS, по-видимому, из-за шифров (tls_post_process_client_hello:no shared cipher).

Что работает

  • Сервер MailPlus прекрасно справляется с отправкой и получением моих обычных писем с помощью клиента Outlook.
  • DVR может отправлять уведомления по почте через TLSv1.2, если я настрою DVR на отправку почты через smtp сервер mail.com.
  • DVR может отправлять уведомления на мой сервер MailPlus по порту 25, если я не использую SSL/TLS (пока я вношу его IP в белый список MailPlus).

Мое расследование до сих пор

/volume1/@maillog/maillog
error:1417A0C1:SSL routines:tls_post_process_client_hello:**no shared cipher**:ssl/statem/statem_srvr.c:2285:

    postfix/smtpd[PID]: connect from DVR.mydomain.tld
    opendmarc[PID]: ignoring connection from DVR.mydomain.tld
    postfix/smtpd[PID]: connect from DVR.mydomain.tld[192.168.xxx.aaa]
    postfix/smtpd[PID]: SSL_accept error from DVR.mydomain.tld[192.168.xxx.aaa]: -1
    postfix/smtpd[PID]: warning: TLS library problem: error:1417A0C1:SSL routines:tls_post_process_client_hello:no shared cipher:ssl/statem/statem_srvr.c:2285:
    postfix/smtpd[PID]: lost connection after STARTTLS from DVR.mydomain.tld[192.168.xxx.aaa]
    postfix/smtpd[PID]: disconnect from DVR.mydomain.tld[192.168.xxx.aaa] ehlo=1 starttls=0/1 commands=1/2

Я никогда ранее не исследовал SSL-соединения, но после некоторого чтения я узнал о существовании шифров.

Сбор пакетов tcpdump .pcap, проанализированный с помощью Wireshark
DVR      SERVER TCP     74  38018 → 587 [SYN] Seq=0 Win=27200 Len=0 MSS=1360 SACK_PERM TSval=3847845792 TSecr=0 WS=128
SERVER   DVR    TCP     74  587 → 38120 [SYN, ACK] Seq=0 Ack=1 Win=14480 Len=0 MSS=1460 SACK_PERM TSval=685449855 TSecr=3859275362 WS=128
DVR      SERVER TCP     74  38120 → 587 [SYN] Seq=0 Win=27200 Len=0 MSS=1360 SACK_PERM TSval=3859275362 TSecr=0 WS=128
DVR      SERVER TCP     66  38120 → 587 [ACK] Seq=1 Ack=1 Win=27264 Len=0 TSval=3859275364 TSecr=685449855
SERVER   DVR    SMTP    94  S: 220 mydomain.tld ESMTP Postfix
DVR      SERVER TCP     66  38120 → 587 [ACK] Seq=1 Ack=29 Win=27264 Len=0 TSval=3859275732 TSecr=685450222
DVR      SERVER SMTP    82  C: EHLO localhost
SERVER   DVR    TCP     66  587 → 38120 [ACK] Seq=29 Ack=17 Win=14592 Len=0 TSval=685450225 TSecr=3859275732
SERVER   DVR    SMTP    215 S: 250-mydomain.tld | PIPELINING | SIZE 10485760 | ETRN | STARTTLS | ENHANCEDSTATUSCODES | 8BITMIME | DSN | SMTPUTF8 | CHUNKING
DVR      SERVER SMTP    76  C: STARTTLS
SERVER   DVR    SMTP    96  S: 220 2.0.0 Ready to start TLS
DVR      SERVER TLSv1.2 209 Client Hello
SERVER   DVR    TLSv1.2 73  Alert (Level: Fatal, Description: Handshake Failure)
DVR      SERVER TCP     66  38120 → 587 [FIN, ACK] Seq=170 Ack=215 Win=28288 Len=0 TSval=3859275742 TSecr=685450231
SERVER   DVR    TCP     66  587 → 38120 [FIN, ACK] Seq=215 Ack=171 Win=15616 Len=0 TSval=685450274 TSecr=3859275742
DVR      SERVER TCP     66  38120 → 587 [ACK] Seq=171 Ack=216 Win=28288 Len=0 TSval=3859275784 TSecr=685450274
Наборы шифров, предложенные DVR в пакете Client Hello
Cipher Suites (31 suites)
    Cipher Suite: TLS_DH_DSS_WITH_AES_256_GCM_SHA384 (0x00a5)
    Cipher Suite: TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 (0x00a3)
    Cipher Suite: TLS_DH_RSA_WITH_AES_256_GCM_SHA384 (0x00a1)
    Cipher Suite: TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x009f)
    Cipher Suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (0x006b)
    Cipher Suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 (0x006a)
    Cipher Suite: TLS_DH_RSA_WITH_AES_256_CBC_SHA256 (0x0069)
    Cipher Suite: TLS_DH_DSS_WITH_AES_256_CBC_SHA256 (0x0068)
    Cipher Suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x0039)
    Cipher Suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA (0x0038)
    Cipher Suite: TLS_DH_RSA_WITH_AES_256_CBC_SHA (0x0037)
    Cipher Suite: TLS_DH_DSS_WITH_AES_256_CBC_SHA (0x0036)
    Cipher Suite: TLS_RSA_WITH_AES_256_GCM_SHA384 (0x009d)
    Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA256 (0x003d)
    Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA (0x0035)
    Cipher Suite: TLS_DH_DSS_WITH_AES_128_GCM_SHA256 (0x00a4)
    Cipher Suite: TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 (0x00a2)
    Cipher Suite: TLS_DH_RSA_WITH_AES_128_GCM_SHA256 (0x00a0)
    Cipher Suite: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x009e)
    Cipher Suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (0x0067)
    Cipher Suite: TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 (0x0040)
    Cipher Suite: TLS_DH_RSA_WITH_AES_128_CBC_SHA256 (0x003f)
    Cipher Suite: TLS_DH_DSS_WITH_AES_128_CBC_SHA256 (0x003e)
    Cipher Suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x0033)
    Cipher Suite: TLS_DHE_DSS_WITH_AES_128_CBC_SHA (0x0032)
    Cipher Suite: TLS_DH_RSA_WITH_AES_128_CBC_SHA (0x0031)
    Cipher Suite: TLS_DH_DSS_WITH_AES_128_CBC_SHA (0x0030)
    Cipher Suite: TLS_RSA_WITH_AES_128_GCM_SHA256 (0x009c)
    Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA256 (0x003c)
    Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA (0x002f)
    Cipher Suite: TLS_EMPTY_RENEGOTIATION_INFO_SCSV (0x00ff)
Шифры Synology OpenSSL

Я подумал, может быть, ни один из этих шифров TLSv1.2 недоступен на Synology, и попытался проверить это с помощью openssl:

me@my_server:~$ openssl ciphers -V | grep TLSv1.2 | sort
0x00,0x3C - AES128-SHA256           TLSv1.2 Kx=RSA      Au=RSA  Enc=AES(128)  Mac=SHA256
0x00,0x3D - AES256-SHA256           TLSv1.2 Kx=RSA      Au=RSA  Enc=AES(256)  Mac=SHA256
0x00,0x67 - DHE-RSA-AES128-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA256
0x00,0x6B - DHE-RSA-AES256-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA256
0x00,0x9C - AES128-GCM-SHA256       TLSv1.2 Kx=RSA      Au=RSA  Enc=AESGCM(128) Mac=AEAD
0x00,0x9D - AES256-GCM-SHA384       TLSv1.2 Kx=RSA      Au=RSA  Enc=AESGCM(256) Mac=AEAD
0x00,0x9E - DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(128) Mac=AEAD
0x00,0x9F - DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(256) Mac=AEAD
0x00,0xA8 - PSK-AES128-GCM-SHA256   TLSv1.2 Kx=PSK      Au=PSK  Enc=AESGCM(128) Mac=AEAD
0x00,0xA9 - PSK-AES256-GCM-SHA384   TLSv1.2 Kx=PSK      Au=PSK  Enc=AESGCM(256) Mac=AEAD
0x00,0xAA - DHE-PSK-AES128-GCM-SHA256 TLSv1.2 Kx=DHEPSK   Au=PSK  Enc=AESGCM(128) Mac=AEAD
0x00,0xAB - DHE-PSK-AES256-GCM-SHA384 TLSv1.2 Kx=DHEPSK   Au=PSK  Enc=AESGCM(256) Mac=AEAD
0x00,0xAC - RSA-PSK-AES128-GCM-SHA256 TLSv1.2 Kx=RSAPSK   Au=RSA  Enc=AESGCM(128) Mac=AEAD
0x00,0xAD - RSA-PSK-AES256-GCM-SHA384 TLSv1.2 Kx=RSAPSK   Au=RSA  Enc=AESGCM(256) Mac=AEAD
0xC0,0x23 - ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA256
0xC0,0x24 - ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA384
0xC0,0x27 - ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA256
0xC0,0x28 - ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA384
0xC0,0x2B - ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(128) Mac=AEAD
0xC0,0x2C - ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256) Mac=AEAD
0xC0,0x2F - ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD
0xC0,0x30 - ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
0xCC,0xA8 - ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH     Au=RSA  Enc=CHACHA20/POLY1305(256) Mac=AEAD
0xCC,0xA9 - ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
0xCC,0xAA - DHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=DH       Au=RSA  Enc=CHACHA20/POLY1305(256) Mac=AEAD
0xCC,0xAB - PSK-CHACHA20-POLY1305   TLSv1.2 Kx=PSK      Au=PSK  Enc=CHACHA20/POLY1305(256) Mac=AEAD
0xCC,0xAC - ECDHE-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=ECDHEPSK Au=PSK  Enc=CHACHA20/POLY1305(256) Mac=AEAD
0xCC,0xAD - DHE-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=DHEPSK   Au=PSK  Enc=CHACHA20/POLY1305(256) Mac=AEAD
0xCC,0xAE - RSA-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=RSAPSK   Au=RSA  Enc=CHACHA20/POLY1305(256) Mac=AEAD

Следующие шифры общие для Synology и Lorex DVR

(0x003c) RSA_WITH_AES_128_CBC_SHA256
(0x003d) RSA_WITH_AES_256_CBC_SHA256
(0x0067) DHE_RSA_WITH_AES_128_CBC_SHA256
(0x006b) DHE_RSA_WITH_AES_256_CBC_SHA256
(0x009c) RSA_WITH_AES_128_GCM_SHA256
(0x009d) RSA_WITH_AES_256_GCM_SHA384
(0x009e) DHE_RSA_WITH_AES_128_GCM_SHA256
(0x009f) DHE_RSA_WITH_AES_256_GCM_SHA384

Проведение захвата пакетов, когда DVR успешно отправляет уведомление, используя smtp сервер mail.com, показывает, что SSL-соединение mail.com использует шифр RSA_WITH_AES_256_GCM_SHA384 (0x009d). Так почему он не используется с сервером Synology MailPlus?

Я проверил с помощью openssl, что соединение starttls может быть установлено с этим шифром как для моего сервера, так и для mail.com, с помощью следующих команд

openssl s_client -tls1_2 -starttls smtp -crlf -connect smtp.mail.com:587 -ciphersuites 'TLS_RSA_WITH_AES_256_GCM_SHA384'
openssl s_client -tls1_2 -starttls smtp -crlf -connect smtp.mydomain.tld:587 -ciphersuites 'TLS_RSA_WITH_AES_256_GCM_SHA384'

Я заметил, что вывод соединения с mail.com заканчивается на “250 STARTTLS”, в то время как соединение с моим доменом заканчивается на “250 CHUNKING”. Я понятия не имею, что это может значить, нормально это или нет.

Synology MailPlus Postfix

Так что мое внимание переключилось на почтовый сервер. Я попробовал в интерфейсе Synology установить уровень профиля TLS/SSL на “Старая обратная совместимость” (Панель управления->Безопасность->Дополнительно), но поведение не изменилось. Затем я узнал о postconf, который выдает более 1000 значений…

Попытка получить настройки Postfix, связанные с шифрами, дала мне следующее:

me@my_server:/volume1/@appstore/MailPlus-Server/sbin$ ./postconf | grep -i cipher
lmtp_tls_ciphers = medium
lmtp_tls_exclude_ciphers =
lmtp_tls_mandatory_ciphers = medium
lmtp_tls_mandatory_exclude_ciphers =
milter_helo_macros = {tls_version} {cipher} {cipher_bits} {cert_subject} {cert_issuer}
smtp_tls_ciphers = medium
smtp_tls_exclude_ciphers =
smtp_tls_mandatory_ciphers = medium
smtp_tls_mandatory_exclude_ciphers =
smtpd_tls_ciphers = low
smtpd_tls_exclude_ciphers =
smtpd_tls_mandatory_ciphers = low
smtpd_tls_mandatory_exclude_ciphers =
smtpd_tls_no_renegotiate_ciphers = yes
tls_export_cipherlist = aNULL:-aNULL:HIGH:MEDIUM:LOW:EXPORT:+RC4:@STRENGTH
tls_high_cipherlist = aNULL:-aNULL:HIGH:@STRENGTH
tls_low_cipherlist = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA
tls_medium_cipherlist = aNULL:-aNULL:HIGH:MEDIUM:+RC4:@STRENGTH
tls_null_cipherlist = eNULL:!aNULL
tls_preempt_cipherlist = no
tls_session_ticket_cipher = aes-256-cbc
tlsproxy_tls_ciphers = $smtpd_tls_ciphers
tlsproxy_tls_exclude_ciphers = $smtpd_tls_exclude_ciphers
tlsproxy_tls_mandatory_ciphers = $smtpd_tls_mandatory_ciphers
tlsproxy_tls_mandatory_exclude_ciphers = $smtpd_tls_mandatory_exclude_ciphers

Итак, я вижу, что шифр 0x009d (AES256-GCM-SHA384) находится в tls_low_cipherlist, и smtpd_tls_ciphers = low и smtpd_tls_mandatory_ciphers = low.

Итак, я в тупике и решил спросить, может ли кто-то помочь мне, прежде чем я начну изучать, как работает postfix, или скажет, что я иду не по тому пути.

В резюме, почему TLS-соединение не устанавливается? Почему нет общего шифра?

мой окружение:

  • Synology DSM 7.1.1
  • MailPlus Server 3.1.6-11332 (Postfix 3.6.2)

Сообщения перезагрузки Postfix:

postfix[PID]: Postfix is running with backwards-compatible default settings
postfix[PID]: See http://www.postfix.org/COMPATIBILITY_README.html for details
postfix[PID]: To disable backwards compatibility use "postconf compatibility_level=3.6" and "postfix reload"
postfix/postfix-script[PID]: refreshing the Postfix mail system
postfix/master[PID]: reload -- version 3.6.2, configuration /var/packages/MailPlus-Server/target/etc

Ответ или решение

Ваше описание проблемы очень детализировано, и это отлично. Давайте разберем вашу ситуацию шаг за шагом, чтобы понять, почему TLS-сессия не устанавливается, и какие действия можно предпринять для решения проблемы.

Теория

Ваши текущие наблюдения показывают, что Synology MailPlus Server не может установить TLS-соединение с вашим Lorex DVR, указывая на ошибку "нет общих шифров". По результатам логов и Wireshark, проблема заключается в несовпадении поддерживаемых шифров на обоих конечных устройствах.

TLS (Transport Layer Security) протокол использует шифры для шифрования данных, передаваемых между сервером и клиентом. Ошибка "no shared cipher" означает, что ни один из шифров, предлагаемых клиентом (в данном случае, DVR), не воспринимается сервером как допустимый. Это обычно связано с различиями в версиях TLS или неправильной настройкой списка поддерживаемых шифров на сервере.

Пример

Из вашего описания видно, что DVR предлагает 31 набор шифров, среди которых присутствуют такие, как TLS_RSA_WITH_AES_256_GCM_SHA384, который успешно используется с сервером mail.com. Однако, ваш Synology MailPlus Server, несмотря на поддержку этого шифра согласно выводу openssl, не использует его, когда приходит попытка подключения от DVR.

Применение

Теперь, когда мы поняли, в чем может заключаться проблема, давайте попробуем сделать несколько шагов для ее исправления:

  1. Проверка и настройка конфигурации Postfix:

    • Убедитесь, что вы используете актуальные версии ПО: и Postfix, и OpenSSL на Synology должны быть последними стабильными версиями, чтобы исключить проблемы несовместимости из-за устаревших библиотек.

    • Проверьте настройки main.cf и master.cf файла Postfix для параметров, связанных с TLS. Обратите внимание на строки, касающиеся уровня шифров (smtpd_tls_ciphers, smtpd_tls_mandatory_ciphers) и откорректируйте их. У вас smtpd_tls_ciphers = low, что включает в себя шифр 0x009d, однако убедитесь, что список шифров включает именно те, которые предлагает ваш DVR.

  2. Тестирование чрез OpenSSL:

    • Используйте openssl s_client для тестирования соединения с вашим MailPlus Server, чтобы убедиться, что он правильно принимает нужный набор команд. Если конкретный шифр не поддерживается, это может быть связано с иными ограничениями на уровне сервера. Пример команды:
      openssl s_client -starttls smtp -crlf -connect smtp.mydomain.tld:587 -cipher 'AES256-GCM-SHA384'
  3. Проверка политики безопасности Synology:

    • Если у вас в безопасности Synology установлены ограничения по профилю SSL, попробуйте временно переключить на более слабый профиль для тестирования, как вы уже частично пробовали (Old backward compatibility). Данные изменения могут позволить большему числу шифров быть совместимыми в этой конфигурации.
  4. Обновление конфигурации:

    • Примените команду postfix reload после внесения изменений, чтобы обновить конфигурацию. Убедитесь, что после действия сервер Postfix действует согласно новым настройкам.
  5. Советы по отладке:

    • Используйте команды postconf для вывода текущих настроек Postfix, что же ещё может влиять на шифры:
      postconf -n | grep tls
    • Кроме того, записывайте в логах любые изменения с maillog, чтобы следить за тем, как соединение проходит после ваших изменений.

Заключение

Ваши текущие результаты показывают, что основную часть анализа вы уже завершили, и ближайший фокус должен быть на конфигурации сервера, его совместимых шифрах и на сторонней политике безопасности, что может быть причиной вашего затруднения. Учитывая индикацию, что ваш DVR может успешно подключаться к внешнему smtp-серверу, проблема, вероятнее всего, кроется в настройки серверного ПО на стороне Synology. Продолжая работать в этом направлении, вы должны быть в состоянии наладить работу TLS-сессии и добиваться успешного установления соединения.

Оцените материал
Добавить комментарий

Капча загружается...