Home > GNU/Linux, Sicurezza e GNU/Linux > Sicurezza e GNU/Linux (9): il firewall (seconda parte)

Sicurezza e GNU/Linux (9): il firewall (seconda parte)

Il firewall, nei sistemi GNU/Linux, è un componente del kernel chiamato Netfilter.
Netfilter è un firewall molto complesso, non tanto nel senso che è difficile da configurare (ci sono interfacce grafiche anche piuttosto semplici), quanto invece nelle sue molteplici capacità. Grazie al suo sistema modulare, infatti, è possibile fargli fare quasi di tutto. Qui vedremo solo il suo funzionamento di base.
In primo luogo, il Netfilter permette di creare delle regole (che possiamo vedere proprio come dei filtri) composte da due parti: la condizione (match) e l’azione. Se la condizione è verificata, allora viene compiuta l’azione. Ad esempio: se il pacchetto proviene dall’IP 200.201.202.203 allora gettalo (DROP). Questa regola si può inserire in Netfilter tramite l’utility iptables (che è anche il nome di uno dei componenti di Netfilter stesso):

sudo iptables -A INPUT -s 200.201.202.203 -j DROP

“INPUT” è una catena di regole. Le catene sono un altro elemento importante di Netfilter/iptables. Le regole infatti si raggruppano in catene; il tipico funzionamento è questo: quando una condizione è verificata, viene eseguita l’azione e si esce dalla catena, se invece non è verificata, l’elaborazione continua con la regola successiva.

Esempio di una catena

Il parametro -A (add) dice di aggiungere la regola alla catena predefinita INPUT, vale a dire quella per cui passano tutti i pacchetti in arrivo verso di noi. Le altre catene predefinite sono OUTPUT, per cui passano tutti i pacchetti in uscita da noi e FORWARD, dove passano i pacchetti in transito verso altre macchine, ad esempio quelle di una rete locale.
Il parametro -s sta per “source” ovvero sorgente, quindi il mittente del pacchetto.

Schema semplificato di netfilter/iptables (da http://tinyurl.com/64kbtbg )

Se volessimo bloccare le nostre connessioni verso l’IP di LinuxQualityHelp (62.149.140.153) potremmo scrivere:

sudo iptables -A OUTPUT -d 62.149.140.153 -j DROP

dove -d sta per destinazione (destination). Vediamo la situazione dopo questi due comandi:

 guido@guido-laptop:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
 target prot opt source destination
 DROP all -- 200.201.202.203 anywhere
Chain FORWARD (policy ACCEPT)
 target prot opt source destination
Chain OUTPUT (policy ACCEPT)
 target prot opt source destination
 DROP all -- anywhere webx143.aruba.it

Provo infatti a pingare http://www.linuxqualityhelp.it e ottengo

guido@guido-laptop:~$ sudo ping www.linuxqualityhelp.it
PING www.linuxqualityhelp.it (62.149.140.153) 56(84) bytes of data.
 ping: sendmsg: Operation not permitted
 ping: sendmsg: Operation not permitted

Ovviamente neppure root è autorizzato a scavalcare il firewall, sebbene root possa sempre modificare queste regole. Di solito però il firewall è su una macchina a parte, magari un router, per cui solo chi conosce le credenziali di quella macchina può accedervi.
A proposito di router: di norma i router sono piccoli computer contenenti GNU/Linux oppure sistemi embedded basati su Linux come uCLinux. In altri casi invece sono sistemi proprietari, o a volte sistemi BSD. Nel mio caso ho un router uCLinux ed infatti:

guido@guido-laptop:~$ ssh admin@192.168.1.1
admin@192.168.1.1's password:
BusyBox v0.XX (xxxxxxx) Built-in shell (ash)
 Enter 'help' for a list of built-in commands.
# cat /proc/version
Linux version 2.XX.XX_yyyyyyyy (hhhhhhh@jjjjjjjjj) (gcc version ww.qq.yyy YYYYMMDD) #1

(ho ovviamente censurato certe informazioni per mia sicurezza).

Il mio router avendo Linux ha iptables:

# iptables -L
Chain INPUT (policy ACCEPT)
 target prot opt source destination
 XXXXXXXXXXXXXXXXXXXXXXXXXX
Chain FORWARD (policy ACCEPT)
 target prot opt source destination
 XXXXXXXXXXXXXXXXXXXXXXXXXXXX
Chain OUTPUT (policy ACCEPT)
 target prot opt source destination
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Ovviamente anche qui ho censurato tutto.

Le catene sono a loro volta raggruppate in tabelle, da cui il nome iptables, e se le possono creare di nuove.

Il meccanismo di base è quindi semplice. Ma proprio per questo la configurazione può diventare molto lunga e noiosa e richiedere anche una certa conoscenza dei protocolli di rete. Inoltre, una volta riavviato, si perde tutto, per cui di norma i comandi di iptables vengono raggruppati in script, anche molto lunghi se la situazione lo richiede, e lanciati al boot.

Per fortuna, ci vengono in aiuto dei comandi semplificati e delle interfacce grafiche che saranno l’oggetto della prossima puntata.

Nel frattempo, rimuoviamo le inutili regole appena inserite:

guido@guido-laptop:~$ sudo iptables -F
[sudo] password for guido:
guido@guido-laptop:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Prendiamo nota che, di default, su Ubuntu e praticamente tutte le distribuzioni GNU/Linux, il firewall è configurato in modo da lasciare passare tutto, sia in entrata che in uscita.

Questo è solo il funzionamento di base di netfilter, che però comprende molte altre opzioni. Ma tanto basta a farci un’idea di come opera.

  1. Regulus
    26 giugno 2011 alle 17:18

    Le configurazioni contenute in sysctl.conf riguardano sempre netfilter giusto?

  2. 26 giugno 2011 alle 19:58

    Non esistono altri componenti che possono essere usati al posto di netfilter su Gnu/Linux?

  3. 26 giugno 2011 alle 22:08

    Guido, nelle tue mani GNU/Linux diventa trasparente e semplice come un bicchiere d’acqua.

  4. 1 luglio 2011 alle 9:45

    grazie Guido!

  5. PerryGi
    3 luglio 2011 alle 12:28

    Ciao Guido e grazie anche per questo post.
    Ho provato il comando “ssh admin” per verificare l’OS del router, un DLink 2640B, ma la risposta non arriva:
    pg@desktop:~$ ssh admin@192.168.1.1
    admin@192.168.1.1’s password:
    > > CLI exited after timing out

    • 3 luglio 2011 alle 12:30

      scusa la domanda banale ma… la password l’hai inserita e hai premuto invio?

  6. PerryGi
    3 luglio 2011 alle 12:40

    Beh, certo.

  7. PerryGi
    3 luglio 2011 alle 12:44

    Sono entrato da Firefox per accertarmi della PW e va tutto OK.

  8. 29 luglio 2012 alle 17:14

    Pretty! This has been an incredibly wonderful post.
    Many thanks for providing this information.

  9. 21 marzo 2014 alle 19:19

    Heyy there,You hawve done a great job. I will definitely digg it and
    personally suggest to my friends. I’m confident they wiol bbe benefited from this website.

  10. 30 agosto 2014 alle 22:45

    My partner and I absolutely love your blog and
    find almost all of your post’s to be what precisely I’m looking for.
    Does one offer guest writers to write content available ffor
    you? I wouldn’t mknd producing a post or elaborating on a number of the subjects you write about here.
    Again, awesome website!

  11. 16 settembre 2014 alle 17:43

    Hi there i am kavin, its my first occasion to commenting anyplace, when i read this article i thought i could also create comment due to this sensible
    piece oof writing.

  12. 20 settembre 2014 alle 14:08

    I am regular visitor, how are you everybody? This piece of writing posted
    at this web site is in fact fastidious.

  1. 21 luglio 2011 alle 19:52
  2. 16 settembre 2014 alle 2:29
  3. 18 settembre 2014 alle 23:35

Lascia un commento

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

Logo WordPress.com

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

Foto Twitter

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

Foto di Facebook

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

Google+ photo

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

Connessione a %s...

%d blogger cliccano Mi Piace per questo: