15 Шифрование
Обзор
Zabbix поддерживает шифрованный обмен данными между компонентами Zabbix с использованием протокола Transport Layer Security (TLS) версий 1.2 и 1.3 (в зависимости от криптографической библиотеки). Поддерживается шифрование на основе сертификатов и на основе предварительно разделяемых ключей.
Шифрование можно настроить для соединений:
- Между сервером Zabbix, прокси Zabbix, агентом Zabbix, веб-службой Zabbix, утилитами zabbix_sender и zabbix_get
- С базой данных Zabbix из веб-интерфейса Zabbix и сервера/прокси
- Между веб-интерфейсом Zabbix и сервером Zabbix
Шифрование является необязательным и настраивается для отдельных компонентов:
- Некоторые прокси и агенты можно настроить на использование шифрования на основе сертификатов при взаимодействии с сервером, в то время как другие могут использовать шифрование на основе предварительно разделяемых ключей, а третьи могут продолжать использовать нешифрованный обмен данными (как и раньше).
- Сервер (прокси) может использовать разные настройки шифрования для разных узлов сети.
Программы-демоны Zabbix используют один порт прослушивания для шифрованных и нешифрованных входящих соединений. Добавление шифрования не требует открытия новых портов в межсетевых экранах.
Ограничения
- Закрытые ключи хранятся в открытом виде в файлах, доступных для чтения компонентами Zabbix во время запуска.
- Предварительно разделяемые ключи вводятся в веб-интерфейсе Zabbix и хранятся в базе данных Zabbix в открытом виде.
- Встроенное шифрование не защищает обмен данными между веб-сервером, на котором работает веб-интерфейс Zabbix, и веб-браузером пользователя.
- В настоящее время каждое зашифрованное соединение устанавливается с полным TLS-рукопожатием; кэширование сессий и tickets не реализованы.
- Добавление шифрования увеличивает время проверок элементов данных и выполнения действий в зависимости от сетевой задержки:
- Например, если задержка пакета составляет 100 мс, то открытие TCP-соединения и отправка незашифрованного запроса занимает около 200 мс. При использовании шифрования для установления TLS-соединения добавляется около 1000 мс.
- Может потребоваться увеличить тайм-ауты, иначе некоторые элементы данных и действия, запускающие удалённые скрипты на агентах, могут работать с незашифрованными соединениями, но завершаться по тайм-ауту при использовании шифрования.
- Шифрование не поддерживается обнаружением сети. Проверки агента Zabbix, выполняемые в процессе обнаружения сети, будут незашифрованными, и если агент Zabbix настроен на отклонение незашифрованных соединений, такие проверки не будут успешными.
Компиляция Zabbix с поддержкой шифрования
Для поддержки шифрования Zabbix должен быть скомпилирован и слинкован с одной из поддерживаемых криптографических библиотек:
- GnuTLS — начиная с версии 3.1.18
- OpenSSL — версии 1.0.1, 1.0.2, 1.1.0, 1.1.1, 3.0.x
- LibreSSL — протестировано с версиями 2.7.4, 2.8.2:
- LibreSSL 2.6.x не поддерживается
- LibreSSL поддерживается как совместимая замена OpenSSL;
новые специфичные для LibreSSL функции API
tls_*()не используются. Компоненты Zabbix, скомпилированные с LibreSSL, не смогут использовать PSK, можно будет использовать только сертификаты.
Подробнее о настройке SSL для веб-интерфейса Zabbix можно узнать в этих рекомендациях.
Библиотека выбирается указанием соответствующей опции для скрипта "configure":
--with-gnutls[=DIR]--with-openssl[=DIR](также используется для LibreSSL)
Например, чтобы настроить исходные коды для сервера и агента с OpenSSL, можно использовать что-то вроде:
./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openssl
Разные компоненты Zabbix могут быть скомпилированы с разными криптографическими библиотеками (например, сервер с OpenSSL, агент с GnuTLS).
Если вы планируете использовать предварительно разделяемые ключи (PSK), рекомендуется использовать библиотеки GnuTLS или OpenSSL 1.1.0 (или новее) в компонентах Zabbix, использующих PSK. Библиотеки GnuTLS и OpenSSL 1.1.0 поддерживают наборы шифров PSK с Perfect Forward Secrecy. Более старые версии библиотеки OpenSSL (1.0.1, 1.0.2c) также поддерживают PSK, однако доступные наборы шифров PSK не обеспечивают Perfect Forward Secrecy.
Управление шифрованием соединений
Соединения в Zabbix могут использовать:
- без шифрования (по умолчанию)
- шифрование на основе RSA-сертификатов
- шифрование на основе PSK
Для указания шифрования между компонентами Zabbix используются два важных параметра:
- TLSConnect — указывает, какое шифрование использовать для исходящих соединений (без шифрования, PSK или сертификат)
- TLSAccept — указывает, какие типы соединений разрешены для входящих соединений (без шифрования, PSK или сертификат). Можно указать одно или несколько значений.
TLSConnect используется в конфигурационных файлах Zabbix прокси (в активном режиме указывает только соединения с сервером) и Zabbix агент (для активных проверок). В веб-интерфейсе Zabbix эквивалентом TLSConnect является поле Connections to host на вкладке Data collection → Hosts → <some host> → Encryption и поле Connections to proxy на вкладке Administration → Proxies → <some proxy> → Encryption. Если настроенный тип шифрования для соединения не сработает, другие типы шифрования пробоваться не будут.
TLSAccept используется в конфигурационных файлах Zabbix прокси (в пассивном режиме указывает только соединения от сервера) и Zabbix агент (для пассивных проверок). В веб-интерфейсе Zabbix эквивалентом TLSAccept является поле Connections from host на вкладке Data collection → Hosts → <some host> → Encryption и поле Connections from proxy на вкладке Administration → Proxies → <some proxy> → Encryption.
Обычно для входящих соединений настраивается только один тип шифрования. Однако может потребоваться сменить тип шифрования, например, с нешифрованного на основанный на сертификатах, с минимальным временем простоя и возможностью отката. Для этого:
- Установите
TLSAccept=unencrypted,certв конфигурационном файле агента и перезапустите Zabbix агент - Проверьте соединение с агентом с помощью zabbix_get, используя сертификат. Если всё работает, можно перенастроить шифрование для этого агента в веб-интерфейсе Zabbix на вкладке Data collection → Hosts → <some host> → Encryption, установив Connections to host в значение "Certificate".
- Когда кэш конфигурации сервера обновится (и конфигурация прокси также обновится, если узел сети мониторится через прокси), соединения с этим агентом будут зашифрованы
- Если всё работает как ожидается, можно установить
TLSAccept=certв конфигурационном файле агента и перезапустить Zabbix агент. Теперь агент будет принимать только зашифрованные соединения на основе сертификатов. Нешифрованные соединения и соединения на основе PSK будут отклоняться.
Аналогичным образом это работает на сервере и прокси. Если в веб-интерфейсе Zabbix в конфигурации узла сети поле Connections from host установлено в значение "Certificate", то от агента (активные проверки) и zabbix_sender (элементы данных trapper) будут приниматься только зашифрованные соединения на основе сертификатов.
Скорее всего, вы настроите входящие и исходящие соединения на использование одного и того же типа шифрования или вообще без шифрования. Однако технически возможно настроить их асимметрично, например, использовать шифрование на основе сертификатов для входящих соединений и шифрование на основе PSK для исходящих.
Конфигурация шифрования для каждого узла сети отображается в веб-интерфейсе Zabbix в разделе Data collection → Hosts в столбце Agent encryption. Например:
| Example | Connections to host | Allowed connections from host | Rejected connections from host |
|---|---|---|---|
![]() |
Без шифрования | Без шифрования | Зашифрованные, на основе сертификатов и на основе PSK |
![]() |
Зашифрованные, на основе сертификатов | Зашифрованные, на основе сертификатов | Без шифрования и зашифрованные на основе PSK |
![]() |
Зашифрованные, на основе PSK | Зашифрованные, на основе PSK | Без шифрования и зашифрованные на основе сертификатов |
![]() |
Зашифрованные, на основе PSK | Без шифрования и зашифрованные на основе PSK | Зашифрованные на основе сертификатов |
![]() |
Зашифрованные, на основе сертификатов | Без шифрования, на основе PSK или на основе сертификатов | - |
По умолчанию соединения не шифруются. Шифрование необходимо настраивать отдельно для каждого узла сети и прокси.
zabbix_get и zabbix_sender с шифрованием
См. страницы руководства zabbix_get и zabbix_sender по их использованию с шифрованием.
Наборы шифров
По умолчанию наборы шифров настраиваются внутренним образом во время запуска Zabbix.
Также поддерживаются пользовательские наборы шифров для GnuTLS и OpenSSL. Пользователи могут настроить наборы шифров в соответствии со своими политиками безопасности. Использование этой возможности необязательно (встроенные наборы шифров по умолчанию по-прежнему работают).
Для криптографических библиотек, скомпилированных с настройками по умолчанию, встроенные в Zabbix правила обычно приводят к следующим наборам шифров (в порядке от более высокого к более низкому приоритету):
| Библиотека | Наборы шифров сертификатов | Наборы шифров PSK |
|---|---|---|
| GnuTLS 3.1.18 | TLS_ECDHE_RSA_AES_128_GCM_SHA256 TLS_ECDHE_RSA_AES_128_CBC_SHA256 TLS_ECDHE_RSA_AES_128_CBC_SHA1 TLS_RSA_AES_128_GCM_SHA256 TLS_RSA_AES_128_CBC_SHA256 TLS_RSA_AES_128_CBC_SHA1 |
TLS_ECDHE_PSK_AES_128_CBC_SHA256 TLS_ECDHE_PSK_AES_128_CBC_SHA1 TLS_PSK_AES_128_GCM_SHA256 TLS_PSK_AES_128_CBC_SHA256 TLS_PSK_AES_128_CBC_SHA1 |
| OpenSSL 1.0.2c | ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-SHA256 AES128-SHA |
PSK-AES128-CBC-SHA |
| OpenSSL 1.1.0 | ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA |
ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA |
| OpenSSL 1.1.1d | TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA |
TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA |
Настраиваемые пользователем наборы шифров
Встроенные критерии выбора наборов шифров могут быть переопределены с помощью настроенных пользователем наборов шифров.
Настраиваемые пользователем наборы шифров — это функция, предназначенная для опытных пользователей, которые понимают наборы шифров TLS, их безопасность и последствия ошибок, а также уверенно выполняют диагностику проблем TLS.
Встроенные критерии выбора наборов шифров могут быть переопределены с помощью следующих параметров:
| Область переопределения | Параметр | Значение | Описание |
|---|---|---|---|
| Выбор набора шифров для сертификатов | TLSCipherCert13 | Допустимые OpenSSL 1.1.1 строки шифров для протокола TLS 1.3 (их значения передаются в функцию OpenSSL SSL_CTX_set_ciphersuites()). |
Критерии выбора набора шифров на основе сертификатов для TLS 1.3 Только OpenSSL 1.1.1 или новее. |
| TLSCipherCert | Допустимые OpenSSL строки шифров для TLS 1.2 или допустимые GnuTLS строки приоритетов. Их значения передаются соответственно в функции SSL_CTX_set_cipher_list() или gnutls_priority_init(). |
Критерии выбора набора шифров на основе сертификатов для TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL) | |
| Выбор набора шифров для PSK | TLSCipherPSK13 | Допустимые OpenSSL 1.1.1 строки шифров для протокола TLS 1.3 (их значения передаются в функцию OpenSSL SSL_CTX_set_ciphersuites()). |
Критерии выбора набора шифров на основе PSK для TLS 1.3 Только OpenSSL 1.1.1 или новее. |
| TLSCipherPSK | Допустимые OpenSSL строки шифров для TLS 1.2 или допустимые GnuTLS строки приоритетов. Их значения передаются соответственно в функции SSL_CTX_set_cipher_list() или gnutls_priority_init(). |
Критерии выбора набора шифров на основе PSK для TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL) | |
| Объединенный список наборов шифров для сертификата и PSK | TLSCipherAll13 | Допустимые OpenSSL 1.1.1 строки шифров для протокола TLS 1.3 (их значения передаются в функцию OpenSSL SSL_CTX_set_ciphersuites()). |
Критерии выбора набора шифров для TLS 1.3 Только OpenSSL 1.1.1 или новее. |
| TLSCipherAll | Допустимые OpenSSL строки шифров для TLS 1.2 или допустимые GnuTLS строки приоритетов. Их значения передаются соответственно в функции SSL_CTX_set_cipher_list() или gnutls_priority_init(). |
Критерии выбора набора шифров для TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL) |
Чтобы переопределить выбор набора шифров в утилитах zabbix_get и zabbix_sender, используйте параметры командной строки:
--tls-cipher13--tls-cipher
Новые параметры являются необязательными. Если параметр не указан, используется внутреннее значение по умолчанию. Если параметр задан, он не может быть пустым.
Если установка значения TLSCipher* в криптографической библиотеке завершается ошибкой, то сервер, прокси или агент не запустится, а ошибка будет записана в журнал.
Важно понимать, в каких случаях применим каждый параметр.
Исходящие соединения
Самый простой случай — исходящие соединения:
- Для исходящих соединений с сертификатом используйте TLSCipherCert13 или TLSCipherCert
- Для исходящих соединений с PSK используйте TLSCipherPSK13 или TLSCipherPSK
- В случае утилит zabbix_get и zabbix_sender можно использовать параметры
командной строки
--tls-cipher13или--tls-cipher(шифрование однозначно задаётся параметром--tls-connect)
Входящие соединения
С входящими соединениями всё немного сложнее, поскольку правила зависят от конкретных компонентов и конфигурации.
Для Zabbix агент:
| Настройка соединения агента | Конфигурация шифров |
|---|---|
| TLSConnect=cert | TLSCipherCert, TLSCipherCert13 |
| TLSConnect=psk | TLSCipherPSK, TLSCipherPSK13 |
| TLSAccept=cert | TLSCipherCert, TLSCipherCert13 |
| TLSAccept=psk | TLSCipherPSK, TLSCipherPSK13 |
| TLSAccept=cert,psk | TLSCipherAll, TLSCipherAll13 |
Для Zabbix сервер и прокси:
| Настройка соединения | Конфигурация шифров |
|---|---|
| Исходящие соединения с использованием PSK | TLSCipherPSK, TLSCipherPSK13 |
| Входящие соединения с использованием сертификатов | TLSCipherAll, TLSCipherAll13 |
| Входящие соединения с использованием PSK, если у сервера нет сертификата | TLSCipherPSK, TLSCipherPSK13 |
| Входящие соединения с использованием PSK, если у сервера есть сертификат | TLSCipherAll, TLSCipherAll13 |
В двух таблицах выше можно заметить определённую закономерность:
- TLSCipherAll и TLSCipherAll13 можно указывать только в том случае, если используется объединённый список наборов шифров на основе сертификатов и PSK. Это происходит в двух случаях: сервер (прокси) с настроенным сертификатом (наборы шифров PSK всегда настраиваются на сервере, прокси, если криптографическая библиотека поддерживает PSK), агент, настроенный на приём входящих соединений как на основе сертификатов, так и на основе PSK
- в остальных случаях достаточно TLSCipherCert* и/или TLSCipherPSK*
В следующих таблицах показаны встроенные значения по умолчанию для
TLSCipher*. Они могут быть хорошей отправной точкой для задания
собственных пользовательских значений.
| Параметр | GnuTLS 3.6.12 |
|---|---|
| TLSCipherCert | NONE:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509 |
| TLSCipherPSK | NONE:+VERS-TLS1.2:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL |
| TLSCipherAll | NONE:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509 |
| Параметр | OpenSSL 1.1.1d 1 |
|---|---|
| TLSCipherCert13 | |
| TLSCipherCert | EECDH+aRSA+AES128:RSA+aRSA+AES128 |
| TLSCipherPSK13 | TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256 |
| TLSCipherPSK | kECDHEPSK+AES128:kPSK+AES128 |
| TLSCipherAll13 | |
| TLSCipherAll | EECDH+aRSA+AES128:RSA+aRSA+AES128:kECDHEPSK+AES128:kPSK+AES128 |
1 Значения по умолчанию отличаются для более старых версий OpenSSL (1.0.1, 1.0.2, 1.1.0), для LibreSSL, а также если OpenSSL скомпилирован без поддержки PSK.
Примеры пользовательской настройки наборов шифров
Ниже приведены примеры пользовательской настройки наборов шифров:
Тестирование строк шифров и разрешение только наборов шифров PFS
Чтобы увидеть, какие наборы шифров были выбраны, необходимо установить
DebugLevel=4 в конфигурационном файле или использовать параметр -vv
для zabbix_sender.
Прежде чем вы получите нужные наборы шифров, может потребоваться
поэкспериментировать с параметрами TLSCipher*. Неудобно
перезапускать Zabbix сервер, прокси или агент много раз только для того,
чтобы подстроить параметры TLSCipher*. Более удобные варианты —
использовать zabbix_sender или команду openssl. Покажем оба.
1. Использование zabbix_sender.
Создадим тестовый конфигурационный файл, например
/home/zabbix/test.conf, с синтаксисом файла zabbix_agentd.conf:
Hostname=nonexisting
ServerActive=nonexisting
TLSConnect=cert
TLSCAFile=/home/zabbix/ca.crt
TLSCertFile=/home/zabbix/agent.crt
TLSKeyFile=/home/zabbix/agent.key
TLSPSKIdentity=nonexisting
TLSPSKFile=/home/zabbix/agent.psk
Для этого примера вам понадобятся действительные сертификаты CA и агента, а также PSK. Скорректируйте пути и имена файлов сертификатов и PSK в соответствии с вашей средой.
Если вы не используете сертификаты, а только PSK, можно создать более простой тестовый файл:
Hostname=nonexisting
ServerActive=nonexisting
TLSConnect=psk
TLSPSKIdentity=nonexisting
TLSPSKFile=/home/zabbix/agentd.psk
Выбранные наборы шифров можно увидеть, запустив zabbix_sender (пример скомпилирован с OpenSSL 1.1.d):
$ zabbix_sender -vv -c /home/zabbix/test.conf -k nonexisting_item -o 1 2>&1 | grep ciphersuites
zabbix_sender [41271]: DEBUG: zbx_tls_init_child() certificate ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA
zabbix_sender [41271]: DEBUG: zbx_tls_init_child() PSK ciphersuites: TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA
zabbix_sender [41271]: DEBUG: zbx_tls_init_child() certificate and PSK ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA
Здесь показаны наборы шифров, выбранные по умолчанию. Эти значения по умолчанию выбраны для обеспечения совместимости с агентами Zabbix, работающими в системах со старыми версиями OpenSSL (начиная с 1.0.1).
В более новых системах вы можете усилить безопасность, разрешив только
несколько наборов шифров, например только наборы шифров с PFS (Perfect
Forward Secrecy). Попробуем разрешить только наборы шифров с PFS,
используя параметры TLSCipher*.
Результат не будет совместим с системами, использующими OpenSSL 1.0.1 и 1.0.2, если используется PSK. Шифрование на основе сертификатов должно работать.
Добавьте две строки в конфигурационный файл test.conf:
TLSCipherCert=EECDH+aRSA+AES128
TLSCipherPSK=kECDHEPSK+AES128
и выполните проверку снова:
$ zabbix_sender -vv -c /home/zabbix/test.conf -k nonexisting_item -o 1 2>&1 | grep ciphersuites
zabbix_sender [42892]: DEBUG: zbx_tls_init_child() certificate ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA
zabbix_sender [42892]: DEBUG: zbx_tls_init_child() PSK ciphersuites: TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
zabbix_sender [42892]: DEBUG: zbx_tls_init_child() certificate and PSK ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA
Списки "certificate ciphersuites" и "PSK ciphersuites" изменились — они стали короче, как и ожидалось, и содержат только наборы шифров TLS 1.3 и наборы шифров ECDHE-* для TLS 1.2.
2. TLSCipherAll и TLSCipherAll13 нельзя протестировать с помощью zabbix_sender; они не влияют на значение "certificate and PSK ciphersuites", показанное в примере выше. Чтобы настроить TLSCipherAll и TLSCipherAll13, необходимо экспериментировать с агентом, прокси или сервером.
Итак, чтобы разрешить только наборы шифров PFS, вам может понадобиться добавить до трёх параметров
TLSCipherCert=EECDH+aRSA+AES128
TLSCipherPSK=kECDHEPSK+AES128
TLSCipherAll=EECDH+aRSA+AES128:kECDHEPSK+AES128
в zabbix_agentd.conf, zabbix_proxy.conf и zabbix_server_conf, если в каждом из них настроен сертификат, а у агента также настроен PSK.
Если в вашей среде Zabbix используется только шифрование на основе PSK и не используются сертификаты, тогда нужен только один параметр:
TLSCipherPSK=kECDHEPSK+AES128
Теперь, когда вы понимаете, как это работает, вы можете протестировать
выбор набора шифров даже вне Zabbix с помощью команды openssl.
Проверим все три значения параметров TLSCipher*:
$ openssl ciphers EECDH+aRSA+AES128 | sed 's/:/ /g'
TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA
$ openssl ciphers kECDHEPSK+AES128 | sed 's/:/ /g'
TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
$ openssl ciphers EECDH+aRSA+AES128:kECDHEPSK+AES128 | sed 's/:/ /g'
TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
Возможно, вы предпочтёте openssl ciphers с параметром -V для более
подробного вывода:
$ openssl ciphers -V EECDH+aRSA+AES128:kECDHEPSK+AES128
0x13,0x02 - TLS_AES_256_GCM_SHA384 TLSv1.3 Kx=any Au=any Enc=AESGCM(256) Mac=AEAD
0x13,0x03 - TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD
0x13,0x01 - TLS_AES_128_GCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESGCM(128) Mac=AEAD
0xC0,0x2F - ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD
0xC0,0x27 - ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA256
0xC0,0x13 - ECDHE-RSA-AES128-SHA TLSv1 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA1
0xC0,0x37 - ECDHE-PSK-AES128-CBC-SHA256 TLSv1 Kx=ECDHEPSK Au=PSK Enc=AES(128) Mac=SHA256
0xC0,0x35 - ECDHE-PSK-AES128-CBC-SHA TLSv1 Kx=ECDHEPSK Au=PSK Enc=AES(128) Mac=SHA1
Аналогично можно протестировать строки приоритетов для GnuTLS:
$ gnutls-cli -l --priority=NONE:+VERS-TLS1.2:+ECDHE-RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
Cipher suites for NONE:+VERS-TLS1.2:+ECDHE-RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
TLS_ECDHE_RSA_AES_128_GCM_SHA256 0xc0, 0x2f TLS1.2
TLS_ECDHE_RSA_AES_128_CBC_SHA256 0xc0, 0x27 TLS1.2
Protocols: VERS-TLS1.2
Ciphers: AES-128-GCM, AES-128-CBC
MACs: AEAD, SHA256
Key Exchange Algorithms: ECDHE-RSA
Groups: GROUP-SECP256R1, GROUP-SECP384R1, GROUP-SECP521R1, GROUP-X25519, GROUP-X448, GROUP-FFDHE2048, GROUP-FFDHE3072, GROUP-FFDHE4096, GROUP-FFDHE6144, GROUP-FFDHE8192
PK-signatures: SIGN-RSA-SHA256, SIGN-RSA-PSS-SHA256, SIGN-RSA-PSS-RSAE-SHA256, SIGN-ECDSA-SHA256, SIGN-ECDSA-SECP256R1-SHA256, SIGN-EdDSA-Ed25519, SIGN-RSA-SHA384, SIGN-RSA-PSS-SHA384, SIGN-RSA-PSS-RSAE-SHA384, SIGN-ECDSA-SHA384, SIGN-ECDSA-SECP384R1-SHA384, SIGN-EdDSA-Ed448, SIGN-RSA-SHA512, SIGN-RSA-PSS-SHA512, SIGN-RSA-PSS-RSAE-SHA512, SIGN-ECDSA-SHA512, SIGN-ECDSA-SECP521R1-SHA512, SIGN-RSA-SHA1, SIGN-ECDSA-SHA1
Переход с AES128 на AES256
Zabbix использует AES128 в качестве встроенного значения по умолчанию для данных. Предположим, что вы используете сертификаты и хотите перейти на AES256 в OpenSSL 1.1.1.
Этого можно добиться, добавив соответствующие параметры в zabbix_server.conf:
TLSCAFile=/home/zabbix/ca.crt
TLSCertFile=/home/zabbix/server.crt
TLSKeyFile=/home/zabbix/server.key
TLSCipherCert13=TLS_AES_256_GCM_SHA384
TLSCipherCert=EECDH+aRSA+AES256:-SHA1:-SHA384
TLSCipherPSK13=TLS_CHACHA20_POLY1305_SHA256
TLSCipherPSK=kECDHEPSK+AES256:-SHA1
TLSCipherAll13=TLS_AES_256_GCM_SHA384
TLSCipherAll=EECDH+aRSA+AES256:-SHA1:-SHA384
Хотя будут использоваться только наборы шифров, относящиеся к сертификатам, параметры TLSCipherPSK* также определены, чтобы избежать их значений по умолчанию, которые включают менее безопасные шифры для более широкой совместимости. Наборы шифров PSK нельзя полностью отключить на сервере/прокси.
А в zabbix_agentd.conf:
TLSConnect=cert
TLSAccept=cert
TLSCAFile=/home/zabbix/ca.crt
TLSCertFile=/home/zabbix/agent.crt
TLSKeyFile=/home/zabbix/agent.key
TLSCipherCert13=TLS_AES_256_GCM_SHA384
TLSCipherCert=EECDH+aRSA+AES256:-SHA1:-SHA384




