Помогите Exim + TLS

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
alexbalkan
проходил мимо
Сообщения: 7
Зарегистрирован: 2017-04-21 23:31:57

Помогите Exim + TLS

Непрочитанное сообщение alexbalkan » 2017-04-22 2:01:29

Приветствую всех форумчан!
Настроил TLS в Exim по мануалам, вроде как работает и не работает.

Код: Выделить всё

Exim version 4.86_2 #1 built 05-Jan-2017 13:29:10 Copyright (c) University of Cambridge, 1995 - 2015 (c) The Exim Maintainers and contributors in ACKNOWLEDGMENTS file, 2007 - 2015 Berkeley DB: Berkeley DB 5.3.28: (September 9, 2013) Support for: crypteq iconv() IPv6 PAM Perl Expand_dlfunc GnuTLS move_frozen_messages Content_Scanning DKIM Old_Demime DNSSEC PRDR OCSP Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmjz dbmnz dnsdb dsearch ldap ldapdn ldapm mysql nis nis0 passwd pgsql sqlite Authenticators: cram_md5 cyrus_sasl dovecot plaintext spa tls Routers: accept dnslookup ipliteral iplookup manualroute queryprogram redirect Transports: appendfile/maildir/mailstore/mbx autoreply lmtp pipe smtp
Почта отправляется и принимается. Но при анализе обмена почтовых серверов все время ошибка Encrypted Alert.

Код: Выделить всё

Вот что показывает tshark:
Content type:Alert (21) Version: TLS 1.2 (0x303) Length: 26 Alert Message: Encrypted Alert
Если я правильно понял, код 21:decryption_failed. Подскажите плиз, откуда начинать искать причину
Предпологаю, проблема с шифрацией
вот лог с gmail:

Код: Выделить всё

 1 0.000000000 64.45.my-host-ip -> 66.102.1.26  TCP 74 49686 → 25 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=82971841 TSecr=0 WS=512
  2 0.017056461  66.102.1.26 -> 64.45.my-host-ip TCP 74 25 → 49686 [SYN, ACK] Seq=0 Ack=1 Win=42408 Len=0 MSS=1380 SACK_PERM=1 TSval=2493808122 TSecr=82971841 WS=128
  3 0.017176498 64.45.my-host-ip -> 66.102.1.26  TCP 66 49686 → 25 [ACK] Seq=1 Ack=1 Win=29696 Len=0 TSval=82971845 TSecr=2493808122
  4 0.037502145  66.102.1.26 -> 64.45.my-host-ip SMTP 120 S: 220 mx.google.com ESMTP j20si16074112wrb.275 - gsmtp
  5 0.037575069 64.45.my-host-ip -> 66.102.1.26  TCP 66 49686 → 25 [ACK] Seq=1 Ack=55 Win=29696 Len=0 TSval=82971850 TSecr=2493808143
  6 0.037648561 64.45.my-host-ip -> 66.102.1.26  SMTP 86 C: EHLO my.smtp_host
  7 0.054262296  66.102.1.26 -> 64.45.my-host-ip TCP 66 25 → 49686 [ACK] Seq=55 Ack=21 Win=42496 Len=0 TSval=2493808159 TSecr=82971850
  8 0.057839826  66.102.1.26 -> 64.45.my-host-ip SMTP 234 S: 250 mx.google.com at your service, [64.45.my-host-ip] | 250 SIZE 157286400 | 250 8BITMIME | 250 STARTTLS | 250 ENHANCEDSTATUSCODES | 250 PIPELINING | 250 CHUNKING | 250 SMTPUTF8
  9 0.058006117 64.45.my-host-ip -> 66.102.1.26  SMTP 76 C: STARTTLS
 10 0.075068791  66.102.1.26 -> 64.45.my-host-ip SMTP 96 S: 220 2.0.0 Ready to start TLS
 11 0.098206668 64.45.my-host-ip -> 66.102.1.26  SSL 298 Client Hello
 12 0.116518386  66.102.1.26 -> 64.45.my-host-ip SSL 2694 [TCP Previous segment not captured] Continuation Data
 13 0.116980804  66.102.1.26 -> 64.45.my-host-ip TCP 1484 [TCP Out-Of-Order] 25 → 49686 [ACK] Seq=253 Ack=263 Win=43520 Len=1418 TSval=2493808221 TSecr=82971865
 14 0.117039648 64.45.my-host-ip -> 66.102.1.26  TCP 78 [TCP Window Update] 49686 → 25 [ACK] Seq=263 Ack=253 Win=35840 Len=0 TSval=82971870 TSecr=2493808180 SLE=1671 SRE=4299
 15 0.117069041 64.45.my-host-ip -> 66.102.1.26  TCP 66 49686 → 25 [ACK] Seq=263 Ack=4299 Win=38912 Len=0 TSval=82971870 TSecr=2493808221
 16 0.121388280 64.45.my-host-ip -> 66.102.1.26  TLSv1.2 192 Client Key Exchange, Change Cipher Spec, Hello Request, Hello Request
 17 0.138193012  66.102.1.26 -> 64.45.my-host-ip TLSv1.2 296 New Session Ticket, Change Cipher Spec, Hello Request, Hello Request
 18 0.142411698 64.45.my-host-ip -> 66.102.1.26  TLSv1.2 115 Application Data
 19 0.159474201  66.102.1.26 -> 64.45.my-host-ip TLSv1.2 249 Application Data
 20 0.159681085 64.45.my-host-ip -> 66.102.1.26  TLSv1.2 170 Application Data
 21 0.177026079  66.102.1.26 -> 64.45.my-host-ip TLSv1.2 138 Application Data
 22 0.214739983 64.45.my-host-ip -> 66.102.1.26  TCP 66 49686 → 25 [ACK] Seq=542 Ack=4784 Win=44544 Len=0 TSval=82971895 TSecr=2493808282
 23 0.411797338  66.102.1.26 -> 64.45.my-host-ip TLSv1.2 138 Application Data
 24 0.411889380 64.45.my-host-ip -> 66.102.1.26  TCP 66 49686 → 25 [ACK] Seq=542 Ack=4856 Win=44544 Len=0 TSval=82971944 TSecr=2493808517
 25 0.411906307  66.102.1.26 -> 64.45.my-host-ip TLSv1.2 139 Application Data
 26 0.411937408 64.45.my-host-ip -> 66.102.1.26  TCP 66 49686 → 25 [ACK] Seq=542 Ack=4929 Win=44544 Len=0 TSval=82971944 TSecr=2493808517
 27 0.418619753 64.45.my-host-ip -> 66.102.1.26  TLSv1.2 697 Application Data
 28 0.418706108 64.45.my-host-ip -> 66.102.1.26  TLSv1.2 767 Application Data
 29 0.435395116  66.102.1.26 -> 64.45.my-host-ip TCP 66 25 → 49686 [ACK] Seq=4929 Ack=1874 Win=46208 Len=0 TSval=2493808541 TSecr=82971945
 30 0.640660103  66.102.1.26 -> 64.45.my-host-ip TLSv1.2 149 Application Data
 31 0.678742705 64.45.my-host-ip -> 66.102.1.26  TCP 66 49686 → 25 [ACK] Seq=1874 Ack=5012 Win=44544 Len=0 TSval=82972011 TSecr=2493808746
 32 0.727571716 64.45.my-host-ip -> 66.102.1.26  TLSv1.2 101 Application Data
 33 0.727614377 64.45.my-host-ip -> 66.102.1.26  TLSv1.2 97 Encrypted Alert
 34 0.727645878 64.45.my-host-ip -> 66.102.1.26  TCP 66 49686 → 25 [FIN, ACK] Seq=1940 Ack=5012 Win=44544 Len=0 TSval=82972023 TSecr=2493808746
 35 0.744264435  66.102.1.26 -> 64.45.my-host-ip TCP 66 25 → 49686 [ACK] Seq=5012 Ack=1941 Win=46208 Len=0 TSval=2493808849 TSecr=82972023
 36 0.744929088  66.102.1.26 -> 64.45.my-host-ip TCP 66 25 → 49686 [FIN, ACK] Seq=5012 Ack=1941 Win=46208 Len=0 TSval=2493808850 TSecr=82972023
 37 0.744978857 64.45.my-host-ip -> 66.102.1.26  TCP 66 49686 → 25 [ACK] Seq=1941 Ack=5013 Win=44544 Len=0 TSval=82972027 TSecr=2493808850

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Помогите Exim + TLS

Непрочитанное сообщение xM » 2017-04-22 13:09:40

Какая библиотека у вас используется для TLS - OpenSSL, LibreSSL или GnuTLS?
IT voodoo blog https://kostikov.co

alexbalkan
проходил мимо
Сообщения: 7
Зарегистрирован: 2017-04-21 23:31:57

Помогите Exim + TLS

Непрочитанное сообщение alexbalkan » 2017-04-22 17:32:11

Как это узнать?

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Помогите Exim + TLS

Непрочитанное сообщение xM » 2017-04-22 19:24:33

alexbalkan писал(а): Как это узнать?
Посмотреть в своей системе зависимости.
IT voodoo blog https://kostikov.co

alexbalkan
проходил мимо
Сообщения: 7
Зарегистрирован: 2017-04-21 23:31:57

Помогите Exim + TLS

Непрочитанное сообщение alexbalkan » 2017-04-23 1:31:35

Подскажите плиз, как это сделать, посмотреть зависимости. Я пока не такой большой знаток системы. Ubuntu 16.04 у меня стоит, и как посмотреть зависимости TLS - OpenSSL, LibreSSL или GnuTLS я не знаю. Знаю точно что OpenSSL установлен

Отправлено спустя 1 час 31 минуту 13 секунд:
Очень странно, почему мой сервер начал устанавливать SSL сессию?

guest
проходил мимо

Помогите Exim + TLS

Непрочитанное сообщение guest » 2017-04-23 12:44:45

xM писал(а):
alexbalkan писал(а): Как это узнать?
Посмотреть в своей системе зависимости.
При чём здесь система?
exim -bV

alexbalkan
проходил мимо
Сообщения: 7
Зарегистрирован: 2017-04-21 23:31:57

Помогите Exim + TLS

Непрочитанное сообщение alexbalkan » 2017-04-23 16:16:14

В самом верху я выложил exim -bV

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Помогите Exim + TLS

Непрочитанное сообщение xM » 2017-04-23 23:12:11

undefined писал(а): exim -bV
И правда... :st:
Значит GnuTLS у вас.
А что сам Exim пишет в логах на эти соединения?
IT voodoo blog https://kostikov.co

alexbalkan
проходил мимо
Сообщения: 7
Зарегистрирован: 2017-04-21 23:31:57

Помогите Exim + TLS

Непрочитанное сообщение alexbalkan » 2017-04-24 2:14:01

Exim ничего не пишет, типа все ок.
Я как бы вроде разобрался сам, пришлось горы перечитать. Честно сказать не так сложно.
Я новичок,и остался без админа который практически все поднимал с нуля. Теперь приходится самому во все вникать, и куда не глянь для меня дебри. Пришлось прочесть работу TCP и затронул SSL/TLS. Но что интересно ни один из сторожил ничего не подсказали.
Проблема в том что я обратил внимание на (21) Encrypted Alert.
Но прочитав повнимательнее работу TLS вроде как разобрался. И тип сообщения 21 Alert это не код ошибки.
Первое с чего начал, это анализировать с чего начинается TLS сессия.
После установления TCP-соединения и перед тем, как начать обмен по протоколу TLS, клиент и сервер должны согласовать некоторые параметры: версию протокола, шифронабор, а так же проверить сертификаты.
В TLS используется сетевой порядок байтов (старший байт идёт первым, слева направо). Заголовок имеет длину 5 байтов.

Код: Выделить всё

Тип - это тип записи. Определено четыре типа: 
1) 20 (0x14) - сообщение Change Cipher Spec (CCS); 
2) 21 (0x15) - сообщение Alert (это не обязательно предупреждение, есть вполне "фатальные alert-ы");
3) 22 (0x16) - сообщение Handshake (установление соединения);
4) 23 (0x17) - Application Data (запись содержит данные приложения - то есть, полезную нагрузку).
При передаче информации, основные преобразования с шифрами и кодами аутентификации как раз происходят в блоке данных записи с типом 23 (0x17) Application Data.

Код: Выделить всё

               
                           |
         Record Layer      |  Alert Layer
                           |
                           |
  +----+----+----+----+----+----+----+
  | 21 |    |    |    |    |    |    |
  |0x15|    |    |  0 |  2 |    |    |
  +----+----+----+----+----+----+----+
    /               /      |
   /               /       |
  type: 21        /        |
                 /
                /
           length: 2
Эти сообщения содержат уровень серьезности и описание предупреждения.
Например, в случае, если сервер не смог корректно разобрать сообщение ClientHello,
он отвечает сообщением Alert, содержащим код ошибки Parse Error.

Код: Выделить всё

Alert severity               dec     hex
  ----------------------------------------
  WARNING                        1    0x01
  FATAL                          2    0x02

  Не полный список.
  TLS 1.2 Alert descriptions   dec     hex
  ----------------------------------------
  CLOSE_NOTIFY                   0    0x00
  UNEXPECTED_MESSAGE            10    0x0A
Когда соединение требует активного закрытия клиентом или сервером, Тип этого сообщения Alert должен быть CloseNotify (тип 0):

Код: Выделить всё

TLSv1.2 Record Layer: Encrypted Alert
0000   15 03 03 00 1a 00 00 00 00 00 00 00 06 cc 84 15  ................
0010   52 a4 5b fc 7e e6 34 b9 09 a7 1d 4d 19 cf 02     R.[.~.4....M...
15     - тип сообщения Alert
03 03 - версия TLS 1.2
00 01 - длина пакета данных
00 00 - код сообщения
И это сообщение я получаю в конце сессии. Если бы это было ошибкой, она бы вылезла на много ранее, во время handshake.
Нужна оценка
Может где-то здесь ошибка, знающих просьба подсказать, или подскажите что верное направление!

И вот еще вопрос, этап Finished после Handshake

Код: Выделить всё

TLSv1.2 Record Layer: Handshake Protocol: Multiple Handshake Messages
0000   16 03 03 00 28 00 00 00 00 00 00 00 00 9e c3 31  ....(..........1
0010   1d 97 db df ab cf ac 35 c7 36 13 42 8d 18 10 3e  .......5.6.B...>
0020   f1 70 5c 9a a7 7b 7d c7 31 be 09 af 88           .p\..{}.1....
Finished. Это сообщение передаётся в зашифрованной TLS-записи, так как следует за сигналом ChangeCipherSpec, обозначает
что клиент и сервер согласовали эти параметры именно друг с другом и является моментом перехода к защищённому обмену информацией. Finished является первым защищённым сообщением, в рамках нового сеанса TLS. Клиентское Finished-сообщение содержит хэш и MAC от всех предыдущих handshake-сообщений отправленных обеими сторонами. Серверное также содержит хэш и MAC от предыдущих сообщений, включая клиентское Finished
Вопрос: 16 байт Handshake Protocol: Hello Request 00 00 00 00 00 00 00 00 которые идут после 16 03 03 00 28, что это? Почему все ноли? Может это особенность шифра? Hello Request = 00 Подскажите плиз.

Отправлено спустя 11 минут 51 секунду:
Ошибочка, не 16 а 8 байт после 16 03 03 00 28. Два Hello Request содержащие по 4 байта

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Помогите Exim + TLS

Непрочитанное сообщение xM » 2017-04-24 11:14:00

alexbalkan писал(а): Exim ничего не пишет, типа все ок.
Ну значит так и есть. Т.е. никаких проблем с TLS нет у вас.
Вангую примерно такую картину. Wireshark не поддерживает (не настроен?) разбор какого-то из современных форматов сессии / шифрования и, соответственно, выдаёт данную ошибку. И, скорее всего, это что-то в районе Diffie-Helmann. Я бы посмотрел, для начала, имеет ли он возможность (доступ) получить ключи DH.
Вообще, докопаться до корней это, конечно, хорошо. Но в данном случае, мне представляется, излишне.
IT voodoo blog https://kostikov.co