Muita gente acredita que a internet é composta somente por serviços que são disponibilizados através do protocolo HTTP, ou seja, em forma de site. Mesmo serviços que a princípio usam outros protocolos como FTP (transferência de arquivos), XMPP (comunicação instantânea), Email etc, podem ser acessados através de sistemas web sob HTTP.
Porém, nem todos os usuários se sentem confortáveis com esta prática. Eu, por exemplo, prefiro usar um programa específico pra ler emails (mutt), outro para mensagens instantâneas (gajim), outro para bate-papo (xchat) e assim por diante. Infelizmente, por esta prática ser, atualmente, menos comum, vários administradores de rede espalhados pelos mais diversos lugares, preferem bloquear todos os outros serviços e deixar disponível somente o bom e velho HTTP.
Além disso, a disponibilização do HTTP pode estar sendo moderada. Ou seja, quem provê a conexão com a internet pode colocar um programa intermediário entre o utilizador e o servidor de conexão para restringir o acesso a certos sites. Ou pior, para coletar dados de quem usa aquela conexão. Por mais que exista o HTTPS, protocolo que criptografa a conexão entre o cliente (o navegador) e o servidor HTTP, existe a possibilidade de haver a quebra dessa segurança no momento do handshake (quando o navegador troca chaves com o servidor).
Para a minha infelicidade, nos três últimos lugares que trabalhei (no atual, inclusive), a conexão com a internet era muito restrita. Como não tenho serviço de webmail instalado no meu servidor de emails, nem uma interface web para chat no meu servidor de mensagens instantâneas, tive que encontrar uma maneira de usar esses serviços.
Das várias vantagens de se alugar um servidor, digo que poder escolher qual em porta o serviço de conexão remota (SSH) vai escutar é, sem dúvida, uma das que mais me ajudou nessa iniciativa. Vamos a um rápido passeio sobre como consegui acessar meus serviços de comunicação vitais através das terríveis redes bloqueadas nos lugares em que trabalhei.
Primeiro passo
Configurei meu servidor SSH externo para responder na porta 443, porta normalmente usada para prover o serviço HTTPS.
Para este passo, você precisa de poderes administrativos no servidor externo em questão (vulgo root). Depois de autenticado como root,
basta adicionar a seguinte linha ao arquivo /etc/ssh/sshd_config:
Port 443
Lembrando que provavelmente você vai encontrar algo como Port 22. Não é necessário remover esta linha, você pode adicionar a linha sugerida à cima perto desta para manter seu arquivo de configuração organizado.
Outro detalhe importante. Você provavelmente não vai conseguir se conectar ao seu servidor se estiver numa internet bloqueada. Faça isso de casa ou de uma conexão 3g.
Segundo passo
Depois de se certificar de que seu servidor SSH já responde na porta 443, o próximo passo é poder se conectar a este servidor de dentro da
rede fechada.
Para finalizar esse passo, baixe o script ssh-https-tunnel e vamos configurá-lo. Apesar de estar mais do que clara a documentação do mesmo, vamos repeti-la aqui:
Crie ou edite o arquivo $HOME/.ssh/config com o editor de textos de sua preferência. Após abrir o arquivo, insira as seguintes linhas no mesmo:
host <servidor>
ProxyCommand </caminho/para/o/script/ssh-https-tunnel> %h %p
Port 443
ServerAliveInterval 10
Substitua o <servidor> pelo endereço do seu servidor de SSH externo e preencha o caminho correto para o script ssh-https-tunnel. O meu arquivo, na íntegra, fica da seguinte maneira:
host nina.comum.org
ProxyCommand /home/lincoln/Bin/ssh-https-tunnel %h %p
Port 443
ServerAliveInterval 10
Além disso, certifique-se de que o script ssh-https-tunnel tenha permissão de execução. Para ter certeza, execute o seguinte comando:
chmod +x /caminho/para/o/script/ssh-https-tunnel
Vamos agora configurar o próprio ssh-https-tunnel. Abra o arquivo com o editor de textos de sua preferência e altere as seguintes linhas:
# Proxy details
my $host = "localhost";
my $port = 8080;
# Basic Proxy Authentication - leave empty if you don't need it
my $user = "";
my $pass = "";
Nesse arquivo você deve preencher no mínimo as duas primeiras variáveis: $hosts e $port que determinam o endereço do servidor e a porta em que o proxy da sua rede está configurado.
Pronto, agora é só testar a conexão. Faça isso com o seguinte comando:
ssh <servidor>
Substitua pelo endereço que você informou no arquivo .ssh/config. No meu caso, o nina.comum.org.
Se a conexão aconteceu com sucesso, você pode passar para o próximo passo. Porém, infelizmente, esta solução serve apenas para um caso específico. Existem outras milhares de maneiras de restringir o acesso a uma rede. Estou mapeando apenas a mais comum e a que eu precisei me ver livre.
Noutro post, talvez, eu possa relatar minha experiência com um proxy NTLM que precisei me conectar para alcançar o mundo externo.
Se você não conseguiu sair desse passo, entre em contato com uma pessoa comum, é bem provável que ela possa te ajudar
Terceiro passo
O SSH é sem dúvida uma das maiores motivações técnicas que tenho para usar um sistema operacional livre. No meu caso, o Debian. Além de permitir que você se conecte a outro computador que suporte o mesmo protocolo, e de várias outras funcionalidades que, um dia ou outro você vai precisar, o ssh implementa o protocolo SOCKS5 que foi desenvolvido justamente para facilitar o roteamento de pacotes entre aplicações cliente-servidor através de um proxy.
Para começar a brincadeira, execute o ssh de modo que um proxy SOCKS5 seja levantado:
ssh -D localhost:1080 <servidor> # no meu caso, nina.comum.org
Se tudo ocorreu bem, ótimo, você já tem um proxy para suas conexões com a internet. Siga feliz para o próximo passo.
Quarto passo
Você precisa saber se a aplicação que pretende usar é compatível com o protocolo SOCKS. Uma dica objetiva é usar o Firefox (ou iceweasel, se você está no Debian). Vá até a configuração de conexão do navegador pelo caminho Editar > Preferências > Configurações > Rede e escolha o protocolo SOCKS5 e preencha o servidor com localhost e a porta com 1080. Dai é só tentar acessar algum site. Se funcionou, comemore
Se a sua aplicação não suportar o proxies que usem o protocolo SOCKS5, não se preocupe, você pode usar uma ferramenta maravilhosa, chamada tsocks que sobrescreve a chamada connect() da libc e força a requisição da aplicação executada pelo tsocks a usar seu proxy ao invés de se conectar direto.
Para instalar o tsocks, use algo como
sudo aptitude install tsocks
A configuração do tsocks é muito simples. Como root, abra o arquivo /etc/tsocks.conf e preencha da seguinte maneira:
local = 192.168.1.0/255.255.255.0
server = 127.0.0.1
server_type = 5
server_port = 1080
O único detalhe a se tomar cuidado é o preenchimento da variável local. Esta variável especifica a faixa de IP da rede em que você está. Se não configurada corretamente, o tsocks tentará passar pelo proxy sem necessidade e os serviços da sua rede local estão inacessíveis.
Eu dedico este posta ao amigo Guerrinha, afinal de contas, ele foi quem me motivou a escrevê-lo