NAT con iptables: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
(Contrassegnata come compatibile solo con Squeeze (leggi discussione))
(7 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili|Debian Etch 4.0<br/>Debian Lenny 5.0<br/>Debian Squeeze<br/>Debian Sid|}}
{{Versioni compatibili | Squeeze}}
==Scenario==
==Scenario==
Abbiamo una macchina Debian che vogliamo usare come gateway per Internet, per poter fornire uno o più dei seguenti servizi:
Abbiamo una macchina Debian che vogliamo usare come gateway per Internet, per poter fornire uno o più dei seguenti servizi:
Riga 30: Riga 30:
* Modem ADSL: 172.16.200.1
* Modem ADSL: 172.16.200.1
==Installazione==
==Installazione==
In quasi tutte le versioni di Debian, il pacchetto iptables dovrebbe già essere installato, ma può esser utile controllare:
In tutte le versioni di Debian il pacchetto <code>iptables</code> è già essere installato di default. In caso non fosse presente, con [[privilegi di amministrazione]] è sufficiente eseguire:
<pre>
<pre>
# apt-get install iptables
# apt-get install iptables
</pre>
</pre>
==Configurazione - I Modo==
La prima configurazione proposta prevede l'utilizzo del pacchetto <code>ipmasq</code>, presente nei repository di Debian. Ipmasq è una collezione di script molto ben congegnata, che facilita la configurazione di un IP Masquerade su Debian GNU/Linux. L'IP Masquerade è una funzionalità del kernel di Linux che permette a un'intera rete di computer di essere connessa ad un'altra rete (quasi sempre internet) utilizzando l'indirizzo IP pubblico del gateway.<br>
Di default, ipmasq configura il sistema sul quale è installato con le seguenti funzionalità:
* protezione da IP spoofing
* protezione da stuffed routing
* connessioni permesse dalla LAN verso internet
* connessioni bloccate da internet verso la LAN
Quindi con il semplice comando:
<pre>
# apt-get install ipmasq
</pre>
risolviamo tutti i nostri problemi e otteniamo un firewall e un gateway perfettamente funzionanti.


==Configurazione - II Modo==
==Configurazione==
Tuttavia, se volessimo addentrarci in configurazioni particolari, ipmasq potrebbe starci un po' stretto. In questo capitolo vedremo pertanto come effettuare una semplice configurazione manuale di iptables.<br>
In questo capitolo vedremo come effettuare una semplice configurazione manuale di iptables.<br>
Generalmente iptables viene configurato da linea di comando e non prevede file di configurazione; il modo migliore per rendere definitive le modifiche alla configurazione e mantenerle anche dopo un riavvio del server è utilizzare uno script.<br>
Generalmente iptables viene configurato da linea di comando e non prevede file di configurazione; il modo migliore per rendere definitive le modifiche alla configurazione e mantenerle anche dopo un riavvio del server è utilizzare uno script.<br>
Il seguente script configura iptables per un servizio di routing DNAT and SNAT (Destination/Source Network Address Translation) e in più imposta una regola per accettare le connessioni entranti sulla porta 22 (SSH), dirottandole verso la macchina locale di indirizzo IP 192.168.1.200:
Il seguente script configura iptables per un servizio di routing DNAT and SNAT (Destination/Source Network Address Translation) e in più imposta una regola per accettare le connessioni entranti sulla porta 22 (SSH), dirottandole verso la macchina locale di indirizzo IP 192.168.1.200:
Riga 85: Riga 73:
exit 0
exit 0
</pre>
</pre>
Modificate gli indirizzi IP secondo le vostre esigenze e salvate il file come <code>//etc/init.d/firewall</code>.
Modificate gli indirizzi IP secondo le vostre esigenze e salvate il file come <code>/etc/init.d/firewall</code>.
A questo punto rendiamolo eseguibile con il comando:
A questo punto rendiamolo eseguibile con il comando:
<pre>
<pre>
Riga 94: Riga 82:
# update-rc.d firewall defaults
# update-rc.d firewall defaults
</pre>
</pre>
===Iptables in profondità===
===Iptables in profondità===
Lo script precedente utilizza delle variabili impostate all'inizio dello script stesso, ma possono essere specificati dei valori anche direttamente all'interno dei comandi <code>iptables</code>.<br>
Lo script precedente utilizza delle variabili impostate all'inizio dello script stesso, ma possono essere specificati dei valori anche direttamente all'interno dei comandi <code>iptables</code>.<br>
Riga 126: Riga 115:
</pre>
</pre>
Teniamo presente che, stoppando il servizio di NAT, impediremo l'accesso a internet a ogni macchina della nostra rete LAN.
Teniamo presente che, stoppando il servizio di NAT, impediremo l'accesso a internet a ogni macchina della nostra rete LAN.
<br>
 
<br>
{{Autori
--[[Utente:Ferdybassi|Ferdybassi]] 17:35, 4 gen 2010 (CET)
|Autore=[[Utente:Ferdybassi|Ferdybassi]] 17:35, 4 gen 2010 (CET)
----
}}
[[Categoria:Server]]
 
[[Categoria:Networking]]
[[Categoria:Firewall]]
[[Categoria:Sicurezza]]

Versione delle 11:33, 15 apr 2018

Edit-clear-history.png Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.

Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione.


Debian-swirl.png Versioni Compatibili

Debian 6 "squeeze"

Scenario

Abbiamo una macchina Debian che vogliamo usare come gateway per Internet, per poter fornire uno o più dei seguenti servizi:

  • Firewall
  • Transparent Proxy
  • Content Filtering
  • Routing verso un modem ADSL

La nostra rete LAN si presenta quindi in questo modo:

    INTERNET
       |
       |
   Modem ADSL
       |
       |
   Debian NAT
       |
       |
     Switch
       |
       |
    Rete LAN

Il nostro scopo è quello di utilizzare il modem ADSL per permettere a tutte le macchine della nostra rete LAN di andare in Internet, passando attraverso il firewall Debian. Inoltre sarà configurato un accesso SSH da Internet verso una macchina della nostra rete LAN.
Per tutta la guida verranno utilizzati i seguenti indirizzi:

  • Rete LAN: 192.168.1.0
  • Macchina accessibile via SSH: 192.168.1.200
  • Eth0 Debian NAT: 192.168.1.254
  • Eth1 Debian NAT: 172.16.200.254
  • Modem ADSL: 172.16.200.1

Installazione

In tutte le versioni di Debian il pacchetto iptables è già essere installato di default. In caso non fosse presente, con privilegi di amministrazione è sufficiente eseguire:

# apt-get install iptables

Configurazione

In questo capitolo vedremo come effettuare una semplice configurazione manuale di iptables.
Generalmente iptables viene configurato da linea di comando e non prevede file di configurazione; il modo migliore per rendere definitive le modifiche alla configurazione e mantenerle anche dopo un riavvio del server è utilizzare uno script.
Il seguente script configura iptables per un servizio di routing DNAT and SNAT (Destination/Source Network Address Translation) e in più imposta una regola per accettare le connessioni entranti sulla porta 22 (SSH), dirottandole verso la macchina locale di indirizzo IP 192.168.1.200:

#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=firewall
DESC="Routing - NAT - SSH"

# Indirizzo IP della eth1 del firewall
EXTERNIP="172.16.200.254"

# La macchina della rete che risponde alle richieste SSH
SSHHOST="192.168.1.200"

# Il range IP della LAN
LOCALNET="192.168.1.0/24"

case "$1" in
  start)
        iptables -t nat -A POSTROUTING -d ! ${LOCALNET} -j SNAT --to ${EXTERNIP}
        iptables -t nat -A PREROUTING --dst ${EXTERNIP} -p tcp --dport 22 -j DNAT --to-destination ${SSHHOST}
        echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
        ;;
  stop)
        echo 0 > /proc/sys/net/ipv4/conf/all/forwarding
        iptables -t nat -F
        ;;
     *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop}" >&2
        exit 1
        ;;
esac

exit 0

Modificate gli indirizzi IP secondo le vostre esigenze e salvate il file come /etc/init.d/firewall. A questo punto rendiamolo eseguibile con il comando:

# chmod +x firewall

e automatizziamolo:

# update-rc.d firewall defaults

Iptables in profondità

Lo script precedente utilizza delle variabili impostate all'inizio dello script stesso, ma possono essere specificati dei valori anche direttamente all'interno dei comandi iptables.
Il primo comando iptables che troviamo nello script è:

iptables -t nat -A POSTROUTING -d ! ${LOCALNET} -j SNAT --to ${EXTERNIP}

Il comando imposta il SNAT, cioè indirizza verso internet i pacchetti generati dalle macchine della LAN.
Vediamo di capirci qualcosa di più:

  • -t nat specifica che il tipo di regola è network address translation (NAT), cioè IP masquerading
  • -A POSTROUTING appende una regola alla catena POSTROUTING: la regola sarà processata dopo tutte le altre regole esistenti
  • -d ! ${LOCALNET} indica ogni pacchetto destinato a un indirizzo IP non facente parte di ${LOCALNET}
  • -j SNAT indica di saltare alla regola SNAT
  • --to ${EXTERNIP} specifica che ogni pacchetto che lascia la rete deve avere indirizzo IP ${EXTERNIP}

Tradotta in italiano, la regola suona più o meno così: prendi ogni pacchetto la cui destinazione è esterna alla LAN e sparalo su internet, dopo aver cambiato il suo indirizzo IP di provenienza con l'indirizzo IP del firewall Debian.

Il secondo comando iptables fa esattamente la cosa opposta: prende i pacchetti SSH che arrivano da internet, bloccando invece tutti gli altri, e li indirizza ad una macchina interna:

iptables -t nat -A PREROUTING --dst ${EXTERNIP} -p tcp --dport 22 -j DNAT --to-destination ${SSHHOST}
  • -t nat specifica che il tipo di regola è network address translation (NAT), cioè IP masquerading
  • -A PREROUTING appende una regola alla catena PREROUTING: la regola sarà processata prima di tutte le altre regole esistenti
  • --dst ${EXTERNIP} specifica il destinatario originale del pacchetto (il firewall)
  • -p tcp indica che verrà utilizzato il protocollo TCP
  • --dport 22 specifica la porta di destinazione del pacchetto
  • -j DNAT indica di saltare alla regola DNAT per effettuare la destination network address translation

Tradotta in italiano, la regola suona più o meno così: prendi ogni pacchetto TCP che arriva alla porta 22 del firewall, cambiagli l'indirizzo di destinazione e giralo all'interno della rete LAN.
Se, oltre all'accesso SSH, desideriamo fornire altri servizi su altre porte, dovremo scrivere una regola simile per ogni servizio che debba essere raggiunto dall'esterno.

Il servizio di NAT del firewall può essere avviato o stoppato con i seguenti comandi:

# /etc/init.d/firewall start 
# /etc/init.d/firewall stop

Teniamo presente che, stoppando il servizio di NAT, impediremo l'accesso a internet a ogni macchina della nostra rete LAN.




Guida scritta da: Ferdybassi 17:35, 4 gen 2010 (CET) Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized