Domande? Problemi?

Iscriviti al Google group:

Dnat - Destination NAT

Scopo

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

Setup

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.

NAT

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

Esercizio

  • 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 ms
  • verificate 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 refused
  • verificate 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  destination
  • aggiungete 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:80
  • dal 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.

Letture

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