Mastodon
Zuletzt aktualisiert am
Phoronix Linux News
Michael Larabel

Linux 6.18 bringt eine große Verbesserung für Server unter DDoS-Angriffen

 Eine Reihe von Patches, die über den Networking-Pull-Request für Linux 6.18 zusammengeführt wurden, wird Servern helfen, besser mit Distributed-Denial-of-Service-Angriffen (DDoS) umzugehen. Dank eines Google-Ingenieurs wurden im Linux-6.18-Kernel-Code einige bedeutende Optimierungen vorgenommen, um die UDP-Empfangsleistung unter Belastung, beispielsweise in DDoS-Szenarien, effizienter zu handhaben.
Eine Übersetzung von 🇬🇧 Phoronix.com

Als Teil der Netzwerkänderungen wurde diese Patch-Reihe von Google-Ingenieur Eric Dumazet für Linux 6.18 integriert. Dumazet erklärt dort: 

Diese Serie ist das Ergebnis einer sorgfältigen Analyse des UDP-Stacks, um die Empfangsseite zu optimieren, insbesondere wenn ein oder mehrere UDP-Sockets einem DDOS-Angriff ausgesetzt sind.

Ich habe unter DDOS eine Steigerung des Durchsatzes um 47 % gemessen, wenn IPv6-UDP-Pakete mit 120 Byte Nutzlast verwendet werden.

16 CPUs empfangen Datenverkehr, der auf einen einzelnen Socket abzielt.

Selbst nach dem Hinzufügen von NUMA-fähigen Drop-Zählern litten wir unter falschem Sharing zwischen Paketproduzenten und -konsumenten.

1) Die ersten vier Patches verkleinern die Größe von struct ipv6_pinfo und reorganisieren Felder, um einen effizienteren TX-Pfad zu erhalten. Sie sollten auch TCP zugute kommen, indem sie einen Cache-Line-Miss entfernen.

2) Die Patches 5 und 6 ändern die Art und Weise, wie sk->sk_rmem_alloc gelesen und aktualisiert wird. Sie reduzieren die Spinlock-Konflikte auf dem Busylock.

3) Die Patches 7 und 8 ändern die Reihenfolge von sk_backlog (einschließlich sk_rmem_alloc), sk_receive_queue und sk_drop_counters, um eine bessere Datenlokalität zu erreichen.

4) Patch 9 entfernt das Hash-Array von Spinlocks zugunsten eines pro-udp-Socket-Arrays.

5) Der letzte Patch übernimmt skb_attempt_defer_free(), nachdem TCP damit gute Ergebnisse erzielt hat.

Eine Steigerung des Durchsatzes um 47 % in diesem DDoS-Szenario!

Eric Dumazet fügte hinzu, dass allein dieser Patch in der Lage ist, 14,2 Millionen Pakete pro Sekunde mehr zu verarbeiten, während er auf einem Intel Xeon Linux-Server angegriffen wird:

Busylock schützte UDP-Sockets vor Paketfluten, schützte jedoch leider nicht den Host selbst.

Unter Belastung konnten viele CPUs beim Erwerb des Busylocks durchlaufen, und die Netzwerkkarte musste Pakete verwerfen. Oder Pakete würden im CPU-Backlog verworfen, wenn RPS/RFS vorhanden waren.

Dieser Patch ersetzt den Busylock durch zwischengeschaltete lockless Queues. (Eine Queue pro NUMA-Knoten).

Das bedeutet, dass weniger CPUs die Sperre für die UDP-Empfangswarteschlange erwerben müssen.

Die meisten CPUs können entweder:
- das Paket sofort verwerfen.
- oder es in ihrer NUMA-fähigen lockless queue einreihen.

Dann wird eine der CPUs ausgewählt, um diese lockless queue in einem Batch zu verarbeiten.

Der Batch enthält nur Pakete, die auf demselben NUMA-Knoten verarbeitet wurden, sodass die Auswirkungen auf die Latenz sehr begrenzt sind.

Getestet:

DDOS-Angriff auf einen UDP-Socket eines Opfers auf einer Plattform mit 6 NUMA-Knoten (Intel(R) Xeon(R) 6985P-C)

Vorher:

nstat -n ; sleep 1 ; nstat | grep Udp
Udp6InDatagrams 1004179 0,0
Udp6InErrors 3117 0,0
Udp6RcvbufErrors 3117 0,0

Nachher:
nstat -n ; sleep 1 ; nstat | grep Udp
Udp6InDatagrams 1116633 0,0
Udp6InErrors 14197275 0,0
Udp6RcvbufErrors 14197275 0,0

Wir sehen, dass dieser Host nun unter Angriff 14,2 Millionen Pakete mehr pro Sekunde verarbeiten kann und der betroffene Socket 11 % mehr Pakete empfangen kann.

Der Zeitpunkt für die Veröffentlichung dieser Arbeit für Linux 6.18 ist ideal, da diese Kernel-Version voraussichtlich die diesjährige Long Term Support (LTS)-Kernel-Version werden wird und somit in Zukunft häufig in Unternehmen und auf Servern zum Einsatz kommen wird.

 

Unterstützen Sie Michael

Ein Service von s3n🧩net

Comments