ChatGPT erklärt 😀
Warum sollte man die NGINX- oder Apache-Version verstecken?
Ein HTTP-Header ist eine Art von Metadaten. Stell dir einen HTTP-Header wie das Etikett auf einem Paket vor, das du versendest. Während das Paket selbst den Inhalt enthält, beschreibt das Etikett, wo es hin soll, wie es behandelt werden muss und welche Besonderheiten beachtet werden müssen. Genauso enthält der HTTP-Header Informationen über den Inhalt, den Übertragungsweg und die Bedingungen des Transports.
Bei der Kommunikation zwischen deinem Browser und einem Webserver werden HTTP-Header genutzt, um zusätzliche Informationen zu übertragen, die für die Verarbeitung der Anfrage und der Antwort wichtig sind. Diese Informationen beinhalten unter anderem:
- Welche Art von Daten übertragen wird
- Wie diese Daten zwischengespeichert werden können
- Welche Software auf dem Server läuft
- Welche Sicherheitsmechanismen aktiv sind
Beispiel für einen HTTP-Header:
HTTP/1.1 200 OK
Content-Type: text/html
Server: nginx/1.24.0
In diesem Fall gibt der Server-Header an, dass NGINX in Version 1.24.0 verwendet wird. Das klingt zunächst harmlos, ist jedoch aus sicherheitstechnischer Sicht problematisch.
📦 Wichtige HTTP-Header im Überblick
Neben dem Server-Header gibt es noch andere HTTP-Header, die Informationen über die Serverumgebung preisgeben:
- Content-Type: Gibt den Typ des Inhalts an (z. B. HTML, JSON, Bild).
- Authorization: Wird für die Authentifizierung verwendet (z. B. mit einem Token).
- Set-Cookie: Setzt Cookies (z. B. für Login-Session).
- X-Powered-By: Zeigt verwendete Frameworks oder Programmiersprachen (z. B. PHP, ASP.NET).
🛠 Was macht der Server-Header genau?
Der Server-Header informiert den anfragenden Client (z. B. Browser oder Bot), welche Webserver-Software und Version auf dem Server läuft:
Server: nginx/1.24.0
Server: Apache/2.4.57 (Ubuntu)
Obwohl diese Information technisch korrekt ist, kann sie für Angreifer eine wertvolle Ausgangsbasis sein.
⚠️ Warum ist der Server-Header ein Sicherheitsrisiko?
- Information Disclosure (Informationspreisgabe)
Wenn Angreifer wissen, welche Software und Version du verwendest, können sie gezielt nach bekannten Sicherheitslücken in dieser Version suchen. Dies wird als „Information Disclosure“ bezeichnet. Beispiel: Deine Website verwendet NGINX Version 1.20.1, und es gibt bereits öffentlich bekannte Schwachstellen in dieser Version. Hacker können dann automatisiert nach Servern suchen, die genau diese Version verwenden. - Automatisierte Angriffe
Tools wie Shodan, Nikto oder Nmap scannen das Internet gezielt nach Servern mit bekannten Schwachstellen. Ein offener Server-Header ist ein einfaches Ziel für diese Angriffs-Tools. - Datenschutz und Compliance
Wenn du Software für Kunden betreibst, solltest du auch aus Datenschutz- oder Compliance-Gründen möglichst wenig über deine Serverarchitektur preisgeben.
🔒 Warum du den Server-Header verbergen solltest
Je weniger Informationen ein potenzieller Angreifer über deinen Server hat, desto schwieriger wird es für ihn, gezielte Angriffe zu planen. Das Verbergen des Server-Headers ist eine einfache, aber effektive Maßnahme im Rahmen eines umfassenden Security Hardening (Sicherheitshärtung).
Ein neutraler oder verborgener Server-Header hilft, die Angriffsfläche zu reduzieren:
- Zielgerichtete Angriffe werden erschwert
- Tools wie Shodan oder Nikto laufen ins Leere
- Deine Server-Architektur bleibt verschleiert
- Deine Sicherheitsstrategie wird verstärkt
🔧 Server-Header in NGINX verbergen
NGINX ist einer der populärsten Webserver und zeigt standardmäßig die Versionsnummer an. Hier zeige ich dir, wie du das ausblendest.
✅ Schritt 1: Versionsnummer ausblenden
Öffne die NGINX-Konfigurationsdatei:
sudo nano /etc/nginx/nginx.conf
Füge folgende Zeile hinzu, um die Version zu verbergen:
server_tokens off;
✅ Schritt 2: Server-Header vollständig entfernen (optional)
Um den Server-Header komplett zu entfernen, musst du das zusätzliche Modul headers_more verwenden, das in nginx-extras enthalten ist.
Füge dann Folgendes hinzu:
more_clear_headers Server;
Alternativ kannst du auch einen neutralen Server-Header setzen:
more_set_headers 'Server: MySecureApp';
Speichere die Datei und starte NGINX neu:
sudo systemctl reload nginx
🧰 Server-Header in Apache verbergen
Auch Apache gibt standardmäßig die Version und das Betriebssystem im Server-Header preis. Hier ist, wie du das änderst:
✅ Schritt 1: Konfiguration anpassen
Ändere die Datei apache2.conf oder /etc/apache2/conf-available/security.conf und füge folgende Zeilen hinzu:
ServerTokens Prod
ServerSignature Off
ServerTokens Prod zeigt nur noch „Server: Apache“ an – ohne Version oder Betriebssystem.
ServerSignature Off verhindert, dass Serverinformationen auf Fehlerseiten angezeigt werden.
✅ Schritt 2: Apache neu starten
sudo systemctl restart apache2
🔍 Ergebnis
Nach der Anpassung siehst du im Header nur noch:
Server: Apache
Kein Betriebssystem, keine Version – ein Schritt in Richtung mehr Sicherheit.
🧩 Was, wenn du NGINX und Apache kombinierst?
Oft wird NGINX als Reverse Proxy vor Apache verwendet, um Performance zu verbessern oder HTTPS zu terminieren. In diesem Fall solltest du beide Webserver absichern und sicherstellen, dass NGINX den Server-Header von Apache entfernt oder überschreibt:
proxy_hide_header Server;
Oder:
proxy_set_header Server "Hidden";
So kommen beim Client keine unnötigen Informationen mehr an, selbst wenn Apache intern noch zu viel preisgibt.
💡 Weitere Header, die du bereinigen solltest
Neben dem Server-Header gibt es noch andere Header, die wertvolle Informationen preisgeben:
| Header | Typischer Inhalt | Empfehlung |
|---|---|---|
| X-Powered-By | PHP/8.1.12, ASP.NET | Entfernen oder überschreiben |
| X-AspNet-Version | 4.0.30319 | Entfernen |
| X-Backend-Server | Interner Servername | Nicht senden |
Diese Header können ebenfalls entfernt oder überschrieben werden, um die Sicherheitslücken weiter zu schließen.
📌 Fazit: Kleine Änderungen, große Wirkung
Sicherheitslücken entstehen oft durch kleine Details. Der Server-Header ist ein gutes Beispiel: Was wie eine harmlose Information aussieht, kann Angreifern wertvolle Hinweise auf deine Server-Software und deren Version liefern. Durch das Verbergen dieser Details verringerst du die Angriffsfläche deiner Webanwendung erheblich.
Ob du NGINX oder Apache verwendest – mit wenigen Änderungen kannst du die Versionsnummern und Systeme verbergen und deine Sicherheit entscheidend verbessern.
Weniger Informationen = Besserer Schutz.

Mehr aus der Kategorie Modular 😀