Anzahl der Zugriffe von einer IP pro Zeiteinheit limitieren

#0
01.03.2010, 16:02
...neu hier

Beiträge: 5
#1 Hallöchen Gemeinde,

bevor ich meine Frage formuliere, möchte ich zunächst das Szenario beschreiben.

Auf einer 2003 er Server Kiste läuft eine von mir geschriebene exe Datei als Dienst.
Diese Anwendung nimmt Daten von Clients (öffentliches Netz) entgegen, um diese dann im späteren Verlauf weiterzuverarbeiten. Die IPs der connectierenden Clients sind im Regelfalle dynamisch. Nun möchte ich, um beispielsweise das Flooden der Verbindung zu vermeiden, eine Firewall "vorschalten", mit deren Hilfe es möglich ist, die Anzahl der Zugriffe von einer bestimmten IP dahingehend zu limitieren, dass nur ein Zugrff pro Zeiteinheit möglich ist. Zum Beispiel darf Cient 80.111.222.xxx nur einmal in 30 Sekunden connecten, Zugriffe in kürzeren Intervallen sollen gedropped werden.

Nun meine Frage: Gibt es eine euch bekannte Firewall, die man in dieser Hinsicht konfigurieren kann? Oder fällt jemanden zufällig ein anderer Workaround ein?

Habe nun schon länger manuell gesucht, bin aber nicht fündig geworden.

Würde mich freuen, wenn der ein oder andere eine Idee, Tip, Link zu ähnlichen Themen usw. hat.

Für das Lesen und eine eventuelle Hilfestellung bedanke ich mich im Vorraus.

Viele Grüße,

Boris
Seitenanfang Seitenende
01.03.2010, 18:46
Member
Avatar Gool

Beiträge: 4730
#2 Meines Erachtens dürfte das jede halbwegs gute Hardware-Firewall integriert haben. Aber Du kannst natürlich auch aus einem alten PC mit nem Linux eine brauchbare Firewall selbst basteln. Stichwort ist hier u.a. iptables
__________
Dies ist eine Signatur! Persönlicher Service: Du kommst aus Berlin? Dann melde Dich per PN bei mir, evtl. können wir einen Termin vereinbaren.
Der Grabsteinschubser
Seitenanfang Seitenende
01.03.2010, 19:05
...neu hier

Themenstarter

Beiträge: 5
#3 Die Sache mit iptables hat in diesem Falle nur das eine Manko, dass der Server in einem RZ steht. Ich müsste also eine zweite Kiste dazumieten (in endgültiger Konsequenz würde ich das dann auch machen).

Die Sache mit der Softwarefirewall ist nun, dass es a.) eine sein muss, die auf einer 2003 er Kiste rennt und b.) diese oben von mir genannte Funktion zwingend mitbringen muss. Ob sie per Kommandozeile oder graphisch konfiguriert wird, ist sekundär.

Daher hatte ich gehofft, dass vielleicht auch schon jemand sagen kann "Ja, kenne eine, heisst xyz".

Auf jeden Fall schonmal ein Danke für deine Antwort.

P.S.

Nette Signatur, bin übrigens Giessener ;-)
Seitenanfang Seitenende
01.03.2010, 20:11
Member
Avatar Gool

Beiträge: 4730
#4 Ok, also ne Softwarefirewall auf ner Windows-Maschine... halte ich für ne gewagte Sache. Kann klappen, aber mir ist da leider nichts brauchbares bekannt.

Wenn ich das richtig verstehe, gehört der Server auch nicht Dir, sondern Du hast den nur gemietet. Dann wirst Du vermutlich auch schlechte Karten haben, eine Hardware-Firewall da einfach vor zu hängen. Aber eigentlich sollte der Anbieter von solchen Angeboten auch eine entsprechende Firewall von Haus aus haben. Frag doch mal dort nach.
__________
Dies ist eine Signatur! Persönlicher Service: Du kommst aus Berlin? Dann melde Dich per PN bei mir, evtl. können wir einen Termin vereinbaren.
Der Grabsteinschubser
Seitenanfang Seitenende
01.03.2010, 21:58
...neu hier

Themenstarter

Beiträge: 5
#5 Warum eine gewagte Sache?

Nein, der Server ist eine Mietmaschine, Hoster sind 1und1. Daher gehe ich davon aus, dass da mehr als brauchbare Maschinen vorsitzen, die zumindest offensichtliche Attacken Marke DDoS abfangen. Da aber eine solche Maschine 10 Zugriffe in 30 Sekunden (was ich ja unterbinden möchte) nicht als DDoS klassifizieren wird, ist mir nicht geholfen. Eine Anfrage diesbezüglich halte ich für überflüssig, denke nicht, dass man extra für mich manuell Filterregeln in der Massgabe meiner Anforderungen an den Hardwarefirewalls vornehmen wird ;-)

Hätte vielleicht noch eine Idee für einen zweiten Ansatz:

Aktuelles Szenario wäre, es kämen zuviele Anfragen innerhalb von weniger als 30 Sekunden rein (speziell bei DDoS dürften es einige Bitchen mehr sein, die ankommen), dann könnte ich meinen Dienst umschreiben, dass eine Anfrage von IP a in der DB gespeichert wird, bei dem Eintreffen des nächsten Datensatze der gleichen IP werden die beiden Zeitpunkte verglichen. Die Software entscheidet dann, ob der Datensatz gedropped wird oder zur weiteren Verwendung kommt. Nachteil: Das ist keine Paketfilterung, wie eine Firewall sie realisieren könnte, weiterer Nachteil: Die Software hat möglicherweise ganz schnell mehr damit zu tun, die Daten vorzufiltern, als der eigentliche Sinn der Software wäre.

Dritter Ansatz:

Ich schreibe eben n zweiten Service, der vorfiltert, und nur integere Daten an den Hauptdienst weiterleitet.

Vierter Ansatz:

Zweiten Server, iptables macht dort die vorfilternde Arbeit und leitet an den Hauptserver weiter. (Dort ggf. noch Ansatz 3 einbauen)
Aber dann könnte ich doch auch gleich Ansatz 3 nutzen.


Ich verwirre mich gerade selber ;-)

Was würde euch / dir eher plausibel erscheinen? (Ziel ist es nicht, DDoS und Konsorten abzuwehren, sondern wirklich nur x Zugriffe von IP y pro Zeiteinheit z zu gestatten).


Wie ist deine / eure Einschätzung?

Viele Grüße,

Borus
Seitenanfang Seitenende
03.03.2010, 21:52
Member
Avatar N1con

Beiträge: 395
#6 Also erstens Mal: interessante Problemstellung ;)

Alles was du selber machen willst in Sachen server (linuxfirewall auf 2. Kiste) oder um Anpassungen bittest, bist du leider bei Strato falsch. Die bieten dir was an, bekommen Geld und gut ist ;)

Ich würde mich eher nach einem Hoster umsehen der sich auf Entwickler und "Bastler" spezialisiert, dort hast du meist merh Möglichkeiten und der Support erfüllt dann auch gerne Mal Sonderwünsche.

Jetzt käme es als erstes Mal drauf an, welche daten der Server aufnimmt um die weiterzuverarbeiten. Läuft dort auch ein Prog von dir?
Ist es evtl. möglich den Clients zu sagen das die nur alle 30sek anklopfen dürfen?

Wie groß sind die Daten die der Server annimmt? Ich frag deshalb: Wenn es kleine Pakete sind macht es nicht den Unterschiede die kurz wegzuschreiben oder in der Datenbank nachzugucken und die Zeit zu berechnen.

Also nen paar mehr Hintergrundinfos zum Ablauf wären gut
__________
Wenn ich euch geholfen habe, könnt ihr gerne ans Board spenden, auch ich freue mich über einen kleinen Obolus für mein Feierabendbier ;)
Protecus Spenden
Seitenanfang Seitenende
03.03.2010, 22:40
Member

Beiträge: 896
#7 Hallo

Wenn der Server ne Linuxkiste wäre, könnte man für die Zwecke fail2ban einsetzen.
__________
Mfg
schwedenmann
Seitenanfang Seitenende
05.03.2010, 22:18
...neu hier

Themenstarter

Beiträge: 5
#8 @N1con

Fällt dir auf Anhieb ein "Bastel Server Hoster" ein ? ;-)
Was die ursprüngliche Fragestellung betrifft, so werde ich mal etwas langatmiger erklären, worum es geht.

Ein Arbeitskollege kam vor ca einem Jahr mit einem Prollophone (I-Phone) zu mir und zeigte mir, wo er einen Tag zuvor spazieren gegangen ist. Nachdem er mir erklärte, dass das gute Stück einen GPS Chip beeinhalten würde, wuchs mein Interesse an GPS und allem, was dazu gehört.

Nach etwas Googlerei fand ich heraus, dass es Standalone Ortungsgeräte gibt, die die per GPS ermittelten Koordinaten per GSM Netz (per Aufbau einer Netzwerkverbindung) an einen Server übermitteln können.

Meine Neugier hat den Kampf gegen mein Bankkonto gewonnen ;-)

Daraufhin habe ich eine Anwendung programmiert, die die ankommenden Daten zerlegt und in eine Datenbank einpflegt. Per Webseite kann der Standort des Ortungsgerätes ermittelt
werden. Zugriff erfolgt dann per PHP auf die DB, in die zuvor die Daten eingepflegt wurden. Die Anwendung habe ich als Dienst programmiert, der seinerseits auf einer 2003
Serverbüchse läuft, die wiederrum in einem 1&1 RZ steht (Mietserver).

Als ich das ein paar Freunden erzählt habe (nachdem ich das Ganze meinen eigenen Wünschen gemäss zum Laufen gebracht habe), konnte ich gleich Geräte bestellen und die in die Autos (2), Motorräder (2) und Boote (1) einbauen. Für lau, denn unter Freunden nimmt man ja nichts für den Aufwand (nur die Geräte wurden bezahlt).

Warum ich so ausschweifend werde hat einen einfachen Grund, nämlich dient es der Beantwortung der Frage, ob man dem Client sagen kann, dass er nur alle xx Sekunden anklopfen darf.

Ja, das kann man. Ich befürchte aber eher, dass die IP des Servers mal Menschen in die Hände fallen könnte, die ich als vertrauensunwürdig einstufen würde, mal vorsichtig gesagt.
Meinen Freunden vertraue ich, aber ich vertraue keinen Portscans, selbst dann nicht, wenn die Ports auf Closed oder Filtered stehen.

Die Größe der Daten ist überschaubar klein. Ca. 3,5 MB in 1 Stunde. Die Datenpakete sind im einzelnen ca 1k groß / klein, ließen sich also einfach "on the fly" zerlegen und vorab prüfen.

Das ändert aber leider nichts an der Tatsache, dass die Daten dann bereits an den Anwendung angekommen sind (und das sollen sie ja nicht). Ich könnte - wie gesagt, eine Anwendung schreiben, die das vorab macht und integere Daten dann an die Hauptanwendung weiterleitet.

Der Programmablauf betreffend der Hauptwendung wäre kurz erklärt:

- Client klopft an
- Server akzeptiert Verbindung
- eingehende Daten werden auf GPRMC Muster gemäss NMEA Protokoll untersucht (NMEA typische Daten vorhanden?, Valider oder ungültiger Datensatz?)
- Verwerfen der Daten wenn Vorgabe zuvor fehlgeschlagen
- Analyse der Daten wenn Vorgabe zuvor erfolgreich
- Prüfung auf Sicherheit der Daten (Insert, update, usw String im Datensatz)
- Insert in DB wenn Sicherheit = true


So, ich hoffe, das reicht an Backgroundinfos, sollten noch Fragen bestehen, her damit ;-)

Viele Grüße,

Boris
Seitenanfang Seitenende
Um auf dieses Thema zu ANTWORTEN
bitte erst » hier kostenlos registrieren!!

Folgende Themen könnten Dich auch interessieren: