
Da ich versuche, eine Regel für Fail2ban zu erstellen, die meiner Meinung nach schon lange fehlt, weil sie mich in der Vergangenheit wirklich genervt hat, bin ich auch bereit, sie der Welt vorzulegen :-)
Was wurde getan?
- Es wurde bereits eine Datei unter fail2ban/filter/named-antispam.conf erstellt.
- Erstellt mit Inhalt
#cat filter.d/named-antispam.conf
[Definition]
prefregex = ([a-zA-Z][a-zA-Z][a-zA-Z])\s([0-9]|[0-9][0-9])\s([0-9][0-9]):([0-9][0-9]:[0-9][0-9])
failregex = ^rate limit drop all response to <HOST>$
und jail.conf
#Disabled for Writing this Articel
[named-antispam]
enabled = false
filter = named-antispam
logpath = /var/log/named/rate.log
bantime = 2628000
maxretry = 30
findtime = 60
- geprüft, was mit fail2ban passiert, wenn ich es aktiviere und auf Debug einstelle?
2021-01-26 11:25:19,461 fail2ban.filterpyinotify[14180]: DEBUG Event queue size: 16
2021-01-26 11:25:19,462 fail2ban.filterpyinotify[14180]: DEBUG <_RawEvent cookie=0 mask=0x2 name='' wd=2 >
Wenn ich die Regel deaktiviere, kann ich das Debuggen ohne diesen Fehler einrichten - also scheint es mir, dass ich eine Art Fehler habe, den ich nicht herausfinden kann, und deshalb frage ich hier. Und zum Schluss - ja, ich habe viele Einträge in meinem Protokoll, aber fail2ban kümmert sich nicht darum
Antwort1
Du hast nicht angegeben, worum es grundsätzlich geht, darüber hinaus weder einen Log-Auszug mit Meldungen, die Du im Filter abfangen willst, noch den Versuch, was fail2ban-regex -v
man mit dem Filter findet.
Ich schätze, die Nachricht sieht so aus:
Jan 26 14:00:10 srv named[26403]: client 192.0.2.100#21324 (example.com): rate limit drop all response to 192.0.2.0/24
Dann sind hier zwei Dinge zu beachten – erstens kommt die IP nach dem Client (hier 192.0.2.100
) und am Ende hat sie ein Subnetz (IP/CIDR-Notation, hier 192.0.2.0/24
).
Wenn Sie ein Subnetz sperren möchten (sofern Ihr Fail2Ban und die gewählte Sperraktion überhaupt in der Lage sind, Subnetze zu sperren), können Sie je nach Version Folgendes verwenden:
entweder dies (falls Ihr Fail2ban dies unterstützt <SUBNET>
):
failregex = ^\s*\S+\s+named(?:\[\d+\])?: [^:]+: rate limit drop all response to <SUBNET>
oder dieses:
failregex = ^\s*\S+\s+named(?:\[\d+\])?: [^:]+: rate limit drop all response to (?:<F-IP4>\d+\.\S+</F-IP4>|<F-IP6>\w+\:\S+</F-IP6>)
Sie können anstelle des Subnetzes auch die IP sperren und dann Folgendes verwenden:
failregex = ^\s*\S+\s+named(?:\[\d+\])?: client <ADDR>[^:]*: rate limit drop all response
fail2ban-regex
Sie können es beispielsweise auch mit überprüfen :
msg='Jan 26 14:00:10 srv named[26403]: client 192.0.2.100#21324 (example.com): rate limit drop all response to 192.0.2.0/24'
fail2ban-regex "$msg" '^\s*\S+\s+named(?:\[\d+\])?: [^:]+: rate limit drop all response to <SUBNET>'
...
Lines: 1 lines, 0 ignored, 1 matched, 0 missed
oder verwenden Sie Folgendes, um den Filter mit einer Protokolldatei zu testen:
fail2ban-regex /var/log/named/rate.log named-antispam
Was Ihr prefregex
und betrifft failregex
- sie sind einfach nicht korrekt. Weder prefregex noch failregex dürfen einen Teil mit Zeitstempelübereinstimmung enthalten datepattern
(lesen Sie eine Anleitung in unseremWikioderHandbuch, es beinhaltet:
HINWEIS: Dies failregex
wird auf den verbleibenden Teil der Nachricht nach der Verarbeitung angewendet prefregex
(sofern angegeben), was wiederum nach der Verarbeitung erfolgt datepattern
(wobei die Zeitstempelzeichenfolge, die dem besten Muster entspricht, aus der Nachricht ausgeschnitten wird).
Ergibt auch prefregex
Sinn, wenn Sie eine Vorfilterung benötigen, zum Beispiel wenn Sie mehr als einen Failregex haben (und ein solcher Regex wird entweder auf den gesamten Zeilenabschnitt oder auf den zwischen <F-CONTENT>
und eingeschlossenen Teil des übereinstimmenden RE angewendet </F-CONTENT>
, falls dieser angegeben ist). Wenn keine Vorfilterung erwartet wird, prefregex
ergibt das wenig Sinn.
Wenn Sie es aus irgendeinem Grund benötigen, würde es jedenfalls folgendermaßen aussehen:
prefregex = ^\s*\S+\s+named(?:\[\d+\])?: <F-CONTENT>.+</F-CONTENT>$
failregex = ^[^:]+: rate limit drop all response to <SUBNET>
#failregex = ^[^:]+: rate limit drop all response to (?:<F-IP4>\d+\.\S+</F-IP4>|<F-IP6>\w+\:\S+</F-IP6>)
#failregex = ^client <ADDR>[^:]*: rate limit drop all response