Proteggiti da attacchi DoS e DDoS

APF-Firewall Server Protection

APF-Firewall Server Protection

Proteggere il server dagli attacchi DoS e DDoS 

Un attacco DoS (Denial of Service), ha come scopo il rendere inutilizzabile un determinato servizio sul web, inondandolo di richieste fittizie, quindi qualsiasi servizio esposto su internet che fornisce servizi di rete basati sul protocollo TCP/IP e soggetto al potenziale rischio di attacchi DoS. La differenza tra DoS e DDoS (Distributed Denial of Service) sta nel numero di macchine (PC, server, cellulari, in generale, qualsiasi dispositivo connesso ad internet che sia stato compromesso) utilizzate per lanciare l’attacco. Nel caso di un DoS l’attacco avviene da una sola macchina, mentre (nel ben piu difficile caso da bloccare) nel DDoS l’attacco puo avvenire contemporaneamente da centinaia di macchine diverse.

Come potrete quindi immaginare tutti i consigli contenuti in questo articolo non vi assicureranno una protezione totale contro i DDoS, perché quando sono ben organizzati e l’attacco arriva da un grande numero di macchine diverse, l’unico modo per cercare di bloccarlo o più realisticamente, mitigarlo, è agire a monte, direttamente sull’infrastruttura del vostro provider (che quindi dovrete contattare), a meno che non abbiate una vostra infrastruttura di rete.

Come riconoscere un attacco ?

Questa è sicuramente la prima cosa da imparare, ossia imparare a riconoscere un attacco DoS, perche’ tante volte si corre il rischio di pensare ad un attacco di questo tipo appena i servizi ospitati sul server risultano irraggiungibili, quando invece le cose più probabili sono ben altre.
Innanzitutto se siete sotto attacco vedrete sicuramente un picco (che può variare da pochi a diversi mbit/s) nei vostri grafici della banda utilizzata, ed un picco nelle connessioni netstat, anche per questo sarebbe bene generare dei grafici di tutto rispetto magari tramite Munin (di cui parleremo nel prossimo articolo) o con Vnstat, i servizi più importanti sul vostro server.

Una volta accertato che ci sono effettivamente picchi anomali nell’utilizzo della banda, usate questo comando per visualizzare lo stato di tutte le connessioni attive sul vostro server:

netstat -nat | awk ‘{print $6}’ | sort | uniq -c | sort –n

L’output sarà qualcosa del genere:

1 CLOSING

1 established

1 Foreign

7 LAST_ACK

25 FIN_WAIT1

26 LISTEN

69 FIN_WAIT2

484 TIME_WAIT

542 ESTABLISHED

Se notate che ci sono diverse connessioni in stato SYS_SENT siete sicuramente sotto attacco, a questo punto non resta altro da fare che individuare l’IP o gli IP dai quali arrivano più connessioni, potete farlo con questo comando:

netstat -atun | awk ‘{print $5}’ | cut -d: -f1 | sed -e ‘/^$/d’ |sort | uniq -c | sort –n

A questo punto avrete una lista ordinata per numero di connessioni aperte da ogni IP, ed alla fine, molto probabilmente, avrete gli IP delle macchine dalle quali vi stanno attaccando, ora non resta che bloccare questi IP.
Una utility molto utile per analizzare il traffico di rete e vederlo in tempo reale è tcptrack, una volta installata usate i seguenti comandi per avviare il monitoring:

tcptrack -i eth0 vi mostrerà tutto il traffico attivo sulla scheda di rete

tcptrack -i eth0 port 80 vi mostrerà tutto il traffico sulla porta 80

Es:

tcptrack -i eth0 src or dst 192.168.2.138

vi mostrerà tutto il traffico generato dall’ip specificato. In più tcptrack vi mosterà in tempo reale l’utilizzo della banda.

Bloccare un attacco

Ora che sappiamo individuare un attacco e capire da quali IP sta arrivando possiamo cercare di bloccarlo, vediamo come.
Premesso che la cosa migliore sarebbe comunicare gli IP degli attaccanti al vostro provider così che possano essere bloccati a monte e che non possano quindi influire neanche minimamente sulla vostra banda disponibile, esistono principalmente due metodi per bloccare questi IP sul vostro server: bloccarli con iptables, oppure metterli in nullroute (che è, secondo me, preferibile).

Per bloccare questi IP da itptables potete usare questo semplice comando:

iptables -A INPUT -s IP-ATTACCANTE -j DROP

Invece, per mettere un IP in nullroute, dobbiamo lanciare questo comando:

route add IP-ATTACANTE gw 127.0.0.1 lo

Possiamo anche mettere in nullroute un’ intera subnet ad esempio così:

route add -net 192.168.2.0/24 gw 127.0.0.1 lo

Verifichiamo quindi che i settaggi siano stati effettivamente applicati con

netstat -nr

Per rimuovere il nullroute possiamo utilizzare il comando route delete IP

Per far sì che i nullroute impostati vengano mantenuti al reboot dovrete scrivere gli stessi comandi di prima nel file /etc/rc.local


Come prevenire gli attacchi

Fin’ora abbiamo visto come comportarci una volta sotto attacco, ora vediamo cosa possiamo fare per evitare di trovarci coi servizi down e doverli ripristinare.
Per prima cosa consiglio di installare APF (Advanced Policy Firewall), un firewall basato su iptables che bloccherà autonomamente molti degli attacchi conosciuti, confrontandone i pattern, in più, grazie alla sua semplice e versatile configurazione diventa un’ottimo sostituto di iptables che spesso risulta abbastanza macchinoso da mantenere.

Potete installare APF usando un packet manager tipo apt o yum, oppure compilando l’ultima versione :

Scaricate l’ultima versione stabile:

wget http://www.rfxnetworks.com/downloads/apf-current.tar.gz

Scompattate il file appena scaricato: tar -xvzf apf-current.tar.gz

Entrate nella directory creata ed eseguite ./install.sh

A questo punto APF va configurato a dovere e, per farlo, bastera’ editare il file /etc/apf/conf.apf .

Per prima cosa bisognera’ settare il parametro DEVEL_MODE a 1, così se sbagliate qualche settaggio e vi chiudete fuori dal server, dopo 5 minuti il firewall verrà automaticamente stoppato.

Questo parametro indica se apf è in modalità sviluppo (e quindi non applica le regole) o in modalità produzione e quindi rende effettive le regole del firewall, prima di impostarlo a 0 per renderlo attivo modifichiamo il resto delle regole altrimenti rischiamo di chiuderci fuori dal server

Impostiamo le porte in ascolto modificando il paramentro IG_TCP_CPORTS

# Common inbound (ingress) TCP ports
IG_TCP_CPORTS="22,21,20,80,25,53,110,143,443,2222,587,953,993,995,4949"

io utilizzo queste impostazioni che sono per i servizi ssh,ftp,web,mail (pop/imap/smtp), directadmin e munin

e queste sono le impostazioni per le porte in uscita
# Common outbound (egress) TCP ports
EG_TCP_CPORTS="21,25,80,443,43"

e poi più sotto impostiamo a “1″ le seguenti variabili che ci permettono di scaricare delle liste di ip conosciuti come malevoli in modo da filtrare a priori il loro traffico

DLIST_PHP="1"
DLIST_SPAMHAUS="1"
DLIST_DSHIELD="1"
DLIST_RESERVED="1"

Ricordatevi di rimettere su 0 questo parametro una volta terminata la configurazione, altrimenti il firewall funzionerà solo per 5 minuti ad ogni riavvio.

Settate su 1 tutti i parametri che abilitano le liste di network malefici dai quali le connessioni saranno rifiutate (DLIST_*).

Settate manualmente le porte TCP che devono rimanere aperte nella variabile IG_TCP_CPORTS (ad esempio la 80 per il traffico web, se avete modificato la porta di ssh come avreste dovuto fare ricordatevi di settarla qua, altrimenti vi chiuderete fuori dal server), tutte le altre risulteranno chiuse.

Stessa cosa per le porte UDP subito sotto, se ne fate uso.

Impostando il parametro SYSCTL_SYNCOOKIES su 1, vi proteggerà dagli attacchi di tipo syn flood.

salviamo ed avviamo apf con

apf -s

#Proteggiti#AttacchiDoSeDDoS

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.