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.
Het principe van minste privilege moet te allen tijde worden toegepast voor Zabbix. Dit betekent dat gebruikersaccounts (in de Zabbix-frontend) of procesgebruikers (voor Zabbix-server/proxy of agent) alleen die rechten hebben die essentieel zijn om de beoogde functies uit te voeren. Met andere woorden, gebruikersaccounts moeten te allen tijde worden uitgevoerd met zo min mogelijk rechten.
Het geven van extra machtigingen aan het 'zabbix'-gebruiker kan toegang verlenen tot configuratiebestanden en operaties uitvoeren die de algehele beveiliging van de infrastructuur in gevaar kunnen brengen.
Bij het implementeren van het principe van minste privilege voor gebruikersaccounts moet rekening worden gehouden met de gebruikerstypen van de Zabbix-frontend. Het is belangrijk om te begrijpen dat hoewel een "Admin" gebruikerstype minder rechten heeft dan het "Super Admin" gebruikerstype, het administratieve machtigingen heeft om de configuratie te beheren en aangepaste scripts uit te voeren.
Sommige informatie is zelfs beschikbaar voor niet-geprivilegieerde gebruikers. Bijvoorbeeld, hoewel Administratie → Scripts 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.) moeten worden gebruikt om blootstelling van gevoelige informatie in globale scripts te voorkomen.
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:
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.
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.
Zie Zabbix beveiligingsadviezen en CVE-database.
Op RHEL, installeer het mod_ssl-pakket:
Maak een directory voor SSL-sleutels:
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 het Common Name aanvraagt. Hier moet je de domeinnaam invoeren die je met je server wilt associëren. Je kunt in plaats daarvan het openbare IP-adres invoeren als je geen domeinnaam hebt. We gebruiken in dit artikel example.com.
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:example.com
Email Address []:
Bewerk de 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:
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:
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:
voeg de volgende opdracht toe aan de configuratie van je virtuele host:
Herstart de Apache-service om de wijzigingen toe te passen:
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/Ubuntu2. 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
Het wordt aanbevolen om alle handtekeningen van de webserver uit te schakelen als onderdeel van het proces van het verharden van de webserver. De webserver geeft standaard de softwarehandtekening weer:
De handtekening kan worden uitgeschakeld door twee regels toe te voegen aan het configuratiebestand van Apache (als voorbeeld):
De PHP-handtekening (X-Powered-By HTTP-header) kan worden uitgeschakeld door het php.ini-configuratiebestand te wijzigen (de handtekening is standaard uitgeschakeld):
Het is nodig om de webserver opnieuw op te starten om de wijzigingen in het configuratiebestand toe te passen.
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 aangepast naar elke gewenste waarde door "SecServerSignature" te wijzigen in de gewenste waarde na het installeren van mod_security.
Raadpleeg de documentatie van je webserver voor hulp bij het verwijderen/wijzigen van softwarehandtekeningen.
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.
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.
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 dashboardwidget) tonen opgehaalde inhoud in een sandbox met alle sandbox-beperkingen ingeschakeld.
Deze instellingen verbeteren de beveiliging van de Zabbix frontend en bieden bescherming tegen XSS- en clickjacking-aanvallen. Super Admins kunnen wijzigingen aanbrengen in de parameters voor iframe sandboxing en X-Frame-Options HTTP-responsheader 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.
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.
Om de complexiteit van wachtwoord-brute force-aanvallen te vergroten, wordt voorgesteld om de toegang tot het bestand ui/data/top_passwords.txt
te beperken door de webserverconfiguratie 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 makkelijk te raden wachtwoorden is ingeschakeld in het wachtwoordbeleid.
Bijvoorbeeld op NGINX kan de bestandstoegang beperkt worden met behulp van de location
-directive:
Op Apache kan dit worden gedaan met behulp van een .htaccess
-bestand: