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

Обзор

В этом разделе приведены шаги настройки 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 использует графический интерфейс для определения возможных параметров: 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'] = '';
...
1. Установите флажок Шифрование TLS для базы данных
2. Не устанавливайте флажок Проверять сертификат базы данных
Включение режима 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 базы данных
Включение режима 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 базы данных
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 базы данных
4. Укажите путь к файлу сертификата TLS базы данных
5. Установите флажок Проверка узла сети базы данных
Включение режима verify_full для PostgreSQL.

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

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

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

Конфигурация Результат
Не задано Подключение к базе данных без шифрования.
Задать 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 - указать файл закрытого ключа клиента
Сервер/прокси предоставляет сертификат клиента при подключении к базе данных.
Задать DBTLSCipher - список шифров шифрования, разрешенных клиентом для подключений с использованием протоколов TLS до TLS 1.2 включительно

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