OffshoreVps
Sicherheit13 Okt. 20268 Min. LesezeitVon dem OffshoreVps-Team

Layer-7-DDoS-Schutz für einen VPS mit Nginx

DDoS-Schutz auf Hostebene stoppt Fluten roher Daten, keine raffinierten Anfragen. Mit Ratenbegrenzung, Caching und Bot-Regeln in Nginx und fail2ban überstehen Sie Angriffe auf der Anwendungsebene.

Die meisten Hosting-Tarife versprechen DDoS-Schutz. Das bedeutet in der Regel, dass große Fluten von Müllpaketen (Schicht 3 und 4) gefiltert werden, bevor sie Ihren Server erreichen. Nicht aufgehalten wird, dass tausend „echte“ Browser gleichzeitig Ihre langsamste Seite laden. Solche Angriffe auf der Anwendungsschicht (Schicht 7) sehen aus wie normale Besucher, und Sie müssen sie selbst bewältigen. Hintergründe finden Sie unter Was DDoS-Schutz ist.

Terminalfenster auf einem VPS mit den Befehlen zur DDoS-Abwehr auf Layer 7 mit Nginx
Die Art von Befehlen, die Sie in dieser Anleitung auf Ihrem Server ausführen.

Den Unterschied kennen

  • Volumetrische Fluten: füllen die Netzwerkleitung. Der Host oder der Upstream filtert diese.
  • Protokollangriffe: erschöpfen Verbindungstabellen. Werden meist vom Netzwerk abgefangen.
  • Schicht-7-Angriffe: gültig aussehende HTTP-Anfragen, die CPU, Datenbank oder Worker verbrauchen. Diese erreichen Ihre Anwendung.

Schritt 1: Ratenbegrenzung in Nginx

Begrenzen Sie, wie schnell eine einzelne Adresse Anfragen stellen darf. Definieren Sie eine Zone im http-Block und wenden Sie sie auf Ihre Website an.

limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=connip:10m;

server {
    location / {
        limit_req zone=perip burst=20 nodelay;
        limit_conn connip 20;
    }
    location = /login {
        limit_req zone=perip burst=3 nodelay;
    }
}

Verwenden Sie für Logins und die Suche ein deutlich engeres Limit, da diese aufwendig sind.

Schritt 2: Zwischenspeichern, was möglich ist

Eine zwischengespeicherte Seite kostet beim Ausliefern fast nichts. Aktivieren Sie FastCGI- oder Proxy-Caching für anonymen Datenverkehr, selbst für 30 bis 60 Sekunden. So wird aus einer Flut identischer Anfragen eine Handvoll echter.

fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=site:50m inactive=10m;
fastcgi_cache site;
fastcgi_cache_valid 200 60s;
fastcgi_cache_use_stale updating error timeout;
Die Schritte dieser Anleitung in der Reihenfolge: 1. Den Unterschied kennen; 2. Rate Limiting in Nginx; 3. Zwischenspeichern, was möglich ist; 4. Wiederholungstäter mit fail2ban sperren; 5. Einen Proxy vorschalten, wenn es ernst wird; 6. Vorbereitet sein, bevor es passiert
Die Schritte dieser Anleitung in der Reihenfolge.

Schritt 3: Sinnvolle Timeouts setzen

Angriffe mit langsamen Verbindungen halten Worker offen. Verkürzen Sie die Limits.

client_body_timeout 10s;
client_header_timeout 10s;
send_timeout 15s;
keepalive_timeout 15s;
client_max_body_size 5m;

Schritt 4: Wiederholungstäter mit fail2ban sperren

Sperren Sie Adressen, die die Ratenbegrenzung auslösen. Nginx protokolliert abgewiesene Anfragen im Error-Log, und ein Filter kann sie erkennen.

[nginx-limit-req]
enabled  = true
filter   = nginx-limit-req
logpath  = /var/log/nginx/error.log
maxretry = 10
findtime = 60
bantime  = 1h

Schritt 5: Einen Proxy vorschalten, wenn es ernst wird

Ein Reverse-Proxy oder CDN mit Bot-Prüfungen kann Angriffe auffangen, die ein einzelner VPS nicht bewältigt. Denken Sie daran, den Ursprung wie unter Origin-IP geheim halten beschrieben zu schützen, sonst umgehen Angreifer den Proxy.

Vorbereitet sein, bevor es passiert

  • Kennen Sie Ihre langsamsten Seiten und beheben oder cachen Sie sie.
  • Behalten Sie das Monitoring bei, damit Sie einen Anstieg schnell bemerken.
  • Legen Sie einen Plan bereit: engere Limits, eine Wartungsseite, ein größerer Server.

Die Grundlagen in der UFW- und fail2ban-Anleitung gehören dazu.