fail2ban erkennt die IP des Angreifers, sperrt ihn aber nicht und liest Protokolle nur langsam.

fail2ban erkennt die IP des Angreifers, sperrt ihn aber nicht und liest Protokolle nur langsam.

Seit einigen Tagen erhalte ich Angriffe von einigen IP-Adressen auf meinen Nginx. Ich habe beschlossen, fail2ban zu verwenden, um es automatisch zu sperren, aber ich habe festgestellt, dass das nicht sehr gut funktioniert. Ich kann in den Protokollen sehen, dass die IP-Adressen erkannt werden, aber nicht wie erwartet gesperrt werden.

Meine Jail-Datei ist:

[nginx-40x-req]
enabled  = true
bantime.rndtime = 2800
bantime.increment = true
port     = http,https
filter   = nginx-40x-req
logpath  = /var/log/nginx/access.log
maxretry = 5

und mein Filter sieht so aus:

[Definition]
failregex = ^{"status": (400|401|403), "request_time": [0-9\.]+,\s+"remote_addr": "<HOST>",

Auf meinem Nginx habe ich eine Karte hinzugefügt, um seine Anfragen zu erkennen und gibt bei Erkennung 403 zurück. Die Protokolle sehen folgendermaßen aus:

{"status": 403, "request_time": 0.000,  "remote_addr": "xx.xx.xx.xx", "@timestamp": "2021-09-03T18:32:34+02:00", "type": "nginx", "hostname": "vps-e642f340", "host": "d.itsyjd.com", "uri": "/v2/speed_test", "request": "GET https://d.itsyjd.com/v2/speed_test HTTP/1.1", "request_method": "GET", "request_proto": "http", "request_proto_proxy": "-", "request_uri": "/v2/speed_test", "request_args": "-", "server_proto": "HTTP/1.1", "body_bytes_sent": 552, "http_referer": "-", "http_user_agent": "Mozilla/5.0 (Linux; Android 8.0; MHA-AL00 Build/HUAWEIMHA-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044304 Mobile Safari/537.36 (compatible; Baiduspider/2.0;+http://www.baidu.com/search/spider.html)", "msec": 1630686754.923, "upstream_connect_time": -, "upstream_header_time": -, "upstream_response": -, "pipe": "p", "gzip_ratio": "-", "brotli_ratio": "-", "remote_user": "-", "bad_request": "1"}

Auf meinem Fail2Ban sehe ich viele Nachrichten, die besagen, dass eine IP-Adresse erkannt wurde:

2021-09-03 18:34:31,494 fail2ban.filter         [32586]: INFO    [nginx-40x-req] Found xx.xx.xx.xx - 2021-09-03 18:29:33

Es erfolgt jedoch weiterhin kein Verbot dieser IP-Adressen.

Mir ist aufgefallen, dass die Lesegeschwindigkeit von Fail2Ban langsamer ist als die Protokollgeschwindigkeit. Daher habe ich angefangen zu glauben, dass das vielleicht das Problem ist, denn wenn diese IPs gesperrt sind und Fail2Ban in Echtzeit liest, werden andere IP-Adressen ohne Probleme gesperrt. Max_retry ist 5 und alle IP-Adressen wurden mehr als 5 Mal erkannt, also müssen sie gesperrt werden.

Weiß jemand, was ich falsch machen könnte (denn es gibt definitiv etwas, das ich nicht sehe).

Beste grüße.

EDIT: Nachdem ich diese Nachricht geschrieben habe, habe ich gesehen, dass es zwar gesperrt wird, aber sehr langsam funktioniert. In etwa 15 Minuten wurden etwa 4 von etwa 11 IP-Adressen gesperrt, obwohl sie jede Sekunde mehrmals erkannt werden.

EDIT2: Das Löschen des Protokolls mit einem einfachen echo "" > <logfile>hat die Sperren ausgelöst.

Meine fail2ban-Version ist 0.10.2

Da der problematische Angreifer gesperrt ist und nur wenige Anfragen erhält, liest fail2ban dies in Echtzeit und sperrt:

2021-09-03 18:46:13,759 fail2ban.filter         [32586]: INFO    [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:46:13
2021-09-03 18:46:13,909 fail2ban.actions        [32586]: NOTICE  [nginx-40x-req] Ban XX.XX.XX.XX
2021-09-03 18:46:18,855 fail2ban.filter         [32586]: INFO    [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:46:18
2021-09-03 18:47:07,004 fail2ban.filter         [32586]: INFO    [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:47:06
2021-09-03 18:48:34,390 fail2ban.filter         [32586]: INFO    [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:48:34
2021-09-03 18:48:54,230 fail2ban.filter         [32586]: INFO    [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,231 fail2ban.filter         [32586]: INFO    [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,231 fail2ban.filter         [32586]: INFO    [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,335 fail2ban.actions        [32586]: NOTICE  [nginx-40x-req] Ban XX.XX.XX.XX
2021-09-03 18:50:08,488 fail2ban.filter         [32586]: INFO    [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:50:08

Ich denke also immer noch, dass das Problem möglicherweise die Lesegeschwindigkeit ist.

EDIT3:

Schließlich habe ich die Fail2ban-Version auf 0.11.2 aktualisiert, ein Datumsmuster hinzugefügt und den Adressdetektor geändert. Jetzt scheint die Nginx-Datei viel schneller zu lesen.

[Definition]
failregex = ^{"status": (400|401|403), "request_time": [0-9\.]+,\s+"remote_addr": "<ADDR>",
datepattern = "@timestamp": "%%Y-%%m-%%dT%%H:%%M:%%S%%z"

Antwort1

  1. Es ist nicht ratsam, das Zugriffsprotokoll zu überwachen, siehefail2ban/wiki :: Bewährte Vorgehensweiseinsbesondere der Teil „Reduzieren Sie parasitären Protokollverkehr“.
  2. Unangemessene reguläre Ausdrücke können auch dazu führen, dass fail2bans „die Lesegeschwindigkeit langsamer als die Protokollgeschwindigkeit sein kann“, aber ich sehe nicht, dass Ihr regulärer Ausdruck nicht gut ist. Aber er kann schneller gemacht werden, dafür müssten Sie nur das Protokollformat ändern. Auch die Angabe von „single“ und „precise“ datepatternkann helfen, die Verarbeitung zu beschleunigen.
  3. Insgesamt könnte es zu dem bekannten Race Condition kommen, fail2ban war bis v.0.10.5 betroffen, siehehttps://github.com/fail2ban/fail2ban/issues/2660für Details (der Fix wurde in v.0.10.6 / v.0.11.2 veröffentlicht)

Beachten Sie auch die Antworten auf ähnliche Fragen, zum Beispielhttps://github.com/fail2ban/fail2ban/issues/3021#issuecomment-834287295.

verwandte Informationen