Site icon Tosolini.info

Windows: Port forwarding

In Linux il port forwarding, ovvero ricevere una chiamata su una determinata porta e farla uscire su un’altra, in favore di un IP che rimane mascherato, è una cosa nota da decenni. Lo stesso iptables lo faceva nativamente.

Meno scontato quando si va a parlare di sistemi operativi Windows. Ci sono sicuramente dei prodotti di terze parti che fanno questo particolare lavoro, quello di cui però vi voglio far focalizzare è proprio l’utilizzo dei mezzi nativi di questo OS.

Quanto andremo ad esporre sicuramente funziona su Windows 7 e superiori (quindi compreso Windows 10) e Windows server 2008 in avanti.

Il comando su cui andremo a fare leva si chiama netsh e lo trovate nella powershell di Windows. Per fare un esempio pratico immaginiamo che il nostro IP sia 10.0.0.1 e vogliamo redirezionare le chiamate in arrivo sulla porta 443 verso l’indirizzo IP 10.1.0.0 alla porta 80.

Chiaramente si sotto intende che la macchina in questione abbia una configurazione di rete funzionante e abbia i riferimenti a cui chiedere su come ruotare le reti interessate. Inoltre il Firewall stesso di Windows dovrà essere correttamente istruito in tal senso.

Il comando che daremo sarà:

netsh interface portproxy add v4tov4 listenport=443 listenaddress=10.0.0.1 connectport=80 connectaddress=10.1.0.0

A prima vista il comando appare complesso, in realtà non lo è. Scomponiamo un attimo le varie voci. Netsh è il comando che conosciamo, interface invoca la parte relative alle interfacce di rete, portproxy si commenta da solo, add v4tov4 permette di aggiungere delle regole nella sfera del protocollo IPv4. Il resto dovrebbe essere piuttosto chiaro, visto che le dichiarazioni delle chiavi sono sostanzialmente “parlanti”.

E’ interessante notare che questo comando di fatto è statico, cioè se riavviate il computer questo sarà ancora li in funzione. Come fare dunque a conoscere quali port forwarding abbiamo in uso? Con questo comando:

netsh interface portproxy show all

Vedrete una tabella dove saranno indicati porte e IP interessati. Per rimuovere i port forwarding in esecuzione esiste un comando globale, che però per qualche ragione funziona solo con il TCP ma non con il protocollo UDP. Infatti al comando di creazione sarebbe stato possibile anche scegliere il protocollo aggiungendo “protocol=tcp“. Ad ogni modo il comando per rimuovere tutti i TCP port forward è:

netsh interface portproxy reset

Personalmente vi consiglio di rimuovere riga per riga con il comando inverso a quello di creazione:

netsh interface portproxy delete v4tov4 listenport=443 listenaddress=10.0.0.1

Se fate caso sono indicati solo i listenport e listenaddress ma non i connectport e connectaddress poiché queste indicazioni sarebbero del tutto superflue, visto che stiamo staccando il servizio dal “lato” dove stiamo ricevendo le richieste, da cui si sotto intende che venga eliminato il resto.

Personalmente ho avuto modo di testarlo in ambiente di produzione su un Windows Server con un traffico che nel tempo si è ridotto, proprio perché l’idea di base era facilitare la transizione di servizi da un server all’altro. Devo dire che ha sempre funzionato, ovviamente rispetto a Linux non reggerà situazioni onerose, tuttavia è utile sapere che esiste anche questa possibilità.

Exit mobile version