Formazione e diversity al centro della Summer STEM Academy: le nostre docenzelink
Security First

Come nascondere la versione di Nginx e Apache su Linux e Unix

4 minuti lettura
come nascondere la versione di nginx e apache

Se hai un web server con installato Nginx o Apache, negli headers o nelle pagine di errore il sistema mostra la versione installata del software: una vulnerabilità che potrebbe essere sfruttata in caso di attacchi per accedere alla macchina e alle relative informazioni.

È possibile nascondere sia la versione di Nginx che di Apache sui server Linux e Unix in modo che non sia di pubblico dominio.

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:

  1. on: mostra il numero della versione.
  2. off: nasconde il numero della versione.
  3. build: Funziona solo dalla versione 1.11.10. Mostra il nome della build oltre che il numero di versione.
  4. 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.

Elena Parise

Note sull'autore
Marketing Assistant - Appassionata di scrittura e social media, crede fortemente nell’influenza positiva del digitale e della comunicazione nella vita quotidiana. In Shellrent supporta le imprese nell’identificazione delle soluzioni più adatte in materia di hosting, cloud e infrastrutture IT.
Articoli
Articoli correlati
Security First

Let’s Encrypt o Certificato SSL a pagamento? Vantaggi e svantaggi

2 minuti lettura
Meglio un Certificato SSL a pagamento o Let’s Encrypt? È la domanda che si pongono moltissimi proprietari di siti web, indecisi sulla…
Security First

Direttiva PSD2: cos’è e cosa cambia

3 minuti lettura
Arriva la nuova direttiva europea PSD2 (Payment Services Directive II) che rivoluziona i servizi bancari di pagamento online, spingendo verso un sistema…
Security First

WordPress: come prevenire gli attacchi SQL Injection

5 minuti lettura
WordPress è il CMS più utilizzato sul mercato, con una quota che sfiora il 70% comparato agli altri maggiori CMS, secondo le…