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

Обзор

В этом разделе приведены шаги настройки 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) Задание этого параметра будет считаться ошибкой.