Molte organizzazioni sono soggette, dai loro ISP, ad un numero limitato di indirizzi IP direzionabili pubblicamente. A causa di questa restrizione, gli amministratori devono trovare un modo diverso per condividere l'accesso ai servizi di Internet, senza conferire indirizzi IP limitati ad ogni nodo presente sulla LAN. Un modo comunemente usato è quello di un indirizzo IP privato, in modo da permettere a tutti i nodi sulla LAN di accedere in modo corretto ai servizi della rete sia interni che esterni. Gli Edge router (come ad esempio i firewall) possono ricevere da Internet, le trasmissioni in entrata e direzionare i pacchetti al nodo LAN specifico; allo stesso tempo i firewall/gateway possono direzionare le richieste in uscita da un nodo della LAN al servizio remoto di Internet. Questo inoltro di traffico della rete alle volte può essere pericoloso, soprattutto con la disponibilità di tool moderni, capaci di eseguire delle azioni di spoof nei confronti di indirizzi IP interni, e rendere la macchina di un aggressore remoto, comportarsi come un nodo sulla vostra LAN. Per evitare tutto questo, iptables fornisce delle policy di forwarding e di routing, che possono essere implementate per prevenire un uso improprio delle risorse della rete.
La policy FORWARD permette ad un amministratore di controllare dove vengono diretti i pacchetti all'interno di una LAN. Per esempio, per abilitare il forwarding per l'intero LAN (assumendo che il firewall/gateway ha un indirizzo IP interno su eth1), possono essere impostate le seguenti regole:
iptables -A FORWARD -i eth1 -j ACCEPT iptables -A FORWARD -o eth1 -j ACCEPT |
Questa regola conferisce ai sistemi situati dietro un firewall/gateway, la possibilità di accedere alla rete interna. Il gateway direziona i pacchetti da un nodo LAN alla sua destinazione prevista, passando tutti i pacchetti attraverso il proprio dispositivo eth1.
![]() | Nota Bene | |||
|---|---|---|---|---|
Per default, la policy IPv4 nei kernel di Red Hat Enterprise Linux, disabilita il supporto per l'inoltro IP, il quale evita alle macchine che eseguono Red Hat Enterprise Linux di non comportarsi come dei router. Per abilitare l'inoltro IP, eseguire il seguente comando:
Se questo comando viene eseguito da un prompt della shell l'impostazione non viene mantenuta dopo il riavvio. Potete impostare l'inoltro in modo permanente modificando il file /etc/sysctl.conf. Trovate e modificate la seguente riga, sostituendo 0 con 1:
Eseguite il seguente comando per abilitare il cambiamento sul file sysctl.conf:
|
Accettando i pacchetti inoltrati tramite il dispositivo IP interno, si abilita la comunicazione tra i nodi LAN; tuttavia essi non sono ancoraabilitati a comunicare esternamente con Internet. Per abilitare i nodi LAN con indirizzi IP privati alla comunicazione con le reti pubbliche esterne, configurate il firewall per l'IP masquerading, il quale maschera le richieste provenienti dai nodi LAN con l'indirizzo IP dei dispositivi esterni del firewall (in questo caso, eth0):
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE |
La regola utilizza il NAT packet matching table (-t nat), e specifica la catena POSTROUTING interna per NAT (-A POSTROUTING), sul dispositivo networking esterno del firewall (-o eth0). POSTROUTING permette ai pacchetti di essere modificati quando gli stessi abbandonano il dispositivo esterno del firewall. Il target -j MASQUERADE viene specificato in modo da poter mascherare l'indirizzo IP privato di un nodo, con l'indirizzo IP esterno del firewall/gateway.
Se siete in possesso di un server sulla vostra rete interna, e se desiderate rendere il suddetto server disponibile esternamente, allora potete usare il target -j DNAT della catena PREROUTING in NAT. In questo modo sarete in grado di specificare un indirizzo IP di destinazione insieme ad una porta dove i pacchetti in entrata, che richiedono un collegamento al vostro servizio interno, possono essere inoltrati. Per esempio, se desiderate inoltrare delle richieste HTTP in entrata, al vostro sistema server Server HTTP Apache su 172.31.0.23, eseguire il seguente comando:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT \
--to 172.31.0.23:80 |
Questa regola specifica che la tabella NAT utilizza la catena interna PREROUTING, per inoltrare esclusivamente all'indirizzo IP 172.31.0.23 di destinazione elencato, le richieste HTTP in entrata.
![]() | Nota Bene | |
|---|---|---|
Se siete in possesso di una policy DROP di default all'interno della vostra catena FORWARD, è necessario aggiungere una regola per abilitare il forwarding di richieste HTTP in entrata, in modo tale da rendere possibile un routing NAT di destinazione. Per fare ciò, eseguire il seguente comando:
Questa regola permette il forwarding di richieste HTTP in entrata, dal firewall alla destinazione intesa del server di Server HTTP Apache situato dietro il firewall stesso. |
Le regole iptables possono essere impostate in modo da dirigere il traffico a determinate macchine, come ad esempio un server FTP o HTTP, in una demilitarized zone (DMZ) — un luogo particolare della sottorete, dedito esclusivamente a fornire i servizi su di una rete pubblica portante come Internet.Per impostare una regola in modo da dirigere tutte le richieste HTTP in entrata inun server HTTP dedicato, su di un indirizzo IP 10.0.4.2 e porta 80, (al di fuori della gamma 192.168.1.0/24 della LAN), NAT richiama una tabella PREROUTING per inoltrare i pacchetti alla destinazione corretta:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT \ --to-destination 10.0.4.2:80 |
Con questo comando, tutti i collegamenti HTTP alla porta 80 esterni alla LAN, vengono diretti al server HTTP su di una rete separata dal resto della rete interna. Questa forma di segmentazione della rete può risultare più sicura dei collegamenti HTTP ad una macchina su di una rete. Se il server HTTP è configurato in modo da accettare collegamenti sicuri, allora la porta 443 deve essere inoltrata.