Использование общих ключей (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.