Posso usar nc e / ou stunnel para fazer um proxy SSL transparente de tal forma que eu possa especificar a porta de origem de saída?

0

Eu tenho jogado um pouco com variações diferentes e não consigo encontrar algo que funcione bem.

Eu quero ser capaz de "conectar" uma conexão SSL através de um determinado nó de gateway na rede. Em particular, eu quero ainda ser capaz de controlar a porta de origem de saída para a conexão TCP.

Eu posso usar o stunnel em parte disso - para fazer a ponte da conexão SSL. Eu sei que posso usar nc para definir a porta de origem para uma conexão, mas como posso conectar esses dois juntos para permitir a especificação da porta de origem para a conexão de saída? (Ou existe uma solução alternativa aqui que eu deveria estar considerando?)

Eu sinto que se eu conseguir que o nc funcione como um proxy transparente, isso será bom, já que eu posso definir a porta de origem com ele. Eu sinto que talvez esteja faltando algo sobre como o nc funciona. Então, só para fornecer um pouco mais de contexto, aqui está o que estou tentando. Suponha que eu tenha um servidor SSL rodando localmente no 1235. Eu quero me conectar a ele com um cliente SSL, mas eu quero ter certeza que minha porta de origem de saída para a conexão é sempre, digamos, 1234. (Eu posso conectar diretamente com o cliente, mas eu recebo uma porta de alto número arbitrária; preciso especificar isso.)

Meu pensamento estava tentando usar nc como uma ponte aqui, com algo como:

# nc -l localhost:1234 | nc localhost:1235

Isso definitivamente estabelece proxies algo - eu vejo o tráfego fluindo entre os endpoints certos - mas ele não parece lidar muito bem com o SSL. O link seguro não será estabelecido e não posso me comunicar de fato entre os dois usando o cliente / servidor openssl.

O que eu preciso fazer para que isso funcione? Vou tentar determinar se stunnel pode me ajudar aqui; Eu estava pensando que entre os dois eu poderia conseguir fazer isso funcionar.

Tudo bem, eu toquei com socat um pouco, o que parece ligar a conexão - mas não consigo descobrir como especificar a porta de origem. Alguma idéia?

    
por Joseph Weissman 15.01.2012 / 21:09

1 resposta

1

Os pipes usados por | são unidirecionais. Quando você executa nc | nc , a saída da segunda conexão vai para seu terminal ; a entrada da primeira conexão é lida do seu teclado. Basicamente, a forma completa seria </dev/tty nc | nc >/dev/tty .

Para criar um túnel bidirecional, você teria que usar outra coisa, como ...

socat tcp-l:localhost:1234 tcp:localhost:1235

(Ou crie um pipe nomeado e use-o com dois nc , mas isso é menos eficiente.)

No entanto, isso não fará o que você deseja. Não fará com que 1234 se torne a porta de origem da segunda conexão; você terá apenas como a porta destino da primeira conexão, e as duas conexões não estão relacionadas: stunnel simplesmente recebe bytes das duas conexões e reenvia-as para o oposto fim.

Se você quiser simplesmente especificar a porta de origem de uma conexão, é mais simples:

nc -l 56789 localhost 1235

socat stdio tcp:localhost:1235,sourceport=56789

Como stunnel não tem uma opção "porta local", você pode pegar um dos comandos acima e usá-lo na opção exec= .

    
por 15.01.2012 / 22:37