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 su Linux e Unix

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.

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.

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

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.

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

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.

Avatar photo
12 articoli

Note sull'autore
Dal 2006 forniamo soluzioni web hosting e cloud dalle alte prestazioni, semplici da gestire e da utilizzare quotidianamente.
Articoli
Articoli correlati
Security First

Cos’è e come funziona un attacco brute force

3 minuti lettura
Esistono diversi attacchi cyber che possono compromettere il funzionamento dei siti web. Tra questi, il brute force è uno dei più frequenti e…
Security First

Cos'è un "trojan horse" e come difendersi dal malware

4 minuti lettura
Nel corso degli anni, la sicurezza informatica ha acquisito un’importanza sempre più centrale. Una delle minacce più diffuse nel settore è il…
Security First

Come verificare se un indirizzo IP è in blacklist e come rimuoverlo

3 minuti lettura
Se i messaggi di posta elettronica non raggiungono i destinatari, una delle prime ipotesi da prendere in considerazione è la possibilità che…