- 17 Encryptie
17 Encryptie
Overzicht
Zabbix ondersteunt versleutelde communicatie tussen Zabbix-componenten met behulp van het Transport Layer Security (TLS) protocol v1.2 en 1.3 (afhankelijk van de cryptobibliotheek). Versleuteling op basis van certificaten en vooraf gedeelde sleutels (PSK) wordt ondersteund.
Versleuteling kan geconfigureerd worden voor verbindingen:
- Tussen Zabbix-server, Zabbix-proxy, Zabbix-agent, zabbix_sender en zabbix_get hulpprogramma's
- Naar Zabbix-database vanuit Zabbix-frontend en server/proxy
Versleuteling is optioneel en configureerbaar voor individuele componenten:
- Sommige proxies en agents kunnen geconfigureerd worden om certificaatgebaseerde versleuteling te gebruiken met de server, terwijl anderen vooraf gedeelde sleutel-gebaseerde versleuteling kunnen gebruiken, en weer anderen kunnen doorgaan met onversleutelde communicatie (zoals voorheen)
- De server (proxy) kan verschillende versleutelingsconfiguraties gebruiken voor verschillende hosts
Zabbix daemonprogramma's gebruiken één luisterpoort voor versleutelde en onversleutelde inkomende verbindingen. Het toevoegen van versleuteling vereist geen opening van nieuwe poorten in firewalls.
Beperkingen
- Privésleutels worden in platte tekst opgeslagen in bestanden die leesbaar zijn voor Zabbix-componenten tijdens het opstarten
- Vooraf gedeelde sleutels worden ingevoerd in de Zabbix-frontend en in platte tekst opgeslagen in de Zabbix-database
- Ingebouwde versleuteling beschermt de communicatie niet:
- Tussen de webserver die Zabbix-frontend uitvoert en de webbrowser van de gebruiker
- Tussen Zabbix-frontend en Zabbix-server
- Momenteel wordt elke versleutelde verbinding geopend met een volledige TLS-handshake, er is geen sessiecaching en tickets geïmplementeerd
- Het toevoegen van versleuteling verhoogt de tijd voor itemcontroles en acties, afhankelijk van de netwerklatentie:
- Bijvoorbeeld, als de pakketvertraging 100 ms is, duurt het openen van een TCP-verbinding en het verzenden van een onversleuteld verzoek ongeveer 200 ms. Met versleuteling wordt ongeveer 1000 ms toegevoegd voor het tot stand brengen van de TLS-verbinding.
- Time-outs moeten mogelijk worden verhoogd, anders kunnen sommige items en acties die op afstand scripts uitvoeren op agents werken met onversleutelde verbindingen, maar mislukken vanwege time-outs bij versleutelde verbindingen.
- Versleuteling wordt niet ondersteund door netwerkontdekking. Controles uitgevoerd door de Zabbix-agent tijdens netwerkontdekking zijn onversleuteld en als de Zabbix-agent is geconfigureerd om onversleutelde verbindingen te weigeren, zullen dergelijke controles niet lukken.
Compileren van Zabbix met versleutelingsondersteuning
Om versleuteling te ondersteunen, moet Zabbix worden gecompileerd en gelinkt met een van de ondersteunde cryptobibliotheken:
- GnuTLS - vanaf versie 3.1.18
- OpenSSL - versies 1.0.1, 1.0.2, 1.1.0, 1.1.1, 3.0.x. Merk op dat 3.0.x wordt ondersteund vanaf Zabbix 6.0.4.
- LibreSSL - getest met versies 2.7.4, 2.8.2:
- LibreSSL 2.6.x wordt niet ondersteund
- LibreSSL wordt ondersteund als een compatibele vervanging van OpenSSL; de nieuwe
tls_*()LibreSSL-specifieke API-functies worden niet gebruikt. Zabbix-componenten gecompileerd met LibreSSL kunnen geen PSK gebruiken, alleen certificaten kunnen worden gebruikt.
:::notitietip U kunt meer te weten komen over het instellen van SSL voor de Zabbix-frontend door te verwijzen naar deze best practices. :::
De bibliotheek wordt geselecteerd door de respectieve optie aan te geven aan het "configure"-script:
--with-gnutls[=DIR]--with-openssl[=DIR](ook gebruikt voor LibreSSL)
Bijvoorbeeld, om de bronnen voor de server en agent te configureren met OpenSSL, kunt u iets als het volgende gebruiken:
./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openssl
Verschillende Zabbix-componenten kunnen worden gecompileerd met verschillende cryptobibliotheken (bijvoorbeeld een server met OpenSSL, een agent met GnuTLS).
::: notebelangrijk Als u van plan bent om vooraf gedeelde sleutels (PSK) te gebruiken, overweeg dan om de GnuTLS of OpenSSL 1.1.0 (of nieuwere) bibliotheken te gebruiken in Zabbix-componenten die PSK's gebruiken. GnuTLS en OpenSSL 1.1.0 bibliotheken ondersteunen PSK-ciphersuites met Perfect Forward Secrecy. Oudere versies van de OpenSSL-bibliotheek (1.0.1, 1.0.2c) ondersteunen ook PSK's, maar de beschikbare PSK-ciphersuites bieden geen Perfect Forward Secrecy. :::
Beheer van verbinding versleuteling
In Zabbix kunnen verbindingen gebruik maken van:
- Geen versleuteling (standaard)
- Versleuteling op basis van RSA-certificaat
- Versleuteling op basis van PSK
Er zijn twee belangrijke parameters die worden gebruikt om versleuteling tussen Zabbix-componenten te specificeren:
- TLSConnect - geeft aan welke versleuteling moet worden gebruikt voor uitgaande verbindingen (ongecodeerd, PSK of certificaat)
- TLSAccept - geeft aan welke soorten verbindingen zijn toegestaan voor inkomende verbindingen (ongecodeerd, PSK of certificaat). Eén of meer waarden kunnen worden gespecificeerd.
TLSConnect wordt gebruikt in de configuratiebestanden voor de Zabbix-proxy (in actieve modus, specificeert alleen verbindingen naar de server) en de Zabbix-agent (voor actieve controles). In de Zabbix-frontend komt het equivalent van TLSConnect overeen met het veld Verbindingen met host in het tabblad Configuratie → Hosts → <een bepaalde host> → Versleuteling en het veld Verbindingen met proxy in het tabblad Beheer → Proxies → <een bepaalde proxy> → Versleuteling. Als het geconfigureerde versleutelingstype voor de verbinding mislukt, zullen er geen andere versleutelingstypen worden geprobeerd.
TLSAccept wordt gebruikt in de configuratiebestanden voor de Zabbix-proxy (in passieve modus, specificeert alleen verbindingen vanaf de server) en de Zabbix-agent (voor passieve controles). In de Zabbix-frontend komt het equivalent van TLSAccept overeen met het veld Verbindingen vanaf host in het tabblad Configuratie → Hosts → <een bepaalde host> → Versleuteling en het veld Verbindingen vanaf proxy in het tabblad Beheer → Proxies → <een bepaalde proxy> → Versleuteling.
Normaal gesproken configureert u slechts één type versleuteling voor inkomende versleutelingen. Maar u wilt mogelijk het versleutelingstype omschakelen, bijvoorbeeld van ongecodeerd naar certificaatgebaseerd met minimale downtime en de mogelijkheid tot terugdraaien. Om dit te bereiken:
- Stel
TLSAccept=unencrypted,certin het configuratiebestand van de agent in en start de Zabbix-agent opnieuw op. - Test de verbinding met zabbix_get naar de agent met behulp van een certificaat. Als dit werkt, kunt u de versleuteling opnieuw configureren voor die agent in de Zabbix-frontend in het tabblad Configuratie → Hosts → <een bepaalde host> → Versleuteling door Verbindingen met host in te stellen op "Certificaat".
- Wanneer de serverconfiguratiecache wordt bijgewerkt (en de proxyconfiguratie wordt bijgewerkt als de host wordt bewaakt door een proxy), zullen verbindingen met die agent worden versleuteld.
- Als alles zoals verwacht werkt, kunt u
TLSAccept=certinstellen in het configuratiebestand van de agent en de Zabbix-agent opnieuw starten. Nu zal de agent alleen versleutelde certificaatgebaseerde verbindingen accepteren. Ongecodeerde en PSK-gebaseerde verbindingen worden afgewezen.
Op een vergelijkbare manier werkt dit op de server en proxy. Als in de Zabbix-frontend in de hostconfiguratie Verbindingen vanaf host is ingesteld op "Certificaat", worden alleen op certificaat gebaseerde versleutelde verbindingen geaccepteerd vanaf de agent (actieve controles) en zabbix_sender (trapper-items).
Waarschijnlijk configureert u inkomende en uitgaande verbindingen om hetzelfde versleutelingstype te gebruiken of helemaal geen versleuteling. Technisch gezien is het echter mogelijk om dit asymmetrisch te configureren, bijvoorbeeld certificaatgebaseerde versleuteling voor inkomende verbindingen en PSK-gebaseerde versleuteling voor uitgaande verbindingen.
De versleutelingsconfiguratie voor elke host wordt weergegeven in de Zabbix-frontend, in Configuratie → Hosts in de kolom Agentversleuteling. Bijvoorbeeld:
| Voorbeeld | Verbindingen met host | Toegestane verbindingen vanaf host | Afgewezen verbindingen vanaf host |
|---|---|---|---|
![]() |
Ongecodeerd | Ongecodeerd | Gecodeerd, certificaat en PSK-gebaseerd gecodeerd |
![]() |
Gecodeerd, certificaatgebaseerd | Gecodeerd, certificaatgebaseerd | Ongecodeerd en PSK-gebaseerd gecodeerd |
![]() |
Gecodeerd, PSK-gebaseerd | Gecodeerd, PSK-gebaseerd | Ongecodeerd en certificaatgebaseerd gecodeerd |
![]() |
Gecodeerd, PSK-gebaseerd | Ongecodeerd en PSK-gebaseerd gecodeerd | Certificaatgebaseerd gecodeerd |
![]() |
Gecodeerd, certificaatgebaseerd | Ongecodeerd, PSK of certificaatgebaseerd gecodeerd | - |
::: notitiebelangrijk Verbindingen zijn standaard ongecodeerd. Versleuteling moet voor elke host en proxy individueel worden geconfigureerd. :::
zabbix_get en zabbix_sender met versleuteling
Zie de manpagina's voor zabbix_get en zabbix_sender voor het gebruik ervan met versleuteling.
Ciphersuites
Standaard worden ciphersuites intern geconfigureerd tijdens het opstarten van Zabbix en, vóór Zabbix 4.0.19 en 4.4.7, zijn ze niet configureerbaar door gebruikers.
Sinds Zabbix 4.0.19 en 4.4.7 worden ook door gebruikers geconfigureerde ciphersuites ondersteund voor GnuTLS en OpenSSL. Gebruikers kunnen ciphersuites configureren volgens hun beveiligingsbeleid. Het gebruik van deze functie is optioneel (de ingebouwde standaard ciphersuites werken nog steeds).
Voor cryptobibliotheken die zijn gecompileerd met de standaardinstellingen, resulteren Zabbix's ingebouwde regels meestal in de volgende ciphersuites (in volgorde van hogere naar lagere prioriteit):
| Bibliotheek | Ciphersuites voor certificaten | Ciphersuites voor PSK |
|---|---|---|
| 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 |
Door de gebruiker geconfigureerde ciphersuites
De ingebouwde ciphersuite-selectiecriteria kunnen worden overschreven met door de gebruiker geconfigureerde ciphersuites.
Door de gebruiker geconfigureerde ciphersuites is een functie bedoeld voor gevorderde gebruikers die TLS-ciphersuites begrijpen, hun beveiliging en de gevolgen van fouten, en die comfortabel zijn met het oplossen van TLS-problemen.
De ingebouwde ciphersuite-selectiecriteria kunnen worden overschreven met behulp van de volgende parameters:
| Overschrijvingsbereik | Parameter | Waarde | Beschrijving |
|---|---|---|---|
| Ciphersuite-selectie voor certificaten | TLSCipherCert13 | Geldige OpenSSL 1.1.1 cipher strings voor TLS 1.3-protocol (hun waarden worden doorgegeven aan de OpenSSL-functie SSL_CTX_set_ciphersuites()). |
Ciphersuite-selectiecriteria voor certificaten voor TLS 1.3 Alleen OpenSSL 1.1.1 of nieuwer. |
| TLSCipherCert | Geldige OpenSSL cipher strings voor TLS 1.2 of geldige GnuTLS priority strings. Hun waarden worden respectievelijk doorgegeven aan de functies SSL_CTX_set_cipher_list() of gnutls_priority_init(). |
Ciphersuite-selectiecriteria voor certificaten voor TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL) | |
| Ciphersuite-selectie voor PSK | TLSCipherPSK13 | Geldige OpenSSL 1.1.1 cipher strings voor TLS 1.3-protocol (hun waarden worden doorgegeven aan de OpenSSL-functie SSL_CTX_set_ciphersuites()). |
Ciphersuite-selectiecriteria voor PSK voor TLS 1.3 Alleen OpenSSL 1.1.1 of nieuwer. |
| TLSCipherPSK | Geldige OpenSSL cipher strings voor TLS 1.2 of geldige GnuTLS priority strings. Hun waarden worden respectievelijk doorgegeven aan de functies SSL_CTX_set_cipher_list() of gnutls_priority_init(). |
Ciphersuite-selectiecriteria voor PSK voor TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL) | |
| Gecombineerde ciphersuite-lijst voor certificaat en PSK | TLSCipherAll13 | Geldige OpenSSL 1.1.1 cipher strings voor TLS 1.3-protocol (hun waarden worden doorgegeven aan de OpenSSL-functie SSL_CTX_set_ciphersuites()). |
Ciphersuite-selectiecriteria voor TLS 1.3 Alleen OpenSSL 1.1.1 of nieuwer. |
| TLSCipherAll | Geldige OpenSSL cipher strings voor TLS 1.2 of geldige GnuTLS priority strings. Hun waarden worden respectievelijk doorgegeven aan de functies SSL_CTX_set_cipher_list() of gnutls_priority_init(). |
Ciphersuite-selectiecriteria voor TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL) |
Om de ciphersuite-selectie in de hulpprogramma's zabbix_get en zabbix_sender te overschrijven, gebruik je de volgende commandoregelparameters:
--tls-cipher13--tls-cipher
De nieuwe parameters zijn optioneel. Als een parameter niet is gespecificeerd, wordt de interne standaardwaarde gebruikt. Als een parameter is gedefinieerd, kan deze niet leeg zijn.
Als het instellen van een TLSCipher* waarde in de cryptobibliotheek mislukt, wordt de server, proxy of agent niet gestart en wordt er een fout gelogd.
Het is belangrijk om te begrijpen wanneer elke parameter van toepassing is.
Uitgaande verbindingen
Het eenvoudigste geval betreft uitgaande verbindingen:
- Voor uitgaande verbindingen met een certificaat - gebruik TLSCipherCert13 of TLSCipherCert
- Voor uitgaande verbindingen met PSK - gebruik TLSCipherPSK13 en TLSCipherPSK
- In het geval van zabbix_get en zabbix_sender hulpprogramma's kunnen de command-line parameters
--tls-cipher13en--tls-cipherworden gebruikt (versleuteling wordt ondubbelzinnig gespecificeerd met een--tls-connectparameter)
Inkomende verbindingen
Het is iets ingewikkelder met inkomende verbindingen omdat de regels specifiek zijn voor componenten en configuraties.
Voor de Zabbix-agent:
| Instelling agent verbinding | Versleutelings Configuratie |
|---|---|
| TLSConnect=cert | TLSCipherCert, TLSCipherCert13 |
| TLSConnect=psk | TLSCipherPSK, TLSCipherPSK13 |
| TLSAccept=cert | TLSCipherCert, TLSCipherCert13 |
| TLSAccept=psk | TLSCipherPSK, TLSCipherPSK13 |
| TLSAccept=cert,psk | TLSCipherAll, TLSCipherAll13 |
Voor Zabbix-server en proxy:
| Verbindings configuratie | Versleutelings configuratie |
|---|---|
| Uitgaande verbindingen met PSK | TLSCipherPSK, TLSCipherPSK13 |
| Inkomende verbindingen met certificaten | TLSCipherAll, TLSCipherAll13 |
| Inkomende verbindingen met PSK als de server geen certificaat heeft | TLSCipherPSK, TLSCipherPSK13 |
| Inkomende verbindingen met PSK als de server een certificaat heeft | TLSCipherAll, TLSCipherAll13 |
Er is een patroon te zien in de twee bovenstaande tabellen:
- TLSCipherAll en TLSCipherAll13 kunnen alleen worden gespecificeerd als een gecombineerde lijst van cijfersuites voor certificaten en PSK wordt gebruikt. Er zijn twee gevallen waarin dit gebeurt: server (proxy) met een geconfigureerd certificaat (PSK-cijfersuites worden altijd geconfigureerd op server, proxy als de crypto-bibliotheek PSK ondersteunt), agent geconfigureerd om zowel op certificaat- als PSK-gebaseerde inkomende verbindingen te accepteren
- in andere gevallen zijn TLSCipherCert* en/of TLSCipherPSK* voldoende
De volgende tabellen tonen de TLSCipher* ingebouwde standaardwaarden. Deze kunnen een goed startpunt zijn voor uw eigen aangepaste waarden.
| Parameter | 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 |
| Parameter | 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 Standaardwaarden zijn anders voor oudere OpenSSL-versies (1.0.1, 1.0.2, 1.1.0), voor LibreSSL en als OpenSSL is gecompileerd zonder PSK-ondersteuning.
** Voorbeelden van door de gebruiker geconfigureerde cijfersuites **
Hieronder vindt u enkele voorbeelden van door de gebruiker geconfigureerde versleutelingssuites:
- Testen van cijferreeksen en alleen toestaan van PFS-cijfersuites
- Overschakelen van AES128 naar AES256
Testen van ciphersuite-strings en alleen toestaan van PFS-ciphersuites
Om te zien welke ciphersuites zijn geselecteerd, moet je 'DebugLevel=4' instellen in het configuratiebestand, of de -vv optie gebruiken voor zabbix_sender.
Enig experimenteren met TLSCipher* parameters kan nodig zijn voordat je de gewenste ciphersuites krijgt. Het is onhandig om de Zabbix-server, proxy of agent meerdere keren opnieuw te moeten starten om TLSCipher* parameters aan te passen. Handiger opties zijn het gebruik van zabbix_sender of het openssl commando. Laten we beide methoden bekijken.
1. Gebruik van zabbix_sender.
Laten we een testconfiguratiebestand maken, bijvoorbeeld /home/zabbix/test.conf, met de syntaxis van een zabbix_agentd.conf bestand:
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
Voor dit voorbeeld heb je geldige CA- en agent-certificaten en PSK nodig. Pas de paden en namen van certificaat- en PSK-bestanden aan voor jouw omgeving.
Als je alleen PSK gebruikt en geen certificaten, kun je een eenvoudiger testbestand maken:
Hostname=nonexisting
ServerActive=nonexisting
TLSConnect=psk
TLSPSKIdentity=nonexisting
TLSPSKFile=/home/zabbix/agentd.psk
De geselecteerde ciphersuites kunnen worden weergegeven door zabbix_sender uit te voeren (het voorbeeld is gecompileerd met OpenSSL 1.1.1):
$ 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
Hier zie je de ciphersuites die standaard zijn geselecteerd. Deze standaardwaarden worden gekozen om interoperabiliteit met Zabbix-agents op systemen met oudere OpenSSL-versies (vanaf 1.0.1) te garanderen.
Met nieuwere systemen kun je de beveiliging aanscherpen door alleen een paar ciphersuites toe te staan, bijvoorbeeld alleen ciphersuites met PFS (Perfect Forward Secrecy). Laten we proberen alleen ciphersuites met PFS toe te staan met behulp van de TLSCipher* parameters.
Het resultaat zal niet interoperabel zijn met systemen die OpenSSL 1.0.1 en 1.0.2 gebruiken, als PSK wordt gebruikt. Versleuteling op basis van certificaten zou wel moeten werken.
Voeg twee regels toe aan het test.conf configuratiebestand:
TLSCipherCert=EECDH+aRSA+AES128
TLSCipherPSK=kECDHEPSK+AES128
en test opnieuw:
$ 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-C
BC-SHA
De lijsten "certificate ciphersuites" en "PSK ciphersuites" zijn veranderd - ze zijn korter dan voorheen en bevatten alleen TLS 1.3 ciphersuites en TLS 1.2 ECDHE-* ciphersuites zoals verwacht.
2. TLSCipherAll en TLSCipherAll13 kunnen niet worden getest met zabbix_sender; ze hebben geen invloed op de waarde van "certificate and PSK ciphersuites" zoals hierboven getoond. Om TLSCipherAll en TLSCipherAll13 aan te passen, moet je experimenteren met de agent, proxy of server.
Dus om alleen PFS ciphersuites toe te staan, moet je mogelijk tot drie parameters toevoegen:
TLSCipherCert=EECDH+aRSA+AES128
TLSCipherPSK=kECDHEPSK+AES128
TLSCipherAll=EECDH+aRSA+AES128:kECDHEPSK+AES128
aan zabbix_agentd.conf, zabbix_proxy.conf en zabbix_server.conf, als elk van hen een geconfigureerd certificaat heeft en de agent ook PSK heeft.
Als jouw Zabbix-omgeving alleen op PSK-gebaseerde versleuteling vertrouwt en geen certificaten gebruikt, dan alleen:
TLSCipherPSK=kECDHEPSK+AES128
Nu je begrijpt hoe het werkt, kun je de ciphersuite-selectie zelfs buiten Zabbix testen, met het openssl commando. Laten we alle drie TLSCipher* parameterwaarden testen:
$ 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
Je kunt ook openssl ciphers gebruiken met de optie -V voor een meer gedetailleerde uitvoer:
$ 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
Op vergelijkbare wijze kun je de prioriteitssnaren voor GnuTLS testen:
$ 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
Overschakelen van AES128 naar AES256
Zabbix gebruikt standaard AES128 voor gegevensversleuteling. Stel dat je certificaten gebruikt en wilt overschakelen naar AES256 op OpenSSL 1.1.1.
Dit kan worden bereikt door de respectievelijke parameters toe te voegen in 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
Hoewel alleen ciphersuites met betrekking tot certificaten zullen worden gebruikt, zijn ook TLSCipherPSK* parameters gedefinieerd om hun standaardwaarden te vermijden, die minder veilige ciphers bevatten voor bredere interoperabiliteit. PSK-ciphersuites kunnen niet volledig worden uitgeschakeld op server/proxy.
En in 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




