Шифрование с использованием предварительно общих ключей

Обзор

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

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

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

Значение PSK — это труднопредсказуемая строка шестнадцатеричных цифр, например, "e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9".

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

В Zabbix существуют ограничения на размер PSK identity и значения PSK; в некоторых случаях криптографическая библиотека может иметь более низкий предел:

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

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

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

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

Генерация 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 для связи сервер-агент (пример)

На узле сети агента запишите значение 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:

  1. Перейдите в: Сбор данных > Узлы сети.
  2. Выберите узел сети и нажмите вкладку Шифрование.

Пример:

psk\_config.png

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

Когда кэш конфигурации будет синхронизирован с базой данных, новые подключения будут использовать 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.

Устранение неполадок с PSK

PSK содержит нечетное количество шестнадцатеричных цифр

Прокси или агент не запускается, сообщение в журнале прокси или агента:

invalid PSK in file "/home/zabbix/zabbix_proxy.psk"
Строка идентификатора PSK длиной более 128 байт передается в GnuTLS

В журнале клиента TLS:

gnutls_handshake() failed: -110 The TLS connection was non-properly terminated.

В журнале сервера TLS:

gnutls_handshake() failed: -90 The SRP username supplied is illegal.
Слишком длинное значение PSK, используемое с OpenSSL 1.1.1

В журнале на стороне подключения:

...Библиотека OpenSSL (версия OpenSSL 1.1.1  11 Sep 2018) инициализирована
...
...В zbx_tls_connect(): psk_identity:"PSK 1"
...zbx_psk_client_cb() запросил идентификатор PSK "PSK 1"
...Завершение zbx_tls_connect():FAIL error:'SSL_connect() set result code to SSL_ERROR_SSL: file ssl\statem\extensions_clnt.c line 801: error:14212044:SSL routines:tls_construct_ctos_early_data:internal error: TLS write fatal alert "internal error"'

В журнале на стороне принимающего:

...Сообщение от 123.123.123.123 не содержит заголовка. Сообщение проигнорировано.

Эта проблема обычно возникает при обновлении OpenSSL с 1.0.x или 1.1.0 до 1.1.1, если значение PSK длиннее 512 бит (PSK длиной 64 байта, введенный как 128 шестнадцатеричных цифр).

См. также: Ограничения размера значения