security - revisar - spamhaus lista negra
Lista negra dinĂ¡mica basada en IP (6)
Amigos, todos sabemos que la lista negra de 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 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 intenta hacer fuerza bruta en su pantalla de inicio de sesión, un bot mal escrito emite solicitudes HTTP muy extrañas a su sitio, un script kiddie utiliza un escáner para buscar vulnerabilidades en su aplicación.
Me pregunto si el siguiente mecanismo funcionaría, y si es así, ¿sabes si hay alguna herramienta que lo haga?
- En una aplicación web, el desarrollador tiene un gancho para informar una "ofensa". 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 tales ofensas en un período de 24 horas te echa a patadas.
- Se inicia una especie de bloque de nivel de servidor web 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: sería genial si la solución funcionara en PHP, pero me encantaría escuchar sus opiniones sobre el enfoque en general, para cualquier idioma / plataforma
¿Estás en una máquina * nix? este tipo de cosas probablemente sea mejor dejarlas 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 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 de iptables si tiene el control total de la caja, y preferiría que su firewall maneje la aceleración (las ventajas son que no necesita construir esta lógica en su aplicación web, y puede guardar recursos a medida que las solicitudes caído antes de que golpeen su servidor web)
de lo contrario, si espera que el bloqueo no sea un componente enorme (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 a su aplicación.
Creo que debería ser una combinación de nombre de usuario más bloque de IP. No solo IP.
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 nivel del sistema operativo / firewall durante períodos de tiempo variables para ciertos delitos, por lo 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, por lo que no estoy en libertad de compartirlo).
Generalmente trabajo en Perl en lugar de PHP, pero, siempre que tengas una interfaz de línea de comandos para tu motor de reglas de firewall (como, digamos, / sbin / iptables), deberías poder hacer esto bastante fácilmente desde cualquier idioma que tiene la capacidad de ejecutar comandos del sistema.
estás viendo 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. (Tenga en cuenta que dije bloquear el IP, no el usuario. El usuario puede intentar conectarse en línea a través de un combo IP / username / pw válido).
De hecho, incluso podría guardar rastros de los inicios de sesión de los usuarios, y cuando inicie sesión desde una IP desconocida con un 3 mal nombre de usuario / pw combo, bloquee esa IP por el tiempo que desee para ese nombre de usuario. (Tenga en cuenta que muchos ISP comparten IP, por lo tanto ....)
También es posible que desee establecer un retraso en la autenticación, de modo que un IP no pueda intentar un inicio de sesión más de una vez cada ''y'' segundos más o menos.
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.
err este tipo de sistema es fácil y común, puedo darte el mío con la suficiente facilidad
es simplemente y brevemente explicado aquí http://www.alandoherty.net/info/webservers/
los scripts tal como están escritos no se pueden descargar {ya que actualmente no se ha agregado ningún comentario}, pero envíenme un correo electrónico desde el sitio de arriba, le arrojaré el código y con mucho gusto lo ayudaré a depurarlo / redirigirlo a su servidor