
En mis registros veo regularmente un montón de errores 404 en los que los robots obviamente escanean el servidor sistemáticamente en busca de instalaciones de software específicas. Como esto también genera mucho tráfico, quiero prohibirlos.
Entonces, basándome en algunos procedimientos, intenté encontrar una expresión regular para fail2ban que filtre estas solicitudes 404 de los registros de Apache y, en función de esto, bloquee las IP relacionadas.
Lamentablemente, ninguno de los patrones RegEx que encontré y probé funciona. Entonces como ejemplo:
fail2ban-regex /var/log/apache2/other*access.log '^<HOST> - .* "(GET|POST|HEAD).*HTTP.*" 404 .*$'
(que me parece bien) no encuentra nada:
Date template hits:
|- [# of hits] date format
| [1210] Day(?P<_sep>[-/])MON(?P=_sep)ExYear[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-
Lines: 1210 lines, 0 ignored, 0 matched, 1210 missed
Definitivamente hay varios errores 404 en ese archivo de registro. Entonces, ¿qué estoy haciendo mal? ¿Cómo debería verse una expresión regular adecuada para obtener todos los 404?
¡Gracias!
Respuesta1
other_vhosts_access.log
por defecto tiene un diferente LogFormat vhost_combined
que tiene el prefijo a vhost:port
en comparación con el estándar common
LogFormat
. Debe modificar la expresión regular en consecuencia.
Respuesta2
¿Has probado este?
failregex = ^<HOST> - .* "(GET|POST|HEAD).*HTTP.*" 404 .*$
ignoreregex =.*(robots.txt|favicon.ico|jpg|png)