Como fazer port forwarding

Nesse artigo, vamos demonstrar como fazer um portforward que permita o compartilhamento de serviços dentro de sua casa ou de sua empresa.

English version: Click

Já imaginou poder ter um servidor WEB dentro de sua casa ou mesmo dentro do parque tecnológico de sua empresa sem a necessidade de pagar por um serviço de hospedagem de sites?

Pois bem, isso é possível quando nós fazemos o encaminhamento de portas que estão abertas em um IP público para outra porta aberta em um IP privado dentro de nossa rede privada.

Cenário de testes

A figura abaixo apresenta nosso cenário de testes. Nesse cenário, temos uma máquina que está na rede privada e tem o IP “192.168.0.102”.

Nosso objetivo é disponibilizar um serviço dentro dessa máquina “192.168.0.102” e expor esse serviço para Internet.

Scenario

Como expor um serviço que roda dentro de uma rede privada para uma rede pública como a Internet?

Para expor serviços que rodam em máquinas da rede interna em uma rede pública como a Internet, vamos precisar mapear as portas que os serviços usam para se comunicar.

Antes disso, vamos fazer um resumo dos dados que temos nesse cenário.

Maquina Interna = IP “192.168.0.102”

Interface LAN do nosso roteador = IP “192.168.0.1”

Interface WAN do nosso roteador = IP “203.0.113.12”

Nosso roteador tem duas interfaces, sendo uma LAN com o IP “192.168.0.1” e uma WAN com o IP “203.0.113.12”.

A interface LAN atende a rede interna “192.168.0.0/24” e essa rede interna hospeda a nossa máquina interna.

Livros Indicados:

E-Books de Redes e Segurança

Checando o IP e os serviços que rodam na máquina interna

Vamos verificar se o IP e os serviços estão realmente funcionando na máquina interna.

Para isso, estamos usando uma máquina com Linux. Portanto, para verificar o IP podemos usar o comando abaixo.

ip addr
IP máquina interna

Conforme podemos ver no resultado do comando na figura acima, nosso IP da máquina interna é o “192.168.0.102”.

Agora, vamos verificar os serviços que estão rodando na máquina interna.

Nesse caso, nossa máquina interna está hospedando um servidor WEB Apache e um servidor SSH.

Portanto, sabemos que o servidor WEB vai utilizar a porta 80 TCP para receber requisição de páginas e o servidor SSH vai usar a porta 22 TCP para receber conexões ao terminal remoto.

PS. Nesse exemplo, estamos utilizando as portas padrões dos protocolos HTTP e SSH.

SSH = 22 & HTTP = 80

Verificando as portas dos serviços

Então agora precisamos verificar as portas que o servidor WEB e o servidor SSH estão utilizando na máquina interno. Para isso, vamos usar o comando abaixo.

netstat -an | grep :22

netstat -an | grep :80
netstat para verificar as portas abertas

Uma vez que verificamos que já sabemos nosso IP da máquina interna e sabemos quais portas estão sendo usadas para os serviços que vamos expor na Intenet.

Agora podemos passar para proxima etapa.

Fazendo o port forwarding no roteador

Nesse momento, temos as portas abertas na máquina interna.

No entanto, se verificarmos a nossa interface WAN de nosso roteador não veremos as portas 80 e 22 abertas.

Isso porque ainda não fizemos o port forwarding em nosso roteador.

Nota. Podemos usar o NMAP para verificar as portas que estão abertas na interface WAN de nosso roteador. Veja como usar o NMAP AQUI.

Portas fechadas na WAN

Ports close in WAN interface

Em nosso caso, vamos fazer um port forwarding em um roteador D-LINK.

No entanto, a forma de configuração de port forwarding em roteadores de outros fabricantes apresentam similaridades.

Para acessar a inteface WEB de configuração de nosso roteador, vamos acessar o navegador da máquina interna e digitar o IP da interface LAN do roteador.

Em nosso caso, esse IP é “192.168.0.1”. Em seguida, utilizaremos um usuário e senha para acessar o roteador.

Nota. Se é sua primeira vez acessando o roteador, verifique no manual ou na internet qual é o usuário padrão e senha padrão do seu roteador.

Acessando nosso roteador, podemos ver em Status que a nossa interface LAN tem o IP “192.168.0.1” e a interface WAN tem o IP “203.0.113.12”.

router status

Em seguida, vamos clicar no menu superior em Advanced e depois clicar em “Virtual Server”.

Portforwading para o servidor HTTP

Depois disso, vamos inserir um nome para nosso servidor WEB. Nesse caso, vamos usar as configurações abaixo.

router configuring port forwarding to HTTP 80
  • O nome da nossa regra será “WEB server”. 
  •  Depois vamos inserir o IP da nossa máquina interna “192.168.0.102”
  • Escolher o protocolo como TCP. Já que o HTTP usa o protocolo de transporte TCP. 
  • Usar a porta privada 80. Isso porque nosso servidor WEB está usando a porta 80 na máquina interna. 
  • Usar a porta pública 80. Isso porque queremos que a porta 80 esteja aberta na interface WAN de nosso roteador.  
  • Selecionar schedule = Aways. Para deixar o port forwarding sempre ativo. 

Essas configurações vão permitir que todo o tráfego que chegue na porta 80 TCP da interface WAN seja encaminhado para a porta 80 TCP na máquina interna. 

Caso queira instalar e configurar um servidor WEB Clique AQUI.

Portforwading para o servidor SSH 

Agora vamos fazer o portforwading para o servidor SSH.

Para isso, já sabemos que o servidor SSH vai usar a porta 22. Portanto, vamos usar a configuração abaixo. 

router configuring port forwarding to SSH 22
  • O nome da nossa regra será “SSH”.
  • Depois vamos inserir o IP da nossa máquina interna “192.168.0.102”.
  • Escolher o protocolo como TCP. Já que o SSH usa o protocolo de transporte TCP.
  • Usar a porta privada 22. Isso porque nosso servidor SSH está usando a porta 22 na máquina interna.
  • Usar a porta pública 22. Isso porque queremos que a porta 22 esteja aberta na interface WAN de nosso roteador.
  • Selecionar schedule = Aways. Para deixar o port forwarding sempre ativo.

Essas configurações vão permitir que todo o tráfego que chegue na porta 22 TCP da interface WAN seja encaminhado para a porta 22 TCP na máquina interna.

Nota. Nesse cenário, fizemos o encaminhamento de portas iguais, ou seja, porta 80 pública para porta 80 privada. No entanto, poderíamos ter escolhido portas diferentes.

Por exemplo, poderíamos ter escolhido uma porta pública 45777 para ser encaminhada para uma porta privada 80. Cabe ao usuário decidir como fará a configuração do port forwarding.

Testando o port forwarding

Para o teste, vamos usar uma outra máquina que esteja na rede externa, como por exemplo uma outra máquina que está na Internet.

Em nosso cenário, estamos usando uma máquina externa com um IP de teste 203.0.113.10.

Podemos verificar isso com o comando abaixo.

ip addr
IP do outro host externo

Agora, vamos testar se as portas estão abertas em nossa WAN. Para isso, vamos realizar um NMAP para o IP de nossa interface WAN.

Usaremos o comando abaixo para verificar.

nmap 203.0.113.12

nmap mostrando portas abertas na interface WAN do roteador

Se desejar aprender a usar o NMAP clique AQUI.

Podemos verificar que usando o NMAP as portas 22 e 80 estão abertas no IP da interface WAN de nosso roteador.

Isso porque essas portas foram corretamente mapeadas com as portas da máquina interna.

O próximo passo é fazer uma conexão SSH da rede externa para a nossa máquina interna usando o IP da WAN do roteador. Para isso, vamos usar o comando abaixo.

ssh [email protected]

ssh para o ip da interface WAN

Nesse caso estamos usando o SSH com o usuário redes.

O próximo passo é fazer um acesso WEB de fora da rede interna usando o IP da WAN do roteador.

Para isso, vamos abrir um navegador em uma máquina externa e vamos digitar o IP da WAN de nosso roteador 203.0.113.12.

acesso HTTP para o servidor WEB usando o IP da interface WAN

Podemos verificar que o acesso foi feito corretamente. Portanto terminamos aqui esse tutorial para criar port forwarding para serviços internos de máquinas da rede privada.

Livros Indicados:

E-Books de Redes e Segurança

veja mais:

Editar arquivo hosts

Instalação de servidores em Docker

HTTP Client – Requisições GET e POST com API JAVA

Protocolo HTTP – Como funciona?

Instalação do Zabbix

https://www.apache.org/

https://nmap.org/

Juliana Mascarenhas

Data Scientist and Master in Computer Modeling by LNCC.
Computer Engineer