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

Обзор

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

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

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

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

Все примеры базируются на выпусках GA release MySQL CE (8.0) и PgSQL (13), доступных через официальные репозитории, используя AlmaLinux 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 базы данных Укажите полный путь к корректному файлу удостоверяющего центра (certificate authority, CA) TLS.
Файл TLS ключа базы данных Укажите полный путь к корректному файлу ключа TLS.
Файл TLS сертификата базы данных Укажите полный путь к корректному файлу сертификата TLS.
Сверка хоста базы данных Отметьте этот флажок, чтобы активировать сверку хоста.
Отключено для MYSQL, поскольку библиотека PHP MySQL не разрешает пропускать шаг валидации сертификата узла.
Список шифров TLS базы данных Укажите пользовательский список допустимых шифров. Формат списка шифров должен отвечать стандарту OpenSSL.
Доступно только для MySQL.

Параметры TLS должны указывать на корректные файлы. Если они указывают на несуществующие или некорректные файлы, это приведёт к ошибке авторизации.
Если файлы сертификатов доступны на запись, веб-интерфейс генерирует предупреждение в отчёте Информация о системе о том, что "TLS certificate files must be read-only" (отображается только если пользователь 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) Установка этой опции рассматривается как ошибка.