É possível fazer com que o meu servidor encaminhe os pedidos de forma transparente em uma porta específica para um site?

0

Existe um site que só posso acessar a partir de alguns endereços IP na lista de permissões. Vamos chamá-lo xyz.com. Além disso, o xyz.com só permite conexões por https.

Eu também tenho um servidor Debian 8.10 com um endereço IP estático que é um dos IPs permitidos, e eu tenho um nome DNS configurado para ele. Vamos dizer que é myserver.biz.

O que eu gostaria de fazer é conectar-me a myserver.biz em uma parte específica (digamos 12345) e fazer com que ela encaminhe o pedido para xyz.com de forma que ele realmente obtenha esse website e não tenha problemas com SSL que eu não posso criar exceções para.

Minha primeira tentativa foi usar iptables no meu servidor para encaminhar transparentemente todas as solicitações de entrada na porta 12345 para o endereço IP do servidor xyz.com na porta 443. Ou seja:

iptables -t nat -A PREROUTING -p tcp --dport 12345 -j DNAT --to <xyz.com's server IP>:443
iptables -t nat -a POSTROUTING -d <xyz.com's server IP> -j MASQUERADE

Isso quase funcionou, mas não completamente. Se eu apontasse meu navegador para myserver.biz:12345, não funcionaria porque xyz.com está em hospedagem compartilhada e o servidor não processaria meu pedido como se eu estivesse conectando a xyz.com.

No entanto, se eu editei o arquivo hosts do meu computador de tal forma que xyz.com resolveu o endereço IP estático do meu servidor, e então apontei o meu navegador para xyz.com:12345, ele funcionaria . Então, isso me faz parte do caminho, mas só funciona em sistemas em que posso acessar o arquivo hosts e preciso que ele funcione em sistemas em que não posso fazer isso (por exemplo, dispositivos iOS).

Então, em resumo, preciso:

  • solicita que myserver.biz:12345 seja encaminhado para xyz.com:443
  • o nome do host do pedido encaminhado para especificar xyz.com para que ele seja resolvido corretamente pelo servidor do xyz'com
  • e o endereço IP de origem da solicitação encaminhada é o endereço IP do meu servidor na lista de permissões

Existe alguma maneira de conseguir isso?

Atualização:

Eu tenho trabalhado em usar nginx para fazer isso, e embora eu tenha conseguido encaminhar meu servidor para vários sites diferentes, não consigo fazer com que ele funcione com o que eu preciso! Ele consistentemente produz um "502: Gateway ruim". Não tenho certeza do que está errado.

Atualização 2:

Eu consegui obter nginx trabalhando principalmente. O truque era atualizá-lo para a última versão estável e incluir proxy_ssl_server_name on; na minha definição de servidor. No entanto, agora há um problema em que algumas das imagens no site xyz.com não estão sendo carregadas com o status 403.

Parece que o 403 é devido ao servidor tentando evitar hotlinking. Não sei como resolver isso neste momento ...

    
por GuyGizmo 09.05.2018 / 19:32

1 resposta

3

Consegui fazer isso funcionar usando um proxy reverso, especificamente nginx . Depois de fazer algumas experiências, descobri que o que eu precisava fazer era configurá-lo com um certificado SSL e depois usar seu recurso proxy_pass para encaminhar ao meu site desejado. A versão mais simples da minha configuração (com as partes SSL excluídas) era:

server {
    listen 12345;
    proxy_ssl_server_name on;

    location /some_path/ {
        proxy_pass https://example.com/;
        proxy_set_header Referer "https://example.com";
    }
}

Eu configurei um certificado autoassinado usando a primeira metade de este tutorial . Era necessário incluir proxy_ssl_server_name on; sem fazê-lo nginx falharia com um erro 502: Bad Gateway .

    
por 09.05.2018 / 22:38