This is a translation of the original English documentation page. Help us make it better.

2 Best practices voor veilige Zabbix-installatie

Overzicht

Deze sectie bevat de beste praktijken die gevolgd moeten worden om Zabbix op een veilige manier op te zetten.

De hier vermelde praktijken zijn niet vereist voor de werking van Zabbix. Ze worden aanbevolen voor een betere beveiliging van het systeem.

Toegangscontrole

Het principe van minimale rechten

Het principe van minimale rechten moet te allen tijde worden toegepast bij Zabbix. Dit principe betekent dat gebruikersaccounts (in de Zabbix frontend) of procesgebruikers (voor Zabbix-server/proxy of agent) alleen die rechten hebben die essentieel zijn voor het uitvoeren van beoogde functies. Met andere woorden, gebruikersaccounts moeten te allen tijde worden uitgevoerd met zo min mogelijk rechten.

Het geven van extra rechten aan het 'zabbix'-gebruiker zal het in staat stellen om toegang te krijgen tot configuratiebestanden en bewerkingen uit te voeren die de algehele beveiliging van de infrastructuur kunnen compromitteren.

Bij het implementeren van het principe van minimale rechten voor gebruikersaccounts, moeten frontend gebruikerstypen in Zabbix in aanmerking worden genomen. Het is belangrijk om te begrijpen dat hoewel een gebruikerstype "Admin" minder rechten heeft dan het gebruikerstype "Super Admin", het wel administratieve rechten heeft waarmee configuraties kunnen worden beheerd en aangepaste scripts kunnen worden uitgevoerd.

Sommige informatie is zelfs beschikbaar voor niet-bevoorrechte gebruikers. Bijvoorbeeld, hoewel AlertsScripts niet beschikbaar is voor niet-Super Admins, zijn de scripts zelf beschikbaar voor ophalen via de Zabbix API. Het beperken van scriptrechten en het niet toevoegen van gevoelige informatie (zoals toegangscertificaten, etc.) moet worden gebruikt om blootstelling van gevoelige informatie die beschikbaar is in globale scripts te vermijden.

Veilige gebruiker voor Zabbix-agent

In de standaardconfiguratie delen Zabbix-server- en Zabbix-agent-processen één 'zabbix'-gebruiker. Als u wilt zorgen dat de agent geen toegang heeft tot gevoelige gegevens in de serverconfiguratie (bijvoorbeeld inloggegevens voor de database), moet de agent worden uitgevoerd als een andere gebruiker:

  1. Maak een veilige gebruiker aan.
  2. Specificeer deze gebruiker in het configuratiebestand van de agent (parameter 'User').
  3. Herstart de agent met beheerdersrechten. De rechten zullen worden overgedragen naar de opgegeven gebruiker.

UTF-8-codering

UTF-8 is de enige codering die door Zabbix wordt ondersteund. Het staat bekend om zijn probleemloze werking zonder enige beveiligingsproblemen. Gebruikers dienen zich ervan bewust te zijn dat er bekende beveiligingsproblemen zijn bij het gebruik van sommige andere coderingen.

Paden van Windows-installatieprogramma's

Bij het gebruik van Windows-installatieprogramma's wordt aanbevolen om de standaard paden te gebruiken die door het installatieprogramma worden geboden. Het gebruik van aangepaste paden zonder de juiste rechten kan de beveiliging van de installatie in gevaar brengen.

SSL instellen voor Zabbix frontend

Op RHEL, installeer het mod_ssl-pakket:

dnf install mod_ssl

Maak een map aan voor SSL-sleutels:

mkdir -p /etc/httpd/ssl/private
       chmod 700 /etc/httpd/ssl/private

Maak een SSL-certificaat aan:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl/private/apache-selfsigned.key -out /etc/httpd/ssl/apache-selfsigned.crt

Vul de prompts passend in. De belangrijkste regel is degene die om de Common Name vraagt. U moet de domeinnaam invoeren die u met uw server wilt associëren. Als u geen domeinnaam heeft, kunt u in plaats daarvan het openbare IP-adres invoeren. We zullen example.com in dit artikel gebruiken.

Landcode (tweeletterige code) [XX]:
       Naam van provincie of staat (volledige naam) []:
       Plaatsnaam (bijv. stad) [Default City]:
       Organisatienaam (bijv. bedrijf) [Default Company Ltd]:
       Naam van organisatie-eenheid (bijv. sectie) []:
       Common Name (bijv. uw naam of de hostnaam van uw server) []:example.com
       E-mailadres []:

Bewerk Apache SSL-configuratie:

/etc/httpd/conf.d/ssl.conf
       
       DocumentRoot "/usr/share/zabbix"
       ServerName example.com:443
       SSLCertificateFile /etc/httpd/ssl/apache-selfsigned.crt
       SSLCertificateKeyFile /etc/httpd/ssl/private/apache-selfsigned.key

Herstart de Apache-service om de wijzigingen toe te passen:

systemctl restart httpd.service

Verharding van de webserver

Zabbix inschakelen op de hoofdmap van de URL

Voeg een virtuele host toe aan de Apache-configuratie en stel een permanente omleiding in voor de document root naar de Zabbix SSL-URL. Vergeet niet example.com te vervangen door de werkelijke naam van de server.

/etc/httpd/conf/httpd.conf
       
       #Voeg de volgende regels toe
       
       <VirtualHost *:*>
           ServerName example.com
           Redirect permanent / https://example.com
       </VirtualHost>

Herstart de Apache-service om de wijzigingen toe te passen:

systemctl restart httpd.service

HTTP Strict Transport Security (HSTS) inschakelen op de webserver

Om Zabbix frontend te beschermen tegen aanvallen waarbij het protocol wordt gedowngraded, raden we aan om een HSTS (HTTP Strict Transport Security) beleid in te schakelen op de webserver.

Bijvoorbeeld, om het HSTS-beleid in te schakelen voor je Zabbix frontend in de Apache-configuratie:

/etc/httpd/conf/httpd.conf

voeg de volgende opdracht toe aan de configuratie van je virtuele host:

<VirtualHost *:443>
          Header set Strict-Transport-Security "max-age=31536000"
       </VirtualHost>

Herstart de Apache-service om de wijzigingen toe te passen:

systemctl restart httpd.service

Enabling Content Security Policy (CSP) on the web server

To protect Zabbix frontend against Cross Site Scripting (XSS), data injection, and similar attacks, we recommend enabling Content Security Policy on the web server. To do so, configure the web server to return the HTTP header.

The following CSP header configuration is only for the default Zabbix frontend installation and for cases when all content originates from the site's domain (excluding subdomains). A different CSP header configuration may be required if you are, for example, configuring the URL widget to display content from the site's subdomains or external domains, switching from OpenStreetMap to another map engine, or adding external CSS or widgets.

To enable CSP for your Zabbix frontend in Apache configuration, follow these steps:

1. Locate your virtual host's configuration file:

  • /etc/httpd/conf/httpd.conf on RHEL-based systems
  • /etc/apache2/sites-available/000-default.conf on Debian/Ubuntu

2. Add the following directive to your virtual host's configuration file:

<VirtualHost *:*>
           Header set Content-Security-Policy: "default-src 'self' *.openstreetmap.org; script-src 'self' 'unsafe-inline' 'unsafe-eval'; connect-src 'self'; img-src 'self' data: *.openstreetmap.org; style-src 'self' 'unsafe-inline'; base-uri 'self'; form-action 'self';"
       </VirtualHost>

3. Restart the Apache service to apply the changes:

# On RHEL-based systems:
       systemctl restart httpd.service
       
       # On Debian/Ubuntu
       systemctl restart apache2.service

Uitschakelen van blootstelling van webserverinformatie

Het wordt aanbevolen om als onderdeel van het verhardingsproces van de webserver alle webserverhandtekeningen uit te schakelen. De webserver geeft standaard een softwarehandtekening weer:

De handtekening kan worden uitgeschakeld door twee regels toe te voegen aan het configuratiebestand van Apache (als voorbeeld gebruikt):

ServerSignature Uit
       ServerTokens Prod

De PHP-handtekening (X-Powered-By HTTP-header) kan worden uitgeschakeld door het php.ini-configuratiebestand te wijzigen (de handtekening is standaard uitgeschakeld):

expose_php = Uit

Voor configuratiewijzigingen in het configuratiebestand is het vereist om de webserver opnieuw te starten.

Er kan een extra beveiligingsniveau worden bereikt door gebruik te maken van mod_security (pakket libapache2-mod-security2) met Apache. mod_security maakt het mogelijk om de serverhandtekening te verwijderen in plaats van alleen de versie uit de serverhandtekening te verwijderen. De handtekening kan worden gewijzigd in elke gewenste waarde door "SecServerSignature" te veranderen in een gewenste waarde nadat mod_security is geïnstalleerd.

Raadpleeg de documentatie van uw webserver om hulp te vinden bij het verwijderen/wijzigen van softwarehandtekeningen.

Uitschakelen van standaard webserverfoutpagina's

Het wordt aanbevolen om standaard foutpagina's uit te schakelen om informatieblootstelling te voorkomen. De webserver gebruikt standaard ingebouwde foutpagina's:

Standaard foutpagina's moeten worden vervangen/verwijderd als onderdeel van het proces van het verharden van de webserver. De "ErrorDocument"-richtlijn kan worden gebruikt om een aangepaste foutpagina/tekst te definiëren voor de Apache-webserver (als voorbeeld gebruikt).

Raadpleeg de documentatie van je webserver voor hulp bij het vervangen/verwijderen van standaardfoutpagina's.

Verwijderen van de webserver testpagina

Het wordt aanbevolen om de webserver testpagina te verwijderen om informatieblootstelling te voorkomen. Standaard bevat de webroot van de webserver een testpagina genaamd index.html (Apache2 op Ubuntu wordt hier als voorbeeld gebruikt):

De testpagina moet worden verwijderd of ontoegankelijk worden gemaakt als onderdeel van het proces om de webserver te beveiligen.

Stel de X-Frame-Options HTTP-responsheader in

Standaard is Zabbix geconfigureerd met de X-Frame-Options HTTP-responsheader ingesteld op SAMEORIGIN, wat betekent dat inhoud alleen kan worden geladen in een frame met dezelfde oorsprong als de pagina zelf.

Zabbix frontend-elementen die inhoud ophalen van externe URL's (namelijk, de URL dashboard widget) tonen de opgehaalde inhoud in een zandbak met alle beperkingen van de zandbak ingeschakeld.

Deze instellingen verbeteren de beveiliging van de Zabbix frontend en bieden bescherming tegen XSS- en clickjacking-aanvallen. Superbeheerders kunnen de parameters voor iframe sandboxing en X-Frame-Options HTTP-responsheader wijzigen zoals nodig. Weeg de risico's en voordelen zorgvuldig af voordat u de standaardinstellingen wijzigt. Het volledig uitschakelen van sandboxing of X-Frame-Options wordt niet aanbevolen.

Schrijftoegang tot SSL-configuratiebestand intrekken in Windows

De Zabbix Windows-agent die is gecompileerd met OpenSSL, probeert toegang te krijgen tot het SSL-configuratiebestand in c:\openssl-64bit. De map "openssl-64bit" op schijf C: kan worden aangemaakt door niet-bevoegde gebruikers.

Dus voor het beveiligen van de beveiliging is het nodig om deze map handmatig aan te maken en de schrijftoegang voor niet-beheerdersgebruikers in te trekken.

Houd er rekening mee dat de mappennamen verschillend zullen zijn op 32-bits en 64-bits versies van Windows.

Cryptografie

Het verbergen van het bestand met de lijst van veelvoorkomende wachtwoorden

Om de complexiteit van aanvallen op wachtwoord-brute force te vergroten, wordt voorgesteld om de toegang tot het bestand ui/data/top_passwords.txt te beperken door de configuratie van de webserver aan te passen. Dit bestand bevat een lijst van de meest voorkomende en contextspecifieke wachtwoorden, en wordt gebruikt om gebruikers te weerhouden dergelijke wachtwoorden in te stellen als de parameter Vermijd gemakkelijk te raden wachtwoorden is ingeschakeld in het wachtwoordbeleid.

Bijvoorbeeld bij NGINX kan toegang tot het bestand worden beperkt door gebruik te maken van de location-directive:

location = /data/top_passwords.txt {
           deny all;
           return 404;
       }

Bij Apache kan dit worden gedaan met behulp van een .htaccess-bestand:

<Files "top_passwords.txt">  
         Order Allow,Deny
         Deny from all
       </Files>

Zabbix Security Advisories and CVE database

See Zabbix Security Advisories and CVE database.