Eu gostaria de usar alguma forma de limitação de taxa 1) novas conexões TCP e 2) solicitações em uma conexão existente para HTTP(S). Provavelmente lidarei com o nº 2 com nginx ou HAProxy (porque tenho mais informações sobre o histórico do usuário lá).
No entanto, gostaria de evitar DoS (não DDos) com IPtables e economizar HAProxy ou Nginx alguma carga lidando com novas conexões TCP. Parece que o IPTables seria mais adequado para este trabalho.
# Allow unlimited 80 traffic from our own network (duplicate this line for other local subnets)
# 192.168.16.0 - 192.168.16.255
-A INPUT -p tcp --dport 80 -s 192.168.1.0/24 -j ACCEPT
# Simple, single-IP DoS protection
# Per-minute: Allow up to 200 new connections (packets) from an IP before rate-limiting to 50 packets is applied
# This could need to be an ISP, company, or college where 200 clients all connected from a single IP gateway
# in 1 minute and started using your service. After that first minute 50 more can join every minute.
-A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 50/minute --limit-burst 200 -j ACCEPT
-A INPUT -p tcp --dport 443 -m state --state NEW -m limit --limit 50/minute --limit-burst 200 -j ACCEPT
Essa é uma boa ideia ou devo apenas fazer os dois tipos de limitação de taxa (novo/estabelecido) no nível nginx ou HAproxy?
(Observação: não tenho acesso a um firewall de hardware real projetado para lidar com isso)
Pessoalmente, eu classificaria o limite apenas para pacotes TCP específicos (syn flood, varreduras de vários tipos, etc.) com iptables e usaria nginx para limitar a taxa de solicitações HTTP por intervalo de tempo por trás disso.
Lembre-se de que os navegadores abrem várias conexões TCP para um único usuário real, portanto, limitar a taxa a 50 conexões por minuto quando o pico é atingido é drasticamente baixo e pode causar problemas para as pessoas por trás dos proxies.
Além disso, nada prova que um cliente remoto estabelecendo uma conexão TCP enviará uma solicitação se você filtrar apenas no estado NOVO nas regras do iptables. Isso significa que qualquer pessoa que tenha acesso a uma infraestrutura que não respeita as melhores práticas de filtragem de entrada/saída pode SYN inundar seu serviço com IPs falsificados, degradando assim o serviço para destinos específicos, por exemplo, APs de telefones celulares de empresas famosas.