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ściverify_ca— połącz przy użyciu TLS i zweryfikuj certyfikatverify_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_ca2. 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_full2. 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 TLS2. Ustaw DBTLSCertFile - określ plik certyfikatu klucza publicznego klienta3. 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łącznielub 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. |



