Sto sviluppando un'applicazione Flask che si basa fortemente sull'interazione di siti Web esterni e viene avviata dall'utente finale. Se lascio l'applicazione senza alcun tipo di controllo / limitazione della larghezza di banda, questa applicazione potrebbe essere abusata da attori con intenzioni nefaste.
Il mio obiettivo è un approccio in due fasi abbastanza semplice:
La velocità limita le singole fonti IP dall'esecuzione di un
x
numero di connessioni superiore al minuto. Questo può essere facilmente raggiunto coniptables
. Ecco un esempio simile al mio obiettivo:iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 \ --connlimit-mask 32 -j REJECT --reject-with tcp-reset
La velocità limita la capacità delle applicazioni di eseguire più del
x
numero di ricerche per URL . Esempio:APP ---- 10 pps ---> stackexchange.com PERMIT APP ---- 25 pps ---> google.com DENY / 15 SECOND BACKOFF
Per quanto ne so, iptables
non ha modo di tracciare URL separati. È solo in grado di limitare la velocità di queste connessioni nel loro insieme. Anche questo non sembra l'unico limite a ciò che sto cercando di ottenere. Se esistesse un modo per eseguire l'installazione iptables
in questo modo, potrebbero verificarsi alcuni problemi con la mia applicazione Web poiché queste richieste sono avviate dall'utente.
Sto usando Flask, un'opzione praticabile potrebbe essere l'utilizzo di un before_request
hook e il monitoraggio manuale di queste destinazioni con un archivio dati come Redis. Tuttavia, questo è abbastanza in alto nello stack per gestire le connessioni in questo modo. Ciò di cui ho veramente bisogno (o penso di farlo) è un'applicazione firewall intelligente in grado di analizzare le richieste in modo personalizzato e chiudere le connessioni quando sono stati raggiunti determinati punti di interruzione.
C'è un modo per ottenere ciò che sto cercando di fare?
Se é cosi, come?