Frage Kann ich alle Server- / Betriebssystem-Informationen ausblenden?


Ich möchte nicht, dass irgendjemand erkennen kann, dass ich NGINX oder sogar Ubuntu aus dem Internet verwende. Es gibt Tools (z. B. BuiltWith), die die Server scannen, um festzustellen, welche Tools sie verwenden. Auch einige knackende Werkzeuge könnten beim Detektieren helfen. Was ist das Beste / am nächsten, dass ich all diese Informationen von außen verstecken kann?


59
2017-12-19 21:00


Ursprung




Antworten:


Sie können die Ausgabe von Nginx und OS stoppen, indem Sie hinzufügen

server_tokens off;

zu einem http, server, oder location Kontext.

Oder wenn Sie den Server-Header vollständig entfernen möchten, müssen Sie Nginx mit dem Modul Headers More kompilieren, da der Header in der Nginx-Quelle fest codiert ist und dieses Modul die Änderung von HTTP-Headern erlaubt.

 more_clear_headers Server;

Es gibt jedoch viele verborgene Wege, die Server durch ihre Implementierung zufällig ausführen, was zur Identifizierung des Systems beitragen kann. z.B. Wie reagiert es auf eine ungültige SSL-Anfrage? Ich sehe keinen praktischen Weg, dies zu verhindern.

Einige der Dinge, die ich vorschlagen könnte:

  • Ändern Sie Fehlervorlagen
  • blockiere alle Ports außer den benötigten Diensten

87
2017-12-19 21:18



Einverstanden. Schauen Sie sich zum Beispiel die Betriebssystemerkennung von nmap an - dies betrachtet die Antworten der Ziel-Hosts auf IP / TCP-Anfragen und kann das Betriebssystem auf diese Weise bestimmen. Es lohnt sich wirklich nicht, sich dafür einzusetzen. - EEAA
+1 auf ErikAs Rat. Besser, Ihren Server so gut wie möglich zu sichern, anstatt sich auf Sicherheit durch Unklarheit zu verlassen. - Andy Smith
@ErikA, @Andy, @Andy Smith - danke Jungs. - orokusaki
Server-Tokens deaktivieren nur die Versionsnummer. Nginx ermöglicht das vollständige Entfernen des Headers nicht. - Martin Fjordvald
wichtige Sicherheitsfaktoren wie "keine Versionsnummern" und wahrscheinlich sogar "kein Serververkäufername" völlig zu ignorieren, ist nur ... ein Anfängerfehler. Na sicher Sicherheit durch Dunkelheit tut nichts für Ihre Sicherheit aber es wird zumindest vor den banalen, simpelsten Angriffsvektoren schützen - Sicherheit durch Dunkelheit ist ein notwendig Schritt, es kann der erste sein und sollte noch nie sei die letzte Sicherheitsmaßnahme - es komplett zu überspringen ist ein sehr Böser Fehler, selbst die sichersten Webserver können geknackt werden, wenn ein versionsspezifischer Angriffsvektor bekannt ist. - specializt


Wenn Sie nginx mit apt-get in Debian oder Ubuntu installiert haben, müssen Sie möglicherweise das Paket nginx-extras installieren, um den Header "Server" zu setzen oder zu löschen

Sobald dies erledigt ist, können Sie die folgenden Zeilen in nginx.conf hinzufügen (normalerweise /etc/nginx/nginx.conf):

Um den Header "Server" vollständig zu löschen:

more_clear_headers Server; 

So legen Sie eine benutzerdefinierte Zeichenfolge als "Server" fest

more_set_headers 'Server: some-string-here';

20
2018-03-29 04:19



Bestätigt more_clear_headers Server; funktioniert auch auf Debian Jessie 8.5 nginx Version: nginx / 1.6.2 - Brandon
Diese Antwort benötigt mehr Upvotes. Obwohl vielleicht bemerkt werden sollte, dass die Direktive innerhalb des http-Blocks der conf-Datei platziert werden muss (denke ich) - Andy
Das funktioniert in http, server, location, und location if Kontexte. Quelle: ngx_headers_more Dokumentation - Kelvin


@Martin F. Ja, tut es. Sie müssen es aus der Quelle kompilieren und ändern, was vor dem Kompilieren der Quelle benötigt wird.

Ich nehme an, Sie haben die letzte stabile Version heruntergeladen, die Sie dekomprimiert haben, und Sie wissen, wo sich die Dateien befinden. Wenn dies der Fall ist, tun Sie Folgendes:

nano src/http/ngx_http_header_filter_module.c

Dann suche nach Zeile 48, wenn ich mich richtig erinnere.

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

Ersetzen Sie Nginx durch MyWhereverServerNameIWant z.

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

Dann

nano src/core/nginx.h 

Suche nach der Linie

#define NGINX_VER          "nginx/" NGINX_VERSION

Ändere "nginx /" in "MyWhateverServerNameIWant /" so, dass es gelesen wird

#define NGINX_VER          "MyWhateverServerNameIWant" NGINX_VERSION

Schließlich wenn Sie auch die Versionsnummer ändern möchten

Suche nach der Linie     #define NGINX_VERSION "1.0.4"

und ändern Sie "1.0.4" für welche Version Sie wollen. Zum Beispiel wird es lesen

#define NGINX_VERSION      "5.5.5"

Ich hoffe es hilft. Dennoch. Die Sicherung eines Servers geht weit darüber hinaus, nicht zu zeigen, was läuft. PHP ist von Natur aus unsicher, und so auch Linux. Natürlich kann Linux ziemlich sicher sein, wenn alle notwendigen Maßnahmen ergriffen werden, um eine anständige Sicherheit zu erreichen. Was PHP betrifft, würde ich empfehlen, zu verwenden Suoschin um die Sicherheit Ihres Codes zu erhöhen.


17
2018-06-11 04:36



+1, danke. Ich verlasse @ Andys als den Beamten, nur wegen der leichteren Annäherung, aber das ist ausgezeichnete Information. - orokusaki
Ich denke du meinst Suhosin. - Beetle


Nach langer Zeit habe ich herausgefunden, wie man eine benutzerdefinierte Version von nginx auf ubuntu macht.

Auf Ubuntu 14.04, wenn Sie das installieren nginx-extras Paket können Sie den Server-Header entfernen mit:

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

Wirf das in den http-Block und jede Anfrage wird fehlen Server Header.

Wenn es nicht funktioniert, laufe nginx -V um zu überprüfen, ob Sie das Lua-Modul in Ihre Kopie von nginx kompiliert haben. Wenn nicht, gibt es wahrscheinlich ein alternatives Paket, das Sie verwenden können, um es zu erhalten.


7
2017-12-18 05:45



Bestätigt, das funktioniert auf Debian Jessie 8.5 nginx Version: nginx / 1.6.2 - Brandon
Beim Debian-Test scheint das nicht zu funktionieren ABER Installation nginx-extra gemacht more_set_headers "Server: whatever"; Arbeit, also +1: D - Shautieh
Sie müssen nur LUA aktivieren, damit dies funktioniert. Tnx - glavić


Anstatt der header_filter_by_lua Es wird empfohlen, die neue Richtlinie zu verwenden header_filter_by_lua_block welche die Lua-Quelle direkt zwischen geschweiften Klammern einsortiert ({}). Damit ist es nicht notwendig, Sonderzeichen zu entkommen.

header_filter_by_lua_block { ngx.header["server"] = nil }

https://github.com/openresty/lua-nginx-module#header_filter_by_lua_block


6
2017-10-02 07:08





Führen Sie diese Bash-Funktion im nginx-Quellcodeordner aus. In nginx- $ Version, nicht in src /.

Basierend auf diese Antwort.

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
}

0
2017-10-27 20:07





Zuallererst: Warum verwenden Sie ein zusätzliches Modul als Headers More Nginx? Nur um den Server-Header zu verstecken. Wenn ein paar Zeilen, einfache Patch die gleiche Lösung für Sie erreichen können.

Die Verwendung eines zusätzlichen Moduls kann zu Instabilität führen (wie gut wurde es mit Ihrer Umgebung getestet? Mit Ihren anderen Modulen usw.) oder Unsicherheit (wird dieses Modul regelmäßig mit Bug- und / oder Sicherheitsupdates aktualisiert?)

Zweitens. Dieser Thread beschreibt als Antwort 279389, wie Sie den Nginx-Code anpassen können, um den Server-Header zu ändern. Problem ist, dass sie HTTP / 2 vergessen haben. Kurz gesagt, nichts wird sich ändern. Der Server-Header ist weiterhin sichtbar.

Weniger ist mehr ist besser. Ok ich gebe zu, ich habe auch lange nach einer guten Lösung gesucht. Aber endlich gefunden:

Entfernen des Nginx-Server-Headers

Ich bin endlich von diesem nervigen Nginx Server Header befreit.


0
2018-06-18 23:25





Siehe hierzu Kern. Sicher wird dir helfen.


-1
2018-06-02 09:30



Willkommen bei Serverfehler! Während dies theoretisch die Frage beantworten könnte, es wäre vorzuziehen um die wesentlichen Teile der Antwort hier einzubeziehen und den Link als Referenz bereitzustellen. - Gerald Schneider