2. Использование общих ключей (pre-shared keys)

Обзор

Каждый предварительно согласованный ключ (PSK) в Zabbix фактически представляет собой пару:

  • несекретная строка идентификатора PSK;
  • секретное строковое значение PSK.

Строка идентификатора PSK представляет собой непустую строку в кодировке UTF-8. Например, "PSK ID 001 Zabbix agentd". Это уникальное имя, по которому компоненты Zabbix обращаются к данному PSK. Не указывайте конфиденциальную информацию в строке идентификатора PSK — она передается по сети в незашифрованном виде.

Значение PSK представляет собой строку из шестнадцатеричных цифр, которую сложно угадать, например, e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9.

Никогда не используйте приведенные в документации примеры значений PSK в производственных средах. Вместо этого сгенерируйте уникальный криптографически защищенный PSK.

Ограничения размера

В Zabbix имеется ограничение на размеры идентификатора и значения PSK, в некоторых случаях криптобиблиотеки могут иметь меньшее ограничение:

Компонент Макс размер идентификатора PSK Мин размер значения PSK Макс размер значения PSK
Zabbix 128 UTF-8 символов 128-бит (16-байт PSK, введённые как 32 шестнадцатеричных цифры) 2048-бит (256-байт PSK, введённые как 512 шестнадцатеричных цифр)
GnuTLS 128 байт (может включать UTF-8 символы) - 2048-бит (256-байт PSK, введённые как 512 шестнадцатеричных цифр)
OpenSSL 1.0.x, 1.1.0 127 байт (может включать UTF-8 символы) - 2048-бит (256-байт PSK, введённые как 512 шестнадцатеричных цифр)
OpenSSL 1.1.1 127 байт (может включать UTF-8 символы) - 512-бит (64-байт PSK, введённые как 128 шестнадцатеричных цифр)
OpenSSL 1.1.1a and later 127 байт (может включать UTF-8 символы) - 2048-бит (256-байт PSK, введённые как 512 шестнадцатеричных цифр)

Веб-интерфейс Zabbix позволяет указать до 128 символов строки идентификатора PSK и до 2048-бит PSK вне зависимости от использованной крипто библиотеки.
Если некоторые компоненты Zabbix поддерживают меньшую длину, только пользователь несет ответственность за настройку идентификатора и значения PSK в соответствии с разрешённой в этих компонентах длиной.
Превышение ограничений длины приведёт к ошибкам в подключениях между компонентами Zabbix.

Перед тем как Zabbix сервер подключится к агенту с использованием общего ключа, сервер поищет идентификатор PSK и значение PSK этого агента в базе данных (в действительности в кэше конфигурации). Принимая подключение, агент использует идентификатор PSK и значение PSK из своего файла конфигурации. Если обе пары имеют одинаковые идентификаторы PSK и значения PSK, соединение может быть успешным.

Каждая строка идентификации PSK должна иметь в паре с ней только одно значение. Пользователь несет ответственность за обеспечение того, что не будет двух ключей с одинаковыми строками идентификации, но разными значениями. Несоблюдение этого требования может привести к непредсказуемым сбоям связи между компонентами Zabbix, использующими общие ключи с этими строками идентификации PSK.

Генерирование общего ключа

Например, 256-битный (32 байт) PSK можно сгенерировать при помощи следующих команд:

  • с OpenSSL:
$ openssl rand -hex 32
af8ced32dfe8714e548694e2d29e1a14ba6fa13f216cb35c19d0feb1084b0429
  • с GnuTLS:
$ psktool -u psk_identity -p database.psk -s 32
Generating a random key for user 'psk_identity'
Key stored to database.psk

$ cat database.psk 
psk_identity:9b8eafedfaae00cece62e85d5f4792c7d9c9bcc851b23216a1d300311cc4f7cb

Обратите внимание, что команда «psktool» выше генерирует файл базы данных с идентификатором ключа и со связанным с ним значением. Zabbix ожидает в файле с ключом только значение, поэтому строку идентификации и двоеточие («:») нужно оттуда удалить.

Настройка PSK для взаимодействия сервера и агента (пример)

На узле сети с агентом запишите сгенерированное выше значение PSK в файл, например /home/zabbix/zabbix_agentd.psk. Файл должен содержать значение PSK в первой строке.

Настройте права доступа к файлу PSK — он должен быть доступен для чтения только пользователю Zabbix.

Измените параметры TLS в файле конфигурации агента zabbix_agentd.conf, например, задайте:

TLSConnect=psk
TLSAccept=psk
TLSPSKFile=/home/zabbix/zabbix_agentd.psk
TLSPSKIdentity=PSK 001

Агент будет подключаться к серверу (активные проверки) и принимать от сервера и zabbix_get только подключения с использованием PSK. Идентификатор PSK будет иметь значение «PSK 001».

Перезапустите агент. Теперь можно проверить подключение с помощью zabbix_get, например:

zabbix_get -s 127.0.0.1 -k "system.cpu.load[all,avg1]" --tls-connect=psk --tls-psk-identity="PSK 001" --tls-psk-file=/home/zabbix/zabbix_agentd.psk

(Чтобы свести время простоя к минимуму, см. раздел о том, как изменить тип подключения в Управлении шифрованием подключений).

Настройте шифрование PSK для этого агента в веб-интерфейсе Zabbix:

  • Перейдите: Сбор данных → Узлы сети
  • Выберите узел сети и перейдите на вкладку Шифрование

Пример:

psk\_config.png

Все обязательные поля ввода отмечены красной звездочкой.

После синхронизации кэша конфигурации с базой данных новые подключения будут использовать PSK. Проверьте файлы журналов сервера и агента на наличие сообщений об ошибках.

Настройка PSK для соединения сервер - активный прокси (пример)

На хосте прокси запишите значение общего ключа в файл, например, /home/zabbix/zabbix_proxy.psk. Этот файл должен содержать ключ в первой строке текста, например:

e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9

Задайте права доступа к PSK файлу — он должен быть доступен для чтения только пользователю Zabbix.

Измените параметры TLS в файле конфигурации zabbix_proxy.conf; например, задайте:

TLSConnect=psk
TLSPSKFile=/home/zabbix/zabbix_proxy.psk
TLSPSKIdentity=PSK 002

Прокси будет подключаться к серверу, используя общий ключ. Идентификатором общего ключа будет «PSK 002».

(Чтобы свести к минимуму время простоя, смотрите как изменить тип подключения в Управлении зашифрованными соединениями).

Настройте общий ключ для этого прокси в веб-интерфейсе Zabbix. Перейдите на Администрирование → Прокси (Administration→Proxies), выберите прокси, перейдите на вкладку «Шифрование (Encryption)». Переключите «Соединения с прокси (Connections from proxy)» на PSK. Вставьте в поле «Идентификатор PSK (PSK identity)» значение «PSK 002» и «e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9» в поле «PSK». Нажмите «Обновить (Update)».

Перезапустите прокси. Он начнет использовать зашифрованные соединения к серверу на основе общего ключа. Проверьте файлы журналов сервера и прокси на предмет сообщений об ошибках.

В случае пассивных прокси процедура очень похожа. Разница лишь в том, что в файле конфигурации прокси необходимо задать TLSAccept=psk и переключить «Подключения к прокси (Connections to proxy)» в Zabbix веб-интерфейсе на PSK.