Quero documentar um procedimento que pode ser útil em muitos casos. Especificamente eu queria acessar o proxy (http) em um servidor sem liberação no firewall para fazer isso, mas com acesso a outro servidor com essa liberação, ambos rodando Linux e com iptables.
Embora utilize o proxy no exemplo, essa técnica pode ser usada em teoria para qualquer tipo de serviço, pois o que estamos fazendo é criar uma nova rota para nossos pacotes.
Nomenclaturas (supondo que esses nomes resolvem um IP):
– servidor: a máquina que precisa acessar o serviço, no caso o proxy
– proxy: servidor que desejo acessar, cujo serviço é executado na porta 8080
– ponte: máquina que tenho acesso e utilizarei para chegar no serviço de proxy
Primeiramente, criamos uma regra no servidor para direcionar as requisições que farei para http://proxy:8080/ para o servidor ponte:
iptables -t nat -A OUTPUT -d proxy -p tcp -m tcp --dport 8080 -j DNAT --to-destination ponte
Agora vamos configurar o servidor ponte, para não esquecer vamos começar dizendo ao Kernel que ele deve fazer roteamento:
sysctl -w net.ipv4.ip_forward=1
E agora as regras do iptables, começamos dizendo que antes de rotear, ele deve trocar o destino do pacote:
iptables -t nat -A PREROUTING -s servidor -p tcp -m tcp --dport 8080 -j DNAT --to-destination proxy
E depois dizemos que o acesso desejado deve ser mascarado, ou seja, o iptables faz o acesso e repassa para o solicitante (esse é o modo mais usado de nat no iptables):
iptables -t nat -A POSTROUTING -s servidor -p tcp -m tcp --dport 8080 -j MASQUERADE
Pronto! Caso queira acompanhar os pacotes passando pela regra do iptables:
iptables -t nat -nvL