Drošs savienojums ar datubāzi

Pārskats

Šī sadaļa sniedz Zabbix iestatīšanas soļus un konfigurācijas piemērus drošiem TLS savienojumiem starp:

Database Zabbix components
MySQL Zabbix lietotāja saskarne, Zabbix serveris, Zabbix starpniekserveris
PostgreSQL Zabbix lietotāja saskarne, Zabbix serveris, Zabbix starpniekserveris

Lai iestatītu savienojuma šifrēšanu DBMS ietvaros, skatiet oficiālo piegādātāja dokumentāciju, lai iegūtu detalizētu informāciju:

  • MySQL: avota un replikas replikācijas datubāzes serveri.
  • MySQL: grupas replikācijas u. c. datubāzes serveri.
  • PostgreSQL šifrēšanas opcijas.

Visi piemēri ir balstīti uz MySQL CE (8.0) un PgSQL (13) GA laidieniem, kas pieejami oficiālajās repozitorijās, izmantojot CentOS 8.

Prasības

Lai iestatītu šifrēšanu, ir nepieciešams:

  • Izstrādātāja atbalstīta operētājsistēma ar OpenSSL >=1.1.X vai alternatīvu.

Ieteicams izvairīties no operētājsistēmām, kurām ir beidzies atbalsta termiņš, īpaši jaunu instalāciju gadījumā

  • Datu bāzes dzinējs (RDBMS), kas ir instalēts un uzturēts no izstrādātāja nodrošinātās oficiālās repozitorijas. Operētājsistēmas bieži tiek piegādātas ar novecojušām datu bāzes programmatūras versijām, kurām šifrēšanas atbalsts nav ieviests, piemēram, uz RHEL 7 balstītas sistēmas un PostgreSQL 9.2, MariaDB 5.5 bez šifrēšanas atbalsta.
Terminoloģija

Šīs opcijas iestatīšana uzliek par pienākumu izmantot TLS savienojumu ar datubāzi no Zabbix servera/starpniekservera un lietotāja saskarnes uz datubāzi:

  • required - izveidot savienojumu, izmantojot TLS kā transporta režīmu bez identitātes pārbaudēm
  • verify_ca - izveidot savienojumu, izmantojot TLS un pārbaudīt sertifikātu
  • verify_full - izveidot savienojumu, izmantojot TLS, pārbaudīt sertifikātu un pārbaudīt, ka datubāzes identitāte (CN), kas norādīta ar DBHost, atbilst tās sertifikātam

Zabbix konfigurācija

Lietotāja saskarne uz datubāzi

Drošu savienojumu ar datubāzi var konfigurēt lietotāja saskarnes instalēšanas laikā:

  • Atzīmējiet izvēles rūtiņu Database TLS encryption sadaļā Configure DB connection, lai iespējotu transporta šifrēšanu.
  • Atzīmējiet izvēles rūtiņu Verify database certificate, kas parādās, kad ir atzīmēts lauks TLS encryption, lai iespējotu šifrēšanu ar sertifikātiem.

MySQL gadījumā izvēles rūtiņa Database TLS encryption ir atspējota, ja Database host ir iestatīts uz localhost, jo savienojumu, kas izmanto socket failu (Unix) vai koplietojamo atmiņu (Windows), nevar šifrēt.
PostgreSQL gadījumā izvēles rūtiņa TLS encryption ir atspējota, ja lauka Database host vērtība sākas ar slīpsvītru vai lauks ir tukšs.

TLS šifrēšanas sertifikātu režīmā kļūst pieejami šādi parametri (ja ir atzīmētas abas izvēles rūtiņas):

Parameter Description
Database TLS CA file Norādiet pilnu ceļu uz derīgu TLS sertifikātu izdevējas iestādes (CA) failu.
Database TLS key file Norādiet pilnu ceļu uz derīgu TLS atslēgas failu.
Database TLS certificate file Norādiet pilnu ceļu uz derīgu TLS sertifikāta failu.
Database host verification Atzīmējiet šo izvēles rūtiņu, lai aktivizētu host pārbaudi.
Atspējots MYSQL, jo PHP MySQL bibliotēka neļauj izlaist vienaudža sertifikāta validācijas soli.
Database TLS cipher list Norādiet pielāgotu derīgo šifru sarakstu. Šifru saraksta formātam jāatbilst OpenSSL standartam.
Pieejams tikai MySQL.

TLS parametriem jānorāda derīgi faili. Ja tie norāda uz neesošiem vai nederīgiem failiem, tas izraisīs autorizācijas kļūdu.
Ja sertifikātu faili ir rakstāmi, lietotāja saskarne ģenerē brīdinājumu System information pārskatā: "TLS certificate files must be read-only." (tiek parādīts tikai tad, ja PHP lietotājs ir sertifikāta īpašnieks).

Ar paroli aizsargāti sertifikāti netiek atbalstīti.

Lietošanas gadījumi

Zabbix lietotāja saskarne izmanto GUI saskarni, lai definētu iespējamās opcijas: required, verify_ca, verify_full. Instalēšanas vedņa solī Configure DB connections norādiet nepieciešamās opcijas. Šīs opcijas tiek kartētas uz konfigurācijas failu (zabbix.conf.php) šādi:

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'] = '';
...
Atzīmējiet Database TLS encryption
Neatzīmējiet Verify database certificate
Iespējot required režīmu.
...
$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. Atzīmējiet Database TLS encryption un Verify database certificate
2. Norādiet ceļu uz Database TLS CA file
Iespējot verify_ca režīmu.
...
// 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. Atzīmējiet Database TLS encryption un Verify database certificate
2. Norādiet ceļu uz Database TLS key file
3. Norādiet ceļu uz Database TLS CA file
4. Norādiet ceļu uz Database TLS certificate file
5. Norādiet Database TLS cipher list (neobligāti)
MySQL gadījumā iespējot verify_full režīmu.
...
$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. Atzīmējiet Database TLS encryption un Verify database certificate
2. Norādiet ceļu uz Database TLS key file
3. Norādiet ceļu uz Database TLS CA file
4. Norādiet ceļu uz Database TLS certificate file
5. Atzīmējiet Database host verification
PostgreSQL gadījumā iespējot verify_full režīmu.

Skatīt arī: Encryption configuration examples for MySQL, Encryption configuration examples for PostgreSQL.

Zabbix servera/starpniekservera konfigurācija

Drošus savienojumus ar datubāzi var konfigurēt, izmantojot attiecīgos parametrus Zabbix servera un/vai starpniekservera konfigurācijas failā.

Configuration Result
None Savienojums ar datubāzi bez šifrēšanas.
1. Iestatiet DBTLSConnect=required Serveris/starpniekserveris izveido TLS savienojumu ar datubāzi. Nešifrēts savienojums nav atļauts.
1. Iestatiet DBTLSConnect=verify_ca
2. Iestatiet DBTLSCAFile - norādiet TLS sertifikātu izdevējinstanču failu
Serveris/starpniekserveris izveido TLS savienojumu ar datubāzi pēc datubāzes sertifikāta pārbaudes.
1. Iestatiet DBTLSConnect=verify_full
2. Iestatiet DBTLSCAFile - norādiet TLS sertifikātu izdevējinstanču failu
Serveris/starpniekserveris izveido TLS savienojumu ar datubāzi pēc datubāzes sertifikāta un datubāzes hosta identitātes pārbaudes.
1. Iestatiet DBTLSCAFile - norādiet TLS sertifikātu izdevējinstanču failu
2. Iestatiet DBTLSCertFile - norādiet klienta publiskās atslēgas sertifikāta failu
3. Iestatiet DBTLSKeyFile - norādiet klienta privātās atslēgas failu
Serveris/starpniekserveris, veidojot savienojumu ar datubāzi, nodrošina klienta sertifikātu.
1. Iestatiet DBTLSCipher - šifrēšanas algoritmu saraksts, ko klients atļauj savienojumiem, izmantojot TLS protokolus līdz TLS 1.2

vai DBTLSCipher13 - šifrēšanas algoritmu saraksts, ko klients atļauj savienojumiem, izmantojot TLS 1.3 protokolu
(MySQL) TLS savienojums tiek izveidots, izmantojot algoritmu no norādītā saraksta.
(PostgreSQL) Šīs opcijas iestatīšana tiks uzskatīta par kļūdu.