
Tengo un servidor web lighttpd que ofrece páginas web generadas en PHP. Actualmente, este servidor enfrenta mucho tráfico debido a un ataque de bot DDoS y estoy buscando una manera de bloquear o mitigar algunos de ellos.
Hasta donde yo sé, lighttpd ofrece la posibilidad de bloquear solicitudes a través de una dirección IP remota, por ejemplo, poniendo
$HTTP["remoteip"] == "12.34.56.0/24" {
url.access-deny = ( "" )
}
en lighttpd.conf
, se bloquearán todas las solicitudes provenientes del rango de IP 12.34.56.0 - 12.34.56.255.
Sin embargo, debido a la naturaleza de DDoS, no es factible bloquear direcciones o rangos de IP únicos, porque cambian con bastante frecuencia.
Al examinar el registro de acceso, encontré que la mayoría de las solicitudes de los bots parecen usar el protocolo HTTP/1.0 más antiguo, mientras que la mayor parte del tráfico legítimo usa HTTP/1.1.
Entonces mi pregunta es:¿Hay alguna manera de bloquear/denegar todas las solicitudes que llegan a través de HTTP/1.0 (y permitirlas a través de HTTP/1.1) en lighttpd?
No pude encontrar tal posibilidad en el oficial.documentación de configuración de lighttpd.
Notas:
- Soy consciente de que parte del tráfico legítimo también podría utilizar HTTP/1.0, pero estaría bien que lo bloqueara también.
- Las solicitudes de bot no parecen usar un patrón común para agentes de usuario o referencias HTTP, por lo que usar aquellas con un patrón de expresión regular no parece ser una opción.
Respuesta1
En lugar de dar una soluciónlighttpd
, te recomendaría que usesfalla2banque está presente en todos los sistemas basados en Unix. Está atento a los cambios en los archivos de registro y los analiza de acuerdo con reglas de expresión regular y, en caso de que coincida un patrón (HTTP/1.0 en su caso), lo bloqueará en el nivel del firewall del sistema, lo que es más efectivo para bloquear conexiones no deseadas.
Además, si experimenta tráfico anormal en el que ve más solicitudes maliciosas que las solicitudes normales, puede agregar la siguiente regla de firewall para ralentizar el ataque DDoS.
iptables -A INPUT -p tcp --dport 80 -m limit --limit 20/minute --limit-burst 127 -j ACCEPT
Si aún desea bloquear HTTP/1.0 a lighttpd
nivel, intente hacer coincidir el protocolo HTTP de esta manera:
env.SERVER_PROTOCOL == "HTTP/1.0" {
url.access-deny = ( "" )
}
(La solución no se ha probado desde que la cambié nginx
hace mucho tiempo, pero AFAIR podría funcionar).