Prove di linux firewall

Approfittando della forzata pausa lavorativa mi sono messo a studiare il comando Iptables in Linux. Con questo comando (e ovviamente con quello che ci sta dietro) è possibile implementare un vero e proprio firewall usando una qualunque distribuzione linux.

Il lavoro per fare un firewall usando linux è ovviamente molto complesso, tantè che esistono delle vere e proprie distribuzioni, per esempio IPcop o Smoothwall o Zeroshell che facilitano non poco il compito di creazione delle regole di filtraggio, fornendo una interfaccia grafica molto più amichevole della semplice riga di comando.

Un semplice esercizio per iniziare a capire come funziona iptables potrebbe essere quello di virtualizzare un server linux (io uso per esempio la versione 6.0 di Debian virtualizzata con VirtualBox) abilitando la connessione ssh per il controllo remoto e poi iniziare a “giocare” con iptables.

Di default Linux Debian permette tutto il traffico in entrata, in uscita e in transito o come identifica iptables: INPUT, OUTPUT, FORWARD.

1) Come chiudersi fuori dal server:

IPTABLES -P INPUT DROP

IPTABLES -P OUTPUT DROP

IPTABLES -P FORWARD DROP

con questi semplici 3 comandi il server è isolato: non trasmette e non riceve traffico ovvero tutto il traffico che arriva alla scheda di rete è scartato (drop) indipendentemente che arrivi dall’esterno o dal server stesso.

2) Abilitare alemeno il traffico localhost e in uscita dal server:

IPTABLES -P INPUT DROP

IPTABLES -P FORWARD DROP

IPTABLES -P OUTPUT ACCEPT

IPTABLES -A INPUT -i lo -j ACCEPT

IPTABLES -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

come si vede leggermente più complesso. Vediamo nel dettaglio: catena di INPUT e di FORWARD droppo (scarto) tutto il traffico significa che tutto il traffico in arrivo al server o che deve transitare dal server è scartato. Catena di OUTPUT accetpt (accetto) significa che tutto il traffico che dal server esce viene accettato cioè inviato sulla rete. Ci sono però le ultime due regole che in pratica non fanno altro che aggiungere delle eccezioni al traffico in ingresso (INPUT) vediamo cosa sono: con iptables è possibile capire da quale interfaccia arriva il traffico di rete e decidere di conseguenza cosa farne. Ecco spiegato cosa significa il quarto comando: se il traffico in ingresso arriva dalla scheda di rete locale (localhost) allora esso viene accettato. Non solo iptables permette di distinguere il traffico in base all’interfaccia di rete, ma anche in base allo “stato”. Ecco spiegato il quinto comando: se il traffico di rete in ingresso arriva perchè sono stati io server a richiederlo (established) o ha qualche relazione (related) con del traffico già precedentemente accettato allora lo accetto.

In soldoni: tutto il traffico in uscita è permesso, tutto il traffico in transito è negato, tutto il traffico in ingresso è negato tranne quello generato come localhost o che io server ho richiesto.

3) abilitare il traffico localhost, in uscita e il servizio ssh in ingresso

IPTABLES -P INPUT DROP

IPTABLES -P FORWARD DROP

IPTABLES -P OUTPUT ACCEPT

IPTABLES -A INPUT -i lo -j ACCEPT

IPTABLES -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

IPTABLES -A INPUT -p tcp –dport 22 -m state –state NEW -j ACCEPT

tutto identico all’esempio 2 con l’aggiunta dell’ultimo comando. Iptables filtra il traffico anche in base alle porte ip, quindi la spiegazione dell’ultima riga è: se il traffico in ingresso al server è tcp sulla porta 22 (la porta standard del servizio ssh) ed è una nuova connessione (new) allora lo accetti.

Con 6 semplici (semplici?) comandi abbiamo costruito un  firewall (non perfetto manca ancora molto ma è già buono)  a protezione del nostro server che scarta tutte le connessioni in ingresso tranne quelle ssh (sulla porta 22), ma può navigare su internet per esempio per scaricarsi gli aggiornamenti.

Ma questo non può che essere un inizio di studio. La strada è ancora lunga.

Tags: , , ,

2 Responses to “Prove di linux firewall”

  1. […] appuntamento di studio con la creazione di un firewall linux. Nel primo post abbiamo visto una soluzione (funzionante ma incompleta) su come implementare un firewall a […]

  2. […] la prima e la seconda parte su come attivare un firewall sulla nostra distribuzione linux debian, ecco una […]

Leave a Reply