Bitte beachten Sie, dass ichNICHTgefragt, wie man den Server schützt vorDDoS. Was ich meine ist, dass, wenn jemand siege -c 1000 www.example.com
auf seinem VPS läuft, mein Server Tausende von Anfragen bearbeitet und langsamer wird. Wenn ich Siege gezielt auf Shared Hosting laufen lasse, sehe ich nicht den extremen Rückgang der Reaktionszeit (von 60 ms auf 2000 ms/Anfrage), den ich auf meinem Rechner habe. Ich erwarte nicht, dass ich große DDoS-Angriffe abmildern kann, aber ich möchte vor dem ersten Script-Kiddie sicher sein, der Siege entdeckt :) Andererseits bin ich damit einverstanden, dass die Reaktion langsamer sein kann, wenn große Mengen Datenverkehr aus legitimen Quellen kommen.
Antwort1
Sie können eine Firewall verwenden, um die Anzahl gleichzeitiger Verbindungen und die Rate neuer Verbindungen aus einem Netzwerk zu begrenzen (z. B. /32 für IPv4 und /64 für IPv6). Beispiel, wie das aussehen könnte iptables
:
# Limit number of concurrent connections
-A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 50 -j DROP
# Limit rate of new connections
-A INPUT -i eth0 -p tcp --syn -m hashlimit --hashlimit-name tcp --hashlimit-mode srcip --hashlimit-above 3/sec --hashlimit-burst 7 --hashlimit-srcmask 32 -j DROP
(Dasselbe gilt für, außer dass im ersten ip6tables
hinzugefügt und im zweiten zu geändert wird. )--connlimit-mask 64
--hashlimit-srcmask
64
Sie können die Rate der HTTP-Anfragen auch begrenzen, beispielsweise mit demlimit_req-Modul von nginx.
Antwort2
Abgesehen von einigen grundlegenden Firewalls verlassen wir uns bei der schweren TCP-Arbeit auf haproxy. Wir haben festgestellt, dass es einer einsatzbereiten Apache HTTPd-Instanz in Bezug auf jede Art von Slowdos-Angriff weit überlegen ist.
-A INPUT -p tcp -m tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j SYNFLOOD
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j HTTPDGUARD
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -j HTTPDGUARD
-A HTTPDGUARD -m connlimit --connlimit-above 25 --connlimit-mask 32 -j HTTPDENY
-A HTTPDENY -j LOG --log-prefix "HTTP Flood: "
-A HTTPDENY -p tcp -m tcp -j REJECT --reject-with tcp-reset
-A SYNFLOOD -m state --state NEW -m recent --set --name SYNRATE --rsource
-A SYNFLOOD ! -s 150.156.24.0/24 -m state --state NEW -m recent --update \
--seconds 5 --hitcount 200 --name SYNRATE --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT
Aber im Grunde müssen Sie entweder den Angriff blockieren, den Exploit beheben oder beides tun.
Antwort3
Fehler2Banist eines der vielen Tools, die für solche Situationen entwickelt wurden. fail2ban hat bei mir geholfen, einige Brute-Force-Angriffe auf SSH zu stoppen. Ich gehe davon aus, dass Ihr Server ein Linux ist.