Härtung des Linux-Kernels über sysctl.conf. Schutz vor SYN-Flood-Angriffen und TCP-Optimierung
Einführung
In diesem Tutorial werden Sie den Linux-Kernel mit sysctl.conf härten, Ihren Server gegen SYN-Flood-Angriffe schützen und das Verhalten des TCP-Stacks optimieren. Tuning auf Kernel-Ebene verbessert die Widerstandsfähigkeit gegen netzwerkbasierte Denial-of-Service (DoS)-Angriffe und erhöht die allgemeine TCP-Leistung. Sie werden auch einen SYN-Flood-Angriff in einer kontrollierten Umgebung simulieren und überprüfen, ob Ihre Schutzmechanismen korrekt funktionieren.
Voraussetzungen
Zielgruppe: Fortgeschrittene Systemadministratoren
Geschätzte Zeit: 45–60 Minuten
Systemanforderungen
- Betriebssystem: Ubuntu 24.04 LTS (getestet); kompatibel mit Debian 12/13 und anderen modernen Linux-Distributionen
- Kernel-Version: 5.x oder höher
- Mindestens 1 GB RAM
- Root- oder Sudo-Rechte
- Netzwerkzugriff zwischen Testmaschinen
Erforderliche Werkzeuge
Installieren Sie die folgenden Dienstprogramme:
sudo apt update
sudo apt install -y hping3 net-tools procps iproute2
Installation überprüfen: hping3 --version
Erwartete Ausgabe: Versionsinformationen, die eine erfolgreiche Installation bestätigen.
Führen Sie die SYN-Flood-Simulation nur in einer kontrollierten Laborumgebung durch. Testen Sie niemals gegen Systeme, die Sie nicht besitzen oder für die Sie keine Erlaubnis zum Testen haben.
Schritt 1: Aktuelle sysctl-Konfiguration sichern
Erstellen Sie vor Änderungen ein Backup.
sudo cp /etc/sysctl.conf /etc/sysctl.conf.backup
Ergebnis: Eine Sicherungsdatei /etc/sysctl.conf.backup wird erstellt.
Schritt 2: Kernel-Parameter für SYN-Flood-Schutz konfigurieren
Öffnen Sie die Konfigurationsdatei:
sudo nano /etc/sysctl.conf
Fügen Sie die folgenden Parameter hinzu oder ändern Sie sie.
SYN-Cookies aktivieren
net.ipv4.tcp_syncookies = 1
Zweck: Aktiviert SYN-Cookies, wenn die SYN-Backlog-Warteschlange überläuft.
Werte:
- 0 – Deaktiviert
- 1 – Aktiviert, wenn SYN-Backlog-Überlauf auftritt (empfohlen)
- 2 – Immer aktiviert (selten verwendet)
Warum: SYN-Cookies verhindern Speichererschöpfung, indem sie die Ressourcenallokation bis zum Abschluss des Handshakes vermeiden.
In modernen Distributionen ist diese Option standardmäßig aktiviert. Sie können dies mit dem folgenden Befehl überprüfen: sysctl -a | grep net.ipv4.tcp_syncookies
SYN-Backlog-Warteschlange erhöhen
net.ipv4.tcp_max_syn_backlog = 4096
Zweck: Maximale Anzahl von Warteschlangenverbindungsanfragen, die auf Bestätigung warten.
Warum: Größere Backlogs ermöglichen mehr halb-offene Verbindungen, bevor der Kernel beginnt, sie zu verwerfen.
SYN-ACK-Wiederholungen reduzieren
net.ipv4.tcp_synack_retries = 3
Zweck: Anzahl der Wiederholungen für SYN-ACK-Pakete.
Warum: Eine Reduzierung verringert die Zeit, die mit dem Warten auf bösartige halb-offene Verbindungen verbracht wird.
TCP Time-Wait-Wiederverwendung aktivieren
net.ipv4.tcp_tw_reuse = 1
Zweck: Ermöglicht die Wiederverwendung von TIME-WAIT-Sockets für neue ausgehende Verbindungen.
Werte:
- 0 – Deaktiviert
- 1 – Aktiviert
Warum: Reduziert die Socket-Ermüdung bei hoher Last.
FIN-Timeout reduzieren
net.ipv4.tcp_fin_timeout = 15
Zweck: Zeit, die ein Socket im FIN-WAIT-2-Zustand verbleibt.
Warum: Reduziert den Ressourcenverbrauch durch veraltete Verbindungen.
Reverse Path Filtering aktivieren
net.ipv4.conf.all.rp_filter = 1
Zweck: Validiert Quell-IP-Adressen anhand der Routing-Tabelle.
Werte:
- 0 – Deaktiviert
- 1 – Strikter Modus
- 2 – Lockerer Modus
Warum: Hilft, IP-Spoofing-Angriffe zu mindern.
Maximale offene Dateien erhöhen
fs.file-max = 2097152
Zweck: Maximale Anzahl von Datei-Handles systemweit.
Warum: Verhindert die Erschöpfung von Dateideskriptoren bei hoher Verbindungsbelastung.
Schritt 3: sysctl-Änderungen anwenden
Änderungen ohne Neustart anwenden:
sudo sysctl -p
Erwartete Ausgabe: Jeder Parameter wird mit seinem neuen Wert angezeigt.
Spezifischen Parameter überprüfen: sysctl net.ipv4.tcp_syncookies
Erwartete Ausgabe: net.ipv4.tcp_syncookies = 1
Ergebnis: Kernel-Parameter sind aktiv.
Schritt 4: SYN-Flood-Angriff simulieren
Wichtig: Führen Sie dies nur in einer Laborumgebung durch.
Von einer separaten Testmaschine ausführen:
sudo hping3 -S --flood -V <YOUR_SERVER_IP> -p 80
Erklärung:
-Ssendet SYN-Pakete--floodsendet Pakete so schnell wie möglich-p 80zielt auf den HTTP-Port
Ergebnis: Hohe Anzahl von SYN-Paketen wird an den Server gesendet.
Schritt 5: Server während des Angriffs überwachen
Auf dem Zielserver Verbindungen überwachen:
netstat -ant | grep SYN_RECV | wc -l
Ergebnis: Zeigt die Anzahl der halb-offenen Verbindungen an.
SYN-Cookies-Zähler überprüfen:
nstat -az | grep Syncookies
Sie sollten steigende Zähler wie TcpExtSyncookiesSent beobachten. Dies bestätigt, dass SYN-Cookies verwendet werden.
Schritt 6: Verhalten vor und nach der Härtung vergleichen
Wenn Sie ohne Härtung testen:
- SYN_RECV-Zähler wächst schnell
- Server kann unempfänglich werden
- Verbindungswarteschlange überläuft
Nach der Härtung:
- SYN-Cookies werden aktiviert
- Weniger abgebrochene Verbindungen
- Server bleibt empfänglich
Installieren Sie einen Webserver auf dem Zielserver:
sudo apt install nginx
Um die Reaktionsfähigkeit zu testen:
curl http://localhost
Ergebnis: Der Server reagiert normal, selbst während des simulierten Angriffs.
Schritt 7: TCP-Leistungsoptimierung (Optionale erweiterte Optimierung)
Fügen Sie zusätzliche Tuning-Parameter zur sysctl-Konfiguration hinzu. Führen Sie nano /etc/sysctl.conf aus und fügen Sie hinzu:
net.core.somaxconn = 8192
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_max_tw_buckets = 2000000
Erklärung:
net.core.somaxconn– maximale Länge der Abhörwarteschlange für Anwendungen.net.core.netdev_max_backlog– maximale Anzahl von Paketen, die auf der Eingabeseite vor der Verarbeitung in die Warteschlange gestellt werden.net.ipv4.tcp_max_tw_buckets– maximale TIME-WAIT-Sockets. Diese Option ist relevant für Server mit hoher Last und ausreichendem RAM.
Diese verbessern die Leistung bei hohem Datenverkehr.
Änderungen anwenden:
sudo sysctl -p
Überprüfungsliste
sysctl -pläuft fehlerfreitcp_syncookiesist gleich 1SyncookiesSent-Zähler steigt während des Angriffs- Server bleibt empfänglich
- Keine Kernel-Warnungen in den Protokollen:
dmesg | grep -i syn
Änderungen rückgängig machen
Ursprüngliche Konfiguration wiederherstellen:
sudo cp /etc/sysctl.conf.backup /etc/sysctl.conf
sudo sysctl -p
Ergebnis: System kehrt zu den ursprünglichen Kernel-Parametern zurück.
Optional Testwerkzeuge entfernen:
sudo apt remove hping3 -y
Fehlerbehebung
Syncookies erhöhen sich nicht
Überprüfen: sysctl net.ipv4.tcp_syncookies
Wenn der Wert 0 ist, Konfiguration erneut anwenden.
Server verwirft weiterhin Verbindungen
Backlog erhöhen: net.ipv4.tcp_max_syn_backlog = 8192
Dann Änderungen anwenden:
sudo sysctl -p
Fazit
Sie haben den Linux-Kernel mit sysctl.conf gehärtet, SYN-Flood-Schutzmechanismen aktiviert, das Verhalten des TCP-Stacks optimiert und die Schutzmaßnahmen durch eine kontrollierte Angriffssimulation überprüft. Diese Änderungen verbessern die Widerstandsfähigkeit gegen SYN-Flood-Angriffe und erhöhen die allgemeine Netzwerkstabilität.
Nächste Schritte
- Kombinieren Sie mit Firewall-Rate-Limiting (iptables oder nftables)
- Implementieren Sie Verbindungsverfolgungslimits
- Setzen Sie Intrusion Detection Systems (IDS) ein
- Überwachen Sie Metriken mit Prometheus und Grafana