15 Šifrēšana
Pārskats
Zabbix atbalsta šifrētu saziņu starp Zabbix komponentiem, izmantojot Transport Layer Security (TLS) protokolu v.1.2 un 1.3 (atkarībā no kriptogrāfijas bibliotēkas). Tiek atbalstīta šifrēšana, kas balstīta uz sertifikātiem un iepriekš koplietotām atslēgām.
Šifrēšanu var konfigurēt savienojumiem:
- Starp Zabbix serveri, Zabbix starpniekserveri, Zabbix aģentu, Zabbix tīmekļa pakalpojumu, zabbix_sender un zabbix_get utilītām
- Uz Zabbix datubāzi no Zabbix lietotāja saskarnes un servera/starpniekservera
- Starp Zabbix lietotāja saskarni un Zabbix serveri
Šifrēšana ir izvēles iespēja, un to var konfigurēt atsevišķiem komponentiem:
- Dažus starpniekserverus un aģentus var konfigurēt tā, lai tie izmantotu uz sertifikātiem balstītu šifrēšanu ar serveri, savukārt citi var izmantot uz iepriekš koplietotām atslēgām balstītu šifrēšanu, bet vēl citi var turpināt izmantot nešifrētu saziņu (kā iepriekš).
- Serveris (starpniekserveris) var izmantot atšķirīgas šifrēšanas konfigurācijas dažādiem hostiem.
Zabbix dēmonu programmas izmanto vienu klausīšanās portu šifrētiem un nešifrētiem ienākošajiem savienojumiem. Šifrēšanas pievienošanai nav nepieciešams atvērt jaunus portus ugunsmūros.
Ierobežojumi
- Privātās atslēgas tiek glabātas vienkāršā tekstā failos, kurus Zabbix komponenti var nolasīt palaišanas laikā.
- Iepriekš koplietotās atslēgas tiek ievadītas Zabbix lietotāja saskarne un glabātas Zabbix datubāzē vienkāršā tekstā.
- Iebūvētā šifrēšana neaizsargā saziņu starp tīmekļa serveri, kurā darbojas Zabbix lietotāja saskarne, un lietotāja tīmekļa pārlūku.
- Pašlaik katrs šifrētais savienojums tiek atvērts ar pilnu TLS rokasspiedienu; sesiju kešošana un biļetes netiek izmantotas.
- Šifrēšanas pievienošana palielina laiku, kas nepieciešams vienumu pārbaudēm un darbībām,
atkarībā no tīkla latentuma:
- Piemēram, ja pakešu aizture ir 100 ms, tad TCP savienojuma atvēršana un nešifrēta pieprasījuma nosūtīšana aizņem apmēram 200 ms. Izmantojot šifrēšanu, TLS savienojuma izveidei tiek pievienotas apmēram 1000 ms.
- Var būt nepieciešams palielināt noildzes vērtības, pretējā gadījumā daži vienumi un darbības, kas izpilda attālinātus skriptus uz aģentiem, var darboties ar nešifrētiem savienojumiem, bet neizdoties noildzes dēļ ar šifrētiem.
- Šifrēšanu neatbalsta tīkla atklāšana. Zabbix aģenta pārbaudes, ko veic tīkla atklāšana, būs nešifrētas, un, ja Zabbix aģents ir konfigurēts noraidīt nešifrētus savienojumus, šādas pārbaudes nebūs veiksmīgas.
Zabbix kompilēšana ar šifrēšanas atbalstu
Lai atbalstītu šifrēšanu, Zabbix ir jākompilē un jāsasaista ar vienu no atbalstītajām kriptogrāfijas bibliotēkām:
- GnuTLS - начиная ar versiju 3.1.18
- OpenSSL - versijas 1.0.1, 1.0.2, 1.1.0, 1.1.1, 3.0.x
- LibreSSL - testēts ar versijām 2.7.4, 2.8.2:
- LibreSSL 2.6.x netiek atbalstīts
- LibreSSL tiek atbalstīts kā ar OpenSSL saderīgs aizstājējs;
jaunās
tls_*()LibreSSL specifiskās API funkcijas netiek izmantotas. Zabbix komponenti, kas kompilēti ar LibreSSL, nevarēs izmantot PSK, varēs izmantot tikai sertifikātus.
Plašāku informāciju par SSL iestatīšanu Zabbix lietotāja saskarnei var atrast šajā labākajā praksē.
Bibliotēka tiek izvēlēta, norādot attiecīgo opciju skriptam "configure":
--with-gnutls[=DIR]--with-openssl[=DIR](izmanto arī LibreSSL)
Piemēram, lai konfigurētu pirmkodu serverim un aģentam ar OpenSSL, var izmantot kaut ko līdzīgu šim:
./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openssl
Dažādi Zabbix komponenti var tikt kompilēti ar dažādām kriptogrāfijas bibliotēkām (piemēram, serveris ar OpenSSL, aģents ar GnuTLS).
Ja plānojat izmantot iepriekš koplietotas atslēgas (PSK), apsveriet iespēju izmantot GnuTLS vai OpenSSL 1.1.0 (vai jaunākas) bibliotēkas tajos Zabbix komponentos, kas izmanto PSK. GnuTLS un OpenSSL 1.1.0 bibliotēkas atbalsta PSK šifru kopas ar Perfect Forward Secrecy. Arī vecākas OpenSSL bibliotēkas versijas (1.0.1, 1.0.2c) atbalsta PSK, taču pieejamās PSK šifru kopas nenodrošina Perfect Forward Secrecy.
Savienojumu šifrēšanas pārvaldība
Savienojumi Zabbix var izmantot:
- bez šifrēšanas (noklusējums)
- uz RSA sertifikātiem balstītu šifrēšanu
- uz PSK balstītu šifrēšanu
Ir divi svarīgi parametri, ko izmanto, lai norādītu šifrēšanu starp Zabbix komponentiem:
- TLSConnect - norāda, kādu šifrēšanu izmantot izejošajiem savienojumiem (bez šifrēšanas, PSK vai sertifikāts)
- TLSAccept - norāda, kādi savienojumu tipi ir atļauti ienākošajiem savienojumiem (bez šifrēšanas, PSK vai sertifikāts). Var norādīt vienu vai vairākas vērtības.
TLSConnect tiek izmantots Zabbix starpniekserveris konfigurācijas failos (aktīvajā režīmā norāda tikai savienojumus ar serveris) un Zabbix aģents konfigurācijas failos (aktīvajām pārbaudēm). Zabbix lietotāja saskarne parametrs, kas atbilst TLSConnect, ir lauks Connections to host cilnē Data collection → Hosts → <some
host> → Encryption un lauks Connections to proxy cilnē
Administration → Proxies → <some proxy> → Encryption. Ja konfigurētais
savienojuma šifrēšanas tips neizdodas, citi šifrēšanas tipi netiks
mēģināti.
TLSAccept tiek izmantots Zabbix starpniekserveris konfigurācijas failos (pasīvajā režīmā norāda tikai savienojumus no serveris) un Zabbix aģents konfigurācijas failos (pasīvajām pārbaudēm). Zabbix lietotāja saskarne parametrs, kas atbilst TLSAccept, ir lauks Connections from host cilnē Data collection → Hosts → <some
host> → Encryption un lauks Connections from proxy cilnē
Administration → Proxies → <some proxy> → Encryption.
Parasti ienākošajiem savienojumiem konfigurē tikai vienu šifrēšanas tipu. Taču, iespējams, vēlēsieties pārslēgt šifrēšanas tipu, piemēram, no nešifrēta uz uz sertifikātiem balstītu, ar minimālu dīkstāvi un iespēju atgriezties pie iepriekšējās konfigurācijas. Lai to panāktu:
- Iestatiet
TLSAccept=unencrypted,certaģents konfigurācijas failā un restartējiet Zabbix aģents - Pārbaudiet savienojumu ar aģents, izmantojot zabbix_get ar sertifikātu. Ja tas darbojas, varat pārkonfigurēt šifrēšanu šim aģents Zabbix lietotāja saskarne cilnē Data collection → Hosts → <some host> → Encryption, iestatot Connections to host uz "Certificate".
- Kad serveris konfigurācijas kešatmiņa tiks atjaunināta (un starpniekserveris konfigurācija tiks atjaunināta, ja hosts tiek uzraudzīts ar starpniekserveris), savienojumi ar šo aģents tiks šifrēti
- Ja viss darbojas, kā paredzēts, varat iestatīt
TLSAccept=certaģents konfigurācijas failā un restartēt Zabbix aģents. Tagad aģents pieņems tikai šifrētus, uz sertifikātiem balstītus savienojumus. Nešifrēti un uz PSK balstīti savienojumi tiks noraidīti.
Līdzīgā veidā tas darbojas serveris un starpniekserveris. Ja Zabbix lietotāja saskarne hosts konfigurācijā lauks Connections from host ir iestatīts uz "Certificate", tad no aģents tiks pieņemti tikai uz sertifikātiem balstīti šifrēti savienojumi (aktīvās pārbaudes) un zabbix_sender (trapper vienumi).
Visticamāk, jūs konfigurēsiet ienākošos un izejošos savienojumus tā, lai tie izmantotu vienu un to pašu šifrēšanas tipu vai vispār neizmantotu šifrēšanu. Taču tehniski ir iespējams to konfigurēt asimetriski, piemēram, uz sertifikātiem balstītu šifrēšanu ienākošajiem savienojumiem un uz PSK balstītu šifrēšanu izejošajiem savienojumiem.
Katra hosts šifrēšanas konfigurācija tiek parādīta Zabbix lietotāja saskarne sadaļā Data collection → Hosts kolonnā Agent encryption. Piemēram:
| Piemērs | Savienojumi ar hostu | Atļautie savienojumi no hosta | Noraidītie savienojumi no hosta |
|---|---|---|---|
![]() |
Nešifrēti | Nešifrēti | Šifrēti, uz sertifikātiem balstīti un uz PSK balstīti šifrēti |
![]() |
Šifrēti, uz sertifikātiem balstīti | Šifrēti, uz sertifikātiem balstīti | Nešifrēti un uz PSK balstīti šifrēti |
![]() |
Šifrēti, uz PSK balstīti | Šifrēti, uz PSK balstīti | Nešifrēti un uz sertifikātiem balstīti šifrēti |
![]() |
Šifrēti, uz PSK balstīti | Nešifrēti un uz PSK balstīti šifrēti | Uz sertifikātiem balstīti šifrēti |
![]() |
Šifrēti, uz sertifikātiem balstīti | Nešifrēti, uz PSK balstīti vai uz sertifikātiem balstīti šifrēti | - |
Savienojumi pēc noklusējuma nav šifrēti. Šifrēšana jākonfigurē katram hostam un starpniekserverim atsevišķi.
zabbix_get un zabbix_sender ar šifrēšanu
Skatiet zabbix_get un zabbix_sender rokasgrāmatas lapas, lai uzzinātu, kā tās izmantot ar šifrēšanu.
Šifru kopas
Pēc noklusējuma šifru kopas tiek konfigurētas iekšēji Zabbix palaišanas laikā.
Tiek atbalstītas arī lietotāja konfigurētas šifru kopas GnuTLS un OpenSSL bibliotēkām. Lietotāji var konfigurēt šifru kopas atbilstoši savām drošības politikām. Šīs iespējas izmantošana nav obligāta (iebūvētās noklusējuma šifru kopas joprojām darbojas).
Kriptogrāfijas bibliotēkām, kas kompilētas ar noklusējuma iestatījumiem, Zabbix iebūvētie noteikumi parasti nodrošina šādas šifru kopas (secībā no augstākas uz zemāku prioritāti):
| Bibliotēka | Sertifikātu šifru kopas | PSK šifru kopas |
|---|---|---|
| GnuTLS 3.1.18 | TLS_ECDHE_RSA_AES_128_GCM_SHA256 TLS_ECDHE_RSA_AES_128_CBC_SHA256 TLS_ECDHE_RSA_AES_128_CBC_SHA1 TLS_RSA_AES_128_GCM_SHA256 TLS_RSA_AES_128_CBC_SHA256 TLS_RSA_AES_128_CBC_SHA1 |
TLS_ECDHE_PSK_AES_128_CBC_SHA256 TLS_ECDHE_PSK_AES_128_CBC_SHA1 TLS_PSK_AES_128_GCM_SHA256 TLS_PSK_AES_128_CBC_SHA256 TLS_PSK_AES_128_CBC_SHA1 |
| OpenSSL 1.0.2c | ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-SHA256 AES128-SHA |
PSK-AES128-CBC-SHA |
| OpenSSL 1.1.0 | ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA |
ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA |
| OpenSSL 1.1.1d | TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA |
TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA |
Lietotāja konfigurēti šifru komplekti
Iebūvētos šifru komplektu atlases kritērijus var pārrakstīt ar lietotāja konfigurētiem šifru komplektiem.
Lietotāja konfigurēti šifru komplekti ir funkcija, kas paredzēta pieredzējušiem lietotājiem, kuri izprot TLS šifru komplektus, to drošību un kļūdu sekas, kā arī pārzina TLS problēmu novēršanu.
Iebūvētos šifru komplektu atlases kritērijus var pārrakstīt, izmantojot šādus parametrus:
| Pārrakstīšanas tvērums | Parametrs | Vērtība | Apraksts |
|---|---|---|---|
| Šifru komplektu atlase sertifikātiem | TLSCipherCert13 | Derīgas OpenSSL 1.1.1 cipher strings TLS 1.3 protokolam (to vērtības tiek nodotas OpenSSL funkcijai SSL_CTX_set_ciphersuites()). |
Uz sertifikātiem balstīti šifru komplektu atlases kritēriji TLS 1.3 Tikai OpenSSL 1.1.1 vai jaunāka versija. |
| TLSCipherCert | Derīgas OpenSSL cipher strings TLS 1.2 vai derīgas GnuTLS priority strings. To vērtības tiek nodotas attiecīgi funkcijām SSL_CTX_set_cipher_list() vai gnutls_priority_init(). |
Uz sertifikātiem balstīti šifru komplektu atlases kritēriji TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL) | |
| Šifru komplektu atlase PSK | TLSCipherPSK13 | Derīgas OpenSSL 1.1.1 cipher strings TLS 1.3 protokolam (to vērtības tiek nodotas OpenSSL funkcijai SSL_CTX_set_ciphersuites()). |
Uz PSK balstīti šifru komplektu atlases kritēriji TLS 1.3 Tikai OpenSSL 1.1.1 vai jaunāka versija. |
| TLSCipherPSK | Derīgas OpenSSL cipher strings TLS 1.2 vai derīgas GnuTLS priority strings. To vērtības tiek nodotas attiecīgi funkcijām SSL_CTX_set_cipher_list() vai gnutls_priority_init(). |
Uz PSK balstīti šifru komplektu atlases kritēriji TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL) | |
| Apvienots šifru komplektu saraksts sertifikātam un PSK | TLSCipherAll13 | Derīgas OpenSSL 1.1.1 cipher strings TLS 1.3 protokolam (to vērtības tiek nodotas OpenSSL funkcijai SSL_CTX_set_ciphersuites()). |
Šifru komplektu atlases kritēriji TLS 1.3 Tikai OpenSSL 1.1.1 vai jaunāka versija. |
| TLSCipherAll | Derīgas OpenSSL cipher strings TLS 1.2 vai derīgas GnuTLS priority strings. To vērtības tiek nodotas attiecīgi funkcijām SSL_CTX_set_cipher_list() vai gnutls_priority_init(). |
Šifru komplektu atlases kritēriji TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL) |
Lai pārrakstītu šifru komplektu atlasi zabbix_get un zabbix_sender utilītās, izmantojiet komandrindas parametrus:
--tls-cipher13--tls-cipher
Jaunie parametri nav obligāti. Ja parametrs nav norādīts, tiek izmantota iekšējā noklusējuma vērtība. Ja parametrs ir definēts, tas nedrīkst būt tukšs.
Ja TLSCipher* vērtības iestatīšana kriptogrāfijas bibliotēkā neizdodas, serveris, starpniekserveris vai aģents netiks palaists un tiks reģistrēta kļūda.
Ir svarīgi saprast, kad katrs parametrs ir piemērojams.
Izejošie savienojumi
Vienkāršākais gadījums ir izejošie savienojumi:
- Izejošajiem savienojumiem ar sertifikātu izmantojiet TLSCipherCert13 vai TLSCipherCert
- Izejošajiem savienojumiem ar PSK izmantojiet TLSCipherPSK13 vai TLSCipherPSK
- zabbix_get un zabbix_sender utilītu gadījumā var izmantot komandrindas
parametrus
--tls-cipher13vai--tls-cipher(šifrēšana ir nepārprotami norādīta ar parametru--tls-connect)
Ienākošie savienojumi
Ar ienākošajiem savienojumiem tas ir nedaudz sarežģītāk, jo noteikumi ir atkarīgi no komponentiem un konfigurācijas.
Zabbix aģentam:
| Aģenta savienojuma iestatīšana | Šifru konfigurācija |
|---|---|
| TLSConnect=cert | TLSCipherCert, TLSCipherCert13 |
| TLSConnect=psk | TLSCipherPSK, TLSCipherPSK13 |
| TLSAccept=cert | TLSCipherCert, TLSCipherCert13 |
| TLSAccept=psk | TLSCipherPSK, TLSCipherPSK13 |
| TLSAccept=cert,psk | TLSCipherAll, TLSCipherAll13 |
Zabbix serverim un starpniekserverim:
| Savienojuma iestatīšana | Šifru konfigurācija |
|---|---|
| Izejošie savienojumi, izmantojot PSK | TLSCipherPSK, TLSCipherPSK13 |
| Ienākošie savienojumi, izmantojot sertifikātus | TLSCipherAll, TLSCipherAll13 |
| Ienākošie savienojumi, izmantojot PSK, ja serverim nav sertifikāta | TLSCipherPSK, TLSCipherPSK13 |
| Ienākošie savienojumi, izmantojot PSK, ja serverim ir sertifikāts | TLSCipherAll, TLSCipherAll13 |
Abās iepriekš redzamajās tabulās var saskatīt noteiktu likumsakarību:
- TLSCipherAll un TLSCipherAll13 var norādīt tikai tad, ja tiek izmantots apvienots uz sertifikātiem un PSK balstītu šifru komplektu saraksts. Tas notiek divos gadījumos: serveris (starpniekserveris) ar konfigurētu sertifikātu (PSK šifru komplekti vienmēr tiek konfigurēti serverī, starpniekserverī, ja kriptogrāfijas bibliotēka atbalsta PSK), aģents, kas konfigurēts pieņemt gan uz sertifikātiem, gan uz PSK balstītus ienākošos savienojumus
- citos gadījumos pietiek ar TLSCipherCert* un/vai TLSCipherPSK*
Tālāk redzamajās tabulās ir parādītas iebūvētās noklusējuma TLSCipher*
vērtības. Tās var būt labs sākumpunkts jūsu pašu pielāgotajām vērtībām.
| Parametrs | GnuTLS 3.6.12 |
|---|---|
| TLSCipherCert | NONE:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509 |
| TLSCipherPSK | NONE:+VERS-TLS1.2:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL |
| TLSCipherAll | NONE:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509 |
| Parametrs | OpenSSL 1.1.1d 1 |
|---|---|
| TLSCipherCert13 | |
| TLSCipherCert | EECDH+aRSA+AES128:RSA+aRSA+AES128 |
| TLSCipherPSK13 | TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256 |
| TLSCipherPSK | kECDHEPSK+AES128:kPSK+AES128 |
| TLSCipherAll13 | |
| TLSCipherAll | EECDH+aRSA+AES128:RSA+aRSA+AES128:kECDHEPSK+AES128:kPSK+AES128 |
1 Noklusējuma vērtības atšķiras vecākām OpenSSL versijām (1.0.1, 1.0.2, 1.1.0), LibreSSL un gadījumos, ja OpenSSL ir kompilēts bez PSK atbalsta.
Lietotāja konfigurētu šifru komplektu piemēri
Tālāk skatiet šādus lietotāja konfigurētu šifru komplektu piemērus:
Šifru komplektu virkņu testēšana un tikai PFS šifru komplektu atļaušana
Lai redzētu, kuri šifru komplekti ir atlasīti, konfigurācijas failā ir jāiestata
'DebugLevel=4' vai jāizmanto -vv opcija
zabbix_sender.
Pirms iegūstat vajadzīgos šifru komplektus, var būt nepieciešama
neliela eksperimentēšana ar TLSCipher* parametriem. Nav ērti
vairākkārt restartēt Zabbix serveri, starpniekserveri vai aģentu tikai tādēļ, lai pielāgotu TLSCipher*
parametrus. Ērtākas iespējas ir izmantot zabbix_sender vai
openssl komandu. Parādīsim abus variantus.
1. Izmantojot zabbix_sender.
Izveidosim testa konfigurācijas failu, piemēram,
/home/zabbix/test.conf, ar zabbix_agentd.conf faila sintaksi:
Hostname=nonexisting
ServerActive=nonexisting
TLSConnect=cert
TLSCAFile=/home/zabbix/ca.crt
TLSCertFile=/home/zabbix/agent.crt
TLSKeyFile=/home/zabbix/agent.key
TLSPSKIdentity=nonexisting
TLSPSKFile=/home/zabbix/agent.psk
Šim piemēram ir nepieciešami derīgi CA un aģenta sertifikāti, kā arī PSK. Pielāgojiet sertifikātu un PSK failu ceļus un nosaukumus savai videi.
Ja neizmantojat sertifikātus, bet tikai PSK, varat izveidot vienkāršāku testa failu:
Hostname=nonexisting
ServerActive=nonexisting
TLSConnect=psk
TLSPSKIdentity=nonexisting
TLSPSKFile=/home/zabbix/agentd.psk
Atlasītos šifru komplektus var redzēt, palaižot zabbix_sender (piemērs kompilēts ar OpenSSL 1.1.d):
$ zabbix_sender -vv -c /home/zabbix/test.conf -k nonexisting_item -o 1 2>&1 | grep ciphersuites
zabbix_sender [41271]: DEBUG: zbx_tls_init_child() certificate ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA
zabbix_sender [41271]: DEBUG: zbx_tls_init_child() PSK ciphersuites: TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA
zabbix_sender [41271]: DEBUG: zbx_tls_init_child() certificate and PSK ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA
Šeit redzat pēc noklusējuma atlasītos šifru komplektus. Šīs noklusējuma vērtības ir izvēlētas, lai nodrošinātu savietojamību ar Zabbix aģentiem, kas darbojas sistēmās ar vecākām OpenSSL versijām (sākot no 1.0.1).
Jaunākās sistēmās varat izvēlēties pastiprināt drošību, atļaujot tikai
dažus šifru komplektus, piemēram, tikai šifru komplektus ar PFS (Perfect Forward
Secrecy). Mēģināsim atļaut tikai šifru komplektus ar PFS, izmantojot
TLSCipher* parametrus.
Rezultāts nebūs savietojams ar sistēmām, kas izmanto OpenSSL 1.0.1 un 1.0.2, ja tiek izmantots PSK. Uz sertifikātiem balstīta šifrēšana būtu jādarbojas.
Pievienojiet test.conf konfigurācijas failam divas rindas:
TLSCipherCert=EECDH+aRSA+AES128
TLSCipherPSK=kECDHEPSK+AES128
un testējiet vēlreiz:
$ zabbix_sender -vv -c /home/zabbix/test.conf -k nonexisting_item -o 1 2>&1 | grep ciphersuites
zabbix_sender [42892]: DEBUG: zbx_tls_init_child() certificate ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA
zabbix_sender [42892]: DEBUG: zbx_tls_init_child() PSK ciphersuites: TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
zabbix_sender [42892]: DEBUG: zbx_tls_init_child() certificate and PSK ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA
"certificate ciphersuites" un "PSK ciphersuites" saraksti ir mainījušies — tie ir īsāki nekā iepriekš un satur tikai TLS 1.3 šifru komplektus un TLS 1.2 ECDHE-* šifru komplektus, kā bija sagaidāms.
2. TLSCipherAll un TLSCipherAll13 nevar testēt ar zabbix_sender; tie neietekmē iepriekšējā piemērā parādīto "certificate and PSK ciphersuites" vērtību. Lai pielāgotu TLSCipherAll un TLSCipherAll13, jums jāeksperimentē ar aģentu, starpniekserveri vai serveri.
Tātad, lai atļautu tikai PFS šifru komplektus, var būt nepieciešams pievienot līdz trim parametriem
TLSCipherCert=EECDH+aRSA+AES128
TLSCipherPSK=kECDHEPSK+AES128
TLSCipherAll=EECDH+aRSA+AES128:kECDHEPSK+AES128
failiem zabbix_agentd.conf, zabbix_proxy.conf un zabbix_server_conf, ja katram no tiem ir konfigurēts sertifikāts un aģentam ir arī PSK.
Ja jūsu Zabbix vide izmanto tikai uz PSK balstītu šifrēšanu un neizmanto sertifikātus, tad nepieciešams tikai viens:
TLSCipherPSK=kECDHEPSK+AES128
Tagad, kad saprotat, kā tas darbojas, varat testēt šifru komplektu
atlasi pat ārpus Zabbix, izmantojot openssl komandu. Pārbaudīsim
visas trīs TLSCipher* parametru vērtības:
$ openssl ciphers EECDH+aRSA+AES128 | sed 's/:/ /g'
TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA
$ openssl ciphers kECDHEPSK+AES128 | sed 's/:/ /g'
TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
$ openssl ciphers EECDH+aRSA+AES128:kECDHEPSK+AES128 | sed 's/:/ /g'
TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
Iespējams, jūs dosiet priekšroku openssl ciphers ar -V opciju, lai iegūtu detalizētāku
izvadi:
$ openssl ciphers -V EECDH+aRSA+AES128:kECDHEPSK+AES128
0x13,0x02 - TLS_AES_256_GCM_SHA384 TLSv1.3 Kx=any Au=any Enc=AESGCM(256) Mac=AEAD
0x13,0x03 - TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD
0x13,0x01 - TLS_AES_128_GCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESGCM(128) Mac=AEAD
0xC0,0x2F - ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD
0xC0,0x27 - ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA256
0xC0,0x13 - ECDHE-RSA-AES128-SHA TLSv1 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA1
0xC0,0x37 - ECDHE-PSK-AES128-CBC-SHA256 TLSv1 Kx=ECDHEPSK Au=PSK Enc=AES(128) Mac=SHA256
0xC0,0x35 - ECDHE-PSK-AES128-CBC-SHA TLSv1 Kx=ECDHEPSK Au=PSK Enc=AES(128) Mac=SHA1
Līdzīgi varat testēt GnuTLS prioritāšu virknes:
$ gnutls-cli -l --priority=NONE:+VERS-TLS1.2:+ECDHE-RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
Cipher suites for NONE:+VERS-TLS1.2:+ECDHE-RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
TLS_ECDHE_RSA_AES_128_GCM_SHA256 0xc0, 0x2f TLS1.2
TLS_ECDHE_RSA_AES_128_CBC_SHA256 0xc0, 0x27 TLS1.2
Protocols: VERS-TLS1.2
Ciphers: AES-128-GCM, AES-128-CBC
MACs: AEAD, SHA256
Key Exchange Algorithms: ECDHE-RSA
Groups: GROUP-SECP256R1, GROUP-SECP384R1, GROUP-SECP521R1, GROUP-X25519, GROUP-X448, GROUP-FFDHE2048, GROUP-FFDHE3072, GROUP-FFDHE4096, GROUP-FFDHE6144, GROUP-FFDHE8192
PK-signatures: SIGN-RSA-SHA256, SIGN-RSA-PSS-SHA256, SIGN-RSA-PSS-RSAE-SHA256, SIGN-ECDSA-SHA256, SIGN-ECDSA-SECP256R1-SHA256, SIGN-EdDSA-Ed25519, SIGN-RSA-SHA384, SIGN-RSA-PSS-SHA384, SIGN-RSA-PSS-RSAE-SHA384, SIGN-ECDSA-SHA384, SIGN-ECDSA-SECP384R1-SHA384, SIGN-EdDSA-Ed448, SIGN-RSA-SHA512, SIGN-RSA-PSS-SHA512, SIGN-RSA-PSS-RSAE-SHA512, SIGN-ECDSA-SHA512, SIGN-ECDSA-SECP521R1-SHA512, SIGN-RSA-SHA1, SIGN-ECDSA-SHA1
Pārslēgšanās no AES128 uz AES256
Zabbix datiem kā iebūvēto noklusējuma algoritmu izmanto AES128. Pieņemsim, ka jūs izmantojat sertifikātus un vēlaties pārslēgties uz AES256, izmantojot OpenSSL 1.1.1.
To var panākt, pievienojot attiecīgos parametrus
zabbix_server.conf:
TLSCAFile=/home/zabbix/ca.crt
TLSCertFile=/home/zabbix/server.crt
TLSKeyFile=/home/zabbix/server.key
TLSCipherCert13=TLS_AES_256_GCM_SHA384
TLSCipherCert=EECDH+aRSA+AES256:-SHA1:-SHA384
TLSCipherPSK13=TLS_CHACHA20_POLY1305_SHA256
TLSCipherPSK=kECDHEPSK+AES256:-SHA1
TLSCipherAll13=TLS_AES_256_GCM_SHA384
TLSCipherAll=EECDH+aRSA+AES256:-SHA1:-SHA384
Lai gan tiks izmantoti tikai ar sertifikātiem saistītie šifru komplekti,
ir definēti arī TLSCipherPSK* parametri, lai izvairītos no
to noklusējuma vērtībām, kas plašākas savietojamības dēļ ietver mazāk
drošus šifrus. PSK šifru komplektus nevar pilnībā atspējot
serverī/starpniekserverī.
Un zabbix_agentd.conf:
TLSConnect=cert
TLSAccept=cert
TLSCAFile=/home/zabbix/ca.crt
TLSCertFile=/home/zabbix/agent.crt
TLSKeyFile=/home/zabbix/agent.key
TLSCipherCert13=TLS_AES_256_GCM_SHA384
TLSCipherCert=EECDH+aRSA+AES256:-SHA1:-SHA384




