2016-06-02 7 views
0

Problem:Blocking Verbindung Flut

meine Anwendung Angenommen wird mit Verbindungsversuchen (versuchter DDoS-Angriff) überflutet, und ich will von jetzt an alle Verkehrs- und Verbindungsversuche von einem Endpunkt ignorieren, was der beste Ort wäre, filtern?

Use Case:

In meiner Anwendung ich eine System.Net.TcpListener mit für eingehende Verbindungen zu hören. Mein naives Vorgehen wäre, einfach alle Verbindungen zu akzeptieren, den Endpunkt zu überprüfen und dann möglicherweise die Verbindung sofort zu schließen.

Etwas sagt mir, dass das nicht sehr effizient sein kann. Schon die Erstellung des TcpClients, während ich alleine in meiner Anwendung akzeptiere, verbraucht Ressourcen.

Was kann ich tun, um Verbindungen von einem Endpunkt/ip zuverlässig abzulehnen, während ich dafür unter Windows nur minimale Ressourcen benötige? Was ist mit der gleichen Situation auf Linux-Systemen?

Auf Linux gibt es "iptables", ist das so effizient wie es geht? Und unter Windows könnte man das eingebaute Firewall-System benutzen.

Gibt es andere Möglichkeiten, Verbindungen von einer IP in Software zu blockieren, die möglicherweise noch effizienter ist? Wenn ja, was sind das?

Hardware Firewalls:

Bitte versuchen Sie nicht, Hardware-Firewalls und Filter zu erwähnen. Ich kenne sie und weiß, dass sie für diesen Zweck gemacht wurden, aber diese Frage bezieht sich explizit auf die Software-Seite der Dinge.

+2

Es gibt keine effizienteren Dinge als IPTables oder die integrierte Windows-Firewall, sie arbeiten bei O.S. Level, so ist es die effektivste, die Sie bekommen können. – Gusman

Antwort

1

Etwas sagt mir, dass das nicht sehr effizient sein kann. Auch nur die Erstellung des TcpClient während allein in meiner Anwendung akzeptiert wird Ressourcen verbrauchen.

Sie haben Recht. Sobald der Verkehr Ihre Anwendung erreicht, hat Ihre Maschine bereits eine Menge Ressourcen in das Öffnen der neu gebildeten Sitzung investiert. Zumindest haben Sie Netzwerkressourcen sowie die vom Betriebssystem zugewiesenen Puffer und verschiedene Datenstrukturen für den neuen Socket verbraucht.

Also was kann ich tun, um Verbindungen von einigen Endpunkt/ip zuverlässig abzulehnen, während Sie minimale Ressourcen dafür auf Windows ausgeben? Was ist mit der gleiche Situation auf Linux-Systemen?

Sie haben die Antwort in Ihrer eigenen Frage erwähnt - verwenden Sie Firewalls. Wenn nicht Hardware-Firewalls, dann Software-Firewalls. Wenn Sie von bestimmten bekannten IP-Adressen überschwemmt werden oder der bösartige Datenverkehr ein anderes Attribut aufweist, für das Sie eine Firewall-Regel definieren können, tun Sie dies. Unter Windows können Sie die normale Windows-Firewall unter Linux verwenden - verwenden Sie einfach Iptables. Beide wären viel effizienter als die Filterung auf Anwendungsebene.

Sie können auch die Verwendung von Syn Cookies in Erwägung ziehen, die manchmal explizit aktiviert werden müssen. Sie sind effektiv gegen einige Arten von DDos-Attacken.

0

Wenn Sie Anfragen basierend auf der IP-Adresse und/oder dem Port blockieren möchten, bevor sie Ihre Anwendung über einen Anwendungsserver oder als Rückgabe vom Systemanruf erhalten, müssen Sie diese Anforderung beim Betrieb beenden System Level. Es wäre eine Lösung wie iptables in Linux oder Windows Firewall wie Sie erwähnt haben. Sobald Ihre Anwendung eine Anforderung empfängt, trat der Drei-Wege-Handshake auf, bevor vom Systemanruf zurückgenommen und die gesamte Anforderung gelesen wurde.

Wenn Sie Anforderungen basierend auf Inhalt blockieren möchten, müssen Sie dies wahrscheinlich in Ihrer Anwendung tun, wenn Sie keinen Layer 5 oder 7 Router haben möchten.

Bedenken Sie, es gibt verschiedene Arten von DDoS-Angriffen, einige schaffen Halbverbindungen bei TCP-Schicht unterbrechen den TCP-Drei-Wege-Handshake und einige senden tatsächliche Anforderungen, die gültig aussehen und sie verbrauchen Ressourcen der CPU, Bandbreite, Festplatte, DB-Verbindungen usw. Im Allgemeinen ist es jedoch unmöglich, DDoS mit einer schwarzen Liste von IP-Adressen zu verhindern, da die Angreifer über eine große Anzahl an Adressen verfügen, die gefälscht werden können.

0

Warum haben Sie nicht ein zweites Programm, das Ihr Netzwerk überwacht und sich wie ein Filter verhält? Lassen Sie die Ports hören, die Sie verwenden, und haben Sie Zeit zwischen den Verbindungen von der IP-Adresse und überprüfen Sie die Anforderungen für den Inhalt. Wenn die Verbindungen von der Adresse einen Schwellenwert überschreiten, muss der Benutzer in die Blacklist aufgenommen werden. Außerdem können Sie die durchschnittliche Anforderungsrate für Tageszeiten überwachen und einen Durchschnittswert ermitteln. Wenn die Anzahl der Anfragen extrem hoch ist, handelt es sich höchstwahrscheinlich um einen DDOS, und Sie sollten den Zeitschwellenwert zwischen der Verbindungsanforderung von einer IP-Adresse und strengeren Einschränkungen verringern. Hinweis: Hierbei wird streng nach eingehenden Verbindungen gesucht: Das Überprüfen eingehender Verbindungen verbraucht keine Systemressourcen, als ob Sie einen Socket zum Akzeptieren der Verbindung gestartet hätten.

Nur ein Gedanke.