Schon lange hatte ich geplant, mal die Versionnummern meines Webservers und meiner PHP-Installation aus dem HTTP-Header zu entfernen. Da ich es ganz spannend und zugleich sehr simpel fand, möchte ich kurz die Vorgehensweise beschreiben, damit der typische Google-Traffic möglicherweise hieraus schlau wird. Das Ganze teile ich in drei kleine Artikel, um möglichst viele Leute zu erreichen. Im ersten Artikel (hier) werde ich beschreiben, wie man die Versionnummer von Nginx entfernen kann.

In den vorgebauten Nginx-Paketen von Dotdeb und Debian wird die Versionummer hinter dem Text “nginx” und einem Schrägstrich angezeigt. Um dem entgegen zu wirken, muss ein bestimmter Befehl in die jeweilige Nginx-Konfigurationsdatei gesetzt werden. Der Befehl lautet “server_tokens” und ist normalerweise immer “on”. Also auch wenn er in keiner Konfiguration steht, ist er doch auf “on”. Nehmen wir als Beispiel einmal mein Blog unter maltris.org. Starte ich vor der Änderung eine Abfrage des HTTP-Headers, so bekomme ich folgende Antwort:

HTTP/1.1 200 OK
Server: nginx/1.0.11
Date: Fri, 27 Jan 2012 12:49:35 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
X-Pingback: https://maltris.org/xmlrpc.php

Dabei erkennt man sehr schön die Versionnummer. Sicherheits-Freaks entfernen sowas gerne und die anderen machen es nach.

Setze ich nun in der jeweiligen Konfiguration, innerhalb der Serversektion, folgendes ein:

server_tokens off

so bleibt die Anzeige der Version verwehrt und potenzielle Angreifer müssen sich ein wenig mehr Mühe machen als nur den Header abzufragen.

WICHTIG:
Sofern noch keine eigenen Fehler-Dokumente eingerichtet sind, plaudert Nginx die Versionnummer darüber aus. Wie man eigene Fehler-Dokumente bei Nginx einrichtet, zeige ich in einem der kommenden Teile.

HTTP/1.1 200 OK
Server: nginx
Date: Fri, 27 Jan 2012 12:51:45 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
X-Pingback: https://maltris.org/xmlrpc.php

Im nächsten Teil gibt es dann etwas dazu, wie man die PHP-Signatur entfernt. Also das, was im HTTP-Header nach “X-Powered-By” steht.

Anbei eine kurze Beispielkonfiguration für die, die manche Sachverhalte schwerer begreifen:

Vorher:

server {
listen [::]:80;
server_name  domain.tld;

access_log  off;
root /var/www;

location / {
root   /var/www;
index  index.php;
}
}

location ~ \.php$ {
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

Nachher:

server {
listen [::]:80;
server_name  domain.tld;
server_tokens off;
access_log  off;
root /var/www;

location / {
root   /var/www;
index  index.php;
}
}

location ~ \.php$ {
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

2 thoughts on “Nginx Versionsnummer entfernen

  1. > Das Ganze teile ich in drei kleine Artikel, um möglichst viele Leute zu erreichen.

    you’re such a tease.

Leave a Reply

Your email address will not be published. Required fields are marked *