Come limitare il numero di connessioni per ip il 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.

iptables
iptables – Limitiamo numero connessioni attive per IP

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