debgate> Comandi da eseguire sul
server
pc0> Comandi da eseguire sui client
Attacca eth0 in internet ed eth1 ad uno switch per la lan
Verifica se il kernel abbia installato il modulo per il MASQUERADE
debgate> modprobe ipt_MASQUERADE
Verifica se entrambe le schede eth vengono trovate
debgate> ifconfig -a
Ricevi una configurazione automaticamente (es: fastweb)
debgate> dhcpcd
oppure
debgate> dhclient eth0
per completare
debgate> ping google.com
Se funziona allora il router vede internet, primo livello superato
debgate> ifconfig eth1 192.168.0.1
pc0> ping 192.168.0.1
Se funziona allora i pc vedono il router, secondo livello superato
Tutti i pc della lan devono impostare come gateway predefinito debgate
pc0> route add default gw 192.168.10.1
Attiva il port forwarding (permetti il transito del traffico sul server)
debgate> echo 1 > /proc/sys/net/ipv4/ip_forward
I flush puliscono le tabelle del firewall
debgate>
iptables -t nat -F POSTROUTING
iptables -t nat -F
PREROUTING
iptables -F FORWARD
iptables -F INPUT
iptables
-F OUTPUT
Natta la LAN
debgate> iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
Pinga un ip xkè potrebbero esserci problemi con i dns (/etc/resolv.conf)
pc0> ping 216.239.59.104
NB: Il file /etc/resolv.conf dei client (pc0) deve essere uguale al file /etc/resolv.conf del server (debgate).
Se non funziona allora...
Segui il traffico sulla lan e controlla se arrivano pacchetti quando i client interrogano internet, se non funziona c'e' un problema di routing sui client. Potrebbe non essere settato il gateway.
debgate> tcpdump -i eth1
--Disabiltiamo il dhcp momentaneamente
mv /etc/rc2.d/S20dhcp /etc/rc2.d/K20dhcp
--Creiamo il file CONF con il testo compreso fra i trattini ----
vi /etc/init.d/CONF
--------CUT HERE-----------
#! /bin/sh
#Abilito il forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
#Carico la configurazione del firewall
iptables-restore /etc/iptables.conf
#Avvio il servizio dhcpd sull'interfaccia eth1 (rete locale!)
dhcpd eth1
--------END----------------
--Rendiamo il file eseguibile
chmod 777 /etc/init.d/CONF
--Creiamo un link simbolico, all'avvio del pc verra' caricato il file CONF
ln -s /etc/init.d/CONF /etc/rc2.d/S99CONF
--Configuriamo le due interfacce all'avvio
vi /etc/network/interfaces
------CUT HERE-------------
#Interfaccia di internet
auto eth0
iface eth0 inet dhcp
#Interfaccia locale
auto eth1
iface eth1 inet static
address 192.168.0.1
netmask 255.255.255.0
----------END--------------
--Configuriamo il server DHCP con supporto DNS
vi /etc/dhcpd.conf
---------CUT HERE----------
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.2 192.168.0.254;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
option domain-name-servers 1.253.128.10,1.253.128.11;
option domain-name "residential.fw";
}
host mangiafuoco {
hardware ethernet AA:01:02:03:0B:04;
fixed-address 192.168.0.71;
}
-------END-----------------
--Creiamo il file iptables.conf con le impostazioni di firewalling e routing
vi /etc/iptables.conf
---------------------------
# Generated by iptables-save v1.2.11
*nat
:PREROUTING ACCEPT [3:144]
:POSTROUTING ACCEPT [1:40]
:OUTPUT ACCEPT [1:40]
-A POSTROUTING -s 192.168.0.0/255.255.255.0 -j MASQUERADE
COMMIT
# Completed on Mon Jun 27 01:34:17 2005
---------------------------
iptables -P FORWARD -j DROP
Questa regola cambia la FORWARD's policy di default in DROP, se non appendiamo nessuna regola che permetta una "via di fuga" per i pacchetti, nessun pacchetto verrà forwardato dal nostro pc. Eccovi esposta un piccolo firewall con policy "paranoica" e con l'aggiunta delle sopraccitate "vie di fuga" per permettere al pc alcune transizioni indispensabili:
iptables -A INPUT -s 127.0.0.1/255.0.0.0 -j ACCEPT
iptables -A INPUT -s 194.168.0.0/255.255.255.0 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -P INPUT -J DROP
La precedente è un firewall con policy DROP in INPUT, non accetta nessun genere di pacchetto dall'esterno se non quelli espressamente specificati nelle regole della catena.
La regola n° 1 specifica che tutti i pacchetti provenienti dal nostro pc locale devono essere accettati (altrimenti iptables rifiuta anche quelli!).
La regola n° 2 specifica che tutti i pacchetti provenienti dalla nostra piccola rete LAN devono essere accettati.
La regola n° 3 lascia passare dall'esterno soltanto i pacchetti destinati sulla porta 22 di protocollo tcp (di solito quella porta è abbinanta a ssh).
La regola n° 4, quella che precede la Policy, accetta dall'esterno soltanto le risposte dei ping (detti pong). Ed infine abbiamo inserito la Policy (se l'avessimo inserita prima delle regole avremmo avuto difficoltà nell'interagire con il nostro pc... eheheh, è assurdo ma vero, iptables se vuole essere paranoico ci riesce veramente bene!), per rendere raggiungibile dall'esterno soltanto la porta 22 (almeno in INPUT ).
Una firewall semplice
Costruiamo un firewall minimalista per
soddisfare le nostre esigenze casalinghe:
iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD
dopo aver ripulito le nostre catene andiamo ad appendere le regole. Ammettiamo di avere un X server, samba e ssh come servizi attivi:
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -s
194.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 6000 -j
DROP
iptables -A INPUT -p all --dport 137:139 -j DROP
iptables -A
INPUT -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -p
icmp ! --icmp-type echo-reply -j DROP
iptables -A INPUT -p udp
--dport 33435:33525 -j DROP
iptables -A FORWARD -p tcp --syn -m limit
–limit 3/s -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags
SYN,ACK,FIN,RST RST -m limit –limit 1/s -j ACCEPT
In INPUT le prime due regole le abbiamo già analizzate in precedenza, la tre e la quattro specificano di non far passare nessun pacchetto diretto al nostro X server o a samba, la cinque rifiuta gli echo-request mentre la sei risponde solo ai echo-reply inviati dal nostro host. In FORWARD la prima regola ci protegge dai Syn-Floods, la seconda da scans remoti sospetti. Come avete notato soltanto la nostra rete LAN raggiunge tutti i servizi del nostro pc, su internet soltanto ssh è stato reso raggiungibile con delle semplici precauzioni, e il nostro pc non ha nessun problema nel compiere azioni quotidiane su internet, come chattare o prelevare le e-mails.
Salvare le regole
Una volta settato il firewall è bene
salvare le regole correnti (o attive) in modo tale da non dover
riscrivere il tutto al prossimo boot della macchina. Gli utenti di
Red hat o Mandrake possono ricorrere al seguente metodo:
/sbin/iptables-save –c > /etc/syconfig/iptables
Chi utilizza distribuzioni differenti dovrebbe dare un’occhiata agli script di init.d inerenti iptables. Per Debian basta indicare a /etc/init.d/*iptables di salvare le regole attive:
/etc/init.d/*iptables save active
Per ogni necessità consultare in /usr/share/doc/*iptables* per avere specifiche sulle metodologie di salvataggio delle regole.
Security Issue
Anche netfilter ha avuto le sue pecche per quanto
concerne l’ambito della sicurezza, ricordiamo il piccolo bug
inerente al Masquerade della rete. Un utente poteva rilevare i
computer nattati (mascherati dietro il firewall) inviando pacchetti
TCP con delle specifiche TTL. Il bug è stato risolto, chi
desidera risolvere quest’inconveniente dovrebbe patchare il
proprio netfilter (trovate l’indispensabile in
www.netfilter.org) oppure ricorrere ai ripari con la seguente regola
in OUTPUT:
iptables -A OUTPUT -m state -p icmp --state INVALID -j DROP
Questa regola evita il rilascio di informazioni “pericolse” tramite il firewall. Anche se è stato un articolo adatto ad ogni tipo di utenza, spero che ogni esigenza sia stata soddisfatta, e vi ricordo che per qualsiasi approfondimento il sito di netfilter (www.netfilter.org) mette a disposizione How-to e FAQ in lingua italiana e vari link ad altri siti dedicati ad iptables. Per chi ha avuto difficoltà con alcuni termini chiave quali, protocollo, flags, MAC ed altre terminologie presenti in questo articolo consiglio vivamente una "letturina" agli Appunti di informatica Libera (http://a2.swlibero.org/), che tenuti costantemente aggiornati dall'autore, stanno diventando una vera e propria bibbia italiana dell'informatica. Per il resto vi ricordo le man ("man iptables"), e la morale del giorno : "chi fa da se fa per tre".
NAT LAN (MASQUERADE) HOWTO
Versione 0.2 - 27 06 2005