Wie kann man den Nginx Server Header anpassen?

Veröffentlicht 13. Oktober 2024

Problem: Anpassung der Nginx-Server-Header

Nginx-Server-Header enthalten Informationen über die Server-Software, die Sicherheitslücken offenlegen können. Das Anpassen dieser Header kann die Sicherheit verbessern und sensible Informationen vor potenziellen Angreifern verbergen.

Methoden zur Anpassung der Nginx-Server-Header

Ändern der Nginx-Konfiguration

Um Nginx-Server-Header anzupassen, können Sie die Nginx-Konfigurationsdatei ändern. Dies beinhaltet die Bearbeitung der nginx.conf-Datei, die sich normalerweise im Verzeichnis /etc/nginx/ befindet. Eine gängige Methode zur Anpassung der Server-Header ist die Verwendung der server_tokens-Direktive.

Um die nginx.conf-Datei zu bearbeiten, verwenden Sie einen Texteditor mit Root-Rechten:

sudo nano /etc/nginx/nginx.conf

In der Datei können Sie die server_tokens-Direktive hinzufügen oder ändern. Um die Versionsnummer im Server-Header zu deaktivieren, fügen Sie diese Zeile innerhalb des http {}-Blocks hinzu:

server_tokens off;

Speichern Sie die Datei nach den Änderungen und starten Sie Nginx neu, um die neue Konfiguration anzuwenden:

sudo systemctl restart nginx

Tipp: Überprüfen der Server-Header-Änderungen

Nach Änderungen an Ihrer Nginx-Konfiguration können Sie die Server-Header-Modifikationen mit curl überprüfen. Führen Sie folgenden Befehl aus:

curl -I http://ihre-domain.de

Dies zeigt die von Ihrem Server zurückgegebenen HTTP-Header an und ermöglicht es Ihnen zu bestätigen, dass die Änderungen korrekt angewendet wurden.

Verwendung des Headers More-Moduls

Eine weitere Methode zur Anpassung der Nginx-Server-Header ist die Verwendung des Headers More-Moduls. Dieses Modul bietet mehr Kontrolle über HTTP-Antwort-Header.

Um das Headers More-Modul zu verwenden:

  1. Installieren Sie das Modul. Auf Ubuntu- oder Debian-Systemen verwenden Sie:
sudo apt-get install nginx-extras
  1. Nach der Installation richten Sie benutzerdefinierte Header in Ihrer Nginx-Konfigurationsdatei ein. Um den Server-Header vollständig zu entfernen, fügen Sie diese Zeile innerhalb des server {}-Blocks hinzu:
more_clear_headers Server;

Um einen benutzerdefinierten Server-Header festzulegen, verwenden Sie:

more_set_headers "Server: Mein Benutzerdefinierter Server";

Denken Sie daran, Nginx nach diesen Änderungen neu zu starten, um die neue Konfiguration anzuwenden.

Schritt-für-Schritt-Anleitung zur Anpassung der Nginx-Server-Header

Deaktivieren des Server-Headers vollständig

Um den Server-Header in Nginx zu entfernen:

  1. Öffnen Sie Ihre Nginx-Konfigurationsdatei:

    sudo nano /etc/nginx/nginx.conf
  2. Fügen Sie diese Zeilen innerhalb des http {}-Blocks hinzu:

    server_tokens off;
    more_clear_headers Server;
  3. Speichern Sie die Datei und verlassen Sie den Texteditor.

  4. Testen Sie die Konfiguration auf Syntaxfehler:

    sudo nginx -t
  5. Wenn keine Fehler gefunden werden, starten Sie Nginx neu:

    sudo systemctl restart nginx

Um die Änderungen zu überprüfen:

  1. Verwenden Sie curl, um die Header zu überprüfen:

    curl -I http://ihre-domain.de
  2. Suchen Sie nach dem Server-Header in der Ausgabe. Er sollte nicht vorhanden sein.

Tipp: Überprüfen mit Browser-Entwicklertools

Sie können auch die Entwicklertools Ihres Browsers verwenden, um die Server-Header zu überprüfen. Öffnen Sie die Entwicklertools (normalerweise F12), gehen Sie zum Netzwerk-Tab, laden Sie die Seite neu und inspizieren Sie die Header der Hauptseitenanfrage.

Ändern des Server-Header-Inhalts

Um die Server-Header-Informationen zu ändern:

  1. Öffnen Sie Ihre Nginx-Konfigurationsdatei:

    sudo nano /etc/nginx/nginx.conf
  2. Fügen Sie diese Zeile innerhalb des http {}-Blocks hinzu:

    more_set_headers "Server: Ihr Benutzerdefinierter Servername";
  3. Speichern Sie die Datei und verlassen Sie den Texteditor.

  4. Testen Sie die Konfiguration:

    sudo nginx -t
  5. Wenn keine Fehler gefunden werden, starten Sie Nginx neu:

    sudo systemctl restart nginx

Um den neuen Server-Header zu testen:

  1. Verwenden Sie curl, um die Header zu überprüfen:

    curl -I http://ihre-domain.de
  2. Suchen Sie nach dem Server-Header in der Ausgabe. Er sollte Ihren benutzerdefinierten Servernamen anzeigen.

Alternative Ansätze

Verwendung der proxy_pass_header-Direktive

Die proxy_pass_header Server-Direktive in Nginx ermöglicht es, den Server-Header von einem Backend-Server weiterzuleiten, ohne dass Nginx ihn ändert. Diese Methode ist nützlich, wenn Sie Nginx als Reverse-Proxy verwenden und den ursprünglichen Server-Header Ihrer Backend-Anwendung beibehalten möchten.

Um diese Methode zu verwenden:

  1. Öffnen Sie Ihre Nginx-Konfigurationsdatei:

    sudo nano /etc/nginx/nginx.conf
  2. Fügen Sie diese Zeile innerhalb des server {}-Blocks hinzu:

    proxy_pass_header Server;
  3. Speichern Sie die Datei und starten Sie Nginx neu:

    sudo systemctl restart nginx

Dieser Ansatz ist gut, wenn Sie die Server-Header-Informationen von Ihrem Backend-Server unverändert beibehalten möchten, anstatt sie komplett zu ändern oder zu entfernen.

Tipp: Fehlerbehebung bei proxy_pass_header

Wenn die proxy_pass_header-Direktive nicht zu funktionieren scheint, überprüfen Sie, ob Sie andere Direktiven haben, die sie möglicherweise überschreiben, wie proxy_hide_header oder proxy_set_header. Diese Direktiven können proxy_pass_header beeinträchtigen, wenn sie nicht korrekt konfiguriert sind.

Verwendung serverseitiger Skriptsprachen

Sie können auch serverseitige Skriptsprachen wie PHP, Python oder andere verwenden, um HTTP-Header zu ändern. Diese Methode bietet Ihnen mehr Möglichkeiten zur dynamischen Handhabung von Headern.

Zum Beispiel in PHP:

<?php
header("Server: Benutzerdefinierter PHP-Server");
?>

In Python (mit Flask):

from flask import Flask, make_response

app = Flask(__name__)

@app.after_request
def add_header(response):
    response.headers['Server'] = 'Benutzerdefinierter Python-Server'
    return response

Vorteile dieses Ansatzes:

  • Ermöglicht dynamische Header-Änderungen basierend auf spezifischen Bedingungen
  • Kann in bestehende Anwendungslogik integriert werden

Nachteile dieses Ansatzes:

  • Fügt Verarbeitungsaufwand hinzu
  • Funktioniert möglicherweise nicht, wenn Header bereits gesendet wurden
  • Erfordert Änderungen am Anwendungscode anstatt an Servereinstellungen