Pontes SOCKS do socat: preserve o nome de host TLS do site
Use um ouvinte TCP de loopback para um destino SOCKS enquanto preserva a identidade HTTP e TLS na aplicação.
Uma aplicação não tem opção SOCKS, mas pode ligar-se a um endereço TCP escolhido. Um adaptador de alvo fixo pode fornecer a conversa SOCKS para um destino. Não precisa de se tornar outro proxy de encaminhamento genérico.
Para compilações de socat que oferecem SOCKS4A, uma disposição ilustrativa é:
socat TCP4-LISTEN:9443,bind=127.0.0.1,reuseaddr,fork \
SOCKS4A:127.0.0.1:service.example.net:443,socksport=1080
O ponto final SOCKS é a porta local 1080. O adaptador escuta na porta local 9443 e pede a esse ponto final service.example.net:443. São valores de exemplo, não uma implementação completa do serviço.
O adaptador tem um alvo fixo
Cada ligação TCP aceite pede o mesmo serviço. Uma aplicação que se liga a 9443 fornece os seus bytes de protocolo normais; o socat fornece a negociação SOCKS4A. Enviar um novo pedido HTTP CONNECT para 9443 não escolheria outro destino—enviaria esses bytes para o serviço fixo.
O SOCKS4A fornece um nome de host ao ponto final SOCKS para resolução remota. Isso difere da forma SOCKS4 que usa um endereço escolhido pelo cliente. O upstream escolhido—incluindo um candidato público da lista de proxies SOCKS4—tem de suportar o tratamento de nomes de host SOCKS4A e a autenticação exigida; este exemplo não é uma receita de início de sessão com palavra-passe SOCKS5.
Ligue-se localmente, identifique o serviço real
Alterar um URL HTTPS para https://127.0.0.1:9443/ altera o nome de host que o cliente pode usar para TLS e HTTP. Um certificado para service.example.net não se tornará num certificado válido para loopback.
Onde o cliente suporta encaminhamento de ligação separado, mantenha a identidade do URL original. O Curl pode ilustrar essa distinção:
curl --noproxy '*' \
--connect-to service.example.net:443:127.0.0.1:9443 \
https://service.example.net/
O socket vai para o adaptador local enquanto a verificação TLS e o destino HTTP continuam a ser service.example.net. Outras aplicações precisam do seu próprio controlo equivalente suportado; nem todos os clientes o fornecem.
A ligação loopback limita a exposição de rede, mas outros processos locais elegíveis ainda podem alcançá-la. Mantenha a vida útil do serviço e os utilizadores adequados. Preserve a verificação TLS em vez de suprimir o erro de identidade causado por um URL de loopback.