¿Cómo bloquear automática y temporalmente una dirección IP que genera demasiados resultados en el servidor en un corto período de tiempo?


21

Uno de mis servidores LAMP fue derribado recientemente por algún tipo de robot de script en busca de exploits. Por lo que parece, estaba haciendo tantas solicitudes por segundo, que sobrecargó la RAM en el servidor y derribó todo mi sitio durante una hora. Ese "ataque" todo vino de una sola dirección IP.

Entonces, ¿cómo puedo bloquear automática y temporalmente una dirección IP que genera demasiados resultados en mi servidor LAMP en un corto período de tiempo? ¿Cuál es la mejor herramienta para el trabajo? ¿Debería resolverlo a nivel del sistema operativo o mediante PHP?

Respuestas:


25

Fail2Ban . La solución estándar / predeterminada de oro para este problema en la plataforma Linux.


Interesante, gracias. ¿Cómo trata esto o impacta a los rastreadores web como Google?
ProgrammerGirl

1
@Programmer Depende de cómo configure la cosa, pero no esperaría que un rastreador web ingrese contraseñas malas, busque vulnerabilidades o acumule suficientes visitas para activar un umbral bien definido, así que solo revise sus registros para averiguar en qué definir sus umbrales.
HopelessN00b

5

Debe evitar intentar hacer esto con PHP. Para cuando PHP se involucra, ya es demasiado tarde: la memoria ya ha sido asignada.

Puede prohibir las direcciones IP en cualquier capa, pero el nivel más bajo que utiliza la menor cantidad de recursos es la ruta que desea tomar. Este suele ser el firewall. Como mínimo, iptables (firewall de Linux) es lo que desea usar. Hay herramientas que otros han mencionado, como Fail2Ban, que pueden automatizar esto por usted. El firewall externo sería mejor.

Además de tratar de prohibir las direcciones IP ofensivas, debe intentar hacer un mejor uso de sus recursos. Si una solicitud requiere menos recursos, un ataque tardará más en ser efectivo.

Apache también usa mucha memoria. Si está utilizando mod_php, es aún peor porque PHP se carga dentro de cada proceso secundario de Apache. Esto significa que incluso las solicitudes de contenido estático (css / js / images) están cargando PHP incluso cuando PHP no se está utilizando. Puede resolver este problema utilizando FastCGI en su lugar. mod_fcgid es una buena opción.

También hay otros servidores web que son más eficientes en cuanto a recursos. Nginx es mi favorito. También hay Lighttpd. A mucha gente le gusta Litespeed (reemplazo de Apache).

Si quieres seguir con Apache, considera ajustarlo lo mejor que puedas. Considere deshabilitar .htaccess. Aquí hay una buena explicación de por qué .


2

Para controlar o bloquear el tráfico http, puede usar:

Sin embargo, tenga en cuenta que esta herramienta también podría bloquear / ralentizar a las webspiders y, por lo tanto, afectar el SEO.


2
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

ossec puede hacer este tipo de cosas de forma automática y transparente según los syslogs.


1
¿Puede explicar exactamente qué hace la primera línea de código? Además, ¿cómo se compara ossec con fail2ban? Gracias.
ProgrammerGirl

2
Es una regla de iptables. Creo que cuenta cuántos intentos de conexión nuevos se realizan y los descarta después de que exceden los 4 intentos en 60 segundos. Le animo a mirar man iptablesy ver qué significa cada bandera y cómo funcionan juntas.
Lucas

-3

NoooBS,

--- inundación ---

iptables -N logdrop iptables -A logdrop -m reciente --set --name lista negra

iptables -A logdrop -m limit --limit 1 / s --limit-burst 1 -j LOG --log-prefix "Flood:"

iptables -A logdrop -j DROP

iptables -N ddos ​​iptables -A ddos ​​-m reciente --rcheck --name blacklist --seconds 300 --hitcount 1 -j logdrop iptables -A ddos ​​-m Recent --set --name again iptables -A ddos ​​-m Recent --update --name again --seconds 60 --hitcount 2 -j logdrop iptables -A ddos ​​-j RETURN

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.