SSH Tunnel entre vários hosts

1

Isso é um pouco diferente das outras perguntas do SSH que eu vi aqui, então aqui vai. Eu tenho uma configuração complexa para acessar um aplicativo da web e, infelizmente, não há maneira de contornar isso. Aqui está o cenário e os sistemas envolvidos (endereços IP anonimizados por razões óbvias):

System Alpha
System Bravo
System Charlie
System Delta

Eu preciso me comunicar com um site disponível para o System Delta do System Alpha. O problema é que não consigo falar diretamente com o System Delta. Atualmente, posso usar o SSH no System Bravo e posso usar o SSH no System Charlie utilizando um comando de proxy que utiliza o System Bravo como proxy. Para ilustrar isso, aqui está o meu SSH Config:

Host system.bravo
  User bob
  Hostname 1.1.1.1
  ForwardAgent yes

Host system.charlie
  User bob
  ForwardAgent yes
  ProxyCommand ssh -q system.bravo nc localhost 1081

O System Charlie está acessível para o System Alpha desta forma porque criou um túnel SSH reverso para o System Bravo na porta 1081. Isso é feito porque o firewall entre o System Bravo e o System Charlie SOMENTE permite a saída do SSH para o System Bravo. Eu sei que isso é chato, mas é uma exigência do cliente.

O System Charlie pode executar o SSH no System Delta sem problemas. Meu problema é, como faço para configurar um proxy SOCKS utilizável com SSH, para que o System Alpha possa acessar um site acessível somente a partir do System Delta. Normalmente eu faria assim:

ssh -2 -C -D 4001 -L 4002:localhost:4002 -L 4003:localhost:4003 [email protected]
ssh -2 -C -D 4002 -L 4003:localhost:4003 [email protected]
ssh -2 -C -D 4003 [email protected]

Então eu simplesmente apontaria o Firefox para localhost: 4003 e esse seria o meu proxy de trabalho para acessar o site. No entanto, por causa da configuração estranha entre System Bravo e System Charlie isso não funcionará. *** Foi indicado para mim que um diagrama exibindo comunicações tornaria isso mais fácil. Então aqui está:

A full list of possible connections:
     ----->      --X-->       ----->
Alpha       Bravo      Charlie      Delta
     <--X--      <-----       <--X--

The connection between Alpha and Bravo and Charlie as it is currently 
configured:

     ProxyCommand ssh -q system.bravo nc localhost 1081
     -------------------------------------------------->      
Alpha    Bravo <---------------------------------------- Charlie
                      AUTOSSH -R 1081:localhost:22 

-----> = An allowed connection via SSH
--X--> = A blocked connection, only reverse SSH possible

Alguém tem uma solução sobre como eu posso realizar isso tendo em mente o comando de proxy necessário e o túnel SSH reverso entre System Bravo e System Charlie?

Muito obrigado

PS: Espero que meu diagrama ajude, lamento que não seja uma imagem real

    
por NetSec 13.09.2017 / 21:16

1 resposta

1

Parece que se você pode (de A) ssh para C, você pode fazer:

user@Alpha:~$ ssh -L1234:localhost:1234 Charlie
user@Charlie:~$ ssh -Dlocalhost:1234 Delta

... e nesse ponto, você pode fazer com que o Firefox use localhost: 1234 como um proxy SOCKS. O SSH local fará o proxy do túnel para C, onde o ssh está escutando como um servidor SOCKS e o encaminhará para D.

Mas, na verdade, eu empurro o cliente: se eles esperam que você acesse sites de A, eles devem fornecer um método sensato para isso. Como uma VPN, por exemplo.

    
por 13.09.2017 / 23:01