Forçando HTTPS através de proxy por DNS / Como funciona o “Smart DNS” com HTTPS?

4

Eu gostaria de forçar o tráfego HTTP (S) para determinados sites da minha rede doméstica por meio de um proxy executado em um VPS.

Instalei tinyproxy no VPS, executando na porta 8080 . No meu computador eu estou correndo

sudo ssh -i /home/user/.ssh/id_rsa -nNT -L 80:localhost:8080 -L 443:localhost:8080 remoteuser@vps

para acessar o proxy localmente. Quando eu configuro localhost:80 como proxy nas configurações do Firefox, tudo funciona bem (HTTP e HTTPS).

Mas, como não desejo que todo o tráfego passe por esse proxy, adicionei isso ao /etc/hosts :

do meu computador
127.0.0.1     server.example 

server.example é o nome de um servidor da Web configurado para HTTP e HTTPS.

Acessando http://server.example funciona, enquanto abre https://server.example no Firefox falha com o erro

SSL_ERROR_RX_RECORD_TOO_LONG

Além disso, curl da página sobre HTTPS falha:

curl: (35) error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

Até onde eu sei, esse problema é causado pelo tinyproxy respondendo à solicitação HTTPS com HTTP simples.

Primeiro, é teoricamente possível implementar o que eu quero? Esses chamados serviços "Smart DNS" parecem exatamente fazer isso.

Esse problema é causado por minha configuração ou é tinyproxy, em vez disso, não é capaz de fazer isso? Existe um servidor proxy diferente que é capaz disso?

EDIT: No momento eu estou executando o túnel SSH no meu PC e a modificação do DNS também é local, mas eu gostaria de implantar isso no meu roteador mais tarde, para que o tráfego de qualquer dispositivo da minha rede vá através deste proxy.

EDIT2: Como @SteffenUllrich escreveu nos comentários, quando o HTTPS é roteado sobre um proxy HTTP, o cliente primeiro envia um CONNECT repuest descriptografado antes que o handshake aconteça. Veja aqui (túnel SSH para VPS está sendo executado em 10.0.5.4 ):

Issoénecessário,porquesenãooproxynãoseriacapazdedeterminarparaqualservidoropedidodeveserencaminhado.

Mascomoexatamenteessesservidoresproxy"Smart DNS" funcionam? (Para informações gerais, consulte aqui )

Como eles não precisam de solicitações CONNECT, parecem estar funcionando sem. Mas como eles podem determinar o servidor para o qual o pedido deve ser encaminhado? Aqui está um despejo de uma conexão HTTPS usando um proxy "Smart DNS" (IP é 37.x.x.x). (O DNS é manipulado para apontar para esse proxy):

Então, como isso funciona? E, além disso, existe uma maneira de arquivar isso no meu VPS (talvez não com o Tinyproxy, mas com outro software)?

    
por tr01 15.11.2017 / 16:02

2 respostas

0

Parece que tinyproxy não é realmente proxy transparente para conexões HTTPS, o cliente precisa usar o método CONNECT , o que significa que ele precisa ser configurado para usar o proxy.

Você não pode, de forma transparente, fazer proxy HTTPS sem instalar um certificado MITM, caso contrário, cada acesso lhe dará erros de certificado ou falhará por esse motivo.

Você provavelmente precisa de algo mais sofisticado como squid .

    
por 15.11.2017 / 20:34
0

But how exactly do those "Smart DNS" proxy servers work? They do not need CONNECT requests, they seem to be working without.

Acho que esses proxies do Smart DNS funcionam extraindo o domínio de destino da solicitação HTTP para o HTTP simples. Para o HTTPS, eles provavelmente extraem o domínio da extensão de TLS do SNI na mensagem ClientHello no início do handshake de TLS.

Uma configuração semelhante pode ser feita, por exemplo, com o proxy do squid . Este proxy pode ser configurado para ser usado como proxy transparente no roteador central. Como todos os clientes usam esse roteador como gateway para a Internet, o tráfego nas portas relevantes (80.443 para http e https) pode ser redirecionado para o proxy com regras de filtragem de pacotes, ou seja, nenhuma configuração especial de DNS é necessária.

O proxy pode então extrair o alvo real do cabeçalho HTTP (HTTP simples) ou ClientHello (HTTPS) sem quebrar a criptografia SSL - veja squid: SSL Peek e Splice para detalhes. O proxy do squid também pode ser configurado para ter proxies upstream diferentes (como o seu VPS) ou conexão direta, dependendo do destino.

    
por 15.11.2017 / 21:31

Tags