![Fail2ban: la expresión regular utilizada en failregex no funciona (¿problema entre corchetes]?)](https://rvso.com/image/777952/Fail2ban%3A%20la%20expresi%C3%B3n%20regular%20utilizada%20en%20failregex%20no%20funciona%20(%C2%BFproblema%20entre%20corchetes%5D%3F).png)
Con fail2ban, quiero prohibir las IP según el contenido del archivo apache_access.log.
Este es un ejemplo de línea que quiero que coincida con las reglas de expresiones regulares:
197.221.254.56 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
Entonces, este es mi archivo de filtro personalizado fail2ban:
[Definition]
failregex = ^<ADDR> - - \[\S+ \S+\] "GET \/ HTTP\/1.0" 400 \S "-" "-"$
ignoreregex =
La expresión regular funciona perfectamente en sitios web como 'https://regex101.com/'
Pero cuando uso las herramientas fail2ban-regex como esta:
sudo fail2ban-regex /var/log/site1_access.log /etc/fail2ban/filter.d/les400enhttp1-0.conf
Coincido con cualquier cosa.
Probé con esta regla de expresiones regulares más simple: ^<ADDR> - - \[\S+ \S+
¡Y funciona!
Results
=======
Failregex: 10 total
|- #) [# of hits] regular expression
| 1) [10] ^<ADDR> - - \[\S+ \S+
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [10] Day(?P<_sep>[-/])MON(?P=_sep)ExYear[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-
Lines: 10 lines, 0 ignored, 10 matched, 0 missed
[processed in 0.03 sec]
Pero cuando lo intento con la expresión regular: ^<ADDR> - - \[\S+ \S+\]
(sracket cuadrado izquierdo]agregado a la derecha)) el comando 'fail2ban-regex'devuélveme:
Lines: 10 lines, 0 ignored, 0 matched, 10 missed
[processed in 0.03 sec]
|- Missed line(s):
| 36.170.59.167 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 183.228.2.12 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 183.228.2.12 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 126.131.138.146 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 197.221.254.56 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 110.11.157.122 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 220.135.236.27 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 61.231.224.176 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 106.165.107.215 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 61.231.224.176 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
`-
¡10 perdidos! ninguna de mis líneas de ejemplo coincide con la expresión regular cuando agrego el corchete izquierdo (])
No entiendo dónde está mi error... gracias por cualquier ayuda :)
Respuesta1
Sería mejor captar lo que desea de la forma clásica, por ejemplo:
\[.*\]
La parte del patrón de fecha (que crea el problema que notó) aparentemente es manejada de una manera especial por fail2ban.
Si pruebas el siguiente patrón:
\[\]
Verá que también coincide, irónicamente, lo que significa que se elimina el patrón de fecha dentro de los corchetes. Así que no tengas eso en cuenta.
Podrías usar algo como esto:
^<ADDR> -.*\"(GET|POST|HEAD).*HTTP.*\"$
PD. De hecho, su failregex está comentado dentro de su archivo de filtro, asegúrese de descomentarlo cuando realice los cambios.