apenas com SSH: acesso à Web de túnel reverso via proxy ssh SOCKS

15

De vez em quando eu tenho que me conectar a um servidor onde o acesso é altamente restrito.
Somente o SSH de entrada é permitido pelo firewall da DMZ.
As conexões HTTP de saída estão bloqueadas.

Estou procurando uma maneira fácil de encapsular o acesso à web através da minha sessão SSH, para que eu possa instalar atualizações e software via yum / apt-get. Idealmente, eu gostaria de evitar a instalação de software / serviços adicionais na área protegida.

O que você faz em tal situação?

O SSH tem a -D <port>opção de proxy SOCKS. Infelizmente, porém, é apenas uma via de cliente para servidor e não há opção inversa.

Kaii
fonte

Respostas:

26

Finalmente consegui fazer isso sshapenas:

  1. inicie um proxy SOCKS local em sua máquina cliente (usando ssh -D)
  2. conecte-se ao servidor remoto e configure um encaminhamento de porta reversa ( ssh -R) para o proxy SOCKS local
  3. configurar o software do servidor para usar o proxy encaminhado

1. Inicie o proxy de meias locais em segundo plano

Conecte-se ao localhost via SSH e abra o proxy SOCKS na porta 54321.

$ ssh -f -N -D 54321 localhost

-f executa o SSH em segundo plano.

Nota: Se você fechar o terminal onde iniciou o comando, o processo de proxy será interrompido. Lembre-se também de se limpar, fechando a janela do terminal quando terminar ou matando o processo!

2. conecte ao servidor remoto e configure o encaminhamento de porta reversa

Ligue a porta remota 6666 à porta local 54321. Isso disponibiliza o proxy de meias locais para o site remoto na porta 6666.

$ ssh root@target -R6666:localhost:54321

3. configure o software do servidor para usar o proxy encaminhado

Basta configurar o yum, apt, curl, wget ou qualquer outra ferramenta que suporte o SOCKS para usar o proxy 127.0.0.1:6666.

Voilá! Feliz tunelamento!


4. opcional: configure o software do servidor para usar o proxy encaminhado

Eu descobri que a instalação proxychainsno servidor de destino facilita muito as coisas.

Ele permite que qualquer software use o proxy SOCKS (par telnet), usando um LD_PRELOADtruque para redirecionar solicitações TCP e DNS de comandos arbitrários para um proxy.

Configure /etc/proxychains.confpara usar o proxy de meias encaminhadas:

[ProxyList]
# SSH reverse proxy
socks5  127.0.0.1 6666

Ferramentas arbitrárias de túnel (que usam TCP) com proxychains:

$ proxychains telnet google.com 80
$ proxychains yum update
$ proxychains apt-get update
Kaii
fonte
3

Versões mais recentes do SSH permitem usar a opção muito simples de ssh-R <[bind_address:]port>. Usar apenas a porta no host e talvez o endereço de ligação, mas não especificar a porta do lado do cliente, criará um proxy SOCKS reverso.

Isso também é afirmado nas páginas de manual das versões mais recentes do SSH:

[...] se nenhum destino explícito foi especificado, o ssh atuará como um proxy do SOCKS 4/5 e encaminhará as conexões aos destinos solicitados pelo cliente remoto do SOCKS.

Você pode testar isso com o curl conectando-se a uma API simples de "me dê meu IP", como http://ifconfig.io .

$ curl ifconfig.io

vs

$ curl --socks5 localhost:<PORT> ifconfig.io

Richard Metzler
fonte
2
Seria útil mencionar em qual número de versão esse recurso foi introduzido.
precisa saber é o seguinte
muito mais simples, obrigado!
Kaii
1
@kasperd: OpenSSH 7.6 , lançado em 03/10/2017. Verifique o terceiro marcador em Novos recursos
MestreLion 19/06/19