Gestisco diverse centinaia di server web dietro loadbalancer, ospitando molti siti diversi con una pletora di applicazioni (di cui non ho alcun controllo). Circa una volta al mese, uno dei siti viene violato e viene caricato uno script di alluvione per attaccare una banca o un'istituzione politica. In passato, si trattava sempre di alluvioni UDP che venivano effettivamente risolte bloccando il traffico UDP in uscita sul singolo server web. Ieri hanno iniziato a inondare una grande banca americana dai nostri server utilizzando molte connessioni TCP alla porta 80. Dato che questo tipo di connessioni sono perfettamente valide per le nostre applicazioni, il loro blocco non è una soluzione accettabile.
Sto considerando le seguenti alternative. Quale consiglieresti? Li hai implementati e come?
- Limite sui pacchetti TCP in uscita del server web (iptables) con porta di origine! = 80
- Lo stesso ma con la coda (tc)
- Limite di velocità del traffico in uscita per utente per server. Piuttosto un onere amministrativo, in quanto vi sono potenzialmente migliaia di utenti diversi per server delle applicazioni. Forse questo: come posso limitare la larghezza di banda per utente?
- Qualunque altra cosa?
Naturalmente, sto anche cercando dei modi per ridurre al minimo la possibilità che gli hacker entrino in uno dei nostri siti ospitati, ma poiché quel meccanismo non sarà mai impermeabile al 100%, voglio limitare fortemente l'impatto di un'intrusione.
Aggiornamento: attualmente sto testando queste regole, che avrebbero impedito questo attacco specifico. Come proporresti di renderli più generici? Mi sto perdendo un noto attacco DoS TCP quando ho solo il limite di velocità sui pacchetti SYN?
iptables -A OUTPUT -p tcp --syn -m limit --limit 100/min -j ACCEPT
iptables -A OUTPUT -p tcp --syn -m limit --limit 1000/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A OUTPUT -p tcp --syn -j REJECT --reject-with tcp-reset
Saluti!