Stai usando Nginx o Apache sul tuo server web? Presta attenzione alla versione del software, verificando che non sia visibile negli header o nelle pagine di errore, creando una potenziale vulnerabilità che potrebbe essere sfruttata dagli hacker.
Per ovviare a questo rischio, con semplici modifiche ai file di configurazione, puoi impedire che la versione di Nginx o Apache sia pubblicamente accessibile, aumentando la sicurezza del tuo server.
Indice dei contenuti:
Cos’è e come funziona Nginx
Nginx è un web server open source che, ad oggi, è utilizzato non solo come server ma anche come proxy inverso, cache HTTP e bilanciatore di carico. Altre caratteristiche sono il supporto FastCGI, WebSockets e gestione di file statici, file indice a autoindicizzazione.
Il software, realizzato da Igor Sysoev e rilasciato nel 2004, spesso riesce a superare le prestazioni dei competitor, specialmente in caso di contenuto statico o di richieste simultanee. Infatti, invece di creare un nuovo processo per ogni richiesta web, Nginx utilizza un approccio asincrono basato sugli eventi, riuscendo a controllare più processi worker via un unico processo master.
Procedura per Nginx
Di default, la versione di Nginx viene mostrata negli headers di risposta a una chiamata HTTP o a seguito di un errore generato dal server Nginx stesso.
Mostrare la versione corrente di Nginx usando la CLI
Nginx mostrerà la versione nelle pagine errore negli headers di risposta del server.
Possiamo verificarla usando il seguente comando:
curl -I https://your-domain curl -I https://web.shellrent.com
Otteniamo:
HTTP/1.1 200 OK
Server: nginx/1.10.3
Content-Type: text/html; charset=utf-8
Content-Length: 11460
Connection: keep-alive
Vary: Accept-Language, Origin, Cookie
Content-Language: en
X-API-Total-Time: 0.028s
Strict-Transport-Security: max-age=15768000
Ecco l’output dalla pagina di errore HTTP/502 che mostra la versione di Nginx.
Nascondere la versione di Nginx con la direttiva server_tokens
Dobbiamo impostare su off la direttiva server_tokens per nascondere la versione del server Nginx sui sistemi Linux e Unix. Modifica il tuo file nginx.conf usando un editor di testo come vim/nano:
nano /etc/nginx/nginx.conf
Possiamo impostare la direttiva server_tokens esclusivamente sulle sezioni di configurazione http, server o location. Di seguito un esempio con la sezione http:
server_tokens off;
Ecco cosa vedremo:
http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 30; types_hash_max_size 2048;server_tokens off;
reset_timedout_connection on;
# Limit Request
limit_req_status 403;
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
# Proxy Settings
# set_real_ip_from proxy-server-ip;
# real_ip_header X-Forwarded-For;
fastcgi_read_timeout 300;
client_max_body_size 100m;
Effettua un test e un reload della configurazione di Nginx con i seguenti comandi:
nginx -t nginx -s reload
Verifica che la versione di Nginx sia nascosta
Usiamo il comando curl come segue:
curl -I https://your-domain curl -I https://web.shellrent.com
Verrà comunque riportato il web server, ma senza versione.
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html; charset=utf-8
Content-Length: 11460
Connection: keep-alive
Vary: Accept-Language, Origin, Cookie
Content-Language: en
X-API-Total-Time: 0.028s
Strict-Transport-Security: max-age=15768000
Ora, Chrome conferma che abbiamo nascosto con successo la versione di Nginx.
Altri possibili valori assegnabili alla direttiva server_tokens
La sintassi è come segue:
server_tokens on | off | build | string;
Il valore di default sui sistemi Linux, *BSD e UNIX:
server_tokens on;
Rimuovere la versione dagli headers del server e dalle pagine errore
Possiamo modificare i seguenti valori per abilitare o disabilitare la visibilità della versione di Nginx:
- on: mostra il numero della versione.
- off: nasconde il numero della versione.
- build: Funziona solo dalla versione 1.11.10. Mostra il nome della build oltre che il numero di versione.
- string: funziona solo con sottoscrizioni commerciali, a partire dalla versione 1.9.13. E’ possibile utilizzare una stringa personalizzata sulle pagine di errore e sul campo “Server” degli headers di risposta. Una stringa vuota disabilita interamente il campo “Server” negli headers.
Customizzare il numero della versione di Nginx
Ad esempio, gli utenti con una sottoscrizione commerciale (Nginx Plus) possono impostarlo come segue per alterare la versione del server e nome:
server_tokens "Powered_by_Shellrent";
Eseguiamo il reload della configurazione di Nginx:
nginx -t nginx -s reload
Facciamo un test usando il comando curl:
curl -I http://127.0.0.1/
HTTP/1.1 200 OK
Server: Powered_by_Shellrent
Content-Type: text/html; charset=utf-8
Content-Length: 11460
Connection: keep-alive
Vary: Accept-Language, Origin, Cookie
Content-Language: en
X-API-Total-Time: 0.028s
Strict-Transport-Security: max-age=15768000
Nascondere la versione è “Security by obscurity”
“Security by obscurity” è uno dei metodi di difesa più semplici e veloci da applicare. Tuttavia, non dovrebbe essere la vostra prima scelta.
È necessario porre molta attenzione alla sicurezza del codice, installare un firewall (specialmente un WAF – Web Application Firewall, es. ModSecurity). Non c’è motivo per esporre la versione di Nginx, PHP o Python perché potrebbe essere un’utile fonte di informazioni per chi volesse effettuare un attacco. Ricorda: i sistemi operativi Linux/Unix, web apps/Nginx devono essere sicuri a prescindere che la loro versione sia esposta o meno.
Come sempre, puoi consultare la documentazione Nginx.
Procedura per Apache
Come per Nginx è possibile nascondere la versione di Apache sui server Linux e Unix modificando i parametri di configurazione ServerTokens e ServerSignature.
La direttiva ServerSignature permette l’aggiunta di una linea di footer che mostra il nome del server e la versione in documenti generati server-side come messaggi di errore, mod_proxy, list di directory, output di mod_info ecc.
Può essere impostata a off (default) e quindi sopprimere la linea di footer.
Se impostata a on aggiunge una linea con il numero versione e il ServerName del VirtualHost che serve i contenuti.
Se impostata a EMail aggiunge al footer un riferimento al mailto: al ServerAdmin relativo al VirtualHost.
La direttiva ServerTokens determina se il campo “server” negli headers di risposta contengono una descrizione del sistema operativo del server e informazioni relative ai moduli di Apache.
La direttiva può avere i seguenti valori e delle informazioni d’esempio in risposta al client:
- ServerTokens Full (or not specified)
Informazioni inviate al client: Server: Apache/2.4.2 (Unix) PHP/4.2.2 MyMod/1.2 - ServerTokens Prod[uctOnly]
Informazioni inviate al client: Server: Apache - ServerTokens Major
Informazioni inviate al client: Server: Apache/2 - ServerTokens Minor
Informazioni inviate al client: Server: Apache/2.4 - ServerTokens Min[imal]
Informazioni inviate al client: Server: Apache/2.4.2 - ServerTokens OS
Informazioni inviate al client: Server: Apache/2.4.2 (Unix)
Nota: Dalla versione di Apache 2.0.44 la direttiva ServerTokens controlla anche le informazioni fornite dalla direttiva ServerSignature.
Modifichiamo quindi la configurazione di Apache:
nano /etc/apache2/apache2.conf # sistemi Debian/Ubuntu nano /etc/httpd/conf/httpd.conf # sistemi RHEL/CentOS
E aggiungiamo le seguenti righe:
ServerTokens Prod ServerSignature Off
Salviamo il file ed effettuiamo un restart di apache con il comando:
service apache2 restart # sistemi Debian/Ubuntu service httpd restart # sistemi RHEL/CentOS
Come sempre, puoi consultare la documentazione Apache.