5 Connessione sicura al database

Panoramica

Questa sezione fornisce i passaggi di configurazione di Zabbix ed esempi di configurazione per connessioni TLS sicure tra:

Database Componenti Zabbix
MySQL Zabbix frontend, Zabbix server, Zabbix proxy
PostgreSQL Zabbix frontend, Zabbix server, Zabbix proxy

Per configurare la crittografia della connessione all'interno del DBMS, consultare la documentazione ufficiale del fornitore per i dettagli:

  • MySQL: server di database di replica source e replica.
  • MySQL: server di database per group replication, ecc.
  • PostgreSQL opzioni di crittografia.

Tutti gli esempi si basano sulle release GA di MySQL CE (8.0) e PgSQL (13) disponibili tramite i repository ufficiali che utilizzano CentOS 8.

Requisiti

Per configurare la crittografia è necessario quanto segue:

  • Sistema operativo supportato dallo sviluppatore con OpenSSL >=1.1.X o alternativa.

Si consiglia di evitare sistemi operativi in stato di fine ciclo di vita, specialmente nel caso di nuove installazioni

  • Motore di database (RDBMS) installato e mantenuto dal repository ufficiale fornito dallo sviluppatore. I sistemi operativi spesso vengono distribuiti con versioni obsolete del software di database per le quali il supporto alla crittografia non è implementato, ad esempio sistemi basati su RHEL 7 e PostgreSQL 9.2, MariaDB 5.5 senza supporto alla crittografia.
Terminologia

L'impostazione di questa opzione impone l'uso di una connessione TLS al database da server/proxy Zabbix e frontend verso il database:

  • required - connessione tramite TLS come modalità di trasporto senza controlli dell'identità
  • verify_ca - connessione tramite TLS e verifica del certificato
  • verify_full - connessione tramite TLS, verifica del certificato e verifica che l'identità del database (CN) specificata da DBHost corrisponda al suo certificato

Configurazione Zabbix

Frontend al database

Una connessione sicura al database può essere configurata durante l'installazione del frontend:

  • Selezionare la casella Database TLS encryption nel passaggio Configure DB connection per abilitare la cifratura del trasporto.
  • Selezionare la casella Verify database certificate che appare quando il campo TLS encryption è selezionato per abilitare la cifratura con certificati.

Per MySQL, la casella Database TLS encryption è disabilitata se Database host è impostato su localhost, perché una connessione che utilizza un file socket (su Unix) o memoria condivisa (su Windows) non può essere cifrata.
Per PostgreSQL, la casella TLS encryption è disabilitata se il valore del campo Database host inizia con una barra oppure se il campo è vuoto.

I seguenti parametri diventano disponibili nella modalità di cifratura TLS con certificati (se entrambe le caselle sono selezionate):

Parameter Description
Database TLS CA file Specificare il percorso completo di un file valido del certificato dell'autorità di certificazione TLS (CA).
Database TLS key file Specificare il percorso completo di un file valido della chiave TLS.
Database TLS certificate file Specificare il percorso completo di un file valido del certificato TLS.
Database host verification Selezionare questa casella per attivare la verifica dell'host.
Disabilitata per MYSQL, perché la libreria PHP MySQL non consente di saltare il passaggio di convalida del certificato del peer.
Database TLS cipher list Specificare un elenco personalizzato di cifrari validi. Il formato dell'elenco dei cifrari deve essere conforme allo standard OpenSSL.
Disponibile solo per MySQL.

I parametri TLS devono puntare a file validi. Se puntano a file inesistenti o non validi, ciò comporterà un errore di autorizzazione.
Se i file dei certificati sono scrivibili, il frontend genera un avviso nel report System information che indica "TLS certificate files must be read-only." (visualizzato solo se l'utente PHP è il proprietario del certificato).

I certificati protetti da password non sono supportati.

Casi d'uso

Il frontend di Zabbix utilizza l'interfaccia GUI per definire le possibili opzioni: required, verify_ca, verify_full. Specificare le opzioni richieste nel passaggio della procedura guidata di installazione Configure DB connections. Queste opzioni sono mappate nel file di configurazione (zabbix.conf.php) nel modo seguente:

Impostazioni GUI File di configurazione Descrizione Risultato
...
// Utilizzato per la connessione TLS.
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '';
$DB['VERIFY_HOST'] = false;
$DB['CIPHER_LIST'] = '';
...
Selezionare Database TLS encryption
Lasciare deselezionato Verify database certificate
Abilita la modalità 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. Selezionare Database TLS encryption e Verify database certificate
2. Specificare il percorso di Database TLS CA file
Abilita la modalità verify_ca.
...
// Utilizzato per la connessione TLS con un elenco Cipher definito in modo rigoroso.
$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>';
...

Oppure:

...
// Utilizzato per la connessione TLS senza un elenco Cipher definito - selezionato dal server 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. Selezionare Database TLS encryption e Verify database certificate
2. Specificare il percorso di Database TLS key file
3. Specificare il percorso di Database TLS CA file
4. Specificare il percorso di Database TLS certificate file
5. Specificare Database TLS cipher list (facoltativo)
Abilita la modalità verify_full per 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. Selezionare Database TLS encryption e Verify database certificate
2. Specificare il percorso di Database TLS key file
3. Specificare il percorso di Database TLS CA file
4. Specificare il percorso di Database TLS certificate file
5. Selezionare Database host verification
Abilita la modalità verify_full per PostgreSQL.

Vedere anche: Esempi di configurazione della crittografia per MySQL, Esempi di configurazione della crittografia per PostgreSQL.

Configurazione di Zabbix server/proxy

Le connessioni sicure al database possono essere configurate con i rispettivi parametri nel file di configurazione di Zabbix server e/o proxy.

Configurazione Risultato
Nessuna Connessione al database senza crittografia.
1. Impostare DBTLSConnect=required Server/proxy stabiliscono una connessione TLS al database. Una connessione non crittografata non è consentita.
1. Impostare DBTLSConnect=verify_ca
2. Impostare DBTLSCAFile - specificare il file dell'autorità di certificazione TLS
Server/proxy stabiliscono una connessione TLS al database dopo aver verificato il certificato del database.
1. Impostare DBTLSConnect=verify_full
2. Impostare DBTLSCAFile - specificare il file dell'autorità di certificazione TLS
Server/proxy stabiliscono una connessione TLS al database dopo aver verificato il certificato del database e l'identità del host del database.
1. Impostare DBTLSCAFile - specificare il file dell'autorità di certificazione TLS
2. Impostare DBTLSCertFile - specificare il file del certificato della chiave pubblica del client
3. Impostare DBTLSKeyFile - specificare il file della chiave privata del client
Server/proxy forniscono un certificato client durante la connessione al database.
1. Impostare DBTLSCipher - l'elenco dei cifrari di crittografia consentiti dal client per le connessioni che utilizzano protocolli TLS fino a TLS 1.2

oppure DBTLSCipher13 - l'elenco dei cifrari di crittografia consentiti dal client per le connessioni che utilizzano il protocollo TLS 1.3
(MySQL) La connessione TLS viene stabilita utilizzando un cifrario dell'elenco fornito.
(PostgreSQL) L'impostazione di questa opzione sarà considerata un errore.