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;
}
}
> Das Ganze teile ich in drei kleine Artikel, um möglichst viele Leute zu erreichen.
you’re such a tease.
Wenn ich drei kleine Dinger mache, gibt mir das das Gefühl, viel zu schreiben.
Muaaaaaaaa :D