mit fail2ban zugriffe limitieren

stefkey

Member
Hallo,
ich habe seit einigen Tagen 2 IPs die mein Forum mit Anfragen bombardieren. Stört nicht bis jetzt, es läuft alles, aber die CPU und die Netzwerklast sind etwas erhöht.

Nun dachte ich mir, bevor ich jetzt die Ips komplett sperre, würde ich gerne einfach nur den Zugriff der beiden IPs "reduzieren". Das wäre auch eine gute Übung für mich mit iptables bzw fail2ban mich zu beschäftige.

Kann ich mit fail2ban den Netzwerkverkehr für 2 Ips limitieren? ZB. durch sperren jeder zweite oder dritten Anfrage? Kann mir jemand eine Regel dazu hier posten?
 
Hi Stefkey,

hast Du Dir denn schon angeschaut, was das für Anfragen sind? (Webserver logfile)

Bots? (Seitenindizierung)
Login-Pages? (Brute-Force PW-Rateversuche)
API-Zugriffe? (xmlrpc.php, Abklopfen von Sicherheitslücken)

Viele Konfigurationsbeispiele findest Du in Deiner fail2ban-Konfiguration(jail.conf und filter.d-Unterverzeichnis)

Grüße,
G.
 
Last edited by a moderator:
Ich habe keine Ahnung, warum Du Verbindungen nicht pro Zeiteinheit beschränken willst
Code:
iptables -A INPUT -s 192.0.2.1 -p tcp --syn -m hashlimit --hashlimit-upto 1/second --hashlimit-burst 5 --hashlimit-mode srcip --hashlimit-name TEST -j ACCEPT
iptables -A INPUT -s 192.0.2.1 -p tcp --syn -j REJECT --reject-with tcp-reset

aber jedes zweite Anfrage kannst du verwerfen mit (ungetestet)
Code:
iptables -A INPUT -s 192.0.2.1 -p tcp --syn -m statistic --mode nth --every 2 -j ACCEPT
iptables -A INPUT -s 192.0.2.1 -p tcp --syn j REJECT --reject-with tcp-reset

Und fail2ban macht auch nicht viel anderes als vergleichbare iptables-Regeln zu erstellen, oder habe ich da jetzt was verpasst?
--
.A.
 
Und fail2ban macht auch nicht viel anderes als vergleichbare iptables-Regeln zu erstellen, oder habe ich da jetzt was verpasst?

AFAIU ist ist das Ziel von fail2ban eher Netzteilnehmer auszusperren, die durch unerwünschtes Verhalten auffallen.

Zum Begrenzen von Paketen pro Zeiteinheit wäre das über Logfiles doch eher viel zu umständlich. Die Aktionen sind dann noch frei definierbar.

Nach dem Motto: Du übertrittst gerade die Anzahl der Loginversuche bei bei meinem smtp-Dienst? Dann wirst Du gleich auf pop3(s),imap(s) und allen übrigen smtp-ports auch gesperrt(Oder gleich der komplett Zugriff auf allen Ports für die IP oder Subnet - letzteres müsste man selbst implementieren)
 
Last edited by a moderator:
Ich habe keine Ahnung, warum Du Verbindungen nicht pro Zeiteinheit beschränken willst
Code:
iptables -A INPUT -s 192.0.2.1 -p tcp --syn -m hashlimit --hashlimit-upto 1/second --hashlimit-burst 5 --hashlimit-mode srcip --hashlimit-name TEST -j ACCEPT
iptables -A INPUT -s 192.0.2.1 -p tcp --syn -j REJECT --reject-with tcp-reset

aber jedes zweite Anfrage kannst du verwerfen mit (ungetestet)
Code:
iptables -A INPUT -s 192.0.2.1 -p tcp --syn -m statistic --mode nth --every 2 -j ACCEPT
iptables -A INPUT -s 192.0.2.1 -p tcp --syn j REJECT --reject-with tcp-reset

Und fail2ban macht auch nicht viel anderes als vergleichbare iptables-Regeln zu erstellen, oder habe ich da jetzt was verpasst?
--
.A.

Vielen Dank! Ja, prima! Pro Zeiteinheit ist klasse. Deine Regel lässt jetzt 1 Zugriff pro Sekunde zu. Klappt prima! Hier ein Auszug aus dem Webserver Log, vor dem Anlegen der iptables Regel. Nach dem Anlegen der Regel gibt es nur noch eine Anfrage pro Sekunde. Danke sehr!

1 Zugriff pro 2 Sekunden geht nicht, oder? Nur 30 pro Minute, das würde aber einen anderen Effekt haben...


Code:
62.121.130.232 - - [03/Oct/2016:19:16:38 +0200] "GET /index.php?page=Thread&threadID=248 HTTP/1.1" 200 119166 "-" "-"
62.121.130.232 - - [03/Oct/2016:19:16:38 +0200] "GET /index.php?page=Thread&threadID=248 HTTP/1.1" 200 119166 "-" "-"
85.128.142.31 - - [03/Oct/2016:19:16:39 +0200] "GET /index.php?page=Thread&threadID=1546 HTTP/1.1" 200 83263 "-" "-"
85.128.142.31 - - [03/Oct/2016:19:16:39 +0200] "GET /index.php?page=Thread&threadID=1546 HTTP/1.1" 200 83263 "-" "-"
62.121.130.232 - - [03/Oct/2016:19:16:40 +0200] "GET /index.php?page=Thread&threadID=248 HTTP/1.1" 200 119166 "-" "-"
85.128.142.31 - - [03/Oct/2016:19:16:40 +0200] "GET /index.php?page=Thread&threadID=1546 HTTP/1.1" 200 83263 "-" "-"
62.121.130.232 - - [03/Oct/2016:19:16:40 +0200] "GET /index.php?page=Thread&threadID=248 HTTP/1.1" 200 119166 "-" "-"
85.128.142.31 - - [03/Oct/2016:19:16:40 +0200] "GET /index.php?page=Thread&threadID=1546 HTTP/1.1" 200 83263 "-" "-"
85.128.142.31 - - [03/Oct/2016:19:16:41 +0200] "GET /index.php?page=Thread&threadID=1546 HTTP/1.1" 200 83263 "-" "-"
62.121.130.232 - - [03/Oct/2016:19:16:41 +0200] "GET /index.php?page=Thread&threadID=248 HTTP/1.1" 200 119166 "-" "-"
85.128.142.31 - - [03/Oct/2016:19:16:41 +0200] "GET /index.php?page=Thread&threadID=1546 HTTP/1.1" 200 83263 "-" "-"
62.121.130.232 - - [03/Oct/2016:19:16:41 +0200] "GET /index.php?page=Thread&threadID=248 HTTP/1.1" 200 119166 "-" "-"
85.128.142.31 - - [03/Oct/2016:19:16:42 +0200] "GET /index.php?page=Thread&threadID=1546 HTTP/1.1" 200 83263 "-" "-"
85.128.142.31 - - [03/Oct/2016:19:16:42 +0200] "GET /index.php?page=Thread&threadID=1546 HTTP/1.1" 200 83263 "-" "-"
62.121.130.232 - - [03/Oct/2016:19:16:42 +0200] "GET /index.php?page=Thread&threadID=248 HTTP/1.1" 200 119166 "-" "-"
62.121.130.232 - - [03/Oct/2016:19:16:42 +0200] "GET /index.php?page=Thread&threadID=248 HTTP/1.1" 200 119166 "-" "-"
85.128.142.31 - - [03/Oct/2016:19:16:43 +0200] "GET /index.php?page=Thread&threadID=1546 HTTP/1.1" 200 83263 "-" "-"
85.128.142.31 - - [03/Oct/2016:19:16:43 +0200] "GET /index.php?page=Thread&threadID=1546 HTTP/1.1" 200 83263 "-" "-"
62.121.130.232 - - [03/Oct/2016:19:16:43 +0200] "GET /index.php?page=Thread&threadID=248 HTTP/1.1" 200 119166 "-" "-"
 

@stefkey:
Du bist jetzt seit 2009 hier im SSF unterwegs und solltest inzwischen eigentlich wissen, das Crossposts nicht besonders gut bei den Leuten ankommen, die dir zu helfen versuchen. Und wenn schon Crosspost, dann wenigstens auch explizit als TE darauf hinweisen.

Zu deiner Ausgangsfrage: Wenn schon beschränken, dann sinnvollerweise vollständig. Es sei denn natürlich, du hast in deinem Forum auch polnische Gäste, denn dort kommen die IP's her.
 
Naja, es ist ja nicht ganz die gleiche Frage… ;)

Ich habe es auch nur deshalb verlinkt, damit der Zusammenhang klarer wird.


MfG Christian
 
Naja, es ist ja nicht ganz die gleiche Frage…

Aber der gleiche Sachverhalt. Deswegen sagte ich ja auch, daß man darauf hinweisen sollte, wenn man ein Thema schon woanders besprochen hat (und vielleicht mit dem Ergebnis nicht zufrieden ist o.ä.). Dann könnte man hier auf den Vorlauf eingehen und viel zielgerichteter helfen ;)

Ich verstehe ehrlich gesagt auch seine Intention nicht ganz. In dem anderen Forum wurde ihm schon klar gesagt und begründet, was das Sinnvollste wäre, nämlich sperren.
Hier fragt er jetzt nach einer Möglichkeit, die Anzahl der Zugriffe zu reduzieren...warum auch immer :confused:
 
Last edited by a moderator:
sorry! Ja, es ist ein Doppelpost. Ich dachte hier im Forum ist meine Frage besser aufgehoben. Und mir war ehrlich gesagt nicht richtig klar, das es nicht gern gesehen ist. Aber jetzt!

Und der Grund warum ich so rum eiere ist, weil ich mich damit beschäftigen will... welche Auswirkung hat das beschränken auf die Serverlast usw. Außerdem erhalte ich ja ggf. durch Antworten auch Stichworte zu denen ich mich weiter schlau machen kann. Wie hier zB "Module" und "hashlimit" in Bezug auf iptables. Vielen Dank daher nochmal für die Antworten. Ich bleib dran...
 
Und mir war ehrlich gesagt nicht richtig klar, das es nicht gern gesehen ist. Aber jetzt!

Ist ja auch jetzt nicht sooo tragisch ;)

Und der Grund warum ich so rum eiere ist, weil ich mich damit beschäftigen will... welche Auswirkung hat das beschränken auf die Serverlast usw.

Auf jeden Fall eine gute Einstellung, wenn du was dazulernen möchtest und nicht nur einfach fertige Hilfe vorgekaut haben willst. :)
Was die Serverlast angeht, sollten solche Requests eigentlich wenig bis garnicht ins Gewicht fallen, wenn du nicht gerade ein Mini-Mini-Serverchen hast, der schon bei ein paar Requests an seine Ressourcenlimits stößt.
Das ist halt das typische Hintergrundrauschen, was man eigentlich immer mehr oder weniger hat.
 
1 Zugriff pro 2 Sekunden geht nicht, oder?
Doch, geht
Code:
--hashlimit-upto 30/minute --hashlimit-burst 1
Damit wird initial ein Paket gematched sowie der Zähler von 1 auf 0 verringert. Danach wird 30 mal pro Minute der Zähler um 1 erhöht, jedoch nicht höher als 1. Somit trifft die Regel auf nicht mehr als 1 Paket/2 Sekunden zu.

--
.A.
 
Die Frage, die ich mir stelle ist, wieso man so jemanden - wie oben zu sehen - rate-limiten will, statt Ihn sofort zu sperren?

Der ruft doch aus reinem Unsinn kontinuierlich die gleiche Seite ab. Ich nehme mal an das ist so einen Art von "Ich probiere mal aus wie DOS geht" und wenn er wüsste, wie er das besser macht, dann wäre Deine VM jetzt platt.
 
Moin, und nun ist eine andere IP im Spiel. Es sind zwar immer noch 2 IPs die angreifen, aber eine hat gewechselt.

nexus schreibt das solche Angriffe eher normales Grundrauschen sind. @nexus: Mit iftop sehe ich das eine für meine Begriffe unnötig hohe Netzwerkaktivität stattfindet. Jede der beiden Ips saugen mit ca 1 Mbit.
Schon heftig als Dauerdownload, oder? Wenn ich das Forum in den Wartungsmodus schalte ist Ruhe.
 
Und genau hierfür kann man richtig eingestellte Rate-Limits und/oder Connection-Limits nutzen. Die IPs kennt man im Vorhinein nicht. Es wird einfach jeder auf die Limits legitimer Verbindungen gebremst.

Gegen echte Angriffe hilft das natürlich nicht...

--
.A.
 
Hi .A.

okay. D.h. ich sollte noch Rate-Limits und Connection-Limits Regeln definieren.

Connection Limit ist das das hier?
`iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT`

Oder/Und macht auch ping sind, also icmp statt tcp ?

Und Rate-Limits? Wie sieht das aus? Ist das nicht das gleiche?
 
Was du aktuell hast sind Rate-Limits auf TCP SYN, was er meint ist (vermutlich) das Beschränken gleichzeitiger Verbindungen.
 
Diverse Sachverhalte/Probleme können unterschiedlichen Stellen abgemildert werden. I.d.R. sollte man sich nicht allein auf ein Weg verlassen, sondern einen weiteren zumindest in Hinterhand haben.

Was ich meinte ist folgendes: Ein regulärer Nutzer einer Anwendung hat bestimmtes Profil bei den Verbindungen, sowohl bei Anzahl gleichzeitiger Verbindungen als auch bei den Verbindungsversuchen usw. Dieses kannst Du ermitteln und einen gehörigen Sicherheitsrahmen draufschlagen. Dies lässt Du als zulässig durch den Filter durch. Alles andere kann dann verworfen werden, da es sich nicht wie ein legitimer Nutzer verhält. IP-Adressen brauchst Du an dieser Stelle noch nicht fest angeben, das ändert sich ja.

--
.A.
 
Grundsätzlich fallen mir bei der Thematik erst Mal 4 Möglichkeiten ein:

  • Anzahl Prozesse bzw. Anzahl pro Requests pro Client-IP im Webserver limitieren
  • mod_evasive von Apache als anwendungsseititger DOS-Schutz
  • iptables zur Begrenzung der Anzahl der TCP-Verbindungen(Hat .A. ja schon erläutert)
  • Fail2Ban um IPs von Angreifern zeitweise(auch mit steigenden Zeiten möglich) komplett auszusperren
 
Back
Top