2. Использование общих ключей (pre-shared keys)
Обзор
Каждый общий ключ (pre-shared key, PSK) в Zabbix на самом деле является парой из:
- несекретной строки идентификации PSK,
- секретного значения строки PSK.
Строкой идентификации PSK является непустая строка UTF-8. Например, «PSK ID 001 Zabbix agentd». Это уникальное имя, по которому компоненты Zabbix ссылаются на этот конкретный общий ключ. Не помещайте чувствительную информацию в строку идентификации PSK — она передаётся по сети незашифрованной.
Значением PSK является сложно угадываемая строка из шестнадцатеричных цифр, например: «e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9».
Ограничения размера
В 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.
Генерация PSK
Например, PSK длиной 256 бит (32 байта) можно сгенерировать с помощью следующих команд:
- с 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" создает файл базы данных с идентификатором PSK и связанным с ним PSK. Zabbix ожидает в файле PSK только сам PSK, поэтому строку с идентификатором и двоеточие (':') следует удалить из файла.
Настройка PSK для связи server-agent (пример)
На узле сети агента запишите значение PSK в файл, например,
/home/zabbix/zabbix_agentd.psk. Файл должен содержать PSK в первой
текстовой строке, например:
1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952
Установите права доступа к файлу PSK - он должен быть доступен только для чтения пользователю Zabbix.
Отредактируйте параметры TLS в файле конфигурации агента Zabbix (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. Проверьте журналы сервера и агента на наличие сообщений об ошибках.
Настройка PSK для связи сервер - активный прокси (пример)
На прокси запишите значение PSK в файл, например,
/home/zabbix/zabbix_proxy.psk. Файл должен содержать PSK в первой
текстовой строке, например:
e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9
Установите права доступа к файлу PSK — он должен быть доступен на чтение только пользователю Zabbix.
Отредактируйте параметры TLS в файле конфигурации прокси Zabbix (zabbix_proxy.conf). Например, задайте:
TLSConnect=psk
TLSPSKFile=/home/zabbix/zabbix_proxy.psk
TLSPSKIdentity=PSK 002
Прокси будет подключаться к серверу с использованием PSK. Идентификатор PSK будет "PSK 002".
(Чтобы минимизировать время простоя, см. как изменить тип подключения в Управлении шифрованием соединений).
Настройте PSK для этого прокси в веб-интерфейсе Zabbix. Перейдите в
Administration→Proxies, выберите прокси, откройте вкладку "Encryption". В
"Connections from proxy" отметьте PSK. В поле "PSK identity" вставьте
"PSK 002", а в поле
"PSK" — значение
"e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9". Нажмите "Update".
Перезапустите прокси. Он начнет использовать зашифрованные соединения на основе PSK с сервером. Проверьте журналы сервера и прокси на наличие сообщений об ошибках.
Для пассивного прокси процедура очень похожа.
Единственное отличие — задайте TLSAccept=psk в файле конфигурации прокси Zabbix и установите Connections to proxy в веб-интерфейсе Zabbix в значение PSK.