Passando por um firewall com um proxy "reverso"

2

Eu tenho que fazer um workshop em um ambiente de firewall que está me impedindo de mostrar tudo o que eu gostaria e estou procurando uma solução alternativa.

Eu estarei demonstrando um software que roda no Windows. Durante o workshop, espera-se que os participantes se conectem a este software a partir de seus telefones com um navegador.

    Windows                        Phone           
+-------------------+          +------------------+
|                   |          |                  |
|  Demo software    |          |                  |
|                   |          |                  |
|                   |          |                  |
|             :8080 | <--------+  Browser         |
|                   |          |                  |
|                   |          |                  |
+-------------------+          +------------------+

O problema é que todas as máquinas da oficina são protegidas por firewall e é impossível (devido à rigidez da organização onde eu estou fazendo a oficina) abrir um buraco no firewall.

Então, eu estava pensando em executar algum tipo de proxy (por sorte, isso é permitido) em cada máquina da oficina. Esse proxy se conectaria a algum tipo de servidor do lado de fora, se registraria com algum ID gerado automaticamente e começaria a esperar pelos dados.

Um telefone se conectaria a http://server.xxx/proxyid e o servidor rotearia sua solicitação para o proxy apropriado, com base na ID do proxy (via conexão já estabelecida, para que os dados pudessem passar pelo firewall). O proxy entraria em contato com o servidor da web no software demo, obteria a resposta e a repassaria para o servidor, o que encaminharia a resposta para o telefone.

                       Firewall                                       
                           +                                          
                           |                                          
   Windows                 |                                          
+---------------------+    |                                          
|                     |    |                                          
|   +-------------+   |    |        server.xxx                        
|   | Demo SW     |   |    |     +------------------------+           
|   |             |   |    |     |                        |           
|   |       :8080 |   |    |     |                        |           
|   +--------+----+   |    |     |                        |           
|            ^        |    |     |                        |           
|            |        |    |     |                        |           
|   +--------+----+   |    |     |                        |           
|   | Proxy       |   |    |     |                        |           
|   |             +------------> |:80                     |           
|   |         ID  |   |    |     |                        |           
|   +-------------+   |    |     +------------------------+           
|                     |    |                      ^                   
+---------------------+    |                      |                   
                           |                      |                   
                           |                      |                   
                           +                      |                   
                                    Phone         |                   
                                 +-----------------------------------+
                                 |    Browser     |                  |
                                 | +--------------+----------------+ |
                                 | | http:://server.xxx/ID         | |
                                 | |                               | |
                                 | +-------------------------------+ |
                                 +-----------------------------------+

Existe algum bloco de construção que me permita montar essa solução alternativa para que eu não tenha que programá-la? De preferência, a parte do servidor deve ser executada no Windows também (algum tipo de Linux também funcionaria).

    
por gabr 25.05.2015 / 17:13

2 respostas

2

Isso não é exatamente o que você procura, e talvez eu pense em outra coisa além disso, mas isso é algo que você deveria saber.

encaminhamento de porta SSH

Você precisa ter um servidor SSH funcionando no Computador B. Então você pode fazer a partir do comp A

O SSH é como o telnet, mas com mais segurança e com recursos de encaminhamento de porta TCP. Você pode ignorar o aspecto telnet dele

ssh é uma ferramenta com a qual os administradores de sistemas estão familiarizados, mas também técnicos em geral.

Você pode instalar o ssh via cygwin no Windows.

A$ssh user@compB

digamos que você pode fazer isso.

A está por trás de um firewall. B está bem.

A ----------- B

Um pouco atrás de um firewall pode fazer uma conexão de saída

execute isso de A

A$ssh -R 1234:127.0.0.1:5678 -R 2345:127.0.0.1:5642 user@compB

que pode ser feito como um comando ou dividido em dois comandos separados A$ssh -R 1234:127.0.0.1:5678 user@compB

e

A$ssh -R 2345:127.0.0.1:5642 user@compB

O -R 1234:127.0.0.1:5678

O -R significa porta aberta na composição de destino (compB) e uma conexão pode ser feita para CompB na porta 5678 e ele irá para a CompA e será encaminhado para a porta 1234 (ainda na CompA)

Então você pode querer fazer

-R 80: 127.0.0.1: 8080

O problema é que você quer algo com um ID e não tenho certeza sobre isso

O que posso dizer é que você pode abrir várias portas no CompB

não apenas a porta 80

porta 81, porta 82

e, portanto, a porta 81 na CompB pode encaminhar para a porta 1234 na CompA

a porta 82 na CompB pode encaminhar para a porta 4252 na CompA

e.t.c.

E você pode querer dizer -gR ou -R *: 80 .... 'cos sem o -g, a porta que se abre na CompB só permitirá uma conexão da CompB ou seja, ela só escutará em 127.0.0.1 então use -g no seu caso porque você quer que um cliente de outro computador [o computador 'phone'] se conecte a CompB .. ie o -g é porque você quer que um programa cliente de outro computador se conecte a CompB (e ser encaminhado para CompA), em vez de um programa cliente na CompB para se conectar à CompB (e ser encaminhado para CompA).

Um ponto embora Você conecta o ssh.exe de um comp atrás do firewall (CompA) para compB.

Uma porta é aberta no CompB ... para que uma nova conexão tcp seja contrabandeada. Seu http ou qualquer cliente se conecta a CompB, em seguida, atinge um CompA que você executou ssh.exe de. Você pode então encaminhar para qualquer comp que você quiser

Quando você escreve -R 1234: 127.0.0.1: 5678 Esse 127.0.0.1 pode ser alterado para ser outro computador. Para que o pedido do cliente seja encaminhado para algum outro computador

-R é o oposto de -L, embora você não precise de -L.

SSH -D

A coisa é ... pela aparência das coisas, seu destino final parece ser um servidor da Web.

Como você só quer encaminhar para um site específico, pode usar -R

Mas há também uma opção -D que você deve conhecer, que faz um proxy SOCKS que pode manipular HTTP

O ligeiro obstáculo é -D é local .. ou seja, é um pouco como -L nesse sentido.

Mas o que você poderia fazer é fazer o SOCKS Proxy na CompA,

E de A do ssh -R para compB. Então, qualquer um que se conecte a B será encaminhado para o proxy SOCKS em A e poderá acessar o servidor da web que quiser.

a resposta neste link tenta Túnel de meias reversas SSH , mas (a partir da escrita) , coloca o proxy de meias no computador errado. Esta resposta acerta. link

Mas você não está obtendo servidores da Web diferentes para pessoas diferentes.

Para isso, fique com -R

Combinar -R com -D pode ser desnecessário no seu caso, a menos que você realmente queira acessar outros sites, caso em que você precisa do proxy SOCKS (-D) e do -R

E de qualquer forma, nada disso envolve uma identificação ... mas portas diferentes com a porta determinando qual IP: PORT para encaminhar para uma vez que ele atinja o comp atrás do firewall [o comp] do qual você executou ssh.exe

    
por 25.05.2015 / 17:50
0

Para esse tipo de problema, sempre optamos por um modo Microsoft Remote Desktop para fazer a demonstração. O ambiente de demonstração é executado em um computador em seu escritório conectado à Internet, com todas as portas necessárias abertas. Isso significa que as pessoas podem usar seu navegador em qualquer dispositivo para criar uma interface web do seu servidor.

Para mostrar a demonstração, você pode usar um cliente RDP (cada sistema operacional tem pelo menos um) para conectar-se e fazer login no seu PC / servidor de demonstração e ver o back-end do Windows em seu servidor.

Normalmente, eles nem precisam abrir uma porta em seu firewall, a menos que sejam realmente restritos (apenas algumas portas abertas para o tráfego de saída, como as portas 80 e 443). Mas o RDP (3389) é geralmente uma das poucas portas que já está aberta.

    
por 25.05.2015 / 19:03