Ago 08 2007

Effettuare port forwarding con iptables

Published by Lorenzo at 10:06 am under Debian / Ubuntu, Firewall, Linux, Networking, Sicurezza

Se si dispone di uno o più indirizzi IP pubblici statici con la propria connessione ad Internet, è abbastanza consueto che si voglia approfittarne per pubblicare un proprio server Web, un proprio server di posta, o altri servizi che necessitano di un IP pubblico statico, come una VPN. In questi casi, una buona politica di sicurezza è far passare tutto il traffico diretto verso uno di questi servizi pubblicati attraverso un firewall, che poi ridirigerà le richieste verso un server posto verso la rete "interna", che prenderà il nome di DMZ (zona demilitarizzata), una rete "intermedia" che è posta tra la rete pubblica (Internet) e la rete locale e su cui saranno posti solamente quei server che devono pubblicare servizi verso Internet, oltre ad un eventuale firewall che connetta LAN e DMZ.

Per fare in modo che il firewall "esterno" rediriga le richieste verso il/i server in DMZ, esiste un meccanismo chiamato "port forwarding", che dal firewall esterno riceve la comunicazione in ingresso su una determinata porta con un determinato protocollo di trasporto, e la "rimbalza" verso il server in DMZ con lo stesso protocollo di trasporto e su una porta che spesso è identica a quella della richiesta originaria, ma che può anche cambiare.

Se si utilizza un firewall Linux, il port forwarding è impostato tramite iptables, che oltre a fungere da firewall è perfettamente in grado di gestire anche la redirezione del traffico. In particolare, si prenda in esame una configurazione di iptables come quella mostrata qui, dove la cosa di cui tenere conto quando si configura il port forwarding, è che il comportamento predefinito relativo alla catena di FORWARD consiste nel blocco del traffico, per cui, oltre all’istruzione necessaria per indicare la redirezione vera e propria, è necessario impostare una regola di FORWARD  che abilita il traffico dall’interfaccia esterna (eth1) alla DMZ (la cui interfaccia di rete definita sul firewall Linux è eth0) solamente per il tipo di richiesta necessaria. Si consideri la pubblicazione di un server Web che risponde alla canonica porta 80, e la cui interfaccia di rete in DMZ ha indirizzo IP 192.168.20.1; questa esigenza viene soddisfatta scrivendo queste due righe di configurazione di iptables:

iptables -A FORWARD -i eth1 -o eth0 -p tcp –dport 80 -j ACCEPT
iptables -A PREROUTING -t nat -p tcp -i eth1 –dport 80 -j DNAT –to 192.168.20.1:80

A questo punto, se dall’esterno si digita in un browser l’indirizzo IP (o il corrispondente nome host) dell’interfaccia eth1, si vedrà il sito pubblicato tramite il port forwarding di iptables.

5 Responses to “Effettuare port forwarding con iptables”

  1. francescoon 11 Apr 2009 at 9:03 am

    Ciao,
    spero che tu legga questo blog e possa darmi una risposta,
    Io ho una macchina linux con clarkconnect community 5 beta2 installato, che a quanto pare ha molti bug.
    E’ dotato di una interfaccia grafica tramite la quale si può in teoria configurare il tutto, ma pare non funzioni allora ho cercato di dare i comandi a mano.

    ho preso spunto dal tuo blog e ho dato i seguenti comandi:

    iptables -A FORWARD -i ppp0 -o eth1 -p tcp –dport 15512 -j ACCEPT
    iptables -A PREROUTING -t nat -p tcp -i ppp0 –dport 15512 -j DNAT –to 10.0.0.104:15512

    Ti sembra corretto??
    io ho un router adsl sulla eth0 che quindi diventa ppp0 e la rete interna è invece collegata alla eth1 tramite uno switch.

    La configurazione funziona. almeno utorrent port checker dice che la porta è correttmente aperta verso l’esterno.

    Ma bvolevo capire una cosa, questa configurazione è definitiva? o per fare in modo che lo diventi devo modificare qualche file di sistema??

    In particolare clarkconect ha uno script firewall nell’ init.d. forse dovrei aggiungere queste regole la??

  2. francescoon 11 Apr 2009 at 9:06 am

    ‘–’

  3. francescoon 11 Apr 2009 at 9:06 am

    \–

  4. francescoon 11 Apr 2009 at 9:07 am

    non è possibile fare il doppio trattino :(

  5. [...] translation - Wikipedia <—— NAT Port forwarding - Wikipedia <—— portforwarding Ricerche IT Effettuare port forwarding con iptables <—— portforwarding dalla teoria alla pratica: Introduzione a PopTop - PPTP Server OpenSource [...]

Trackback URI | Comments RSS

Leave a Reply