17. Шифрование
Обзор
Zabbix поддерживает шифрование коммуникаций между компонентами Zabbix с использованием протокола Transport Layer Security (TLS) версий 1.2 и 1.3 (в зависимости от криптографической библиотеки). Поддерживается шифрование на основе сертификата и на основе общего ключа (pre-shared key, PSK).
Шифрование может быть настроено для соединений:
- между Zabbix сервером, Zabbix прокси, Zabbix агентом, веб-сервисом Zabbix, утилитами zabbix_sender и zabbix_get
- к базе данных Zabbix от веб-интерфейса Zabbix и сервера/прокси
Шифрование опционально и настраивается для отдельных компонентов:
- некоторые прокси и агенты можно настроить на использование шифрования с сервером на основе сертификатов, в то время как другие могут использовать шифрование на основе общего ключа, а остальные могут продолжать использовать незашифрованные соединения (как и ранее)
- сервер (прокси) может использовать различные настройки шифрования для разных узлов сети
Программы Zabbix демонов слушают один порт для зашифрованных и незашифрованных входящих подключений. Добавление шифрования не потребует открывать новые порты на брандмауэрах.
Ограничения
- Закрытые ключи хранятся в виде обычного текста в файлах, которые компоненты Zabbix считывают в процессе запуска.
- Общие ключи вводятся в веб-интерфейсе Zabbix и хранятся в базе данных Zabbix в виде обычного текста.
- Встроенное шифрование не защищает коммуникации:
- между веб-сервером с веб-интерфейсом Zabbix и веб-браузером на строне пользователя
- между веб-интерфейсом Zabbix и сервером Zabbix
- В данный момент каждое шифрованное соединение начинается с полных TLS переговоров (TLS handshake), кэширование сессий и мандаты (tickets) не реализованы.
- Добавление шифрования увеличивает время на проверки элементов данных и действия, в зависимости от сетевых задержек:
- Например, если задержка пакета составляет 100мс, тогда открытие TCP соединения и отправка незашифрованного запроса займет около 200мс. При наличии шифрования добавится около 1000 мс на установление TLS соединения.
- Возможно, потребуется увеличить время ожидания (тайм-ауты), в противном случае некоторые элементы данных и действия, выполняющие удалённые скрипты на агентах, смогут работать с незашифрованными соединениями, но не смогут при шифрованном соединении (будет превышено время ожидания).
- Шифрование не поддерживается сетевым обнаружением. Проверки агентов 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;
новые функции API
tls_*(), специфичные для LibreSSL, не используются. Компоненты 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).
Если вы планируете использовать общие ключи (pre-shared keys, 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 не обеспечивают совершенную прямую секретность.
Управление зашифрованными соединениями
Соединения в Zabbix могут использовать:
- отсутствие шифрования (по умолчанию)
- шифрование RSA на основе сертификатов
- шифрование на основе PSK
Имеется два важных параметра, которые используются, чтобы указать шифрование между компонентами Zabbix:
- TLSConnect — указывает, какое шифрование использовать для исходящих соединений (unencrypted, PSK или certificate);
- TLSAccept — указывает, какие виды соединений разрешены для входящих соединений (unencrypted, PSK или certificate). Можно указать одно или несколько значений.
TLSConnect используется в файлах конфигурации Zabbix прокси (в активном режиме, задаёт только подключения к серверу) и Zabbix агентов (для активных проверок). В веб-интерфейсе Zabbix эквивалентом параметру TLSConnect является поле Подключения к узлу сети на вкладке Сбор данных → Узлы сети → <какой-то узел сети> → Шифрование (Data collection → Hosts → <somehost> → Encryption) и поле Подключения к прокси (Connections to proxy) на вкладке Администрирование → Прокси → <какой-то прокси> → Шифрование (Administration → Proxies → <some proxy> → Encryption). Если настроенный тип шифрования для соединения завершится неудачей, другие типы шифрования не будут опробованы
TLSAccept используется в файлах конфигурации Zabbix прокси (в пассивном режиме, задаёт только соединения от сервера) и Zabbix агента (для пассивных проверок). В веб-интерфейсе Zabbix эквивалентом параметра TLSAccept является поле Соединения с узла сети (Connections from host) на вкладке Сбор данных → Узлы сети → <какой-то узел сети> → Шифрование (Data collection → Hosts → <somehost> → 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 (траппер элементы данных) будут приниматься только зашифрованные соединения на основе сертификатов.
Скорее всего, вы настроите входящие и исходящие соединения на использование одного типа шифрования или без шифрования вовсе. Но, технически, имеется возможность настроить шифрование асимметрично, например, шифрование на основе сертификатов для входящих подключений и на основе PSK для исходящих подключений.
Настройки шифрования по каждому узлу сети отображаются в веб-интерфейсе Zabbix Сбор данных →Узлы сети (Data collection → Hosts), в столбце Шифрование агента (Agent encryption). Примеры отображения настроек:
| Пример | Подключения К узлу сети | Разрешённые подключения ОТ узла сети | Отклонённые подключения С узла сети |
|---|---|---|---|
![]() |
Незашифровано | Незашифровано | Зашифровано, на основе сертификата и 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 в соответствии с вашей средой.
Если вы не используете сертификаты, а только общий ключ, тестовый файл может быть проще:
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 и TLS 1.2 ECDHE-*.
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 использует только шифрование на основе общего ключа и не использует сертификаты, то достаточно только одной строки:
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




