Вопрос или проблема
Моя цель и проблема
Я хочу, чтобы мой 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.
Применение
Теперь, когда мы поняли, в чем может заключаться проблема, давайте попробуем сделать несколько шагов для ее исправления:
-
Проверка и настройка конфигурации Postfix:
-
Убедитесь, что вы используете актуальные версии ПО: и Postfix, и OpenSSL на Synology должны быть последними стабильными версиями, чтобы исключить проблемы несовместимости из-за устаревших библиотек.
-
Проверьте настройки
main.cf
иmaster.cf
файла Postfix для параметров, связанных с TLS. Обратите внимание на строки, касающиеся уровня шифров (smtpd_tls_ciphers
,smtpd_tls_mandatory_ciphers
) и откорректируйте их. У васsmtpd_tls_ciphers = low
, что включает в себя шифр 0x009d, однако убедитесь, что список шифров включает именно те, которые предлагает ваш DVR.
-
-
Тестирование чрез OpenSSL:
- Используйте
openssl s_client
для тестирования соединения с вашим MailPlus Server, чтобы убедиться, что он правильно принимает нужный набор команд. Если конкретный шифр не поддерживается, это может быть связано с иными ограничениями на уровне сервера. Пример команды:openssl s_client -starttls smtp -crlf -connect smtp.mydomain.tld:587 -cipher 'AES256-GCM-SHA384'
- Используйте
-
Проверка политики безопасности Synology:
- Если у вас в безопасности Synology установлены ограничения по профилю SSL, попробуйте временно переключить на более слабый профиль для тестирования, как вы уже частично пробовали (Old backward compatibility). Данные изменения могут позволить большему числу шифров быть совместимыми в этой конфигурации.
-
Обновление конфигурации:
- Примените команду
postfix reload
после внесения изменений, чтобы обновить конфигурацию. Убедитесь, что после действия сервер Postfix действует согласно новым настройкам.
- Примените команду
-
Советы по отладке:
- Используйте команды
postconf
для вывода текущих настроек Postfix, что же ещё может влиять на шифры:postconf -n | grep tls
- Кроме того, записывайте в логах любые изменения с
maillog
, чтобы следить за тем, как соединение проходит после ваших изменений.
- Используйте команды
Заключение
Ваши текущие результаты показывают, что основную часть анализа вы уже завершили, и ближайший фокус должен быть на конфигурации сервера, его совместимых шифрах и на сторонней политике безопасности, что может быть причиной вашего затруднения. Учитывая индикацию, что ваш DVR может успешно подключаться к внешнему smtp-серверу, проблема, вероятнее всего, кроется в настройки серверного ПО на стороне Synology. Продолжая работать в этом направлении, вы должны быть в состоянии наладить работу TLS-сессии и добиваться успешного установления соединения.