5. Безопасные соединения с базой данных

Обзор

Этот раздел описывает шаги по настройке Zabbix и примеры конфигурации для безопасных соединений TLS между:

База данных Компоненты Zabbix
MySQL Веб-интерфейс Zabbix, Zabbix сервер, Zabbix прокси
PostgreSQL Веб-интерфейс Zabbix, Zabbix сервер, Zabbix прокси

За подробностями настроек шифрования соединений в СУБД, обратитесь к официальной документации вендора ([en]):

  • MySQL: соединения между исходным сервером базы данных и репликой.
  • MySQL: групповая репликация серверов баз данных и т.п.
  • PostgreSQL: опции шифрования.

Все примеры базируются на выпусках GA release MySQL CE (8.0) и PgSQL (13), доступных через официальные репозитории, используя CentOS 8.

Требования

Для настройки шифрования требуется следующее:

  • Поддерживаемая разработчиками операционная система с OpenSSL >=1.1.X или альтернатива.

Рекомендуется избегать ОС в статусе end-of-life, особенно в случае новых инсталляций

  • Механизм базы данных (РСУБД), установленный и поддерживаемый из официального репозитория, предоставленного разработчиком. Операционные системы нередко поставляются с устаревшими версиями программного обеспечения баз данных, в которых поддержка шифрования не реализована; например, системы на базе RHEL 7 и PostgreSQL 9.2, MariaDB 5.5 без поддержки шифрования.
Терминология

Выставление этой опции принуждает использовать TLS соединения к базе данных от Zabbix сервера/прокси и от веб-интерфейса к базе данных:

  • required — подключаться, используя TLS как транспортный режим без проверок идентичности;
  • verify_ca — подключаться, используя TLS и проверять сертификат;
  • verify_full — подключаться, используя TLS, проверять сертификат и проверять, что идентифкация базы данных (CN), указанная в DBHost, соответствует своему сертификату;

Настройка Zabbix

Веб-интерфейс и база данных

Защищенное подключение к базе данных можно настроить во время установки веб-интерфейса:

  • Установите флажок Шифрование TLS для базы данных на шаге Настройка подключения к базе данных, чтобы включить шифрование при передаче данных.
  • Установите флажок Проверять сертификат базы данных, который появляется после установки флажка Шифрование TLS, чтобы включить шифрование с использованием сертификатов.

Для MySQL флажок Шифрование TLS для базы данных отключен, если в поле Узел сети базы данных указано значение localhost, поскольку подключение с использованием файла сокета (в Unix) или общей памяти (в Windows) невозможно зашифровать.
Для PostgreSQL флажок Шифрование TLS отключен, если значение поля Узел сети базы данных начинается с косой черты или поле пусто.

В режиме шифрования TLS с сертификатами становятся доступны следующие параметры (если установлены оба флажка):

Параметр Описание
Файл центра сертификации TLS базы данных Укажите полный путь к действительному файлу центра сертификации (CA) TLS.
Файл ключа TLS базы данных Укажите полный путь к действительному файлу ключа TLS.
Файл сертификата TLS базы данных Укажите полный путь к действительному файлу сертификата TLS.
Проверка узла сети базы данных Установите этот флажок, чтобы активировать проверку узла сети.
Отключено для MYSQL, поскольку библиотека PHP MySQL не позволяет пропустить этап проверки сертификата узла сети.
Список шифров TLS базы данных Укажите пользовательский список действительных шифров. Формат списка шифров должен соответствовать стандарту OpenSSL.
Доступно только для MySQL.

Параметры TLS должны указывать на действительные файлы. Если они указывают на несуществующие или недействительные файлы, это приведет к ошибке авторизации.
Если файлы сертификатов доступны для записи, веб-интерфейс создает предупреждение в отчете Сведения о системе: «Файлы сертификатов TLS должны быть доступны только для чтения». (Отображается только в том случае, если пользователь PHP является владельцем сертификата.)

Сертификаты, защищенные паролями, не поддерживаются.

Сценарии использования

Веб-интерфейс Zabbix использует графический интерфейс, чтобы определить возможные опции: required,verify_ca, verify_full. Указывайте нужные опции на шаге Настройка соединения с базой данных помощника по установке. Эти опции соответствуют файлу конфигурации (zabbix.conf.php) следующим образом:

Параметр интерфейса Файл конфигурации Описание Результат
...
// Used for TLS connection.
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '';
$DB['VERIFY_HOST'] = false;
$DB['CIPHER_LIST'] = '';
...
Отметьте TLS шифрование базы данных
Оставьте Удостоверять сертификат базы данных неотмеченным
Включает режим «required».
...
$DB['ENCRYPTION'] = true;\\ $DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
$DB['VERIFY_HOST'] = false;
$DB['CIPHER_LIST'] = '';
...
1. Отметьте TLS шифрование базы данных и Удостоверять сертификат базы данных
2. Укажите путь к Файл TLS CA базы данных
Включает режим «verify_ca».
...
// Used for TLS connection with strictly defined Cipher list.
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '<key_file_path>';
$DB['CERT_FILE'] = '<key_file_path>';
$DB['CA_FILE'] = '<key_file_path>';
$DB['VERIFY_HOST'] = true;
$DB['CIPHER_LIST'] = '<cipher_list>';
...

Или:

...
// Used for TLS connection without Cipher list defined - selected by MySQL server
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '<key_file_path>';
$DB['CERT_FILE'] = '<key_file_path>';
$DB['CA_FILE'] = '<key_file_path>';
$DB['VERIFY_HOST'] = true;
$DB['CIPHER_LIST'] = '';
...
1. Отметьте TLS шифрование базы данных и Удостоверять сертификат базы данных
2. Укажите путь к Файл TLS ключа базы данных
3. Укажите путь к Файл TLS CA базы данных
4. Укажите путь к Файл TLS сертификата базы данных
5. Укажите список шифров TLS (опционально)
Включает режим «verify_full» для MySQL.
...
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '<key_file_path>';
$DB['CERT_FILE'] = '<key_file_path>';
$DB['CA_FILE'] = '<key_file_path>';
$DB['VERIFY_HOST'] = true;
$DB['CIPHER_LIST'] = ' ';
...
1. Отметьте TLS шифрование базы данных и Удостоверять сертификат базы данных
2. Укажите путь к Файл TLS ключа базы данных
3. Укажите путь к Файл TLS CA базы данных
4. Укажите путь к Файл TLS сертификата базы данных
5. Отметьте Сверка хоста базы данных
Включает режим «verify_full» для PostgreSQL.

Смотрите также: Примеры настроек шифрования для MySQL, Примеры настроек шифрования для PostgreSQL.

Настройка Zabbix сервера/прокси

Безопасные подключения к базе данных могут быть настроены с помощью соответствующих параметров в файле конфигурации Zabbix сервера и/или прокси.

Настройка Результат
Отсутствует Подключение к базе данных без шифрования.
1. Установите DBTLSConnect=required Сервер/прокси делает TLS подключение к базе данных. Нешифрованные подключения не разрешены.
1. Установите DBTLSConnect=verify_ca
2. Установите DBTLSCAFile — укажите файл удостоверяющего центра (certificate authority, CA) TLS
Сервер/прокси делает TLS подключение к базе данных после проверки сертификата базы данных.
1. Установите DBTLSConnect=verify_full
2. Установите DBTLSCAFile — укажите файл удостоверяющего центра (certificate authority, CA) TLS
Сервер/прокси делает TLS подключение к базе данных после проверки сертификата базы данных и идентичности хоста базы данных.
1. Установите DBTLSCAFile — укажите файл удостоверяющего центра (certificate authority, CA)
2. Установите DBTLSCertFile — укажите файл сертификата открытого ключа (public key) клиента
3. Установите DBTLSKeyFile — укажите файл закрытого ключа (private key) клиента
Сервер/прокси при подключении к базе данных предъявляет сертификат клиента.
1. Установите DBTLSCipher — список шифров (алгоритмов шифрования), которые клиент разрешает при подключении с использованием протокола TLS до версии TLS 1.2

или DBTLSCipher13 — список шифров, которые клиент разрешает при подключении с использованием протокола TLS 1.3
(MySQL) TLS подключение выполняется, используя шифр из представленного списка.
(PostgreSQL) Установка этой опции рассматривается как ошибка.