Come limitare il numero di connessioni per ip in linux .
Difendiamoci .
Nei precedenti articoli , ho mostrato alcuni tipi di attacco che possono compromettere un server o un pc . Nella maggior parte degli attacchi (almeno quelli più semplici e di certo molto frequenti in rete), si tenta sempre di consumare le risorse della macchina target sino a portarla al blocco o causare un’eccezione da sfruttare.
Uno dei metodi per impedire il successo ad un numero considerevole di attacchi, è quello di limitare il numero di connessioni aperte per singolo ip o segmento di rete.
Il mezzo mediante il quale è possibile raggiungere questo risultato è l’utilizzo iptables. In linux è di una semplicità e potenza che non ha uguali.
Immaginiamo che un attaccante voglia consumare tutte le ns connessioni in risposta al nostro sito web porta 80 o 443 che sia. Anche un bambino con un semplice loop di nc butterebbe giù un sito web in pochi minuti scrivendo il loop al momento.
L’utilità nc (o netcat) è usata per connessioni che coinvolgono sia TCP che UDP. Può aprire connessioni TCP, inviare pacchetti UDP, ascoltare su porte TCP e UDP arbitrarie, fare la scansione delle porte e lavorare sia con IPv4 che con IPv6.
Mi raccomando fate le prove quando siete connessi in console virtuale o fisica.
Vediamo come limitare il numero di connessioni per ip
Esempio per la porta 80
iptables -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-above 20 –connlimit-mask 24 -j REJECT –reject-with tcp-reset
–connlimit-above 20 = al di sotto di 20 non far nulla… ma 20 potrebbero essere pochini …… io di solito pongo a 150
–connlimit-mask 24 = tutti i 254 indirizzi ip altrimenti mettete 32 per singolo ip
–dport 80 = Nr della porta. Potete specificare qualsiasi nr porta
se volete fare uno “scriptino” da lanciare da root che utilizza un intervallo di tempo
#!/bin/bash
T=/sbin/iptables
# Intervallo di tempo
SECONDI=100
# Nr Massimo connessioni per IP
CONTATORE=10
# puoi utilizzare DROP o REJECT
AZIONE=”DROP”
$T -A INPUT -p tcp –dport 80 -i eth0 -m state –state NEW -m recent –set
$T -A INPUT -p tcp –dport 80 -i eth0 -m state –state NEW -m recent –update –seconds ${SECONDI} –hitcount ${CONTATORE} -j ${AZIONE}
p.s.
se fate qualche errore e si blocca tutto:
iptables -F
e ripulite completamente iptables
E’ buona norma limitare il numero di connessioni per ip , sempre. Iniziamo da valori alti e andiamo a scalare sempre più sino a raggiungere un sano compromesso.
per vedere cosa è stato inserito in iptables
sudo iptables -L -nv