NAT con iptables: differenze tra le versioni

nessun oggetto della modifica
(revisionata, corretti alcuni errori, modificata gerarchia titoli)
Nessun oggetto della modifica
Riga 35: Riga 35:
</pre>
</pre>
==Configurazione - I Modo==
==Configurazione - I Modo==
La prima configurazione proposta prevede l'utilizzo del pacchetto <tt>ipmasq</tt>, 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>
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à:
Di default, ipmasq configura il sistema sul quale è installato con le seguenti funzionalità:
* protezione da IP spoofing
* protezione da IP spoofing
Riga 49: Riga 49:
==Configurazione - II Modo==
==Configurazione - II Modo==
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>
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>
Generalmente iptables viene configurato da linea di comando e non prevede files 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:
<pre>
<pre>
#!/bin/sh
#!/bin/sh
Riga 85: Riga 85:
exit 0
exit 0
</pre>
</pre>
Modificate gli indirizzi IP secondo le vostre esigenze e salvate il file come <tt>//etc/init.d/firewall</tt>.
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 95: Riga 95:
</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 <tt>iptables</tt>.<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>
Riga 102: Riga 102:
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>
Vediamo di capirci qualcosa di più:
Vediamo di capirci qualcosa di più:
* <tt>-t nat</tt> 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
* <tt>-A POSTROUTING</tt> 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
* <tt>-d ! ${LOCALNET}</tt> 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>
* <tt>-j SNAT</tt> indica di saltare alla regola <code>SNAT</code>
* <code>-j SNAT</code> indica di saltare alla regola <code>SNAT</code>
* <tt>--to ${EXTERNIP}</tt> 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>
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.<br><br>
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.<br><br>
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:
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:
Riga 112: Riga 112:
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}
</pre>
</pre>
* <tt>-t nat</tt> 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
* <tt>-A PREROUTING</tt> appende una regola alla catena <code>PREROUTING</code>: la regola sarà processata prima di tutte le altre regole esistenti
* <code>-A PREROUTING</code> appende una regola alla catena <code>PREROUTING</code>: la regola sarà processata prima di tutte le altre regole esistenti
* <tt>--dst ${EXTERNIP}</tt> specifica il destinatario originale del pacchetto (il firewall)
* <code>--dst ${EXTERNIP}</code> specifica il destinatario originale del pacchetto (il firewall)
* <tt>-p tcp</tt> indica che verrà utilizzato il protocollo TCP
* <code>-p tcp</code> indica che verrà utilizzato il protocollo TCP
* <tt>--dport 22</tt> specifica la porta di destinazione del pacchetto
* <code>--dport 22</code> specifica la porta di destinazione del pacchetto
* <tt>-j DNAT</tt> indica di saltare alla regola <code>DNAT</code> per effettuare la destination network address translation  
* <code>-j DNAT</code> indica di saltare alla regola <code>DNAT</code> 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.<br>
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.<br>
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.<br><br>
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.<br><br>
6 999

contributi