2008-09-22 12 views
6

Gente, todos sabemos que la lista negra IP no funciona: los spammers pueden entrar a través de un proxy, además, los usuarios legítimos pueden verse afectados ... Dicho esto, la inclusión en la lista negra me parece una forma eficiente mecanismo 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.Lista negra dinámica basada en IP

Por ejemplo: - alguien que trata de fuerza bruta en su pantalla de inicio de sesión - una serie de cuestiones bot mal escritos muy extrañas peticiones HTTP a su sitio - una secuencia de comandos para niños utiliza un escáner para buscar vulnerabilidades en su aplicación

me pregunto si el siguiente mecanismo funcionaría, y si es así, ¿sabe si hay algún herramientas que lo hacen:

  • En una aplicación web, desarrollador tiene un gancho para informar de un "delito" . Una ofensa puede ser menor (contraseña inválida) y tomaría docenas de tales ofensas para quedar en la lista negra; o puede ser importante, y un par de esas ofensas en un período de 24 horas te echa a patadas.
  • Alguna forma de bloque de nivel de servidor web se activa antes de cargar cada página, y determina si el usuario proviene de una IP "incorrecta".
  • Hay un mecanismo de "perdón" incorporado: las ofensas ya no cuentan contra una IP después de un tiempo.

Gracias!

nota adicional: que sería increíble si la solución trabajó en PHP, pero me encantaría escuchar sus pensamientos sobre el enfoque en general, para cualquier lenguaje/plataforma de

Respuesta

2

¿Está en una máquina * nix? este tipo de cosas es probablemente mejor dejar a nivel de sistema operativo, usando algo como iptables

edición:

en respuesta a la observación, sí (más o menos). sin embargo, la idea es que las iptables puedan funcionar de manera independiente. puede establecer un determinado umbral para acelerar (por ejemplo, solicitudes de bloque en el puerto 80 TCP que exceden x solicitudes/minuto), y todo se maneja de forma transparente (es decir, su aplicación realmente no necesita saber nada al respecto, tener bloqueo dinámico tiene lugar).

sugeriría el método iptables si tiene control total de la caja, y preferiría dejar que su cortafuegos maneje la aceleración (las ventajas son que no necesita construir esta lógica en su aplicación web y puede ahorrar recursos a medida que las solicitudes se eliminan antes de que lleguen a su servidor web)

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

+0

¿Hay alguna manera de comunicarse con iptables desde una aplicación web? Al igual que "Hey IPtables, creo que hay un intruso en la dirección X, míralas para ver si se comportan mal en el futuro". Estoy de hecho en Linux, ejecutando PHP. –

0

creo que debería ser una combinación de nombre de usuario más bloque de IP. No solo IP.

+0

Se refiere a una situación en la que un usuario aún no se ha conectado o en absoluto. Él explícitamente menciona la pantalla de inicio de sesión ... Si el usuario hubiera iniciado sesión, sería trivial. – AviD

5

Eche un vistazo a fail2ban. Un marco python que le permite elevar los bloques de tablas IP de los archivos de registro de cola para patrones de comportamiento errante.

0

está buscando un código de bloqueo personalizado. Hay aplicaciones en el mundo de código abierto que contienen varios sabores de dicho código. Tal vez debería ver algunos de ellos, aunque sus requisitos son bastante triviales, así que marque un combo IP/nombre de usuario, y utilice eso para bloquear una IP por x cantidad de tiempo.(Nota: Dije bloquear el IP, no el usuario. El usuario puede intentar conectarse en línea a través de un IP/username/pw combo.)

De hecho, incluso podría mantener rastros de inicios de sesión de usuario, y al iniciar sesión desde una dirección IP desconocida con un 3 combinaciones de mal nombre de usuario/combo pw, bloquea esa IP por el tiempo que quieras para ese nombre de usuario. (Tenga en cuenta que muchos ISP comparten direcciones IP, por lo tanto ....)

Es posible que desee colocar un retraso en la autenticación, para que un IP no pueda intentar un inicio de sesión más de una vez cada 'y' segundos o así .

+0

En su último punto: el retraso en la autenticación es una de mis técnicas favoritas. Después de que la aplicación determine que las credenciales no son válidas, pero antes de que se muestre la respuesta al usuario, espere 1 segundo. De esta manera, los usuarios legítimos no se ralentizan, pero el bot se dispara en sus pistas. –

0

Desarrollé un sistema para un cliente que realizaba un seguimiento de los hits contra el servidor web y prohibía dinámicamente las direcciones IP en el sistema operativo/cortafuegos durante períodos de tiempo variables para determinadas infracciones, así que sí, esto es definitivamente posible . Como dijo Owen, las reglas de firewall son un lugar mucho mejor para hacer este tipo de cosas que en el servidor web. (Desafortunadamente, el cliente eligió tener un derecho de autor estricto sobre este código, así que no estoy en libertad de compartirlo).

Generalmente trabajo en Perl en lugar de PHP, pero, siempre que tenga una línea de comando interfaz con su motor de reglas de firewall (como, por ejemplo,/sbin/iptables), debería poder hacer esto bastante fácilmente desde cualquier idioma que tenga la capacidad de ejecutar comandos del sistema.

0

err este tipo de sistema es fácil y común, que pueda darle la mía con bastante facilidad

su sencillez y explicó brevemente http://www.alandoherty.net/info/webservers/

los guiones, como está escrito ar no descargable {ya que no Commentry añadió actualmente } pero envíenme un correo electrónico, desde el sitio anterior, le arrojaré el código y con mucho gusto lo ayudaré a depurarlo/asignarlo a su servidor

Cuestiones relacionadas