Pregunta

Amigos, todos sabemos que las listas negras de IP no funcionan: los spammers pueden ingresar a través de un proxy y, además, los usuarios legítimos pueden verse afectados...Dicho esto, las listas negras me parecen un mecanismo eficiente para detener a un atacante persistente, dado que la lista real de IP se determina dinámicamente, en función de los comentarios de la aplicación y el comportamiento del usuario.

Por ejemplo:- Alguien que intente hacer bruto en su pantalla de inicio de sesión: un bot de malla mal escrito emite solicitudes HTTP muy extrañas a su sitio, un script -kiddie usa un escáner para buscar vulnerabilidades en su aplicación

Me pregunto si el siguiente mecanismo funcionaría y, de ser así, ¿sabe si existen herramientas que lo hagan?

  • En una aplicación web, el desarrollador tiene un gancho para informar una "ofensa".Un delito puede ser menor (contraseña no válida) y se necesitarían docenas de delitos de este tipo para aparecer en la lista negra;o puede ser grave y un par de infracciones de este tipo en un período de 24 horas te expulsan.
  • Alguna forma de bloqueo a nivel de servidor web se activa antes de que se cargue cada página y determina si el usuario proviene de una IP "mala".
  • Hay un mecanismo de "perdón" incorporado:Los delitos ya no cuentan contra una IP después de un tiempo.

¡Gracias!

Nota adicional:Sería fantástico si la solución funcionara en PHP, pero me encantaría escuchar tu opinión sobre el enfoque en general, para cualquier idioma/plataforma.

¿Fue útil?

Solución

¿Estás en una máquina *nix?Probablemente sea mejor dejar este tipo de cosas al nivel del sistema operativo, usando algo como iptables

editar:

en respuesta al comentario, sí (más o menos).sin embargo, la idea es que iptables pueda funcionar de forma independiente.puede establecer un cierto umbral para acelerar (por ejemplo, bloquear solicitudes en el puerto 80 TCP que excedan x solicitudes/minuto), y todo eso se maneja de forma transparente (es decir, su aplicación realmente no necesita saber nada al respecto, para tener se produce un bloqueo dinámico).

Sugeriría el método iptables si tiene control total del cuadro y preferiría dejar que su firewall maneje la aceleración (las ventajas son que no necesita crear esta lógica en su aplicación web y puede ahorrar recursos a medida que se realizan las solicitudes). cayeron antes de que lleguen a su servidor web)

de lo contrario, si espera que el bloqueo no sea un componente importante (o su aplicación es portátil y no puede garantizar el acceso a iptables), entonces tendría más sentido incorporar esa lógica en su aplicación.

Otros consejos

Echa un vistazo a falla2ban.Un marco de Python que le permite generar bloques de tablas de IP a partir de archivos de registro de seguimiento en busca de patrones de comportamiento erróneo.

Creo que debería ser una combinación de nombre de usuario más bloque de IP.No sólo la propiedad intelectual.

estás viendo un código de bloqueo personalizado.Hay aplicaciones en el mundo del código abierto que contienen varios tipos de dicho código.Quizás deberías mirar algunos de ellos, aunque tus requisitos son bastante triviales, así que marca una combinación de IP/nombre de usuario y utilízala para bloquear una IP durante x cantidad de tiempo.(Tenga en cuenta que dije bloquear la IP, no el usuario.El usuario puede intentar conectarse a través de una combinación IP/nombre de usuario/contraseña válida).

De hecho, incluso podría mantener rastros de los inicios de sesión de los usuarios, y cuando inicie sesión desde una IP desconocida con una combinación de nombre de usuario/contraseña incorrecta de 3 strikes, bloquee esa IP durante el tiempo que desee para ese nombre de usuario.(Tenga en cuenta que muchos ISP comparten direcciones IP, por lo tanto...)

También es posible que desee retrasar la autenticación, de modo que una IP no pueda intentar iniciar sesión más de una vez cada "y" segundos aproximadamente.

Desarrollé un sistema para un cliente que realizaba un seguimiento de los accesos al servidor web y prohibía dinámicamente las direcciones IP en el nivel del sistema operativo/firewall durante períodos de tiempo variables para ciertos delitos, así que sí, esto definitivamente es posible.Como dijo Owen, las reglas de firewall son un lugar mucho mejor para hacer este tipo de cosas que el servidor web.(Desafortunadamente, el cliente decidió mantener estrictos derechos de autor sobre este código, por lo que no tengo la libertad de compartirlo).

Generalmente trabajo en Perl en lugar de PHP, pero, siempre que tenga una interfaz de línea de comandos para su motor de reglas de firewall (como, por ejemplo, /sbin/iptables), debería poder hacerlo con bastante facilidad desde cualquier lenguaje que tiene la capacidad de ejecutar comandos del sistema.

Errar, este tipo de sistema es fácil y común, puedo darte el mío con bastante facilidad.

se explica simple y brevemente aquí http://www.alandoherty.net/info/webservers/

Los scripts tal como están escritos no se pueden descargar {ya que actualmente no se han agregado comentarios}, pero envíeme un correo electrónico desde el sitio anterior y le enviaré el código y con gusto lo ayudaré a depurarlo o configurarlo en su servidor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top