Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Reti e Linux: port forwarding

Link copiato negli appunti

Spesso si sente parlare delle possibilità offerte da Linux per il networking, tante volte se ne illustrano i pregi, e non sono pochi i router che lo adottano come sistema operativo. Effettivamente GNU/Linux può rappresentare una soluzione a bassissimo costo per una rete, essendo dotato di tutti gli strumenti tipici di un comune (ma spesso molto costoso) dispositivo di rete. Una delle scelte più semplici e che meglio si adatta a Linux è quello di usarlo come firewall o router.

Abbiamo già parlato altre volte di come riuscire a far condividere a Linux la vostra connessione a Internet o come filtrare il traffico della vostra LAN usando il Pinguino. Questa volta vedremo come è facile utilizzando Netfilter, del quale vi abbiamo già parlato, rendere visibili su Internet server o PC presenti nella propria rete locale, ma non collegati direttamente alla Rete.

Poniamo quindi di avere un computer con GNU/Linux già configurato con IPTables per fare MASQUERADE (condivide la propria connessione a Internet con una LAN interna, vi abbiamo già parlato di come fare per configurarlo in questo modo nell'articolo:Configurare una rete casalinga e di avere una rete interna che utilizziamo normalmente per il lavoro di tutti i giorni. A questo punto, avendo una connessione a Internet permanente e volendo rendere visibili sulla Rete alcuni server presenti su un PC all'interno della LAN, dopo alcune prove ci scontriamo contro una triste evidenza: non riusciamo con questa configurazione ad accedere dall'esterno a uno qualsiasi dei computer in LAN.

Al massimo l'unica cosa che ci consente di fare è installare un server sul firewall e di renderlo così accessibile da Internet. Ma non è questo ciò che vogliamo e in più sappiamo che non giova molto alla sicurezza della rete installare server su un firewall. La risposta ai nostri problemi è molto più semplice di quello che sembra ed è lo stesso Netfilter, già interpellato per la configurazione del firewall, a venirci incontro.

Poniamo ad esempio di avere una rete con un PC (che chiameremo PCLINUX) che usiamo come router, dopo averlo configurato per fare MASQUERADE (vedi sempre articolo citato precedentemente) nella nostra rete.

Questo computer ha due IP uno privato (192.168.1.254) e uno pubblico (ad esempio 212.110.13.101). Sempre nella nostra rete una nostra workstation con Windows 2000 (chiamata PCWIN2K con IP 192.168.1.1) ha un server VNC che utilizziamo per potervi accedere anche da altre postazioni. PCLINUX fa quindi da gateway per PCWIN2K. È nostro desiderio (pur con non poche remore per le inevitabili conseguenze dal lato della sicurezza) render visibile su Internet questo server VNC (messo in ascolto sulla porta 5800) in modo da accedervi da un altro PC su Internet (ricordo comunque che VNC è un protocollo che non cifra i dati, che come tali possono essere con relativa facilità intercettati, con la conseguenza di mettere a rischio il PC che vorremmo "mettere su Internet"). L'utilizzo di VNC è a puro titolo di esempio, discorso simile può esser fatto per la maggior parte dei protocolli di rete.

La regola da applicare (su PCLINUX) è piuttosto semplice ed è la seguente:

PCLINUX:~# iptables -t nat -A PREROUTING -d 212.110.13.101 -p tcp --dport 5800 -j DNAT --to-destination 192.168.1.1:5800

Vediamo di capire di cosa si tratta. Innanzitutto è bene specificare che la regola precedente non ha bisogno di particolari moduli del kernel a parte quelli già necessari per il MASQUERADE, che come abbiamo detto, diamo per funzionante.

Questa regola specifica che tutto il traffico diretto verso l'host 212.110.13.101 (-d 212.110.13.101) del protocollo TCP (-p tcp, ma ovviamente si può anche usare udp per le porte UDP) verso la porta 5800 (--dport 5800) sia rediretto (-j DNAT) verso la porta 5800 dell'host 192.168.1.1 (--to-destination 192.168.1.1:5800).

Sarebbe stato possibile anche utilizzare l'opzione -i al posto di -d per specificare l'interfaccia di provenienza: ad esempio con -i ppp0 avremmo specificato che la regola vale solo per il traffico proveniente dall'interfaccia ppp0 (usate ifconfig per l'elenco delle interfacce presenti). A questo punto una volta che PCLINUX riceverà una richiesta da Internet destinata alla porta 5800 dell'IP 212.110.13.101 (che è un suo IP) provvederà a inoltrarla sulla porta 5800 del PC con IP 192.168.1.1. L'opzione -t nat specifica che la regola che applichiamo riguarderà il nat, che è una tabella specifica di Netfilter, -A PREROUTING invece specifica che la regola va aggiunta alla catena di PREROUTING che è quella che viene utilizzata tra le altre cose con il portforwarding. È quindi obbligatorio lasciare queste due opzioni così come sono (in precedenza avevamo utilizzato la catena POSTROUTING della tabella nat per fare MASQUERADE).

Come è facilmente intuibile iptables ci consente di specificare anche una coppia di porte differenti: in questo caso abbiamo scelto di inoltrare tutto il traffico diretto verso la porta 5800 sempre verso la porta 5800 di un altro IP. Ma questo non ci proibisce di specificare una porta differente.

Avremmo potuto ad esempio inoltrare tutto il traffico destinato alla porta 6800 oppure alla 3452 del nostro gateway verso la porta 5800 di PCWIN2K, in modo da far rispondere il server VNC a una richiesta diretta verso la porta 6800 (o 3452) del nostro router Linux.

In questo caso la regola sarebbe stata:

PCLINUX:~# iptables -t nat -A PREROUTING -d 212.110.13.101 -p tcp --dport 3452 -j DNAT --to-destination 192.168.1.1:5800

Come potete vedere usare Netfilter per redirigire il vostro traffico è molto semplice. Basta solo un pò di pratica e pazienza per gestire al meglio il vostro router GNU/Linux. Il mio consiglio è pertanto quello di capire se ci sono server all'interno della vostra LAN che è comodo vedere "dall'esterno" (talvolta programmi come alcuni filesharing eseguiti all'interno di una LAN necessitano di tenere in ascolto una porta su Internet), prestando però molta attenzione alla sicurezza del vostro server cercando di tener fede al principio di "meno server in Rete, meno pericoli".

Ti consigliamo anche