5 Bezpieczne połączenie z bazą danych

Przegląd

Ta sekcja zawiera kroki konfiguracji Zabbix oraz przykłady konfiguracji dla bezpiecznych połączeń TLS pomiędzy:

Baza danych Komponenty Zabbix
MySQL Zabbix frontend, Zabbix serwer, Zabbix proxy
PostgreSQL Zabbix frontend, Zabbix serwer, Zabbix proxy

Aby skonfigurować szyfrowanie połączeń w ramach systemu DBMS, szczegółowe informacje można znaleźć w oficjalnej dokumentacji producenta:

  • MySQL: źródłowe i replikowane serwery baz danych.
  • MySQL: serwery baz danych z replikacją grupową itp.
  • PostgreSQL opcje szyfrowania.

Wszystkie przykłady opierają się na wydaniach GA MySQL CE (8.0) i PgSQL (13), dostępnych w oficjalnych repozytoriach dla CentOS 8.

Wymagania

Do skonfigurowania szyfrowania wymagane są następujące elementy:

  • System operacyjny wspierany przez producenta, z OpenSSL >=1.1.X lub rozwiązaniem alternatywnym.

Zaleca się unikanie systemów operacyjnych, które osiągnęły status end-of-life, szczególnie w przypadku nowych instalacji

  • Silnik bazy danych (RDBMS) zainstalowany i utrzymywany z oficjalnego repozytorium dostarczanego przez producenta. Systemy operacyjne są często dostarczane z nieaktualnymi wersjami oprogramowania bazodanowego, dla których obsługa szyfrowania nie jest zaimplementowana, na przykład systemy oparte na RHEL 7 oraz PostgreSQL 9.2, MariaDB 5.5 bez obsługi szyfrowania.
Terminologia

Ustawienie tej opcji wymusza użycie połączenia TLS z bazą danych przez serwer/proxy Zabbix oraz frontend do bazy danych:

  • required — połącz przy użyciu TLS jako trybu transportu bez sprawdzania tożsamości
  • verify_ca — połącz przy użyciu TLS i zweryfikuj certyfikat
  • verify_full — połącz przy użyciu TLS, zweryfikuj certyfikat oraz sprawdź, czy tożsamość bazy danych (CN) określona przez DBHost jest zgodna z jej certyfikatem

Konfiguracja Zabbix

Frontend do bazy danych

Bezpieczne połączenie z bazą danych można skonfigurować podczas instalacji frontend:

  • Zaznacz pole wyboru Database TLS encryption w kroku Configure DB connection, aby włączyć szyfrowanie transmisji.
  • Zaznacz pole wyboru Verify database certificate, które pojawia się po zaznaczeniu pola TLS encryption, aby włączyć szyfrowanie z użyciem certyfikatów.

Dla MySQL pole wyboru Database TLS encryption jest wyłączone, jeśli Database host jest ustawiony na localhost, ponieważ połączenie korzystające z pliku socket (w systemach Unix) lub pamięci współdzielonej (w systemie Windows) nie może być szyfrowane.
Dla PostgreSQL pole wyboru TLS encryption jest wyłączone, jeśli wartość pola Database host zaczyna się od ukośnika lub pole jest puste.

Następujące parametry stają się dostępne w trybie szyfrowania TLS z użyciem certyfikatów (jeśli zaznaczone są oba pola wyboru):

Parameter Description
Database TLS CA file Podaj pełną ścieżkę do prawidłowego pliku urzędu certyfikacji TLS (CA).
Database TLS key file Podaj pełną ścieżkę do prawidłowego pliku klucza TLS.
Database TLS certificate file Podaj pełną ścieżkę do prawidłowego pliku certyfikatu TLS.
Database host verification Zaznacz to pole wyboru, aby włączyć weryfikację hosta.
Wyłączone dla MYSQL, ponieważ biblioteka PHP MySQL nie pozwala pominąć kroku walidacji certyfikatu peera.
Database TLS cipher list Podaj niestandardową listę prawidłowych szyfrów. Format listy szyfrów musi być zgodny ze standardem OpenSSL.
Dostępne tylko dla MySQL.

Parametry TLS muszą wskazywać prawidłowe pliki. Jeśli wskazują na nieistniejące lub nieprawidłowe pliki, spowoduje to błąd autoryzacji.
Jeśli pliki certyfikatów mają uprawnienia do zapisu, frontend generuje ostrzeżenie w raporcie System information, że „TLS certificate files must be read-only.” (wyświetlane tylko wtedy, gdy użytkownik PHP jest właścicielem certyfikatu).

Certyfikaty chronione hasłem nie są obsługiwane.

Przypadki użycia

Zabbix frontend używa interfejsu GUI do definiowania możliwych opcji: required, verify_ca, verify_full. Wymagane opcje należy określić w kroku kreatora instalacji Configure DB connections. Opcje te są mapowane do pliku konfiguracyjnego (zabbix.conf.php) w następujący sposób:

Ustawienia GUI Plik konfiguracyjny Opis Wynik
...
// Used for TLS connection.
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '';
$DB['VERIFY_HOST'] = false;
$DB['CIPHER_LIST'] = '';
...
Zaznacz Database TLS encryption
Pozostaw Verify database certificate niezaznaczone
Włącza tryb 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. Zaznacz Database TLS encryption i Verify database certificate
2. Podaj ścieżkę do Database TLS CA file
Włącza tryb 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>';
...

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. Zaznacz Database TLS encryption i Verify database certificate
2. Podaj ścieżkę do Database TLS key file
3. Podaj ścieżkę do Database TLS CA file
4. Podaj ścieżkę do Database TLS certificate file
5. Podaj Database TLS cipher list (opcjonalnie)
Włącza tryb verify_full dla 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. Zaznacz Database TLS encryption i Verify database certificate
2. Podaj ścieżkę do Database TLS key file
3. Podaj ścieżkę do Database TLS CA file
4. Podaj ścieżkę do Database TLS certificate file
5. Zaznacz Database host verification
Włącza tryb verify_full dla PostgreSQL.

Zobacz także: Przykłady konfiguracji szyfrowania dla MySQL, Przykłady konfiguracji szyfrowania dla PostgreSQL.

Konfiguracja serwera/proxy Zabbix

Bezpieczne połączenia z bazą danych można skonfigurować za pomocą odpowiednich parametrów w pliku konfiguracyjnym Zabbix serwer i/lub proxy.

Konfiguracja Wynik
Brak Połączenie z bazą danych bez szyfrowania.
1. Ustaw DBTLSConnect=required Serwer/proxy nawiązują połączenie TLS z bazą danych. Nieszyfrowane połączenie nie jest dozwolone.
1. Ustaw DBTLSConnect=verify_ca
2. Ustaw DBTLSCAFile - określ plik urzędu certyfikacji TLS
Serwer/proxy nawiązują połączenie TLS z bazą danych po zweryfikowaniu certyfikatu bazy danych.
1. Ustaw DBTLSConnect=verify_full
2. Ustaw DBTLSCAFile - określ plik urzędu certyfikacji TLS
Serwer/proxy nawiązują połączenie TLS z bazą danych po zweryfikowaniu certyfikatu bazy danych oraz tożsamości hosta bazy danych.
1. Ustaw DBTLSCAFile - określ plik urzędu certyfikacji TLS
2. Ustaw DBTLSCertFile - określ plik certyfikatu klucza publicznego klienta
3. Ustaw DBTLSKeyFile - określ plik klucza prywatnego klienta
Serwer/proxy przedstawiają certyfikat klienta podczas łączenia z bazą danych.
1. Ustaw DBTLSCipher - lista szyfrów, które klient dopuszcza dla połączeń używających protokołów TLS do wersji TLS 1.2 włącznie

lub DBTLSCipher13 - lista szyfrów, które klient dopuszcza dla połączeń używających protokołu TLS 1.3
(MySQL) Połączenie TLS jest nawiązywane z użyciem szyfru z podanej listy.
(PostgreSQL) Ustawienie tej opcji będzie traktowane jako błąd.