Port Forward mais completo: caçando o fantasma da rede.
“Houston, we have a problem!”
Problema:
Um cliente solicitou que fosse feito um redirecionamento das portas 80 e 443 para um servidor web que se encontra na rede interna da empresa, pois os consultores externos iriam iniciar os testes no novo sistema. No firewall, foi adicionada uma regra de redirecionamento (os usuários do IPTables conhecem como DNAT), você testou, e está tudo ok!
Ao solicitar o teste por parte do cliente, ele lhe diz que não consegue fazer o acesso.
Causa:
A causa deste problema está no percurso em que o pacote percorre quando o servidor responde à requisição de uma estação que está na rede interna. Observe na figura 1 o caminho que é feito pelo pacote quando há uma requisição de fora da rede interna:
OBS: Os endereços contidos neste documento são aleatórios, apenas para demonstração.

Figura 1
Neste caso, o mesmo caminho é percorrido tanto na ida quanto na volta. O pacote consegue ir e voltar sem nenhum impecilho. Observe agora na figura 2 como isto ocorre quando a requisição é feita da rede interna:

Figura 2
Podemos verificar que o caminho percorrido é diferente. O servidor não encaminha o pacote de resposta para o seu gateway. Vejamos mais detalhadamente o caminho que o pacote percorre:
- A estação solicita conexão (pacote com flag SYN ativado) para o IP 200.254.225.31.
- O firewall modifica o destination ip para fazer o port forward (novo destination: 172.15.25.3).
- O servidor recebe o SYN packet e responde com pacote de aceite da conexão (pacote com os flags SYN e ACK ativados), para o IP da estação (172.15.25.100).
- Na tabela de roteamento do servidor, este pacote é redirecionado para o barramento, pois tem como destino um IP da mesma rede que ele está conectado, sem passar pelo gateway.
- A estação recebe o pacote SYN/ACK e, após verificar que não está esperando resposta de conexão deste host (172.15.25.3) mas sim do host (200.254.225.31), ele descarta o pacote.
- Após o período de timeout da conexão, esta é descartada.
Solução:
Uma solução que pode ser utilizada neste caso é criar uma regra que modifique o source address do pacote durante o caminho de ida. Seria como mascarar o pacote que venha da rede interna e tenha destino o IP e porta do servidor. Vou exemplificar com regras do IP Tables. Porém, para um melhor entendimento desta regra, é melhor darmos uma olhada no caminho que o pacote percorre nas chains e tabelas do IP Tables.

Figura 3
(fonte: Iptables Tutorial 1.1.19, Chapter 3)
Bom, para o DNAT, utilizamos:
/sbin/iptables –p tcp –t nat –A PREROUTING –d 200.254.225.31 –dport 80 –j DNAT –to-destination 172.15.25.3:80
As regras de DNAT são aplicadas na tabela NAT, chain PREROUTING. As de SNAT, na tabela Nat e chain POSTROUTING. Analisando a figura 3, vemos que quando o pacote chega na chain POSTROUTING, ele já passou pela PREROUTING. Desta forma, o seu destination já foi alterado. Então, a nossa regra tem que filtrar os pacotes vindo de toda a rede interna (ou um ip dela, a depender do caso) com destino o servidor (dentro da rede interna tb) na porta 80, e não o IP 200.254.225.31. Segue a regra:
/sbin/iptables –p tcp –t nat –A POSTROUTING –s 172.15.25.0/100 –d 172.15.25.3 –dport 80 –j SNAT –to-source 200.254.225.31
Após isto, basta permitirmos o tráfego do pacote na tabela filter, chain FORWARD e pronto, está tudo funcionando corretamente. Segue a regra:
/sbin/iptables –p tcp –t filter –A FORWARD –s 172.15.25.0/100 –d 172.15.25.3 –dport 80 –j ACCEPT
Veja como ficou o novo desenho na figura 4:
Figura 4
Notem que agora a estação recebe o pacote SYN/ACK do mesmo IP que ele havia solicitado antes.
Esta lógica pode ser utilizada para demais ferramentas de firewall, bastando estudar antes como o pacote trafega dentro dele para assim gerar as regras necessárias. O resto, a lógica é a mesma.
Artigo publicado também em:
Estava
Desenvolver a capacidade de equilibrar, ponderar as coisas e se guiar pelo caminho que leva aos resultados esperados vai demandar o aprimoramento dos sentidos, da observação do mundo que está em volta. O sentido da expressão japonesa “Kokorokubari Kikubari” encaixa-se perfeitamente neste caso: “estar atento e ser prestativo”. Desenvolvendo a atenção e prestatividade, será mais fácil identificar o estado emotivo de um superior quando ele lhe dá uma “chamada” por conta de um baixo desempenho da sua equipe ou então de um colaborador quando ele entrar na reunião que tratará desse baixo desempenho. Certamente com o tempo você se tornará um filtro inteligente de pressões. De toda a pressão que receber de seu superior, uma parte ficará com você, outra será passada de outra forma para a equipe ou um funcionário, e outra será passada integralmente, na mesma intensidade. Não há dúvidas que há momento para tudo, inclusive para apenas “repassar a pressão”, mas se isto se tornar uma característica a equipe poderá se tornar simplesmente apática, desenvolvendo apenas 10% do que realmente pode. Da mesma forma, tem horas que não se pode repassar a pressão, mas se novamente isto se transformar em uma característica, provavelmente se tornará um cavalinho em que todos sentam. Sem equilíbrio, você poderá estar jogando sua equipe, sua empresa, sua ONG ou quem sabe seu casamento no lixo. É, repasse essa pressão do seu chefe para o(a) parceiro(a) e entenderá o que estou dizendo.

Últimos comentários