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 базы данных Укажите полный путь к корректному файлу удостоверяющего центра (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 server и/или proxy.

Configuration Result
None Соединение с базой данных без шифрования.
1. Set DBTLSConnect=required Сервер/прокси устанавливают TLS-соединение с базой данных. Незашифрованное соединение не допускается.
1. Set DBTLSConnect=verify_ca
2. Set DBTLSCAFile - specify the TLS certificate authority file
Сервер/прокси устанавливают TLS-соединение с базой данных после проверки сертификата базы данных.
1. Set DBTLSConnect=verify_full
2. Set DBTLSCAFile - specify TLS certificate authority file
Сервер/прокси устанавливают TLS-соединение с базой данных после проверки сертификата базы данных и идентичности узла сети базы данных.
1. Set DBTLSCAFile - specify the TLS certificate authority file
2. Set DBTLSCertFile - specify the client public key certificate file
3. Set DBTLSKeyFile - specify the client private key file
Сервер/прокси предоставляют клиентский сертификат при подключении к базе данных.
1. Set DBTLSCipher - the list of encryption ciphers that the client permits for connections using TLS protocols up to TLS 1.2

or DBTLSCipher13 - the list of encryption ciphers that the client permits for connections using TLS 1.3 protocol
(MySQL) TLS-соединение устанавливается с использованием шифра из указанного списка.
(PostgreSQL) Указание этой опции будет считаться ошибкой.