Безопасное подключение к базе данных

Обзор

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

Database Zabbix components
MySQL веб-интерфейс Zabbix, сервер Zabbix, прокси Zabbix
PostgreSQL веб-интерфейс Zabbix, сервер Zabbix, прокси Zabbix

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

  • MySQL: серверы баз данных репликации source и replica.
  • MySQL: серверы баз данных group replication и т. д.
  • PostgreSQL параметры шифрования.

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

Требования

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

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

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

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

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

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

Конфигурация Zabbix

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

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

  • Отметьте флажок Database TLS encryption на шаге Configure DB connection, чтобы включить шифрование транспортного уровня.
  • Отметьте флажок Verify database certificate, который появляется, когда отмечено поле TLS encryption, чтобы включить шифрование с использованием сертификатов.

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

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

Parameter Description
Database TLS CA file Укажите полный путь к действительному файлу центра сертификации (CA) TLS.
Database TLS key file Укажите полный путь к действительному файлу ключа TLS.
Database TLS certificate file Укажите полный путь к действительному файлу сертификата TLS.
Database host verification Отметьте этот флажок, чтобы включить проверку узла сети.
Недоступно для MYSQL, поскольку библиотека PHP MySQL не позволяет пропустить этап проверки сертификата узла.
Database TLS cipher list Укажите пользовательский список допустимых шифров. Формат списка шифров должен соответствовать стандарту OpenSSL.
Доступно только для MySQL.

Параметры TLS должны указывать на действительные файлы. Если они указывают на несуществующие или недействительные файлы, это приведет к ошибке авторизации.
Если файлы сертификатов доступны для записи, веб-интерфейс генерирует предупреждение в отчете System information о том, что "TLS certificate files must be read-only." (отображается только если пользователь PHP является владельцем сертификата).

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

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

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

GUI settings Configuration file Description Result
...
// Used for TLS connection.
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '';
$DB['VERIFY_HOST'] = false;
$DB['CIPHER_LIST'] = '';
...
Отметьте Database TLS encryption
Оставьте Verify database certificate неотмеченным
Включает режим 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. Отметьте Database TLS encryption и Verify database certificate
2. Укажите путь к Database TLS CA file
Включает режим 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>';
...

Or:

...
// 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. Отметьте Database TLS encryption и Verify database certificate
2. Укажите путь к Database TLS key file
3. Укажите путь к Database TLS CA file
4. Укажите путь к Database TLS certificate file
5. Укажите Database TLS cipher list (необязательно)
Включает режим 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. Отметьте Database TLS encryption и Verify database certificate
2. Укажите путь к Database TLS key file
3. Укажите путь к Database TLS CA file
4. Укажите путь к Database TLS certificate file
5. Отметьте Database host verification
Включает режим verify_full для PostgreSQL.

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

Конфигурация сервера/прокси Zabbix

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

Configuration Result
None Подключение к базе данных без шифрования.
1. Установите DBTLSConnect=required Сервер/прокси устанавливают TLS-подключение к базе данных. Незашифрованное подключение не допускается.
1. Установите DBTLSConnect=verify_ca
2. Установите DBTLSCAFile - укажите файл центра сертификации TLS
Сервер/прокси устанавливают TLS-подключение к базе данных после проверки сертификата базы данных.
1. Установите DBTLSConnect=verify_full
2. Установите DBTLSCAFile - укажите файл центра сертификации TLS
Сервер/прокси устанавливают TLS-подключение к базе данных после проверки сертификата базы данных и идентичности узла сети базы данных.
1. Установите DBTLSCAFile - укажите файл центра сертификации TLS
2. Установите DBTLSCertFile - укажите файл сертификата открытого ключа клиента
3. Установите DBTLSKeyFile - укажите файл закрытого ключа клиента
Сервер/прокси предоставляют клиентский сертификат при подключении к базе данных.
1. Установите DBTLSCipher - список алгоритмов шифрования, которые клиент разрешает для подключений с использованием протоколов TLS до TLS 1.2

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