Criando proxy SOCKS5 com Tunel SSH

Introdução

Neste artigo vamos aprender como criar um proxy SOCKS5 através de um tunel SSH. E mostrar como usar esse tunel através de um http client usando php+curl e também através de navegação pelo Firefox. Esse cenário é interessante quando você precisa fazer alguma conexão em servidor remoto (http) estando em uma rede que bloqueia o acesso ao mesmo. Caso você tenha acesso a um servidor ssh externo que possua o acesso ao domínio desejado, é possível fazer o acesso usando o mecanismo descrito aqui.

Criando o Tunel Proxy SOCKS5 com SSH

Nessa primeira etapa vamos criar o proxy SOCKS5 usando SSH. Você precisa ter acesso à um servidor ssh externo. É ideal utilizar conexão com chaves, para que você não precise ficar informando a senha toda vez que precisar criar o tunel. Para trabalhar com autenticação através de chaves, você pode acessar esse meu outro artigo: SSH com Chaves

Para criar o tunel, basta executar o comando (como root):

# ssh -fnND 8080 username@sshd_server

Parâmetros:

  • -f Envia o comando ssh para segundo plano.
  • -n Redireciona stdin de /dev/null (previne leituras do stdin). Deve ser usado quando ssh roda em background.
  • -N Não executa comandos remotos. Ideal para encaminhamento de portas (port forwarding).
  • -D Especifica porta que o ssh irá escutar e atuar como SOCKS server

Execute o comando abaixo para testar se a conexão esta funcionando adequadamente:

$ curl --socks5 localhost:8080 http://www.google.com

Conectando através de PHP com CURL

Segue abaixo código http client php com curl que executa requisições http passando pelo proxy SOCKS5 que configuramos anteriormente. Veja que a configuração é bem simples, basta realizar a parametrização conforme destacado nas linhas abaixo:

<?php

// curl init
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.google.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// proxy config
curl_setopt($ch, CURLOPT_PROXY, '127.0.0.1:8080');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);

$output = curl_exec($ch);
echo $output;

Firefox

É possível configurar o Firefox e outros navegadores para navegar através de um proxy SOCKS5. Pode ser que você precise acessar um site que esta bloqueado na rede atual. Neste caso basta criar o tunel ssh com um servidor remoto no qual tenha acesso e configurar um navegador, no caso deste exemplo o Firefox, e comece a navegar através desse tunel.

Para configurar o firefox, basta ir em Menu -> Preferências -> Avançado -> Configurar Conexão. Irá abrir uma tela semelhante a figura abaixo. Escolha Configuração Manual de Proxy e informe o IP do SOCKS5 e a porta. Pronto, basta

firefox-proxy-socks5

Deixe um comentário

Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: