Come limitare il numero di connessioni per secondo: Usiamo iptables.

La mamma degli ……

Se si espone un servizio, tipo sulla porta 80 (http) ,un perditempo qualsiasi attraverso una routine scopiazzata da qualche parte potrebbe mettere in ginocchio il vostro servizio.

La routine più semplice, ma anche la più facile da mitigare , che potete trovare in qualsiasi corso da 50 Eu con certificazione Hacker è la seguente:

#!/bin/bash
ip=”x.x.x.x”
port=”80″
for i in {1..200}
do
# non faccio assolutamente nulla, rompo solo le p….
echo “exit” | nc ${ip} ${port};
done



Cosa è netcat (nc)

Netcat è un’utilità che legge e scrive dati attraverso le connessioni di rete, utilizzando il protocollo TCP o UDP. È stato progettato per essere un affidabile strumento di “back-end” che può essere utilizzato direttamente o pilotato da altri programmi e script. Allo stesso tempo, è uno strumento ricco di funzionalità per il debug e l’esplorazione della rete, poiché può creare quasi ogni tipo di connessione di cui si ha bisogno e ha diverse interessanti funzionalità integrate.

Comando Netcat
Comando Netcat – limitare numero connessioni

 

NetCat, è una versione potente del classico programma Telnet, capace di numerose attività aggiuntive come la chat, il trasferimento di file, la scansione delle porte, il banner grabbing, l’apertura di shell remote e persino la creazione di una honey pot. Una caratteristica importante di Netcat è che può servire sia come client che come server. È bene sapere che Netcat è multipiattaforma ed è disponibile per Linux, macOS, Windows e BSD. È possibile utilizzare Netcat per il debug e il monitoraggio delle connessioni di rete, la ricerca di porte aperte, il trasferimento dati, come proxy e altro ancora. Il pacchetto Netcat è preinstallato su macOS e popolari distribuzioni Linux come Ubuntu.



Blocchiamolo.

Il seguente esempio farà cadere le connessioni in entrata se l’IP effettua più di 30 connessioni alla porta 80 entro 200 secondi.

#!/bin/bash
PA=/sbin/iptables
# Numero di secondi
SECONDI=200
# Nr massimo di connessioni per IP
RAGGIUNTOLIMITE=30
# posiamo far scaturire un DROP o  un REJECT
AZIONE=”DROP”
$PA -A INPUT -p tcp –dport 80 -i eth0 -m state –state NEW -m recent –set
$PA -A INPUT -p tcp –dport 80 -i eth0 -m state –state NEW -m recent –update –seconds ${SECONDI} –hitcount ${RAGGIUNTOLIMITE} -j ${AZIONE}

oppure ancora più brutale massimo 20 connessioni !

/sbin/iptables -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-above 20 -j REJECT –reject-with tcp-reset

 

brutale al massimo: setto il numero di connessioni totali sulla porta a 3000 e droppo

iptables -t filter -I INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-above 3000 -j DROP

E’ semplice limitare numero connessioni !

Esempio porta 22 con massimo di connessioni per ip

iptables -A INPUT -p tcp –syn –dport 22 -m connlimit –connlimit-above 3 -j REJECT