Lo scopo di questa esperienza è di imparare ad impostare una regola di firewalling per attivare il forwarding di una porta dal firewall ad una macchina interna, ad esempio per pubblicare un sito internet avendo a disposizione solo un ip pubblico ed un server apache su una macchina senza indirizzo IP.
- iptables -t nat ... -j DNAT
- iptn = iptables -t nat -Lv ovvero quali regole abilitano il nat
il setup di questa esperienza è quasi uguale a quello delle esperienze di firewall base e di routing base, aggiugiamo solo un client fuori dalla lan, che rappresenta il pc in internet. :
- un firewall che usa una connessione tap che via l’host principale (la vostra macchina) vi permette la connessione ad internet.
- un server che deve essere connesso ad internet tramite il firewall ma che nelle condizioni iniziali non riesce neppure a contattare il firewall. In realtà non usiamo la macchina pdc che occuperebbe inutilmente memoria ed attiverebbe servizi inutili. Utilizzaremo ancora una immagine debian etch.
- un client fuori dalla lan
Il file principale su cui dovete concentrarvi è /etc/argo/fw.add che contiene la configurazione del firewalling.
Il nat (network address translation) si divide in due tipi:
- DNAT: destination nat che avviene prima del ROUTING e quindi sta
nella catena di PRERROTING e
- SNAT: source nat che avviene dopo e quindi sta nella catena di
POSTROUTING
per vedere quali catene siano attive e con quali regole si usa il comando:
iptables -LV -n -t nat
o, in Argo, il suo alias iptn. Tenete conto che un pacchetto che venda DNAT-tato viene inoltrato se anche le regole di forwarding lo permettono. Le regole di forwarding stanno nella tabella di filtering di iptables.
La direttiva dnat1 del pacchetto firewall permette di ottenere le due core in un sol colpo:
dnat1 $EXT 172.16.0.2 192.168.10.1 tcp 80
ottiene di:
- applicare il dnat alla porta 80
- aggiungere una regola alla catena di firewall
verificate che apache2 non gira sul firewall e gira sul pdc (ps ax|grep apache2)
verificate che dal client potete pingare il firewall:
cli:~# ping 172.16.0.2 PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data. 64 bytes from 172.16.0.2: icmp_seq=1 ttl=64 time=17.7 ms 64 bytes from 172.16.0.2: icmp_seq=2 ttl=64 time=0.524 msverificate che dal cient non raggiungete un server web:
cli:~# telnet 172.16.0.2 80 Trying 172.16.0.2... telnet: Unable to connect to remote host: Connection refusedverificate che la tabella di nat è vuota: iptn:
fw:~# iptn PREROUTING Chain PREROUTING (policy ACCEPT 6 packets, 432 bytes) pkts bytes target prot opt in out source destinationaggiungete la regola sopra scritta nel /etc/argo/fw.add
firewall restart
riguardate la tabella di nat:
fw:~# iptn Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 DNAT tcp -- eth0 * 0.0.0.0/0 172.16.0.2 tcp dpt:80 to:192.168.10.1:80dal client:
cli:~# telnet 172.16.0.2 80 Trying 172.16.0.2... Connected to 172.16.0.2. Escape character is '^]'.Questa è la corretta risposta che il server è in ascolto.
le medesime dell’esperienza di base sul Firewall base. Particolarmente utile è la lettura dell’HOWTO di Rusty Russel (autore di iptables) sul natting disponibile anche in formato pdf