3 581
contributi
(da adottare, ipmasq non più presente + verifica necessaria) |
mNessun oggetto della modifica |
||
(5 versioni intermedie di 3 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{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 | 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 | ==Configurazione== | ||
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 | 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 | 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 | * <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> | ||
# | # service firewall start | ||
# | # 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]] |
contributi