Estaba pensando en agregar la siguiente regla a mis tablas de IP:
-A INPUT -p tcp -m state --state NEW -m recent --update --dport 80 --seconds 5 --hitcount 10 -j DROP
-A INPUT -p tcp -m state --state NEW -m recent --set --dport 80 -j ACCEPT
para evitar un abuso accidental basado en Ajax (demasiadas solicitudes) de mi API web.
¿Se considera que este tipo de filtrado con estado consume muchos recursos o es un desperdicio debido a lo común de las solicitudes del puerto 80 (frente a algo como el puerto 22 que limita la velocidad, lo que daría como resultado mucho menos estado)? Me doy cuenta de que hacer esto en un firewall dedicado sería ideal, pero estoy tratando de ver qué puedo lograr en mi servidor.
Respuesta1
No sé sobre el rendimiento de usar el módulo de estado frente al filtrado de paquetes SYN (que efectivamente haría el mismo truco).
Quizás pueda probar esto... intente agregar su regla y luego use Apache Bench o similar para generar tantas solicitudes como pueda mientras monitorea el uso de la CPU y la memoria de su servidor. Luego intente agregar la siguiente regla:
-N tcpsyn
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j tcpsyn
-A tcpsyn -p tcp --dport 80 -m limit --limit 5/second --limit-burst 20 -j RETURN
-A tcpsyn -p tcp --dport 80 -j DROP
... y comparar eso.