Estou desenvolvendo um aplicativo Flask que depende muito da interação de sites externos e é iniciado pelo usuário final. Se eu deixar o aplicativo sem nenhum tipo de controle de largura de banda / limitação de taxa, esse aplicativo poderá ser abusado por atores com intenções nefastas.
Meu objetivo é uma abordagem em duas etapas bastante simples:
A taxa limita que fontes IP individuais executem mais do que o
xnúmero de conexões por minuto. Isso pode ser facilmente alcançado comiptables. Aqui está um exemplo semelhante ao meu objetivo:iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 \ --connlimit-mask 32 -j REJECT --reject-with tcp-resetA taxa limita a capacidade dos aplicativos de executar mais do que o
xnúmero de pesquisas por URL . Exemplo:APP ---- 10 pps ---> stackexchange.com PERMIT APP ---- 25 pps ---> google.com DENY / 15 SECOND BACKOFF
Até onde sei, iptablesnão há como rastrear URLs separados. Só é capaz de classificar o limite dessas conexões como um todo. Isso também não parece ser a única limitação para o que estou tentando alcançar. Se houvesse uma maneira de configurar iptablesdessa maneira, isso poderia fornecer alguns problemas ao meu aplicativo Web, pois essas solicitações são iniciadas pelo usuário.
Estou usando o Flask, uma opção viável pode estar usando um before_requestgancho e rastreando manualmente esses destinos com um armazenamento de dados como o Redis. No entanto, isso é muito alto na pilha para lidar com conexões dessa maneira. O que realmente preciso (ou acho que preciso) é de um aplicativo de firewall inteligente que possa dissecar solicitações de maneira personalizada e fechar conexões quando determinados pontos de interrupção forem atingidos.
Existe alguma maneira de conseguir o que estou tentando fazer?
Se sim, como?