3 Server web

Panoramica

Questa sezione contiene le best practices per configurare il server web in modo sicuro.

Forzare il reindirizzamento dell'URL root a Zabbix SSL

Sui sistemi basati su RHEL, aggiungere un virtual host alla configurazione di Apache (/etc/httpd/conf/httpd.conf) e impostare un reindirizzamento permanente dalla document root all'URL SSL di Zabbix. Si noti che example.com deve essere sostituito con il nome effettivo del server.

# Aggiungere le righe:

<VirtualHost *:*>
    ServerName example.com
    Redirect permanent / https://example.com
</VirtualHost>

Riavviare il servizio Apache per applicare le modifiche:

systemctl restart httpd.service

Abilitazione di HTTP Strict Transport Security (HSTS) sul server web

Per proteggere il frontend Zabbix dagli attacchi di downgrade del protocollo, consigliamo di abilitare la policy HSTS sul server web.

Per abilitare la policy HSTS per il frontend Zabbix nella configurazione di Apache, segui questi passaggi:

1. Individua il file di configurazione del tuo host virtuale:

  • /etc/httpd/conf/httpd.conf sui sistemi basati su RHEL
  • /etc/apache2/sites-available/000-default.conf su Debian/Ubuntu

2. Aggiungi la seguente direttiva al file di configurazione del tuo host virtuale:

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

3. Riavvia il servizio Apache per applicare le modifiche:

# On RHEL-based systems:
systemctl restart httpd.service

# On Debian/Ubuntu
systemctl restart apache2.service

Durante la configurazione di Zabbix, è essenziale applicare gli attributi Secure e SameSite ai cookie di sessione per migliorare la sicurezza e prevenire gli attacchi cross-site request forgery (CSRF). Tuttavia, l'applicazione di SameSite=Strict può causare problemi in alcuni scenari, ad esempio:

  • I widget URL della dashboard mostrano "utente non autenticato" quando incorporano iframe dello stesso dominio.
  • Gli utenti che accedono alla dashboard tramite HTTP invece che HTTPS possono riscontrare problemi di accesso.
  • Impossibilità di condividere URL verso sezioni specifiche del menu di Zabbix o verso host specifici.

Per mitigare questi problemi, gli utenti dovrebbero avere la possibilità di regolare il criterio SameSite.

1. Cookie Secure

L'impostazione del flag secure garantisce che i cookie vengano trasmessi solo tramite HTTPS, evitando l'esposizione su connessioni non crittografate.

Per abilitare i cookie Secure in Zabbix, aggiungere o modificare la seguente impostazione nella configurazione del web server:

Per Apache:

Header always edit Set-Cookie ^(.*)$ $1;Secure

Per Nginx:

proxy_cookie_path / "/; Secure";

Assicurarsi che il frontend di Zabbix sia accessibile tramite HTTPS; in caso contrario, i cookie con il flag Secure non verranno inviati.

2. Configurazione dell'attributo SameSite

Le impostazioni del web server possono anche applicare l'attributo SameSite:

Per Apache:

<IfModule mod_headers.c>
    Header onsuccess edit Set-Cookie (.*) "$1; SameSite=Strict"
</IfModule>

Per Nginx (versione 1.19.3+):

proxy_cookie_flags ~ samesite=Strict; # Sostituire ~ con 'zbx_session' per maggiore specificità

Abilitazione di Content Security Policy (CSP) sul server web

Per proteggere il frontend di Zabbix da Cross Site Scripting (XSS), iniezione di dati e attacchi simili, consigliamo di abilitare Content Security Policy sul server web. Per farlo, configura il server web in modo che restituisca l'header HTTP.

La seguente configurazione dell'header CSP è valida solo per l'installazione predefinita del frontend di Zabbix e per i casi in cui tutto il contenuto proviene dal dominio del sito (esclusi i sottodomini). Potrebbe essere necessaria una configurazione diversa dell'header CSP se, ad esempio, stai configurando il widget URL per visualizzare contenuti dai sottodomini del sito o da domini esterni, passando da OpenStreetMap a un altro motore di mappe, oppure aggiungendo CSS o widget esterni. Se utilizzi il metodo di autenticazione a più fattori Duo Universal Prompt, assicurati di aggiungere "duo.com" alla direttiva CSP nel file di configurazione del tuo virtual host.

Per abilitare CSP per il frontend di Zabbix nella configurazione di Apache, segui questi passaggi:

1. Individua il file di configurazione del tuo virtual host:

  • /etc/httpd/conf/httpd.conf sui sistemi basati su RHEL
  • /etc/apache2/sites-available/000-default.conf su Debian/Ubuntu

2. Aggiungi la seguente direttiva al file di configurazione del tuo virtual host:

<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. Riavvia il servizio Apache per applicare le modifiche:

# Sui sistemi basati su RHEL:
systemctl restart httpd.service

# Su Debian/Ubuntu
systemctl restart apache2.service

Disabilitazione dell'esposizione delle informazioni del server web

Per migliorare la sicurezza, si consiglia di disabilitare tutte le firme del server web.

Per impostazione predefinita, il server web espone la firma software:

La firma può essere disabilitata aggiungendo i seguenti parametri al file di configurazione di Apache:

ServerSignature Off
ServerTokens Prod

La firma PHP (intestazione HTTP X-Powered-By) può essere disabilitata modificando il file di configurazione php.ini (per impostazione predefinita, la firma è disabilitata):

expose_php = Off

È necessario riavviare il server web affinché le modifiche al file di configurazione vengano applicate.

Per una maggiore sicurezza, è possibile utilizzare lo strumento mod_security con Apache (pacchetto libapache2-mod-security2). Questo strumento consente di rimuovere la firma del server anziché rimuoverne solo la versione. La firma del server può essere modificata impostando "SecServerSignature" su qualsiasi valore desiderato dopo l'installazione di mod_security.

Consultare la documentazione del server web per informazioni su come rimuovere/modificare le firme software.

Disabilitazione delle pagine di errore predefinite del server web

Per evitare l'esposizione di informazioni, si consiglia di disabilitare le pagine di errore predefinite.

Per impostazione predefinita, un server web utilizza pagine di errore integrate:

Queste pagine di errore predefinite devono essere sostituite/rimosse. Ad esempio, la direttiva "ErrorDocument" può essere utilizzata per definire una pagina/testo di errore personalizzato per il server web Apache.

Consultare la documentazione del server web per informazioni su come sostituire/rimuovere le pagine di errore predefinite.

Rimozione della pagina di test del server web

Per evitare la divulgazione di informazioni, si consiglia di rimuovere la pagina di test del server web.

Per impostazione predefinita, la radice web del server web Apache contiene la pagina di test index.html:

Consultare la documentazione del server web per informazioni su come rimuovere le pagine di test predefinite.

Imposta l'intestazione di risposta HTTP X-Frame-Options

Di default, Zabbix è configurato con il parametro Usa l'intestazione HTTP X-Frame-Options impostato su SAMEORIGIN. Ciò significa che il contenuto può essere caricato solo in un frame che abbia la stessa origine della pagina stessa.

Gli elementi del frontend di Zabbix che estraggono il contenuto da URL esterni (ovvero, il widget URL dashboard) visualizzano il contenuto recuperato in una sandbox con tutte le restrizioni del sandboxing abilitate.

Queste impostazioni migliorano la sicurezza del frontend di Zabbix e forniscono protezione contro gli attacchi XSS e clickjacking. Gli utenti Super admin possono modificare i parametri Usa sandboxing iframe e Usa l'intestazione HTTP X-Frame-Options in base alle proprie esigenze. Si prega di valutare attentamente i rischi e i benefici prima di modificare le impostazioni predefinite. Si sconsiglia di disattivare completamente il sandboxing degli iframe o l'intestazione HTTP X-Frame-Options.

Nascondere il file con l'elenco delle password comuni

Per aumentare la complessità degli attacchi brute force alle password, si consiglia di limitare l'accesso al file ui/data/top_passwords.txt. Questo file contiene un elenco delle password più comuni e specifiche per il contesto e impedisce agli utenti di impostarle (se il parametro Evita password facili da indovinare è abilitato nella policy password).

Per limitare l'accesso al file top_passwords.txt, modifica la configurazione del tuo server web.

Su Apache, l'accesso ai file può essere limitato utilizzando il file .htaccess:

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

Su NGINX, l'accesso ai file può essere limitato utilizzando la direttiva location:

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