tunelamento SSH explicado em termos leigos

1

Acabei de usar este guia para criar um túnel SSH para ignorar meu proxy corporativo. Eu não usei o usual "Putty", mas em "MobaXterm" (um programa semelhante ao putty que também oferece ferramentas unix) eu escrevi, para criar o túnel:

ssh -D 7070 -p 22 [email protected] sleep 9999

Então eu fui ao meu navegador (Firefox) e eu disse para usar SOCKS na porta localhost 7070 .

Tudo está bem e está funcionando, mas não tenho ideia de como a tecnologia de subalinha funciona. Quero dizer, em um nível geral eu sei como o processo funciona, mas eu gostaria de ir um pouco mais fundo do que isso.

O que quero dizer é que, atualmente, podemos comparar o meu conhecimento com o que eu tenho de carros: eu sei que há um motor, 4 rodas, etc, mas eu não tenho idéia de como o motor realmente usa gasolina para mover o carro. As duas respostas que recebi até agora só me explicam o que eu já sei. Eu tenho um CCNP, trabalho em um datacenter como engenheiro de rede, sei programar, conheço bem o ambiente Linux. O que eu gostaria de ter de você é uma resposta completa (mas com menos de 20 páginas por RFC).

A resposta deve incluir:

  1. Uma descrição das principais opções em termos de túnel. Um bom exemplo é a imagem nesta resposta: Noções básicas sobre túneis SSH
  2. Que tipo de túnel é usado quando e para que (túneis normais, túneis reversos)
  3. Uma captura wireshark do antes / depois do túnel
  4. Uma imagem explicando o processo (afinal, sou um cara visual)

Eu prometo que eu darei 100 pontos assim que eu puder colocar uma recompensa pela questão. Eu realmente preciso de uma boa resposta sobre isso. (Caso eu me esqueça da recompensa, por favor envie-me um email: ilcon7e [at] gmail [dot] com

EDITAR

Melhoramos a questão.

    
por Con7e 24.07.2014 / 16:13

2 respostas

4

Quando você visita um site (um que não é impedido pelo seu firewall corporativo), seu navegador envia uma solicitação ao servidor listado na URL na porta 80 (por padrão). Por exemplo, para visitar este site, nossos navegadores se comunicam com a porta 80 do servidor unix.stackexchange.com

Ao definir suas configurações de proxy, você disse ao seu navegador para enviar tudo para localhost port 7070, independentemente do URL. Um servidor proxy é projetado para buscar dados em nome de um cliente. Existem vários servidores proxy disponíveis (uma pesquisa rápida no repositório do seu disto trará alguns - squid é um e os servidores apache e nginx também podem atuar como proxies), mas instalar um não ajudaria seu cenário como o proxy tentaria acessar o site em seu nome e ainda ser bloqueado pelo seu firewall corporativo.

No entanto, ssh com a opção -D em conjunto com o daemon sshd no site remoto ( yourserver.com ) age como um servidor proxy, exceto que este é dividido em duas metades - um local ssh e um controle remoto sshd .

A solicitação do seu navegador para http://unix.stackexchange.com é enviada para o cliente ssh em seu computador que está escutando na porta 7070 . Isso criptografa a solicitação e a envia ao servidor sshd remoto. Isso descriptografa a solicitação e coloca a conexão para o servidor relevante (novamente unix.stackexchange.com , porta 80) com o caminho de retorno (o endereço IP e a porta para os quais o servidor deve retornar sua resposta) modificado para ser o sshd servidor ( yourserver.com ).

O servidor da Web do Stack Exchange não sabe nada sobre esse proxy e responde com a página solicitada para o endereço IP e porta do servidor sshd (devido a essa pequena modificação). No entanto, este servidor está ciente de que a solicitação originou-se de ssh em execução no seu computador (ele mantém uma tabela desse tipo de informação), portanto, criptografa e envia de volta para você. ssh no seu computador envia a resposta de volta para o seu navegador, que exibe sua página para você.

ssh está agindo como um proxy distribuído. O 'tunelamento' aqui é o fato de que o proxy está em duas metades e eles se comunicam através de um túnel criptografado que ninguém pode bisbilhotar e (no seu caso) está usando uma porta que não está bloqueada pelo seu firewall (porta 22). ).

    
por 24.07.2014 / 17:00
4

Visão geral de alto nível:

  1. A opção -D diz ao ssh para escutar as conexões nessa porta usando o protocolo SOCKS. Você configura o Firefox para se conectar ao ssh e falar o protocolo SOCKS.

  2. Você digita o link no seu navegador.

  3. O Firefox se conecta a essa porta do SOCKS. O SOCKS pode fazer um monte de coisas, mas o que nos interessa é o seguinte: o Firefox pergunta ao servidor SOCKS (ssh) "ei, você poderia falar com www.google.com e dar a ele essa solicitação HTTP? E me diga ( Firefox) o que www.google.com diz em resposta a isso? " (O Firefox não sabe ou realmente se importa com o fato de o ssh enviar essa solicitação pelo túnel SSH).

  4. ssh encaminha essa solicitação ao longo da conexão ssh para algo que está sendo executado na máquina remota (provavelmente sshd).

  5. o programa em execução na máquina remota faz a conexão, envia os dados para o Google e recebe uma resposta.

  6. o programa na máquina remota, conforme solicitado, informa ao ssh em sua máquina qual é a resposta.

  7. ssh na sua máquina, conforme solicitado, informa ao Firefox qual é a resposta.

  8. O Firefox sabe que é uma página da Web, por isso começa a trabalhar para exibi-lo.

  9. Repita várias vezes, para todas as imagens, JavaScript, CSS, etc.

por 24.07.2014 / 17:26