Quiero ofrecer una defensa básica contra los ataques de fuerza bruta contra un servicio web HTTPS simple. El servicio web proporciona un método login
(digamos en enlace ) que pasa un nombre de usuario y una contraseña como parámetros GET HTTP o como campos de un objeto JSON dado por HTTP POST. El servicio devuelve el código de estado HTTP 403 en los intentos fallidos de inicio de sesión. Puedo pensar en dos tipos de ataques para proteger contra:
- Demasiados intentos fallidos de inicio de sesión desde la misma IP en un lapso de tiempo dado
- Demasiados intentos de inicio de sesión fallidos para el mismo nombre de usuario en un período de tiempo determinado
Según tengo entendido, mod-security
es adecuado para detectar estos ataques y solicitudes de bloqueo, pero los tutoriales que encontré son demasiado complejos y la sintaxis mod-security
me desconcierta. ¿Podría proporcionar un conjunto de reglas de muestra para protegerse contra los ataques especificados anteriormente? En pseudo código diría algo como lo siguiente, con los números apropiados de n
, m
y x
:
<LocationMatch /login>
IF response_status == 403 THEN
user = fetch_user_from_request
IF ++fail_count_per_IP[IP] > n
OR ++fail_count_per_USER[USER] > m THEN
block IP FOR x minutes
</LocationMatch>