Apache su Linux: Come limitare il Numero di Richieste per IP e ridurre il rischio di attacchi DOS

 

Capita a volte che qualche furbone voglia scaricare a tutti i costi con uno script, le immagini dei prodotti nello store di un vostro cliente senza preoccuparsi minimamente delle conseguenze che questo possa comportare.

Se il furbone in questione poi crea uno script che in loop legge l’elenco dei prodotti e ne prende l’ n+1 elemento, il DB potrebbe avere dei seri problemi se la pagina ha molti prodotti e potrebbe arrivare alla saturazione se si supera il limite di connessioni disponibili.

Per correre ai ripare e prevenire quanto più possibile quello che potrebbe tranquillamente definirsi un’attacco DOS ci sono molti sistemi.

E’ possibile ad esempio inibire l’accesso al server web se nell’arco di N secondi sono state stabilite X connessioni.
Per realizzare questo blocco, basta intervenire sul firewall interno iptables come indicato di seguito:

 

iptables -A FORWARD -m state --state NEW -m recent --rcheck --seconds 600 --hitcount 5 --name IPCONNECTION --rsource -j REJECT --reject-with icmp-port-unreachable 

iptables -A FORWARD -d 192.168.0.1/32 -o eth1 -p tcp -m tcp --dport 80 -m recent --set --name IPCONNECTION --rsource -j ACCEPT

Modificando i parametri –seconds  e –hitcount sarà possibile definire il limite massimo di nuove connessioni per IP (–hitcount) in un lasso di tempo (–seconds ).

Il funzionamento è il seguente:

  1. Iptables verifica se l’indirizzo IP del client è presente nel file /proc/net/ipt_recent/IPCONNECTION già 5 volte negli ultimi 600 secondi  e se la richiesta sia di una nuova connessione . Se è così la richiesta viene scartata e nessuna connessione viene stabilita
  2. Se la condizione al punto 1 non è soddisfatta, iptables verifica se il chiamante vuole connettersi alla porta 80, permette la connessione e scrive nel file /proc/net/ipt_recent/IPCONNECTION l’indirizzo IP e timestamp del chiamante per la verifica  successiva

 

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.