Linux-Befehl zur Verhinderung von DOS-Angriffen mithilfe von Netstat und Iptables


11

Ich möchte mehr als 200 Anfragen pro IP fallen lassen, um ddos-Angriffe zu verhindern. Dies ist ein Befehl, mit dem ich die Anzahl der Anforderungen pro IP ermittelt habe:

netstat -alpn | grep :80 | awk '{print $5}' |awk -F: '{print $(NF-1)}' |sort | uniq -c | sort -nr

Jetzt möchte ich alle IP-Adressen, die mehr als 200 Anfragen in IPtables gestellt haben, zur DROP-Eingabe und Ausgabe hinzufügen.


Wie @dawud erwähnt hat, stellen Sie sicher, dass Sie sich bewusst sind, dass Sie DDOS-Angriffe auf Ihren Server nur "mildern" und nicht wirklich vollständig verhindern können.
Kapitän

Antworten:


12

Sie können auch iptables verwenden, um die Rate eingehender Verbindungen zu begrenzen. Wenn Sie beispielsweise nicht mehr als 200 Verbindungen pro Minute von einer Quelle möchten:

iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --set

iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 200 -j DROP


1
Es wäre großartig, auch eine Erklärung dafür zu haben.
Jungvogel

18

Sie können eine erstellen ipset. Auf diese Weise können Sie dem Satz beliebig viele IP- iptablesAdressen hinzufügen, ohne den Regelsatz zu ändern.

ipset -N myset iphash
ipset -A myset 1.1.1.1
ipset -A myset 2.2.2.2

Oder verwenden Sie in Ihrem Fall die Ausgabe Ihres Skripts und lesen Sie sie wie folgt:

while read a; do ipset -A myset "$a"; done < <(your script here)

Und die Referenz in Ihren iptablesRegeln:

iptables -A INPUT -m set --set myset src -j DROP

Lesen Sie die Manpage für weitere Details und Optionen.

Es gibt auch andere Möglichkeiten, einen DDOS-Angriff direkt abzuschwächeniptables . Lesen Sie den iptablesManpage-Abschnitt über die connlimitund recentModule.


Dies ist brillant, da ipsets viel schneller sind als Alternativen wie Hashtabellen.
Isuldor
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.