O seu proxy aprovado é executado num host de salto onde escuta apenas em loopback, por isso nada fora dessa máquina o consegue alcançar. Não precisa de VPN nem de um proxy novo; precisa de uma porta dessa máquina trazida para uma porta sua. Um encaminhamento local faz exatamente isso, e exige um comando mais uma definição da aplicação. A confusão costuma vir de trocar qual endereço de loopback pertence a qual máquina.

Decida se já existe um proxy fixo

Esta técnica encaminha um serviço que já está a correr. Se o host remoto tiver apenas um daemon SSH e nenhum proxy, nenhuma quantidade de encaminhamento cria um, e a ligação será recusada do lado remoto. Confirme que o proxy está ligado, qual é a sua porta e se escuta em 127.0.0.1 ou num endereço de interface específico, porque é esse endereço que o encaminhamento tem de visar.

Confirmar isto primeiro poupa-o de depurar um túnel que nunca esteve ligado a nada.

Construa o encaminhamento e leia o comando

A forma que quer liga uma porta de loopback no seu portátil e liga-a, do lado do servidor, ao endereço do proxy tal como o servidor o vê.

ssh -NT -o ControlPath=none -o ExitOnForwardFailure=yes \
  -L 127.0.0.1:13128:127.0.0.1:3128 [email protected]

-N suprime um comando remoto e -T suprime a atribuição de termios, porque quer um túnel e não uma shell. O primeiro endereço de loopback é onde o portátil escuta; o segundo é resolvido pelo servidor SSH, por isso 127.0.0.1 ali significa o proxy nessa máquina. ExitOnForwardFailure faz o comando falhar ruidosamente se a porta local já estiver ocupada, em vez de iniciar uma sessão que não encaminha nada. Escreva o endereço de destino tal como o servidor o resolve, porque um nome que só o seu portátil consegue resolver falhará do outro lado.

A política do próprio servidor aplica-se antes de algo disto funcionar. AllowTcpForwarding tem de o permitir, e PermitOpen pode restringir a que destinos e portas uma sessão pode chegar, por isso um encaminhamento que o cliente aceita pode ainda ser recusado pelo servidor. A recusa aparece como um erro de encaminhamento ou de canal no cliente, e ler essa mensagem é mais rápido do que editar o comando.

Aponte uma aplicação para o encaminhamento

Configure a aplicação para usar um proxy HTTP em http://127.0.0.1:13128, com credenciais se o proxy remoto as exigir. Mantenha a verificação de certificados própria da aplicação para destinos HTTPS, uma vez que o túnel do proxy não a substitui. Este é um encaminhamento fixo de um serviço, por isso é preciso dizer à aplicação que existe um proxy em vez de a deixar descobri-lo.

Uma verificação rápida antes de configurar algo permanente: curl -x http://127.0.0.1:13128 -I https://example.com, que exercita o método HTTP CONNECT que o proxy tem de suportar.

Mantenha a autoridade onde estava

O proxy remoto continua a decidir que destinos e métodos permite, e um início de sessão SSH não deve conceder silenciosamente um relé web geral a cada conta. Ligar a 127.0.0.1 no portátil evita publicar a porta na sua rede local, e não torna a porta privada em relação a outros processos na mesma máquina. Substituir essa ligação por um endereço wildcard para partilhar o proxy é como se cria um relé aberto não gerido.

O transporte SSH protege o salto até ao servidor. Para além desse ponto o proxy abre a sua própria ligação, por isso um pedido HTTP simples a um destino continua simples para além do servidor, mesmo que o primeiro segmento estivesse cifrado.

Verifique ambos os extremos e depois limpe

A configuração do túnel local e o sucesso do serviço remoto são resultados diferentes, e o estado de saída do comando só lhe fala do primeiro. Verifique que o ouvinte existe com ss -ltn, e depois faça um pedido permitido da aplicação e um pedido que o proxy deveria recusar. Se ambos se comportarem como esperado, o caminho é real; se o túnel estiver ativo e todos os pedidos falharem, o proxy está a recusar ou não consegue chegar ao destino.

Quando terminar, pare o processo SSH que o detém, remova a definição do proxy da aplicação e confirme que a porta local desapareceu em vez de deixar um ouvinte que sobreviva à tarefa.

Artigos relacionados