Was ist ein HTTP-Header 🔐

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?

  1. 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.
  2. 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.
  3. 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:

HeaderTypischer InhaltEmpfehlung
X-Powered-ByPHP/8.1.12, ASP.NETEntfernen oder überschreiben
X-AspNet-Version4.0.30319Entfernen
X-Backend-ServerInterner ServernameNicht 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.

An extreme close-up of colorful programming code on a computer screen, showcasing development and software debugging.

Mehr aus der Kategorie Modular 😀

Nach oben scrollen