Bezpieczne połączenie z bazą danych
Omówienie
Ta sekcja zawiera kroki konfiguracji Zabbix oraz przykłady konfiguracji dla bezpiecznych połączeń TLS między:
| Database | Zabbix components |
|---|---|
| MySQL | Zabbix frontend, Zabbix serwer, Zabbix proxy |
| PostgreSQL | Zabbix frontend, Zabbix serwer, Zabbix proxy |
Aby skonfigurować szyfrowanie połączeń w obrębie DBMS, zapoznaj się ze szczegółami w oficjalnej dokumentacji producenta:
- MySQL: serwery baz danych replikacji źródłowej i repliki.
- MySQL: serwery baz danych replikacji grupowej itp.
- PostgreSQL opcje szyfrowania.
Wszystkie przykłady opierają się na wydaniach GA MySQL CE (8.0) i PgSQL (13) dostępnych w oficjalnych repozytoriach przy użyciu CentOS 8.
Wymagania
Do skonfigurowania szyfrowania wymagane jest:
- System operacyjny wspierany przez producenta, z OpenSSL >=1.1.X lub alternatywą.
Zaleca się unikanie systemów operacyjnych w stanie end-of-life, szczególnie w przypadku nowych instalacji
- Silnik bazy danych (RDBMS) zainstalowany i utrzymywany z oficjalnego repozytorium udostępnianego przez producenta. Systemy operacyjne często są dostarczane z przestarzałymi 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 z serwera/proxy Zabbix oraz frontend do bazy danych:
required- połączenie z użyciem TLS jako trybu transportu bez sprawdzania tożsamościverify_ca- połączenie z użyciem TLS i weryfikacją certyfikatuverify_full- połączenie z użyciem TLS, weryfikacją certyfikatu oraz sprawdzeniem, 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 frontendu:
- Zaznacz pole wyboru Szyfrowanie TLS bazy danych w kroku Konfiguruj połączenie z bazą danych, aby włączyć szyfrowanie transmisji.
- Zaznacz pole wyboru Weryfikuj certyfikat bazy danych, które pojawia się po zaznaczeniu pola Szyfrowanie TLS, aby włączyć szyfrowanie za pomocą certyfikatów.
W przypadku MySQL pole wyboru Szyfrowanie TLS bazy danych jest wyłączone, jeśli Host bazy danych jest ustawiony na localhost, ponieważ połączenie korzystające z pliku gniazda (w systemie Unix) lub pamięci współdzielonej (w systemie Windows) nie może być szyfrowane.
W przypadku PostgreSQL pole wyboru Szyfrowanie TLS jest wyłączone, jeśli wartość pola Host bazy danych zaczyna się od ukośnika lub pole jest puste.
W trybie szyfrowania TLS za pomocą certyfikatów (jeśli oba pola wyboru są zaznaczone) dostępne są następujące parametry:
| Parametr | Opis |
|---|---|
| Plik CA TLS bazy danych | Określ pełną ścieżkę do prawidłowego pliku urzędu certyfikacji (CA) TLS. |
| Plik klucza TLS bazy danych | Określ pełną ścieżkę do prawidłowego pliku klucza TLS. |
| Plik certyfikatu TLS bazy danych | Określ 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 pominąć etapu walidacji certyfikatu peera. |
| Lista szyfrów TLS bazy danych | Określ 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ą nieistniejące lub nieprawidłowe pliki, spowoduje to błąd autoryzacji.
Jeśli pliki certyfikatów są zapisywalne, frontend generuje ostrzeżenie w raporcie Informacje o systemie: „Pliki certyfikatów TLS muszą być tylko do odczytu”. (Wyświetlane tylko wtedy, gdy użytkownik PHP jest właścicielem certyfikatu).
Certyfikaty chronione hasłami nie są obsługiwane.
Przypadki użycia
frontend Zabbix używa interfejsu GUI do definiowania dostępnych opcji: required, verify_ca, verify_full.
Określ wymagane opcje w kroku kreatora instalacji Konfigurowanie połączeń z bazą danych.
Opcje te są mapowane na plik konfiguracyjny frontend (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'] = '';... |
1. Zaznacz Szyfrowanie TLS bazy danych 2. Pozostaw opcję Weryfikuj certyfikat bazy danych niezaznaczoną |
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 opcje Szyfrowanie TLS bazy danych i Weryfikuj certyfikat bazy danych 2. Określ ścieżkę do pliku CA TLS 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 opcje Szyfrowanie TLS bazy danych i Weryfikuj certyfikat bazy danych 2. Określ ścieżkę do pliku klucza TLS bazy danych 3. Określ ścieżkę do pliku CA TLS bazy danych 4. Określ ścieżkę do pliku certyfikatu TLS bazy danych 5. Określ listę szyfrów TLS bazy danych (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 opcje Szyfrowanie TLS bazy danych i Weryfikuj certyfikat bazy danych 2. Określ ścieżkę do pliku klucza TLS bazy danych 3. Określ ścieżkę do pliku CA TLS bazy danych 4. Określ ścieżkę do pliku certyfikatu TLS bazy danych 5. Zaznacz opcję 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 można skonfigurować za pomocą odpowiednich parametrów w pliku konfiguracyjnym serwera Zabbix i/lub proxy.
| Konfiguracja | Wynik |
|---|---|
| Brak | Połączenie z bazą danych bez szyfrowania. |
Ustaw DBTLSConnect=required |
Serwer/proxy nawiązuje połączenie TLS z bazą danych. Połączenie nieszyfrowane jest niedozwolone. |
1. Ustaw DBTLSConnect=verify_ca2. Ustaw DBTLSCAFile - określ plik urzędu certyfikacji TLS |
Serwer/proxy nawiązuje połączenie TLS z bazą danych po zweryfikowaniu certyfikatu bazy danych. |
1. Ustaw DBTLSConnect=verify_full2. Ustaw DBTLSCAFile - określ plik urzędu certyfikacji TLS |
Serwer/proxy nawiązuje połączenie TLS z bazą danych po zweryfikowaniu certyfikatu bazy danych i tożsamości hosta bazy danych. |
1. Ustaw DBTLSCAFile - określ plik urzędu certyfikacji TLS2. Ustaw DBTLSCertFile - określ plik certyfikatu klucza publicznego klienta3. Ustaw DBTLSKeyFile - określ plik klucza prywatnego klienta |
Serwer/proxy przedstawia certyfikat klienta podczas łączenia się z bazą danych. |
Ustaw DBTLSCipher - listę szyfrów szyfrowania dozwolonych przez klienta dla połączeń korzystających z protokołów TLS do wersji TLS 1.2 włącznielub DBTLSCipher13 - listę szyfrów szyfrowania dozwolonych przez klienta dla połączeń korzystających z protokołu TLS 1.3 |
(MySQL) Połączenie TLS jest nawiązywane przy użyciu szyfru z podanej listy. (PostgreSQL) Ustawienie tej opcji zostanie uznane za błąd. |



