DevSecOps

3 fev, 2017

Crie um proxy SOCKS em um servidor Linux com SSH para ignorar filtros de conteúdo

Publicidade

Você está em uma rede com acesso limitado? Alguém está filtrando seu tráfego do Internet, limitando suas habilidades? Bem, se você tem acesso SSH a qualquer servidor, você provavelmente pode configurar seu próprio proxy SOCKS5 e fazer passar todo o seu tráfego sobre SSH.

A partir desse ponto, o que você faz em seu laptop/computador é enviado criptografado para o proxy SOCKS5 (seu servidor SSH), e esse servidor envia o tráfego para o exterior.

É um túnel SSH em esteroides através do qual você pode facilmente passar tráfego HTTP e HTTPS.

E nem é tão difícil assim. Este guia é para usuários Linux/Mac OSX que têm acesso direto a um terminal, mas a mesma lógica se aplica ao PuTTy no Windows também.

Configurar o túnel SSH SOCKS5

Você configura um túnel SOCKS 5 em 2 etapas essenciais. A primeira é construir um túnel SSH para um servidor remoto.

Uma vez configurado, você pode configurar seu navegador para se conectar à porta TCP local que o cliente SSH expôs, que então transportará os dados através do servidor SSH remoto.

Isso se resume a algumas ações-chave:

  1. Você abre uma conexão SSH para um servidor remoto. Ao abrir essa conexão, seu cliente SSH também abrirá uma porta TCP local, disponível apenas para o seu computador. Neste exemplo, usarei a porta TCP local :1337.
  2. Você configura seu navegador (Chrome/Firefox/…) para usar esse proxy local em vez de sair diretamente na Internet.
  3. O servidor SSH remoto aceita sua conexão SSH e atuará como o proxy/vpn de saída para essa conexão SOCKS5.

Para iniciar tal conexão, execute o seguinte comando em seu terminal.

$ ssh -D 1337 -q -C -N user@ma.ttias.be

O que esse comando faz é:

  1. -D 1337: abrir um proxy SOCKS na porta local :1337. Se essa porta estiver tomada, tente um número de porta diferente. Se você quiser abrir vários proxies SOCKS para vários endpoints, escolha uma porta diferente para cada um.
  2. -C: comprimir dados no túnel, economizar largura de banda.
  3. -q: modo quiet, não exibindo nada localmente.
  4. -N: não executar comandos remotos, úteis apenas para encaminhamento de portas.
  5. user@ma.ttias.be: o servidor SSH remoto ao qual você tem acesso.

Depois de executar isso, o ssh permanecerá em primeiro plano até que você dê um CTRL + C para cancelá-lo. Se você preferir mantê-lo em execução em segundo plano, adicione -f para forká-lo para um comando de fundo:

$ ssh -D 1337 -q -C -N -f user@ma.ttias.be

Agora você tem um túnel SSH entre seu computador e o host remoto, neste exemplo ma.ttias.be.

Usar proxy SOCKS no Chrome/Firefox

Em seguida: diga ao seu navegador para usar esse proxy. Isso é algo que deve ser feito por aplicativo, pois não é um proxy de todo o sistema.

No Chrome, vá para a tela chrome://settings/ e clique em Advanced Settings. Localize Proxy Settings.

No Firefox, vá para Preferences > Advanced > Network e localize configurações de Connection. Altere-os como tal:

De agora em diante, seu navegador se conectará ao localhost : 1337, que é pego pelo túnel SSH para o servidor remoto, que então se conecta aos seus sites HTTP ou HTTPs.

Tráfego criptografado

Isso tem algumas vantagens e algumas ressalvas. Por exemplo, a maior parte do seu tráfego está agora criptografada.

O que você envia entre o navegador e o proxy SOCKS local é criptografado se você visitar um site HTTPS, é texto simples se você visitar um site HTTP.

O que o seu cliente SSH envia entre o computador e o servidor remoto é sempre criptografado.

O que o seu servidor remoto faz para se conectar ao website solicitado pode ser criptografado (se for um site HTTPS) ou pode ser texto simples, no caso de HTTP simples.

Algumas partes do proxy SOCKS são criptografadas, outras não.

Ignorando as limitações do firewall

Se você estiver em algum lugar com acesso limitado, talvez não tenha permissão para abrir uma conexão SSH para um servidor remoto. Você só precisa obter uma conexão SSH em andamento, e você está pronto para ir.

Assim, como uma alternativa, execute o seu servidor SSH em portas adicionais, como :80, :443 ou :53: tráfego web e DNS normalmente é permitido fora de redes. Sua melhor aposta é :443, já que já é um protocolo criptografado e tem menos chance de um middleware deep packet inspection bloquear a sua conexão porque ele não segue o protocolo esperado.

As chances de :53 funcionar também são bastante escassas, como a maioria dos DNS é baseada em UDP, e TCP é apenas para uso em qualquer transferência de zona ou raras ocasiões DNS.

Testando o proxy SOCKS5

Visite qualquer website qual é o meu IP e atualize a página antes e depois da configuração do proxy SOCKS.

Se tudo correu bem, seu IP deve mudar para o de seu servidor SSH remoto, como agora é o IP de saída para a sua navegação na web.

Se o seu túnel de SSH está em baixo, caiu ou ainda não tinha sido iniciado, o seu browser irá gentilmente dizer-lhe que o proxy SOCKS não está respondendo.

Se for esse o caso, reinicie o comando ssh, experimente uma porta diferente ou verifique as configurações de firewall locais.

***

Mattias Geniar faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: https://ma.ttias.be/socks-proxy-linux-ssh-bypass-content-filters/.