Apache: ¿Limitar el número de solicitudes / tráfico por IP?

12

Me gustaría permitir que solo una IP use hasta, digamos 1 GB, de tráfico por día, y si se excede ese límite, todas las solicitudes de esa IP se eliminan hasta el día siguiente. Sin embargo, una solución más simple donde la conexión se corta después de una cierta cantidad de solicitudes sería suficiente.

¿Existe ya algún tipo de módulo que pueda hacer esto? ¿O quizás puedo lograr esto a través de algo como iptables?

Gracias


fuente
Versión de Apache?
pehrs
2.2 - Llenar el límite de caracteres--

Respuestas:

5

Si desea una solución pura de Apache bw_mod para Apache 2.0 y mod_bandwidth para Apache 1.3. Pueden limitar el ancho de banda de su servidor para limitar el uso del ancho de banda.

También hay mod_limitipconn, que evita que un usuario realice muchas conexiones a su servidor. mod_cband es otra opción, pero nunca la he usado.

Si no desea meterse con su instalación de Apache, puede poner un proxy de calamar delante de Apache. Le da más control también sobre la aceleración.

Sin embargo, en la mayoría de los casos, el problema son algunos objetos grandes cuando desea limitar el ancho de banda por IP, y desea dar un mensaje de error sensato cuando un usuario extrae demasiados datos y lo bloquea. En ese caso, podría ser más fácil escribir un script PHP y almacenar la información de acceso en una tabla temporal en una base de datos.

pehrs
fuente
2
Gracias por las sugerencias Ya he buscado en bw_mod y mod_limitipconn, pero ninguno (por lo que puedo decir) hace lo que quiero. mod_limitipconn simplemente los limita a una conexión a la vez, y bw_mod solo me permite limitar la velocidad de descarga por IP. Quiero bloquearlos después de una cierta cantidad de transferencia de datos / solicitudes. Realmente estoy tratando de defenderme contra ciertos usuarios que sienten la necesidad de rastrear todo mi sitio y descargar todo. Echaré un vistazo al proxy calamar, suena interesante. Si eso no funciona, creo que recurriré a modificar la fuente bw_mod.
¿Has configurado tu robots.txt para no permitir arañas?
pehrs
1
El problema con el archivo robots.txt es que (al igual que el RFC 3514) solo los buenos robots lo respetan.
Scott Pack
Es cierto, pero encontrará que la mayoría de las personas que utilizan su sitio utilizan herramientas estándar. Y muchos de ellos, como wget, respetan el archivo robots.txt. Robots.txt también es la forma correcta de informar a sus usuarios que no quieren que se arañen.
pehrs
1
Lo he intentado Al principio, el archivo robots.txt fue suficiente, luego le dijeron a Wget que ignorara el archivo robots.txt, así que recurrí al bloqueo de agentes de usuario "no reconocidos", pero luego se burlaron del agente de usuario. Tienden a hacer muchas solicitudes principales, mientras que los navegadores legítimos no lo hacen, por lo que puedo considerar limitar las solicitudes principales o deshabilitarlas por completo (menos deseable).
5

Esta es mi solución de iptables para este tipo de problema. Ajuste --seconds --hitcountsegún lo necesite, también la tabla iptables.

iptables -A FORWARD -m state --state NEW -m recent --rcheck --seconds 600 --hitcount 5 --name ATACK --rsource -j REJECT --reject-with icmp-port-unreachable
iptables -A FORWARD -d 192.168.0.113/32 -o eth1 -p tcp -m tcp --dport 80 -m recent --set --name ATACK --rsource -j ACCEPT

Explicado:

  1. iptablescompruebe si la IP de origen figura en el archivo / proc / net / ipt_recent / ATACK durante 5 o más veces en un intervalo de 600 segundos y si es una NUEVA solicitud. Si es así, haz un rechazo; más

  2. iptables compruebe si la solicitud está destinada al puerto 80. Si es así, imprima la IP y la marca de tiempo en / proc / net / ipt_recent / ATACK y reenvíe el paquete.

Funciona bien para mis necesidades.

Gustavo Feijo
fuente
3

¿Has visto una herramienta como fail2ban? Puede ser un poco difícil para usted, pero le permitiría limitar la cantidad de solicitudes que se permite cualquier IP. Funciona mirando los registros, y establece reglas para cuántas violaciones por tiempo están permitidas, por lo que para usted podrían ser solicitudes por día. Una vez que lo revisan, puede hacer cosas como bloquearlos usando ipchains.

Lo he usado para bloquear ataques DDoS contra un servidor de correo con mucho éxito. Sin embargo, puede consumir una cantidad significativa de energía del procesador.

Peter Bagnall
fuente
actual; estoy a punto de implementar esto yo mismo. Espero que funcione
Dark Star1
1

intente mod_dosevasiveomod_security

mod_dosevasive se puede configurar para prohibir una IP después de un número específico o solicitudes de página a un sitio en un período de tiempo especificado

profeta seis
fuente