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:

Š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:

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,cert aģ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=cert aģ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
none\_none.png Nešifrēti Nešifrēti Šifrēti, uz sertifikātiem balstīti un uz PSK balstīti šifrēti
cert\_cert.png Šifrēti, uz sertifikātiem balstīti Šifrēti, uz sertifikātiem balstīti Nešifrēti un uz PSK balstīti šifrēti
psk\_psk.png Šifrēti, uz PSK balstīti Šifrēti, uz PSK balstīti Nešifrēti un uz sertifikātiem balstīti šifrēti
psk\_none\_psk.png Šifrēti, uz PSK balstīti Nešifrēti un uz PSK balstīti šifrēti Uz sertifikātiem balstīti šifrēti
cert\_all.png Š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-cipher13 vai --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