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

Каждый общий ключ (pre-shared key, PSK) В Подсистеме на самом деле является парой из:

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

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

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

"e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9".

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

В Подсистеме имеется ограничение на размеры идентификатора и значения PSK, в некоторых случаях криптобиблиотеки могут иметь меньшее ограничение (таблица 169).

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

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

Каждая строка идентификации PSK должна иметь в паре с ней только одно значение. Пользователь несет ответственность за обеспечение того, что не будет двух ключей с одинаковыми строками идентификации, но разными значениями. Несоблюдение этого требования может привести к непредсказуемым сбоям связи между компонентами Подсистемы, использующими общие ключи с этими строками идентификации 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" генерирует файл базы данных с идентификатором ключа и со связанным с ним значением. Подсистема ожидает в файле с ключом только значение, поэтому строку идентификации и двоеточие (":") нужно удалить.

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

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

1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952

Далее задать права доступа к PSK-файлу – он должен быть доступен для чтения только пользователю Подсистемы.

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

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

Агент будет подключаться к Серверу (активные проверки) и принимать от Сервера и zabbix_get только те соединения, которые используют общий ключ. Идентификатором ключа будет "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 для соединения Сервер – активный Прокси (пример)

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

e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9

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

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

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

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

Настроить общий ключ для этого Прокси в веб-интерфейсе. Перейти на "Администрирование → Прокси", выбрать Прокси, перейти на вкладку "Шифрование". Переключить "Соединения с Прокси" на PSK. Вставить в поле "Идентификатор PSK" значение "PSK 002" и "e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9" в поле "PSK". Нажать Обновить.

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

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