Wie man gegen DDoS-Angriffe mit Nginx schützt

Wie man gegen DDoS-Angriffe mit Nginx schützt

Distributed-Denial-of-Service-Angriffe (DDoS) sind eine ernsthafte Bedrohung für jedes Online-Unternehmen und jede Webanwendung. In diesem Artikel werfen wir einen genaueren Blick auf Angriffe auf der Anwendungsschicht und erklären, wie man sich mit Nginx davor schützen kann. Wir stellen Ihnen Anweisungen und Codeschnipsel zur Verfügung, mit denen Sie die Nginx Reverse-Proxy-Instanz so konfigurieren können, dass Sie Ihre Online-Präsenz auf der Anwendungsschicht sicher vor DDoS-Angriffen schützen können.

DDoS-Angriffe auf der Anwendungsschicht

Angriffe auf der Anwendungsschicht, auch bekannt als DDoS-Angriffe auf Schicht 7, zielen auf die Anwendungsschicht als oberste Schicht des OSI-Modells ab, auf der übliche Webanfragen wie HTTP GET und HTTP POST erfolgen. Diese Angriffe sind besonders effektiv, da sie sowohl Server- als auch Netzwerkressourcen verbrauchen und im Vergleich zu anderen Arten von DDoS-Angriffen erhebliche Störungen bei geringerer Gesamtbandbreite verursachen. Weiterhin sind Angriffe auf der Anwendungsschicht oft ausgeklügelter und schwieriger zu erkennen und zu entschärfen als andere Arten von DDoS-Angriffen.

Beispiele für Angriffe auf der Anwendungsschicht:

  • HTTP-Flood: Bei einem HTTP-Flood wird eine große Anzahl von HTTP-Anfragen an das Ziel gesendet, z. B. über ein Botnet oder ein Netzwerk von kompromittierten Geräten. Das Ziel kann unter Umständen abstürzen, wenn es nicht in der Lage ist, eine große Anzahl von Anfragen zu verarbeiten.
  • Slowloris: Slowloris ist eine Art von Angriff auf der Anwendungsschicht, bei dem partielle HTTP-Anfragen an das Ziel gesendet werden und die Verbindungen so lange wie möglich offen gehalten werden. Dies kann die Ressourcen des Ziels erschöpfen. Zum Beispiel der Code perl slowloris.pl -dns 192.0.2.1 verwendet beispielsweise ein auf Perl basiertes Slowloris.pl-Tool, um einen Slowloris-Angriff auf den Ziel-Webserver unter der IP-Adresse 192.0.2.1 zu initiieren, indem er partielle HTTP-Anfragen sendet und die Verbindungen für einen längeren Zeitraum offen hält, wodurch das Ziel nicht mehr erreichbar ist.

DDoS-Schutz oder DDoS-Abschwächung mit Nginx

Nginx ist ein leistungsstarker, stabiler und ressourceneffizienter Open-Source-Webserver und Reverse Proxy. Es kann so konfiguriert werden, dass es als Load Balancer, Reverse Proxy und HTTP-Cache fungiert und wird häufig von webbasierten Anwendungen verwendet, um große Mengen an Datenverkehr zu bewältigen.

DDoS-Schutz oder DDoS-Abschwächung ist der Prozess des Schutzes eines Netzwerks oder Systems vor DDoS-Angriffen. Dies kann eine Vielzahl von Maßnahmen umfassen, wie z. B. die Einrichtung von Firewalls und Load Balancern, um bösartigen Traffic herauszufiltern, die Implementierung von Rate Limiting, um übermäßige Anfragen zu verhindern, und die Nutzung von cloudbasierten DDoS-Schutzdiensten, um bösartigen Traffic zu absorbieren und herauszufiltern.

Die Verwendung von Nginx für den DDoS-Schutz kann effektiv sein, um Ihre Server vor DDoS-Angriffen zu schützen. Durch die Konfiguration von Nginx als Reverse Proxy und die Implementierung geeigneter Parameter zur Ratenbegrenzung und Zeitüberschreitung können Sie die Auswirkungen von DDoS-Angriffen abfedern und abschwächen und Ihre Server davor schützen, von bösartigem Traffic überwältigt zu werden. Die folgenden Abschnitte behandeln verschiedene Methoden, die Sie verwenden können, um DDoS-Schutz mit Nginx zu implementieren.

Anzahl der Verbindungen begrenzen

Die Begrenzung der Anzahl der Verbindungen, die von einer einzigen IP-Adresse aus hergestellt werden können, kann verhindern, dass eine einzelne Quelle Ihre Server mit Anfragen überflutet. Sie können diese Methode mit Nginx und der Direktive limit_conn implementieren.

Die folgende Konfiguration begrenzt beispielsweise die Anzahl der Verbindungen auf 100 pro IP-Adresse:

limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
server {
    ...
    limit_conn conn_limit_per_ip 100;
}

Wenn Sie zum Schutz vor DDoS-Angriffen ein Limit für Verbindungen festlegen, müssen Sie das richtige Gleichgewicht zwischen Schutz und Performance finden. Ein zu niedriges Limit kann legitimen Benutzern schaden, während ein zu hohes Limit keinen wirksamen Schutz vor Angriffen bietet. Eine niedrige Zahl wie 10 oder 20 ist ein guter Ausgangspunkt, den Sie dann schrittweise erhöhen können, bis Sie den richtigen Wert für Ihren Server gefunden haben. Um den für Sie perfekten Wert zu bestimmen, müssen Sie die Leistung Ihres Servers überwachen und Anpassungen vornehmen, je nachdem, wie er den eingehenden Traffic verarbeitet. Bei der Konfiguration des Limits müssen Sie auch die Anzahl der NAT-Clients berücksichtigen, da dies die Anzahl der Verbindungen beeinflussen kann. Als allgemeine Empfehlung sollten Sie Ihre Anwendung mit einer Vielzahl von Verbindungsgrenzen testen, um den optimalen Wert zu finden, der sowohl Schutz als auch Leistung bietet.

Diese Methode kann wirksam vor DDoS-Angriffen schützen, die eine große Anzahl von Verbindungen umfassen, wie z. B. SYN-Floods.

Größe der Anfrage begrenzen

Sie können die Direktive limit_req verwenden, um die Anzahl der Anfragen in Nginx zu begrenzen. Diese Direktive begrenzt die Abfragerate auf eine bestimmte Anzahl von Anfragen pro Sekunde für einen bestimmten Schlüssel, die normalerweise auf der IP-Adresse des Clients basiert.

Im Folgenden finden Sie eine Beispielkonfiguration, die die Abfragerate auf 10 Anfragen pro Sekunde und IP-Adresse beschränkt:

limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;
server {
    ...
    limit_req zone=req_limit_per_ip burst=10 nodelay;
}

In diesem Beispiel definiert die Direktive limit_req_zone die Zone für das Rate Limiting, und der Parameter rate setzt das Limit auf fünf Anfragen pro Sekunde (10r/s). Der Parameter „burst“ gibt die Anzahl der Anfragen an, die das Limit überschreiten dürfen, und der Parameter „nodelay“ sorgt dafür, dass Anfragen, die das Limit überschreiten, sofort zurückgewiesen werden.

Sie sollten den Grenzwert für die Anfragerate genau abstimmen, um den für Ihre Anwendung geeigneten Schwellenwert zu finden. Sie sollten mit einer relativ geringen Anzahl von Anfragen pro Sekunde beginnen, z. B. fünf Anfragen pro Sekunde pro IP-Adresse, und die Anfragerate schrittweise erhöhen, bis Sie den für Sie optimalen Wert gefunden haben.

Auch der CPU- und RAM-Verbrauch Ihres Servers sollte bei der Feinabstimmung der Anfragerate überwacht werden. Wenn der Server zu stark ausgelastet ist, müssen Sie möglicherweise das Limit für die Anfragerate senken, um Leistungsprobleme zu vermeiden.

Wenn Sie Rate Limiting für Anfragen implementieren, sollten Sie einen geeigneten Begrenzungsschlüssel wählen, der die Quelle der Anfrage identifiziert. Die Direktive „limit_req_zone“ definiert die Zone der Ratenbegrenzung und den Schlüssel, der zur Identifizierung der Anfrage verwendet wird.

Standardmäßig wird die Variable „$binary_remote_addr“ als Begrenzungsschlüssel verwendet, basierend auf der IP-Adresse des Clients. Wenn Ihre Website jedoch einen Proxy oder Load Balancer verwendet, müssen Sie möglicherweise eine andere Variable oder eine Kombination von Variablen verwenden, um sicherzustellen, dass das Rate Limit korrekt angewendet wird.

Wenn sich Ihre Website beispielsweise hinter einem Load Balancer befindet, können Sie den „X-Forwarded-For“-Header als Begrenzungsschlüssel verwenden, um die IP-Adresse des Clients zu identifizieren. Im Folgenden finden Sie eine Beispielkonfiguration, die den X-Forwarded-For-Header als Begrenzungsschlüssel verwendet:

limit_req_zone $http_x_forwarded_for zone=req_limit_per_ip:10m rate=10r/s;
server {
    ...
    limit_req zone=req_limit_per_ip burst=5 nodelay;
}

Nginx-Parameter für Zeitüberschreitungen

Wenn Sie festlegen, wie lange Nginx auf bestimmte Ereignisse warten soll, z. B. auf den Aufbau einer Verbindung oder den Empfang einer Antwort von einem Server, können Sie verhindern, dass Ressourcen durch Verbindungen verbraucht werden, die zu lange dauern.

Sie können die Direktiven proxy_connect_timeout, proxy_send_timeout und proxy_read_timeout verwenden, um diese Methode zu implementieren. Die folgende Konfiguration setzt die Parameter der Zeitüberschreitung zum Beispiel auf 10 Sekunden:

server {
    ...
    proxy_connect_timeout10s;
    proxy_send_timeout 10s;
    proxy_read_timeout 10s;
}

Diese Timeout-Parameter müssen jedoch mit Bedacht gewählt werden. Wenn sie zu niedrig angesetzt sind, können legitime Verbindungen vorzeitig beendet werden. Um den richtigen Wert der Zeitüberschreitung für Ihren Server zu finden, müssen Sie auch die durchschnittliche Antwortzeit Ihres Servers und die maximale Antwortzeit, die Ihre Benutzer zu tolerieren bereit sind, berücksichtigen. Analysieren Sie Ihre Serverprotokolle, verfolgen Sie die Antwortzeiten und passen Sie die Parameter der Zeitüberschreitung entsprechend an, um die richtige Balance zwischen Sicherheit und Benutzerfreundlichkeit zu finden.

Diese Methode kann einen wirksamen Schutz gegen DDoS-Angriffe bieten, die mit langsamen Verbindungen verbunden sind, wie z. B. Slowloris-Angriffe.

Blacklisting und Whitelisting von IP-Bereichen

Blacklisting und Whitelisting von IP-Bereichen ist eine Methode des DDoS-Schutzes, bei der festgelegt wird, welchen IP-Adressen der Zugriff auf Ihre Server erlaubt oder verweigert wird. Beim Blacklisting wird der Zugriff auf einen bestimmten Bereich von IP-Adressen gesperrt, während beim Whitelisting nur der Zugriff auf einen bestimmten Bereich von IP-Adressen erlaubt wird.

Um diese Methode mit Nginx zu implementieren, können Sie die Direktiven deny und allow verwenden. Die folgende Konfiguration blockiert zum Beispiel den Zugriff auf alle IP-Adressen mit Ausnahme derer im Bereich 192.0.2.0/24:

server {
    ...
    deny all;
    allow 192.0.2.0/24;
}

Diese Direktiven müssen mit Bedacht eingesetzt werden, da die Sperrung des Zugriffs auf bestimmte IP-Bereiche möglicherweise legitime Benutzer beeinträchtigen könnte. Wenn Sie festlegen, welche IPs blockiert werden sollen, überwachen Sie die Serverprotokolle auf Muster übermäßiger Anfragen von bestimmten IPs, ziehen Sie IP-Reputationsdatenbanken für bekannte bösartige IPs heran und ziehen Sie die Verwendung von Geolokalisierungsdaten in Betracht, um IP-Bereiche zu sperren, die mit einer hohen Rate von DDoS-Angriffen in Verbindung gebracht werden.

Dies kann nützlich sein, wenn Sie einen DDoS-Angriff aus einem bestimmten IP-Bereich oder sogar aus einem bestimmten Land erleben.

Zugriff auf Datei blockieren, die Ziel eines DDoS-Angriffs ist

Bei dieser Schutzmethode wird der Zugriff auf eine bestimmte Datei oder Ressource, die Ziel des Angriffs ist, verweigert. So können Sie verhindern, dass die angegriffene Datei oder Ressource „überwältigt“ wird, und sicherstellen, dass Ihre Server für legitime Benutzer verfügbar bleiben.

Um diese Methode mit Nginx zu implementieren, können Sie die Direktive location verwenden. Die folgende Konfiguration blockiert beispielsweise den Zugriff auf eine Datei mit dem Namen targeted.txt:

server {
    ...
    location /targeted.txt {
        deny all;
    }
}

Eine Möglichkeit, sich vor DDoS-Angriffen zu schützen, besteht darin, den Zugriff auf Dateien zu blockieren, die für die Funktionalität Ihrer Website nicht erforderlich sind. Dazu gehören Backup-Dateien, ressourcenintensive Mediendateien, Git-Dateien, Quellcode-Verzeichnisse und Konfigurationsdateien, die allesamt potenzielle Ziele für einen bösartigen Zugriff sein könnten.

Sie müssen jedoch darauf achten, dass Sie den Zugriff auf kritische Dateien wie Marketingseiten und statische Dateien, die für die Funktionalität Ihrer Website unerlässlich sind, nicht blockieren, da dies zu Problemen für legitime Benutzer führen könnte. Daher sollten Sie die Dateistruktur Ihrer Website überprüfen und feststellen, welche Dateien potenzielle Ziele für DDoS-Angriffe sein könnten.

Diese Methode kann vor DDoS-Angriffen schützen, die auf eine bestimmte Datei oder Ressource abzielen, wie z. B. File-Injection-Angriffe. Gegen andere Arten von Angriffen, wie z. B. volumetrische Angriffe, ist diese Methode jedoch möglicherweise unwirksam.

Fazit

Wenn Sie die Anweisungen und Codeschnipsel in diesem Artikel befolgen, können Sie Nginx effektiv nutzen, um eine Vielzahl von DDoS-Schutzmaßnahmen zu implementieren. Mit diesen Maßnahmen können Sie gewährleisten, dass Ihre Webanwendung auch bei einem DDoS-Angriff verfügbar und für legitime Benutzer zugänglich bleibt.

Wenn Sie eine All-in-One DDoS-Lösung für die L3-, L4- und L7-Ebene suchen, sollten Sie sich Gcore DDoS Protection ansehen. Unsere Lösung hat eine Gesamtfilterkapazität von über 1Tbps und blockiert DDoS-Angriffe ab der ersten Anfrage nach Sitzungen, nicht nach IPs. Mit uns sind Ihre Websites, Server und Anwendungen sicher!

Testen Sie Gcore DDoS-Schutz kostenlos

Geschrieben von Raushan Raj

Wie man gegen DDoS-Angriffe mit Nginx schützt

Melden Sie sich
für unseren Newsletter an

Erhalten Sie die neuesten Branchentrends, exklusive Einblicke und Gcore-Updates
direkt in Ihren Posteingang.