Posso nascondere tutte le informazioni sul server / sistema operativo?


80

Non voglio che nessuno sia in grado di rilevare che sto usando NGINX o persino Ubuntu da Internet. Esistono strumenti là fuori (come BuiltWith) che scansionano i server per rilevare quali strumenti stanno usando. Inoltre, alcuni strumenti di cracking potrebbero aiutare con il rilevamento. Qual è il migliore / più vicino a quello che posso ottenere per nascondere tutte queste informazioni dall'esterno?

Risposte:


115

È possibile fermarlo emettendo la versione di Nginx e OS aggiungendo

server_tokens off;

ad una http, servero locationcontesto.

Oppure, se si desidera rimuovere completamente l'intestazione del server, è necessario compilare Nginx con il modulo Headers More in, poiché l'intestazione è hardcoded nell'origine Nginx e questo modulo consente di modificare qualsiasi header HTTP.

 more_clear_headers Server;

Tuttavia, ci sono molti modi nascosti che i server eseguono per errore attraverso la loro implementazione che possono aiutare a identificare il sistema. ad es. come risponde a una richiesta SSL non valida. Non vedo un modo pratico per impedirlo.

Alcune delle cose che potrei suggerire:

  • modifica dei modelli di errore
  • bloccare tutte le porte tranne i servizi necessari

15
Concordato. Osserva ad esempio il rilevamento del sistema operativo di nmap: questo esamina le risposte degli host di destinazione alle richieste IP / TCP ed è in grado di determinare il sistema operativo in quel modo. Non vale davvero la pena di impegnarsi in questo.
EEAA

6
+1 su consiglio di ErikA. Meglio proteggere il tuo server il meglio che puoi piuttosto che affidarti alla sicurezza attraverso l'oscurità.
Andy Smith,

4
I token del server disattivano solo il numero di versione. Nginx non consente di rimuovere completamente l'intestazione.
Martin Fjordvald,

45
ignorare importanti fattori di sicurezza come "nessun numero di versione" e probabilmente anche "nessun nome di fornitore di server" è solo ... un errore per principianti. Naturalmente la sicurezza attraverso l'oscurità non fa nulla per la tua stessa sicurezza, ma è sicuro che almeno proteggerà dai vettori di attacco più banali e semplicistici - la sicurezza attraverso l'oscurità è un passo necessario , potrebbe essere il primo e non dovrebbe mai essere l'ultima sicurezza la misurazione - saltare completamente è un errore molto grave, anche i server Web più sicuri possono essere violati se si conosce un vettore di attacco specifico della versione.
specializt

1
C'è ancora un fastidioso nome del server "Nginx" restituito nel corpo di una risposta di reindirizzamento 301 e non ha trovato alcun modo per evitarlo finora, la regola per utilizzare un modello html personalizzato non funziona per 301.
Guillaume Perrot

31

Se hai installato nginx usando apt-get in Debian o Ubuntu, potresti aver bisogno di installare il pacchetto nginx-extra per impostare o cancellare l'intestazione "Server"

Una volta fatto, puoi aggiungere le seguenti righe in nginx.conf (di solito /etc/nginx/nginx.conf):

Per cancellare del tutto l'intestazione "Server":

more_clear_headers Server; 

Per impostare una stringa personalizzata come "Server"

more_set_headers 'Server: some-string-here';

1
more_clear_headers Server;Opere confermate anche su Debian Jessie 8.5 versione nginx: nginx / 1.6.2
Brandon

Questa risposta richiede più voti. Anche se forse va notato che la direttiva deve essere inserita nel blocco http del file conf (penso)
Andy,

2
Questo funziona in http, server, location, e location ifcontesti. Fonte: documentazione ngx_headers_more
Kelvin,

1
Per gli utenti ubuntu: sudo apt-get install nginx-extras e quindi impostare le intestazioni
jchnxu,

Per me questo è fallito unknown directive "more_set_headers". Risolto tramite l'abilitazione esplicita del modulo in /etc/nginx/nginx.conf. Aggiungi semplicemente load_module modules/ngx_http_headers_more_filter_module.so;all'inizio del file di configurazione.
rapstacke

18

@Martin F. Sì. Dovrai compilarlo dalla fonte e cambiare ciò che è necessario prima di compilare la fonte.

Presumo che tu abbia scaricato l'ultima versione stabile che l'hai decompressa e sai dove sono i file. In tal caso, procedi come segue:

nano src/http/ngx_http_header_filter_module.c

Quindi cerca la riga 48 se ricordo bene.

static char ngx_http_server_string[] = "Server: nginx" CRLF;

Sostituisci nginx con MyWhateverServerNameIWant ad es

static char ngx_http_server_string[] = "Server: MyWhateverServerNameIWant" CRLF; 

Poi

nano src/core/nginx.h 

cerca la linea

#define NGINX_VER          "nginx/" NGINX_VERSION

cambia "nginx /" in "MyWhateverServerNameIWant /" in modo che legga

#define NGINX_VER          "MyWhateverServerNameIWant" NGINX_VERSION

Infine, se vuoi anche cambiare il numero di versione

cercare la riga #define NGINX_VERSION "1.0.4"

e cambia "1.0.4" per qualsiasi versione desideri. Ad esempio leggerà

#define NGINX_VERSION      "5.5.5"

Spero che sia d'aiuto. Tuttavia. La protezione di un server va ben oltre il non mostrare ciò che è in esecuzione. PHP è per natura insicuro, così come Linux. Ovviamente Linux può essere abbastanza sicuro se vengono prese tutte le misure necessarie per ottenere una sicurezza decente. Per quanto riguarda PHP, consiglierei di usare Suoshin per aiutare a rafforzare la sicurezza del tuo codice.


4
+1, grazie. Lascio @ Andy's come funzionario, solo grazie all'approccio più semplice, ma questa è un'informazione eccellente.
Orokusaki,

Penso che intendi Suhosin.
Scarabeo,

7

Dopo un sacco di tempo lavorando su come creare un sapore personalizzato di nginx su Ubuntu mi sono reso conto che puoi usare il modulo lua per questo.

Su Ubuntu 14.04 se installi il nginx-extraspacchetto puoi rimuovere l'intestazione del server usando:

header_filter_by_lua 'ngx.header["server"] = nil';

Aggiungilo nel blocco http e ad ogni richiesta mancherà Serverun'intestazione.

Se non funziona, nginx -Vverifica che il modulo lua sia compilato nella tua copia di nginx. In caso contrario, è probabile che sia disponibile un pacchetto alternativo per ottenerlo.


Confermato che funziona su Debian Jessie 8.5 versione nginx: nginx / 1.6.2
Brandon

1
Sui test debian questo non sembra funzionare MA l'installazione nginx-extraha more_set_headers "Server: whatever";funzionato, quindi +1: D
Shautieh

Devi solo abilitare LUA per farlo funzionare. TNX
Glavić


1

Innanzitutto: perché utilizzare un modulo aggiuntivo come Header More Nginx? Solo per nascondere l'intestazione del server. In poche righe, la semplice patch può raggiungere la stessa soluzione per te.

Poiché l'utilizzo di un modulo aggiuntivo può causare instabilità (quanto è stato testato con l'ambiente? Con altri moduli, ecc.) O insicurezza (questo modulo viene aggiornato regolarmente con correzioni di bug e / o di sicurezza?)

In secondo luogo. Questo thread descrive come risposta 279389 come è possibile regolare il codice Nginx per modificare l'intestazione del server. Il problema è che hanno dimenticato HTTP / 2. In breve, nulla cambierà. L'intestazione del server sarà ancora visibile.

Meno è di più è meglio. Ok, lo ammetto, ho anche cercato una buona soluzione per molto tempo. Ma finalmente trovato:

Patch di rimozione dell'intestazione del server Nginx

Finalmente sono redento da quella fastidiosa intestazione del server Nginx.


0

Esegui questa funzione bash nella cartella del codice sorgente di nginx. Nella versione nginx- $, non in src /.

Sulla base di questa risposta .

hidengxver () {
read -r -p "Your own http_server_string for safety: " http_server_string
first_string="static char ngx_http_server_string\[\] = \"Server: nginx\" CRLF;"
second_string="static char ngx_http_server_string\[\] = \"$http_server_string\" CRLF;"
sed -ire "s/$first_string/$second_string/g" src/http/ngx_http_header_filter_module.c

read -r -p "Your own NGINX_VER const: " nginx_ver
third_string="\#define NGINX\_VER          \"nginx\/\" NGINX\_VERSION"
forth_string="\#define NGINX\_VER          \"$nginx_ver\" NGINX\_VERSION"
sed -ire "s/$third_string/$forth_string/g" src/core/nginx.h

real_nginx_version=$( grep '#define NGINX_VERSION' src/core/nginx.h | gawk -F'"' '{print $2}' )
read -r -p "Your own NGINX_VERSION const: " new_nginx_version
fifth_string="\#define NGINX\_VERSION      \"$real_nginx_version\""
sixth_string="\#define NGINX\_VERSION      \"$new_nginx_version\""
sed -ire "s/$fifth_string/$sixth_string/g" src/core/nginx.h
}

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.