NAT con iptables: differenze tra le versioni

m
nessun oggetto della modifica
(Aggiunto template autori)
mNessun oggetto della modifica
 
(6 versioni intermedie di 3 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili}}
{{Versioni compatibili | NO_REVISION | wheezy | jessie | stretch | buster}}
==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. Si assume si stia utilizzando unicamente il classico [[IPv4]] (riconoscibile in particolare dagli indirizzi a 32 bit nella forma 0-255.0-255.0-255.0-255), e '''non''' il nuovo [[IPv6]], per cui invece si disabilita semplicemente il ''forwarding'' (inoltro).<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 68: Riga 56:
case "$1" in
case "$1" in
   start)
   start)
         iptables -t nat -A POSTROUTING -d ! ${LOCALNET} -j SNAT --to ${EXTERNIP}
         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}
         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
         echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
Riga 74: Riga 62:
   stop)
   stop)
         echo 0 > /proc/sys/net/ipv4/conf/all/forwarding
         echo 0 > /proc/sys/net/ipv4/conf/all/forwarding
        echo 0 > /proc/sys/net/ipv6/conf/all/forwarding
         iptables -t nat -F
         iptables -t nat -F
         ;;
         ;;
Riga 94: Riga 83:
# 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>
Il primo comando iptables che troviamo nello script è:
Il primo comando iptables che troviamo nello script è:
<pre>
<pre>
iptables -t nat -A POSTROUTING -d ! ${LOCALNET} -j SNAT --to ${EXTERNIP}
iptables -t nat -A POSTROUTING ! -d ${LOCALNET} -j SNAT --to ${EXTERNIP}
</pre>
</pre>
Il comando imposta il SNAT, cioè indirizza verso internet i pacchetti generati dalle macchine della LAN.<br>
Il comando imposta il SNAT, cioè indirizza verso internet i pacchetti generati dalle macchine della LAN.<br>
Riga 104: Riga 94:
* <code>-t nat</code> specifica che il tipo di regola è network address translation (NAT), cioè IP masquerading
* <code>-t nat</code> specifica che il tipo di regola è network address translation (NAT), cioè IP masquerading
* <code>-A POSTROUTING</code> appende una regola alla catena <code>POSTROUTING</code>: la regola sarà processata dopo tutte le altre regole esistenti
* <code>-A POSTROUTING</code> appende una regola alla catena <code>POSTROUTING</code>: la regola sarà processata dopo tutte le altre regole esistenti
* <code>-d ! ${LOCALNET}</code> indica ogni pacchetto destinato a un indirizzo IP non facente parte di <code>${LOCALNET}</code>
* <code>! -d ${LOCALNET}</code> indica ogni pacchetto destinato a un indirizzo IP non facente parte di <code>${LOCALNET}</code>
* <code>-j SNAT</code> indica di saltare alla regola <code>SNAT</code>
* <code>-j SNAT</code> indica di saltare alla regola <code>SNAT</code>
* <code>--to ${EXTERNIP}</code> specifica che ogni pacchetto che lascia la rete deve avere indirizzo IP <code>${EXTERNIP}</code>
* <code>--to ${EXTERNIP}</code> specifica che ogni pacchetto che lascia la rete deve avere indirizzo IP <code>${EXTERNIP}</code>
Riga 122: Riga 112:
Il servizio di NAT del firewall può essere avviato o stoppato con i seguenti comandi:
Il servizio di NAT del firewall può essere avviato o stoppato con i seguenti comandi:
<pre>
<pre>
# /etc/init.d/firewall start  
# service firewall start  
# /etc/init.d/firewall stop
# service firewall stop
</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.
Riga 129: Riga 119:
{{Autori
{{Autori
|Autore=[[Utente:Ferdybassi|Ferdybassi]] 17:35, 4 gen 2010 (CET)
|Autore=[[Utente:Ferdybassi|Ferdybassi]] 17:35, 4 gen 2010 (CET)
|Verificata_da=
:[[Utente:HAL 9000|HAL 9000]] ([[Discussioni utente:HAL 9000|discussioni]]) 13:08, 13 mar 2021 (UTC)
|Numero_revisori=1
}}
}}


[[Categoria:Firewall]]
[[Categoria:Firewall]]
3 581

contributi