DDoS erkennen und per IPTables stoppen

  • Thread starter Thread starter Deleted member 11691
  • Start date Start date
D

Deleted member 11691

Guest
Hallo,

ich suche nach einer Lösung, DDoS sofort zu stoppen.

Und zwar dachte ich mir, dass etwas von netstat ausgelesen wird und geprüft wird, wie viele Verbindungen bestehen.
Wenn eine IP-Adresse von einem Server/PC mehr als 20 Verbindungen aufbaut, soll sie für 1 Stunde IPTables gebannt werden (-j DROP).

Das Script soll jede Minute in einem Cronjob ausgeführt werden.

Weiß jemand eine Lösung dafür?

Wäre euch sehr dankbar dafür.

Liebe Grüße,
PCFreund
 
Wenn eine IP-Adresse von einem Server/PC mehr als 20 Verbindungen aufbaut, soll sie für 1 Stunde IPTables gebannt werden
Auf grafisch ansprechenden Seiten wirst du diese Grenze ganz schnell erreichen.
Ueber welche Methode von DDoS reden wir? (Ich gehe davon aus dass es ein DDoS auf Webserver ist)

- SynFlood
- Slowloris
- PHP / MySQL Fresser
- Bandbreitenueberlastung

Von deiner rudimentaeren Beschreibung des Problems scheint es sich um SynFlood oder Slowloris zu handeln, Iptables-Regeln gegen ersteres sind in mehreren Formen und Skripten durch eine simple Forensuche zu finden, bei slowloris empfehle ich einen nginx Reverse-Proxy und apache mod_rpaf2 oder Apache2 als prefork, sowie insgesamt gesundere EInstellungen.
(Beispielweise sind die oft standardmaessigen 300 Sekunden keep-alive reiner Mord)
 
Grundsätzlich ist es wohl so. Sobald die Pakete auf den Server ankommen und der Server diese verarbeiten muss, ist das als DDOS Schutz wohl eher kontraproduktiv. Produktiv sind Lösungen wie externe Hardware Firewalls oder ein guter Serveranbieter, der Routerseitig schon das meiste abstellt.
 
ich suche nach einer Lösung, DDoS sofort zu stoppen.
Das kann eigentlich zuverlässig nur der Provider vorne dran.

Wenn eine IP-Adresse von einem Server/PC mehr als 20 Verbindungen aufbaut, soll sie für 1 Stunde IPTables gebannt werden (-j DROP).
Hm, eine IP-Adresse und 20 Verbindungen davon ist aber nicht gerade einer _D_DoS...

Ansonsten darf man hoffen, daß Du keine User aus Netzwerken hast, die über Proxies oder ähmliche Systeme gehen - weil da sind die 20 Connects ruck-zuck zusammen.
 
Ich habe kürzlich einen mittleren DDoS-Angriff auf Server-Seite standhalten müssen, da OVH sich nicht in der Lage sah etwas zu unternehmen.

Erreicht habe ich das durch entsprechende Einstellungen im Webserver (nginx) und diverse Kernel-Einstellungen (FreeBSD) in Kombination mit einer ziemlich restriktiven Firewall auf dem Server.

Das hat geholfen. Bei grösseren Angriffen kann ein einzelner Server nicht mehr viel ausrichten, trotz GBit-Anbindung.
 
Entschuldigung, ich meinte nicht explizit DDoS, sondern auch W00tW00t-Attacken, etc.
Ein Benutzer, der eine schnelle Anbindung hat und andauernt auf Reload drückt, hat für 10 Minuten lang halt keine Verbindung mehr zum Server.
Wir haben nämlich ein SLB-Netzwerk aufgebaut, welche die W00tW00t-Attacken auch auf die einzelnen vServer weiterleitet, was wir aber nicht wollen.
Das heißt, eigentlich wollen wir uns nur auf Port 80 schützen.
Wenn auf dem Port von einer IP-Adresse mehr als 20 Anfragen auf einmal kommen, wird diese IP-Adresse für 10 Minuten per IPTables gebannt.
Die Bilder, CSS-Styles und Javascripte liegen auf einem externen Webspace, welcher unabhängig der Web-PHP-Server laufen.
 
Was spricht dagegen mit iptables connlimit einfach die Anzahl niedrig zu halten statt so drastisch zu sein und zu sperren?

Ein Benutzer, der eine schnelle Anbindung hat und andauernt auf Reload drückt, hat für 10 Minuten lang halt keine Verbindung mehr zum Server.
Ein solcher Benutzer kriegt nie mehr als 1 gleichzeitige Verbindung hin da ein Reload seriell und nicht parallel ist.

Wenn du auch die Anzahl der Verbindungen je Zeitraum begrenzen willst, kannst du auch mit iptables 'state' die Anzahl an Syn-Paketen je IP begrenzen.
Gleichzeitig unterhebelst du damit Synflood-Angriffe.
 
Und wie mache ich das?
Kenn mich mit IPTables noch nicht so gut aus :rolleyes:
 
Erlaubt nur 10 gleichzeitige Verbindungen je Client
Code:
iptables -I INPUT -p tcp --syn --dport 80 -i eth0 -m connlimit --connlimit-above 10 -j REJECT

Blockiert SynFlood und mehr als 15 neue Verbindungen je 2 Sekunden
Code:
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 2 --hitcount 15 -j DROP

Papa Google oder eine Forensuche haette das aber auch ausgespuckt ;)
Um gegen Synflood wirklich gewappnet zu sein (da es stateless ist und somit der Absender gefaelscht werden kann) solltest du noch syn_cookies aktiviert haben.
 
syn_cookies ist aktiviert, bzw. in der dafür gedachten Datei steht "1".
Danke vielmals, es funktioniert ;)
 
Last edited by a moderator:
Back
Top