Come configurare il nostro firewall

 

FIREWALL

 

Prima di cominciare vale la pena di spendere due parole sui requisiti di firewall e di un IDS (Intrusion Detection System).

Usare Linux come firewall e IDS per la vostra rete è possibile, anche se esiste hardware dedicato in commercio (router e altro) che incorporano spesso tali funzioni e sono in grado di assicurare una maggiore efficienza del servizio.

 

Che cos'è un firewall e come funziona

In una rete le informazioni scambiate possono essere di varia natura e non sempre un dato nodo può voler consentire che queste informazioni siano visibili a tutti gli altri nodi della rete o ricevere informazioni di ongi tipo dagli altri nodi.

Il compito del firewall è quello di filtrare le informazioni uscneti ed entranti da un nodo , stabilendo quali informazioni vengono accettate da quali nodi e quali informazioni personali condividere con altri nodi della rete.

Un firewall è un sistema che consente di filtrare le informazioni scambiate fra voi e il mondo esterno. Tale filtro opera su ogni pacchetto che entra ed esce dal vostro sistema e pertanto una volta stabilite le regole su cosa far passare e cosa eliminare sarà il firewall ad occuparsi di tutto.

Pertanto il vostro compito sarà quello di stabilire che cosa su un sistema può essere lasciato passare e che cosa invece deve essere scartato poichè non sicuro o non indispensabile.

Un sistema anti-intrusione è un sistema in grado di ispezionare tutti i pacchetti che transitano per il vostro sistema (lo stack TCP-IP) e selezionare quelli potenzialmente sospetti in base ad un insieme di regole stabilite internamente nel software.

Il programma più comunemente diffuso in Linux è snort.

Tale sistema IDS avverte l'amministratore dell'host sugli eventuali tentativi di intrusione nella vostra rete in quanto ha l'abilità di catturare tutti i pacchetti che transitano per la vostra scheda di rete (non soltanto quelli indirizzati direttamente al vostro host,ma anche quelli che passano per il vostro host prima di arrivare alla destinazione finale).

Questa modalità viene chiamata promiscua e consente di rilevare i tentativi di intrusione su tutto il perimetro che delimita la vostra LAN.

Pertanto se un host viene violato l'IDS rileva tale violazione segnalandola in un file di log (/var/log/snort/alert).

 

Cosa configurare in un firewall

 

Firewall di tipo packet filter

Quindi le regole dei filtri possono basarsi su:

Indirizzo IP del mittente

 

Indirizzo IP del destinatario

 

Porta sorgente

 

Porta di destinazione

 

Flags

Inoltre possono basarsi su

Interfaccia di ingresso del pacchetto

 

Interfaccia di uscita del pacchetto

Tipi di firewall :

Packet filter''' : Lavora a livello 3 modello OSI (network)

 

Proxy firewall''' : Lavora a livello 7 modello OSI (application)

 

Un pò di strategie elementari

Cosa serve per costruire un sistema di difesa :

Fare un elenco completo dei servizi che devono essere accessibili dalla rete

 

Fare un elenco di situazioni particolare

La migliore strategia di difesa è :

Si blocca tutto e si lascia passare solo quei pacchetti diretti verso servizi pubblici

 

Installazione

Non dovete installare niente per il firewall in quanto tutto ciò di cui avete bisogno è il pacchetto iptables che fa parte integrante del kernel del vostro sistema Linux.

Tuttavia è bene conoscere i moduli da caricare perchè il kernel Linux supporti il firewalling con iptables.

Questi sono :

IP : advanced router

 

IP : policy routing

 

IP : netfilter

 

IP : TCP syncookie support

 

Connection tracking

 

IP tables support

 

Netfilter MARK match support

 

Connection state match support

 

Packet filtering

 

Full NAT

 

Packet mangling

Se dovete caricarli a mano con il comando modprobe i nomi dei moduli da caricare sono i seguenti :

Ip_tables

 

Iptable_nat

 

Ip_conntrack

 

Ip_conntrack_ftp

 

Ip_nat_ftp

 

Ipt_MASQUERADE

 

Per installare invece il vostro sistema di rilevamento delle intrusioni aprite una shell ed al prompt dei comandi digitate

#sudo apt-get -y install snort

Questo installerà i pacchetti necessari per il servizio anti-intrusione.

L'opzione -y di apt-get non chiede la conferma per le azioni legate al processo di installazione del software.

Apt installerà pertanto freeradius risolvendo automaticamente le dipendenze necessarie ed avviando il sistema anti-intrusione nella configurazione di default.

Durante la configurazione di snort vi varranno richieste le seguenti informazioni :

* su quale interfaccia di rete ascoltare (eth0 per hosts con 1 interfaccia di rete locale)

* quale rete considerare come trusted (ovvero come fidata) . Se non sapete cosa fare immettete any , in tal modo il vostro IDS considererà come sospetti anche i pacchetti provenienti dalla vostra LAN.

* a chi indirizzare i report del vostro IDS via email (di norma dovrebbe essere root)

A questo punto il vostro sistema IDS è già configurato e perfettamente funzionante , mentre per configurare correttamente il vostro firewall passiamo alla sezione successiva.

 

Configurazione del firewall con iptables

Il comando principale per la configurazione del vostro firewall è iptables.

La struttura di un comando iptables è la seguente :

#iptables -t table command chain rule-specification [options]

Impareremo ad usarlo esaminandone le principali opzioni.

Innanzitutto per esaminare le regole presenti sul vostro sistema utilizzate l'opzione -Lcome segue :

#sudo iptables -L

comparirà l'elenco delle regole del vostro firewall. Fate attenzione alle policy di ogni regola (le catene di default sono 3 , INPUT , FORWARD e OUTPUT corrispondenti ai 3 flussi di dati in ingresso , attraverso e in uscita dal vostro sistema). Se il vostro sistema non ha firewall dovreste vedere che le rule's policies sono impostate ad ACCEPTovvero che tutto il traffico è permesso da , verso e attraverso il vostro sistema.

Un'altra opzione utile nel caso in cui vogliate reimpostare le regole del vostro firewall è-F :

#sudo iptables -F

che azzera tutte le regole presenti nel vostro firewall , anche se non reimposta al valore di default le policies (pertanto se la vostra policy è DROP resterà DROP anche dopo l'applicazione del comando).

 

Tutte le opzioni di iptables

Comandi di iptables :

-A : append

 

-D : delete

 

-C : check

 

-I : insert

 

-R : replace

 

-F : flush

 

-L : list

 

-N : new

 

-X : erase user-defined chain

 

-P : policy

 

-E : chain renaming

 

-h : help

Opzioni di iptables :

-p protocol

 

-s address

 

-d address

 

-i inputinterfacename

 

-o outputinterfacename

 

-j target (ACCEPT,DROP.QUEUE,RETURN)

 

-v

 

--sport

 

--dport

 

--tcp-flags

 

--syn

 

--icmp-type ICMP type

 

--mac-source mac-address

 

--limit rate

 

--limit-burst number

 

--port

 

--state state

 

--tos tos

Iptables targets :

MARK

 

LOG

 

REJECT

 

TOS

 

MIRROR

 

SNAT

 

DNAT

 

MASQUERADE

 

REDIRECT

 

Un esempio pratico di configurazione di firewall

A questo punto passiamo ad esaminare le regole di un semplice firewall.

Le policies richieste sono le seguenti :

Rete interna : 209.191.169.128/25

 

Rete esterna : 209.191.169.0/25

 

Bastion host : foo con eth0 (209.191.169.1) e eth1(209.191.169.129)

 

Progettazione :

Criterio predefinito : DENY

 

Anonymous FTP : interno (port forward attraverso firewall verso 209.191.169.135)

 

http : interno (port forward attraverso firewall verso 209.191.169.136 alla porta 8080

 

https sulla porta 443 non viene offerto)

 

Ssh : rifiuto e logging di telnet

 

Smtp : interno (port forward attraverso firewall verso 209.191.169.137)

 

Popd : interno (port forward attraverso firewall verso 209.191.169.137)

 

DNS : solo interno

 

nntp : no accesso dall'interno

 

Ping in ingresso eliminato

 

Implementazione dei criteri :

Esame regole sistenti e reset. I comandi da eseguire come root sono i seguenti

#iptables -F

 

#iptables -t mangle -F

 

#iptables -t nat -F

 

#iptables -X

 

#iptables -t mangle -X

 

#iptables -t nat -X

 

Per effettuare il Blocco del ping in ingresso vengono eseguiti i comandi :

#iptables -N scans

 

#iptables -A scans -m state -state INVALID -j DROP

 

#iptables -A scans -m unclean -j DROP

 

#iptables -A scans -p icmp -icmp-type echo-request -i eth1 -j DROP

 

#iptables -A INPUT -j scans

 

#iptables -A FORWARD -j scans

 

Passare traffico dall'interno all'esterno :

#iptables -N passthis

 

#iptables -N blockthis

 

#iptables -A passthis -s 209.191.169.1/25 -p icmp -i eth0 -j ACCEPT

 

#iptables -A passthis -s 209.191.169.1/25 -p tcp -sport ! 119 -d 0/0 -i eth0 -j ACCEPT

 

#iptables -A blockthis -s 209.191.169.1/25 -p tcp -sport 119 -j REJECT -reject-with-icmp-port-unreachable

 

#iptables -A FORWARD -j passthis

 

#iptables -A OUTPUT -j passthis

 

Blocco servizi telnet e imap :

#iptables -A blockthis -i eth1 -s 0/0 -d 209.191.169.1/25 -p tcp -sport 23 -j DROP

 

#iptables -A blockthis -i eht1 -s 0/0 -d 209.191.169.1/25 -p tcp -sport imap -j DROP

 

#iptables -A FORWARD -j blockthis

 

Accetta DNS , ssh :

#iptables -I passthis 1 -m state -state ESTABLISHED,RELATED -j ACCEPT

 

#iptables -A passthis -i eht0 -p tcp -s 209.191.169.1/25 -d 0/0 -dport domain -j ACCEPT

 

#iptables -A passthis -i eth0 -p udp -s 209.191.169.1/25 -d 0/0 -dport domain -j ACCEPT

 

#iptables -N passthisin

 

#iptables -I passthisin blockthis

 

#iptables -A passthisin -p tcp -dport 22 -j ACCEPT

 

#iptables -A blockthis -i eht1 -p tcp -dport 6000:6010 -j DROP

 

#iptables -A blockthis -i eht1 -p udp -dport 111 -j DROP

 

#iptables -A passthis -p tcp -m multiport -dport 25,110 -i !eth1 -j ACCEPT

 

Criteri predefinit per DROP :

#iptables -P FORWARD DROP

 

#iptables -P INPUT DROP

 

Inoltro traffico a server mail e http :

#iptables -t nat -A PREROUTING -p tcp -dport 21 -j DNAT -to-destination 209.191.169.135

 

#iptables -t nat -A PREROUTING -p tcp -dport 80 -j DNAT -to-destination 209.191.169.136:8080

 

#iptables -t nat -A PREROUTING -m multiport -p tcp -dport 25,110 -j DNAT -to-destination 209.191.169.137

 

Ottimizzazioni

 

Minimo ritardo per traffico http , telnet e ssh :

#iptables -t mangle -A PREROUTING -m multiport -p tcp -dport 80,23,22 -j TOS -set-tos 16

 

#iptables -t mangle -A PREROUTING -m multiport -p tcp -sport 80,23,22 -j TOS -set-tos 16

 

Massima velocità trasmissione per FTP :

#iptables -t mangle -A PREROUTING -p tcp -dport ftp-data -j TOS -set-tos 8

 

Massima affidabilità per SMTP :

#iptables -t mangle -A PREROUTING -p tcp -dport smtp -j TOS -set-tos 4

 

Minimo costo per pop3 :

#iptables -t mangle -A PREROUTING -p tcp -dport 110 -j TOS -set-tos 2

 

Anti-spoofing rules :

#iptables -I FORWARD -i eth1 -s 192.168.0.0/24 -j DROP

 

#iptables -I FORWARD -i eht1 -s 127.0.0.0/8 -j DROP

 

#iptables -I INPUT -i ! Lo -s 127.0.0.1 -j DROP

 

Non dimentichiamoci di abilitare il forwarding altrimenti niente potrà passare attraverso il nostro firewall. Per farlo usiamo i seguenti comandi :

Echo 1 > /proc/sys/net/ipv4/ip_forward

 

Echo 1 > /proc/sys/net/ipv4/conf/rp_filter/all

 

Traduzione e mascheramento degli indirizzi di una LAN

In questo paragrafo introdurremo i concetti di traduzione degli indirizzi di rete e di mascheramento.

Spesso vi siete chiesti come è possibile che gli hosts di una LAN possano navigare in Internet pur avendo indirizzi IP privati (ovvero non ufficialmente validi nella rete mondiale).

Questo è possibile attraverso il meccanismo di "natting" , ovvero di traduzione degli indirizzi degli hosts privati in un indirizzo IP pubblico , e precisamente quello dell'host che fa da gateway verso Internet per la vostra LAN.

Allo stesso tempo vi sarete chiesti come può il vostro server di Web aziendale essere visibile e ragigungibile anche da Internet pur stando su LAN (ed avendo pertanto indirizzo IP privato).

Anche in questo caso interviene il "natting" , in modo che l'indirizzo IP del destinatario venga modificato da quello del gateway a quello (privato) del vostro server Web interno alla LAN.

Il primo meccanismo prende il nome di SNAT ( Source Network Address Translation , ovvero traduzione degli indirizzi dei mittenti), mentre il secondo prende il nome diDNAT (Destination NAT , oovvero traduzione degli indirizzi dei destinatari).

Vediamo come è possibile eseguire il SNAT ed il DNAT attraverso 2 semplici esempi.

 

SNAT

Dobbiamo fare in modo che tutto il traffico della nostra LAN sembri originato dall'interfaccia eth0 dell'host con indirizzo IP 209.127.112.150.

il comando da eseguire per effettuare il SNAT è :

#iptables -t nat -A POSTROUTING -o eth0 -j SNAT -- to 209.127.112.150

Tutto il traffico proveniente dalla intranet appare agli hosts su Internet come generato dall'IP 209.127.112.150

Ricordate sempre che quando si esegue il SNAT va utilizzata la chain POSTROUTING (il pacchetto viene modificato dopo essere stato processato dal kernel).

 

DNAT

Dobbiamo fare in modo che tutti i pacchetti indirizzati verso la porta 80 del nostro gateway vengano redirezionati al server Web interno alla LAN (indirizzo IP 192.168.0.2).

il comando da eseguire per effettuare il DNAT è :

#iptables -t NAT -A PREROUTING -p tcp -dport 80 -i eth0 -j DNAT - - to 192.168.0.2:80

Tutto il traffico in ingresso verso la Intranet diretto sulla porta 80 appare come generato dalla porta 80 dell'IP 192.168.0.2

Ricordate sempre che in caso di DNAT è necessario applicare sempre la chain PREROUTING (il pacchetto viene modificato prima di venir processato dal kernel).

 

Un caso particolare , IP-MASQUERADING

L'IP masquerading è un sistema che permette agli hosts di una LAN di navigare in Internet attraverso la traduzione del loro indirizzo IP privato in quello pubblico del gateway.

E' pertanto un caso particolare di SNAT.

Vediamo come si fa :

#iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0 -s 192.168.0.0/24 -d 0/0

questo comando dice al firewall di "mascherare" l'IP del mittente (hosts appartenenti alla subnet 192.168.0.0/24) con quello del gateway per tutto il traffico diretto all'esterno che passa attraverso l'interfaccia esterna del gateway (indicata qui con ppp0 , un modem ADSL).