15 Шифрование

Обзор

Zabbix поддерживает шифрованный обмен данными между компонентами Zabbix с использованием протокола Transport Layer Security (TLS) версий 1.2 и 1.3 (в зависимости от криптографической библиотеки). Поддерживается шифрование на основе сертификатов и на основе предварительно разделяемых ключей.

Шифрование можно настроить для соединений:

Шифрование является необязательным и настраивается для отдельных компонентов:

  • Некоторые прокси и агенты можно настроить на использование шифрования на основе сертификатов при взаимодействии с сервером, в то время как другие могут использовать шифрование на основе предварительно разделяемых ключей, а третьи могут продолжать использовать нешифрованный обмен данными (как и раньше).
  • Сервер (прокси) может использовать разные настройки шифрования для разных узлов сети.

Программы-демоны 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 могут использовать:

Для указания шифрования между компонентами 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
none\_none.png Без шифрования Без шифрования Зашифрованные, на основе сертификатов и на основе PSK
cert\_cert.png Зашифрованные, на основе сертификатов Зашифрованные, на основе сертификатов Без шифрования и зашифрованные на основе PSK
psk\_psk.png Зашифрованные, на основе PSK Зашифрованные, на основе PSK Без шифрования и зашифрованные на основе сертификатов
psk\_none\_psk.png Зашифрованные, на основе PSK Без шифрования и зашифрованные на основе PSK Зашифрованные на основе сертификатов
cert\_all.png Зашифрованные, на основе сертификатов Без шифрования, на основе 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