Ich versuche mich schon seit Tagen an fail2ban-regex, aber es will einfach nicht.
Bei https://regex101.com kann ich meinen Filter eingeben und das sieht auch gut aus (z.B. die Zeile mit den drei Fragezeichen finden):
Aber wie kann ich das mit fail2ban-regex machen ?
Gibt es irgendwo eine vernünftige, nachvollziehbare Anleitung mit Beispielen ? Am liebsten auf deutsch, ist aber kein muss.
Die Wiki von fail2ban ist auch nicht aufschlussreich.
Mit fail2ban-regex -v /var/log/vsftpd.log '^.*/?/?/?/.*$' kommt die Meldung ERROR: No failure-id group in '^.*/?/?/?/.*$'
Mit fail2ban-regex -v /var/log/vsftpd.log '^<ADDR>.*/?/?/?/.*$' oder fail2ban-regex -v /var/log/vsftpd.log '<ADDR>^.*/?/?/?/.*$'
oder auch mit <HOST> greift nicht. Und wie wendet man das Date Pattern richtig an ?
Running tests
=============
Use failregex line : ^<ADDR>.*/?/?/?/.*$
Use log file : /var/log/vsftpd.log
Use encoding : UTF-8
Results
=======
Failregex: 0 total
|- #) [# of hits] regular expression
| 1) [0] ^<ADDR>.*/?/?/?/.*$
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [181] {^LN-BEG}(?:DAY )?MON Day %k:Minute:Second(?:\.Microseconds)?(?: ExYear)?
| [0] {^LN-BEG}ExYear(?P<_sep>[-/.])Month(?P=_sep)Day(?:T| ?)24hour:Minute:Second(?:[.,]Microseconds)?(?:\s*Zone offset)?
| [0] {^LN-BEG}(?:DAY )?MON Day ExYear %k:Minute:Second(?:\.Microseconds)?
| [0] {^LN-BEG}Day(?P<_sep>[-/])Month(?P=_sep)(?:ExYear|ExYear2) %k:Minute:Second
| [0] {^LN-BEG}Day(?P<_sep>[-/])MON(?P=_sep)ExYear[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
| [0] {^LN-BEG}Month/Day/ExYear:24hour:Minute:Second
| [0] {^LN-BEG}Month-Day-ExYear %k:Minute:Second(?:\.Microseconds)?
| [0] {^LN-BEG}Epoch
| [0] {^LN-BEG}ExYear2ExMonthExDay ?24hour:Minute:Second
| [0] {^LN-BEG}MON Day, ExYear 12hour:Minute:Second AMPM
| [0] {^LN-BEG}ExYearExMonthExDay(?:T| ?)Ex24hourExMinuteExSecond(?:[.,]Microseconds)?(?:\s*Zone offset)?
| [0] {^LN-BEG}(?:Zone name )?(?:DAY )?MON Day %k:Minute:Second(?:\.Microseconds)?(?: ExYear)?
| [0] {^LN-BEG}(?:Zone offset )?(?:DAY )?MON Day %k:Minute:Second(?:\.Microseconds)?(?: ExYear)?
| [0] {^LN-BEG}TAI64N
| [0] ExYear(?P<_sep>[-/.])Month(?P=_sep)Day(?:T| ?)24hour:Minute:Second(?:[.,]Microseconds)?(?:\s*Zone offset)?
| [0] (?:DAY )?MON Day %k:Minute:Second(?:\.Microseconds)?(?: ExYear)?
| [0] (?:DAY )?MON Day ExYear %k:Minute:Second(?:\.Microseconds)?
| [0] Day(?P<_sep>[-/])Month(?P=_sep)(?:ExYear|ExYear2) %k:Minute:Second
| [0] Day(?P<_sep>[-/])MON(?P=_sep)ExYear[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
| [0] Month/Day/ExYear:24hour:Minute:Second
| [0] Month-Day-ExYear %k:Minute:Second(?:\.Microseconds)?
| [0] Epoch
| [0] {^LN-BEG}24hour:Minute:Second
| [0] ^<Month/Day/ExYear2@24hour:Minute:Second>
| [0] ExYear2ExMonthExDay ?24hour:Minute:Second
| [0] MON Day, ExYear 12hour:Minute:Second AMPM
| [0] ^MON-Day-ExYear2 %k:Minute:Second
| [0] ExYearExMonthExDay(?:T| ?)Ex24hourExMinuteExSecond(?:[.,]Microseconds)?(?:\s*Zone offset)?
| [0] (?:Zone name )?(?:DAY )?MON Day %k:Minute:Second(?:\.Microseconds)?(?: ExYear)?
| [0] (?:Zone offset )?(?:DAY )?MON Day %k:Minute:Second(?:\.Microseconds)?(?: ExYear)?
| [0] TAI64N
`-
Lines: 181 lines, 0 ignored, 0 matched, 181 missed
[processed in 0.03 sec]
Missed line(s): too many to print. Use --print-all-missed to print all 181 lines
Display More
Bei dovecot konnte ich in der /etc/fail2ban/filter.d/dovecot.conf einfach ein paar Zeilen anhängen:
^.*Connection closed.*unsupported protocol.*user=\<\>,\srip=<HOST>.*$
^.*Connection closed.*wrong version number.*user=\<\>,\srip=<HOST>.*$
^.*Connection closed.*version too low.*user=\<\>,\srip=<HOST>.*$
Bei postfix und vsftpd geht das aber scheinbar nicht so einfach.