4 Bezpieczne połączenie z bazą danych

Przegląd

Ta sekcja zawiera kroki konfiguracyjne i przykłady konfiguracji Zabbix do bezpiecznych połączeń TLS pomiędzy:

Baza danych Komponenty Zabbix
MySQL Frontend Zabbix, Serwer Zabbix, Proxy Zabbix
PostgreSQL Frontend Zabbix, Serwer Zabbix, Proxy Zabbix

Aby skonfigurować szyfrowane połączenie w systemie DBMS, zapoznaj się z oficjalną dokumentacją producenta:

  • MySQL: serwery replikacji źródłowych i docelowych bazy danych.
  • MySQL: serwery replikacji grupowej itp. serwerów baz danych.
  • PostgreSQL opcje szyfrowania.

Wszystkie przykłady są oparte na wydaniach GA MySQL CE (8.0) i PgSQL (13) dostępnych za pośrednictwem oficjalnych repozytoriów przy użyciu AlmaLinux 8.

Wymagania

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

  • Obsługiwany przez programistów system operacyjny z OpenSSL >=1.1.X lub alternatywny.

Zaleca się unikanie systemów operacyjnych znajdujących się w fazie końca wsparcia, szczególnie w przypadku nowych instalacji

  • Silnik bazy danych (RDBMS) zainstalowany i utrzymywany z oficjalnego repozytorium dostarczanego przez dewelopera. Często systemy operacyjne są dostarczane z przestarzałymi wersjami oprogramowania bazodanowego, dla których wsparcie dla szyfrowania nie jest zaimplementowane, na przykład systemy oparte na RHEL 7 i PostgreSQL 9.2, MariaDB 5.5 bez wsparcia dla szyfrowania. 
Terminologia

Ustawienie tej opcji wymusza użycie połączenia TLS do bazy danych z serwera/proxy Zabbix i frontendu do bazy danych:

  • required - połączenie za pomocą TLS jako tryb transportowy bez sprawdzania tożsamości;
  • verify_ca - połączenie za pomocą TLS i weryfikacja certyfikatu;
  • verify_full - połączenie za pomocą TLS, weryfikacja certyfikatu i sprawdzenie, czy tożsamość bazy danych (CN) określona przez DBHost odpowiada jej certyfikatowi;

Konfiguracja Zabbix

Funkcje trendów

Frontend do bazy danych

Bezpieczne połączenie do bazy danych można skonfigurować podczas instalacji frontendu:

  • Zaznacz pole wyboru Szyfrowanie bazy danych TLS w kroku Konfiguruj połączenie DB aby włączyć szyfrowanie warstwy transportowej.
  • Zaznacz pole wyboru Zweryfikuj certyfikat bazy danych, które pojawia się, gdy pole Szyfrowanie bazy danych TLS jest zaznaczone, aby włączyć szyfrowanie za pomocą certyfikatów.

Dla MySQL, pole wyboru Database TLS encryption jest wyłączone, jeśli Host bazy danych jest ustawiony na localhost, ponieważ połączenie, które korzysta z pliku gniazda (na Unixie) lub pamięci współdzielonej (na Windows), nie może być szyfrowane.
Dla PostgreSQL, pole wyboru Szyfrowanie bazy danych TLS jest wyłączone, jeśli wartość pola Host bazy danych zaczyna się od ukośnika lub pole jest puste.

W trybie szyfrowania TLS z certyfikatem dostępne stają się następujące parametry (jeśli oba pola wyboru są zaznaczone):

Parametr Opis
Plik TLS CA bazy danych Podaj pełną ścieżkę do prawidłowego pliku certyfikatu CA (Certificate Authority).
Plik klucza TLS bazy danych 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.
Weryfikacja hosta bazy danych Zaznacz to pole wyboru, aby aktywować weryfikację hosta.
Wyłączone dla MYSQL, ponieważ biblioteka PHP MySQL nie pozwala na pominięcie kroku walidacji certyfikatu rówieśnika.
Lista szyfrów TLS bazy danych 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ć na prawidłowe pliki. Jeśli wskazują na nieistniejące lub nieprawidłowe pliki, spowoduje to błąd autoryzacji.
Jeśli pliki certyfikatów są zapisywalne, frontend wyświetla ostrzeżenie w raporcie Informacje o systemie, że "Pliki certyfikatów TLS bazy danych muszą być tylko do odczytu." (wyświetlane tylko wtedy, gdy użytkownik PHP jest właścicielem certyfikatu).

Certyfikaty zabezpieczone hasłami nie są obsługiwane.

Przykłady zastosowania

Frontend Zabbix używa interfejsu GUI do definiowania możliwych opcji: required, verify_ca, verify_full. Określ wymagane opcje w kroku kreatora instalacji Konfiguruj połączenie DB. Opcje te są mapowane na plik konfiguracyjny (zabbix.conf.php) w następujący sposób:

Ustawienia GUI Plik konfiguracyjny Opis Rezultat
...
// Used for TLS connection.
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '';
$DB['VERIFY_HOST'] = false;
$DB['CIPHER_LIST'] = '';
...
Zaznacz Szyfrowanie bazy danych TLS
Pozostaw Zweryfikuj certyfikat bazy danych niezaznaczone
Włącz 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 Szyfrowanie bazy danych TLS i Zweryfikuj certyfikat bazy danych
2. Podaj ścieżkę do pliku w parametrze Plik TLS CA bazy danych
Włącz 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>';
...

Lub:

...
// 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 Szyfrowanie bazy danych TLS i Zweryfikuj certyfikat bazy danych
2. Podaj ścieżkę do pliku w parametrze Plik klucza TLS bazy danych
3. Podaj ścieżkę do pliku w parametrze Plik TLS CA bazy danych
4. Podaj ścieżkę do pliku w parametrze Plik certyfikatu TLS bazy danych
5. Podaj listę szyfrów TLS (opcjonalnie)
Włącz 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 Szyfrowanie bazy danych TLS i Zweryfikuj certyfikat bazy danych
2. Podaj ścieżkę do pliku w parametrze Plik klucza TLS bazy danych
3. Podaj ścieżkę do pliku w parametrze Plik TLS CA bazy danych
4. Podaj ścieżkę do pliku w parametrze Plik certyfikatu TLS bazy danych
5. Zaznacz Weryfikacja hosta bazy danych
Włącz 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 mogą być skonfigurowane za pomocą odpowiednich parametrów w pliku konfiguracyjnym serwera i/lub proxy Zabbix.

Konfiguracja Rezultat
Brak Połączenie z bazą danych bez szyfrowania.
1. Ustaw DBTLSConnect=required Serwer/proxy nawiązuje połączenie TLS z bazą danych. Połączenie nieszyfrowane nie jest dozwolone.
1. Ustaw DBTLSConnect=verify_ca
2. Ustaw DBTLSCAFile - podaj plik urzędu certyfikacji TLS
Serwer/proxy nawiązuje połączenie TLS z bazą danych po weryfikacji certyfikatu bazy danych.
1. Ustaw DBTLSConnect=verify_full
2. Ustaw DBTLSCAFile - podaj plik urzędu certyfikacji TLS
Serwer/proxy nawiązuje połączenie TLS z bazą danych po weryfikacji certyfikatu bazy danych i tożsamości hosta bazy danych.
1. Ustaw DBTLSCAFile - podaj plik urzędu certyfikacji TLS
2. Ustaw DBTLSCertFile - podaj plik certyfikatu klucza publicznego klienta
3. Ustaw DBTLSKeyFile - podaj plik prywatnego klucza klienta
Serwer/proxy dostarcza certyfikat klienta podczas łączenia się z bazą danych.
1. Ustaw DBTLSCipher - listę szyfrów, które klient dopuszcza dla połączeń przy użyciu protokołów TLS do wersji 1.2

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