Quando se trata de proteger a sua pegada na web, você já deve ter ouvido falar sobre VPNs, certo? A VPN age como um intermediário entre o seu computador e a internet. Todo o tráfego passa por o servidor VPN, mascarando efetivamente o seu endereço IP e localização.
No entanto, a VPN não é a única forma de um servidor proxy. O SOCKS (Socket Secure) é um protocolo de rede semelhante que permite a comunicação com servidores através de um firewall, roteando o tráfego de rede em nome de um cliente. Comparado à VPN, o SOCKS oferece mais flexibilidade e controle sobre a configuração da rede. É útil quando você não pode instalar o cliente VPN ou não confia em um provedor de VPN.
Este guia irá demonstrar como estabelecer um túnel proxy SSH SOCKS 5 e rotear o seu tráfego web através do túnel.
Pré-requisitos
Para demonstração, usamos uma máquina local executando o Ubuntu desktop e uma máquina remota executando o Ubuntu server. Você precisa ter o SSH configurado antes de fazê-lo funcionar perfeitamente. Como estamos usando o proxy SOCKS, para testar a conexão, precisamos de um aplicativo que possa usá-lo. Firefox é um exemplo perfeito. É um navegador web moderno que suporta o túnel proxy SOCKS 5.
Se você estiver no Windows, pode usar o WSL (Windows Subsystem for Linux) para configurar um ambiente Linux local ou usar o PuTTY, um aplicativo de código aberto que pode implementar vários protocolos de rede como Telnet, rlogin, etc.
Configurando o túnel SOCKS
-
Configurando o túnel SOCKS (macOS/Linux)
No computador local, precisamos configurar uma chave SSH para garantir uma conexão segura. A chave SSH também deve ser registrada no sistema remoto. Este guia sobre configuração de autenticação baseada em chave SSH demonstra o processo em detalhes.
O seguinte comando SSH estabelecerá um túnel SOCKS para o servidor remoto:
|
1 |
ssh -i ~/.ssh/id_rsa -D 2000 -f -C -q -N <remote_username>@<remote_server> |

Vamos detalhar o comando:
-
-i: Diz ao SSH qual chave SSH usar para a conexão.
-
-D: Diz ao SSH que queremos estabelecer um túnel SOCKS. Quanto à porta, estamos usando a porta 1024. Não é um valor fixo. Você pode escolher qualquer porta entre 1024 e 65536.
-
-f: O processo SSH será executado em segundo plano (forked).
-
-C: O SSH compactará os dados antes de enviá-los para o servidor remoto. Isso pode economizar o consumo de dados e aumentar a largura de banda efetiva.
-
-q: Executa a ferramenta em modo silencioso.
-
-N: Diz ao SSH que, após estabelecer o túnel, nenhum comando será enviado.
Uma vez executado, podemos verificar se o processo iniciou corretamente. O seguinte comando imprimirá informações sobre todos os processos SSH em execução:
|
1 |
ps aux | grep ssh |

Agora, você pode fechar a janela do terminal com segurança. O processo SSH funcionará como pretendido em segundo plano.
-
Configurando o túnel SOCKS (Windows)
Para usuários do Windows, usar o PuTTY é uma solução mais fácil. Primeiro, você precisa baixar o PuTTY:

Depois de instalado, inicie o PuTTY:

Na aba Session no painel esquerdo, insira o Host Name (or IP address) do seu servidor. Quanto ao Connection type, selecione SSH. Em seguida, vá para Connection >> SSH >> Tunnels. Aqui, no campo Destination, selecione as opções mostradas na captura de tela:

Em seguida, clique em Open. Uma janela de terminal aparecerá para conectar ao servidor remoto via SSH. Faça login no servidor remoto:

Implementando o túnel SOCKS
O túnel está configurado. Qualquer aplicativo que suporte SOCKS pode usar o túnel. Para demonstração, o Firefox é um ótimo exemplo.
Primeiro, abra o Firefox. No canto superior direito, clique no ícone de menu. Vá para Settings:

Em seguida, pesquise por proxy. Clique em Settings em Configure how Firefox connects to the internet:

Depois disso, selecione Manual proxy configuration. Quanto ao SOCKS Host, use localhost ou 127.0.0.1. Depois, para a porta, insira a porta que dedicamos para o túnel SOCKS. Não se esqueça de selecionar SOCKS_v5:

Por fim, marque a opção Proxy DNS when using SOCKS_v5. Clique em OK para continuar.
Em seguida, abra uma nova aba e tente acessar qualquer página web. Por exemplo, você pode verificar seu endereço IP no CheckMyIP.
Revertendo o Proxy
Quando você não precisar mais da conexão proxy para o túnel SSH, poderá desativá-la com segurança nas configurações de proxy do Firefox:

Na janela, selecione Usar as configurações de proxy do sistema e clique em OK.
Fechando o túnel SOCKS
-
Fechando o túnel no macOS/Linux
Para fechar o túnel, precisamos encerrar manualmente o processo SSH. Precisamos do PID (ID do processo) do processo SSH. O seguinte comando revelará os PIDs de todos os processos SSH em execução:
|
1 |
ps aux | grep ssh |
Anote o processo SSH que está em execução com o comando para criar o túnel. Encerre o processo:
|
1 |
kill <tunnel_ssh_pid> |
If no option is defined, the kill command will send a generic SIGTERM signal to the target process. You can learn more about Linux process management from this tutorial.
-
Fechando o túnel no Windows
Fechar a janela do PuTTY deve fechar a conexão do túnel.
Solução de problemas
Aqui estão alguns problemas comuns que você pode enfrentar ao tentar usar o SOCKS para rotear o tráfego.
-
Firewall
Se você não conseguir estabelecer uma conexão devido a uma restrição de firewall, é provável que o firewall esteja configurado para bloquear a conexão com a porta 22. Esta é a porta padrão que o SSH usa para se conectar a sistemas remotos. Algumas portas permanecem abertas por padrão, por exemplo, a porta 80 (tráfego web geral) e a porta 443 (TLS, tráfego web seguro).
Se o servidor SSH não estiver servindo conteúdo web, podemos usar uma das portas padrão ( 80 ou 443 ) em vez da porta 22. Recomenda-se usar a porta 443 pois ela espera tráfego criptografado por padrão. Ela também criptografará o tráfego de saída. Para fazer a alteração, precisamos modificar o arquivo de configuração do SSH. Abra o arquivo em um editor de texto:
|
1 |
sudo nano /etc/ssh/sshd_config |
O SSH pode usar várias portas para sua finalidade. Role o arquivo de configuração para baixo e encontre a seção de portas:

Assim que as alterações forem feitas, salve o arquivo e feche o editor. Reinicie o serviço SSH para aplicar a alteração:
|
1 |
sudo service ssh restart |
Para verificar se a nova porta está funcionando, tente se conectar ao servidor remoto usando a nova porta:
|
1 |
ssh <remote_username>@<remote_server> -p 443 |
Se a conexão for bem-sucedida, podemos usar com segurança a porta 443 para o tunelamento SSH. Aqui está o comando revisado para estabelecer o túnel SOCKS:
|
1 |
ssh -i ~/.ssh/id_rsa -D 2000 -f -C -q -N <remote_username>@<remote_server> -p 443 |
Here, the flag -p tells SSH to use port 443.
Considerações finais
Hoje em dia, a privacidade e a segurança são algumas das maiores preocupações. Existem muitas maneiras de navegar com segurança quando você está em uma rede hostil. Na maioria dos casos, o uso de uma VPN oferecerá segurança suficiente para o tráfego da sua rede. Por outro lado, um túnel SOCKS oferecerá a segurança necessária se você não puder ou não confiar em uma VPN. Ter um túnel SOCKS também lhe dá controle total sobre a configuração.
Boa computação!
Comentários
Nenhum comentário ainda. Seja o primeiro.