Necesito implementar fail2ban para proteger un servidor. Me gustaría escanear los registros y prohibir los hosts que generan muchos mensajes 404.
El problema que tengo es que puede haber varios clientes detrás de una determinada IP con NAT y necesito distinguir entre ellos. Cada cliente solicita una URL diferente en el siguiente formato:
https://server.example.com/path/<uniqueid>/<mac_address>
Me gustaría ejecutar fail2ban para que considere la identificación única en la expresión regular en lugar de simplemente mirar la cantidad de errores 404 por IP.
He desarrollado la siguiente expresión regular que parece atrapar los eventos necesarios:
(?P<host>(\d{1,3}.){4})\ -\ -\ \[\d{1,2}\/\w+\/\d{4}[\:\d{2}]+\ \+\d{4}\] "GET \/path\/(?P<unique_id>.+)\/.+HTTP\/\d.\d" ".+" ".+" 404.+
Esto debería coincidir:
1.1.1.11 - - [29/Aug/2018:01:27:45 +0100] "GET /path/3B44444444483/ddddee37D4.cfg HTTP/1.1" "somestring" "otherstring" 404 - 2005 5 0.117
Y esto debería coincidir, pero considerarse una instancia diferente a la anterior:
1.1.1.11 - - [29/Aug/2018:01:27:45 +0100] "GET /path/3B46666444483/ddddee37D4.cfg HTTP/1.1" "somestring" "otherstring" 404 - 2005 5 0.117
Respuesta1
Al utilizar esta configuración, su servidor consume más CPU al buscar respuestas 404 en los registros que cualquier beneficio de seguridad o beneficio de CPU al no ofrecer respuestas 404 para X IP.
Si no le gusta ver estas respuestas, no cree entradas de registro para ellas.