Tibia com proxy tunneling no Ubuntu
Essa é minha primeira contribuição aqui. Depois de bater muito a cabeça, consegui fazer o jogo funcionar através de proxy tunneling, tanto no cliente C quanto no cliente flash.
O artigo é dividido em duas partes, a primeira é basicamente a receita do bolo sem enrolação, porém, pode ser que por uma particularidade do seu sistema ou hardware ela não funcione 100%, daí entra a segunda parte do artigo, que é um pouco mais técnica, mas vai te ajudar a resolver a maioria dos problemas que possam surgir.
Partimos da premissa que você já tenha algum serviço do proxy e saiba usá-lo, então pularei essa introdução do que é um serviço de tunneling, o foco do artigo é fazer a coisa toda funcionar no Linux.
Parte 1 - Receita (forma rápida)
Nota: Essa receita foi feita usando a arquitetura AMD-64 e com o Ubuntu Raring Ringtail (13.04).
Nota 2: Tudo que estiver dentro das tags "code" são comandos do terminal e o que estiver dentro das tags "php" são arquivos de configuração.
- Abra o terminal
- Instale o proxychains, libproxychains3 e libproxychains3-dev
Código:
sudo apt-get install proxychains libproxychains3 libproxychains-dev -y
- Como super usuário, edite o arquivo /etc/proxychains.conf
Código:
sudo gedit /etc/proxychains.conf
- Mais ou menos na linha 38, comente o parâmetro "proxy_dns" adicionando uma # antes dele
Código PHP:
# Proxy DNS requests - no leak for DNS data
# proxy_dns
- No final do arquivo, encontre a linha "socks4 127.0.0.1 9050" e altere para "socks5 127.0.0.1 5000"
Código PHP:
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
socks5 127.0.0.1 5000
- Salve o arquivo (ctrl + s) e feche o gedit.
- Como super usuário abra o arquivo /usr/bin/proxychains
Código:
sudo gedit /usr/bin/proxychains
- Altere a linha "export LD_PRELOAD=libproxychains.so.3" para ficar desse jeito:
Código PHP:
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libproxychains.so.3
- Salve o arquivo e feche o gedit.
- Abra um novo terminal, mas deixe o antigo também aberto.
- Nesse novo terminal você logará no seu servidor de proxy via ssh:
Código:
ssh seu_usuario@seuservidor -D 5000 -N
Cliente flash
- No outro terminal, elimine forçadamente todos os processos do seu navegador. Atenção, fazendo isso seu navegador fechará subitamente.
Código:
sudo pkill -f chrome
ou no caso do firefox
Código:
sudo pkill -f firefox
- No mesmo terminal abra o navegador com o proxychains
Código:
proxychains google-chrome tibia.com
no firefox
Código:
proxychains firefox tibia.com
Cliente C
Código:
proxychains ./Tibia.sh
Agora é se logar e aproveitar. ;)
Parte 2 - Entendendo cada recurso e solucionando problemas (forma lenta)
Proxychains
O proxychains é um programa que te permite executar outros programas através de um proxy, muito parecido com o proxifier do windows.
Ele se encontra nos repositórios do ubuntu, então sua instalação é bem tranquila, assim como foi mostrado anteriormente.
Além do proxychains, instalamos explicitamente a biblioteca libproxychains3, que muitas vezes não acompanha o pacote original. Essa biblioteca é essencial para a execução de programas gráficos, sem ela o máximo que você conseguiria seria dar um "wget" em algum site através do proxy.
Bom, o pulo do gato está justamente na biblioteca libproxychains3, se você acompanhou atentamente a parte 1, percebeu que no arquivo /usr/bin/proxychains o export aponta por padrão para um caminho relativo inexistente (libproxychains.so.3), você deve então manualmente encontrar o caminho do arquivo .so e colocá-lo no path do executável. Isso pode ser diferente para cada arquitetura ou distribuição (mesmo no universo do ubuntu).
Você pode usar o comando "locate" para tentar localizá-la:
Código:
locate libproxychains.so.3
Caso não encontre, uma dica é verificar o próprio pacote no repositório:
http://packages.ubuntu.com/raring/am...ains3/filelist
Veja que no meu caso eu uso o ubuntu raring em arquitetura amd64, se você por exemplo usa o saucy (13.10) em i386, ficaria assim:
http://packages.ubuntu.com/saucy/i38...ains3/filelist
Nesse caso o nosso arquivo estaria em "/usr/lib/i386-linux-gnu/libproxychains.so.3"
Note que também editamos as configurações do programa em /etc/proxychains.conf
A primeira coisa que fizemos, foi remover o tratamento de DNS (# antes do parâmetro), isso é necessário pois o programa pode se perder tentando resolver registros como "localhost" e você acaba perdendo a conexão com o túnel ou ela simplesmente não funciona.
Depois disso, colocamos explicitamente os parâmetros do proxy, usando socks5, rodando localmente (127.0.0.1) na porta 5000.
Isso quer dizer o seguinte:
Citação:
Toda vez que um programa for chamado através do proxychains, sua conexão será enviada através da porta 5000 para um outro lugar.
SSH
Esse "outro lugar" que o proxychains leva sua conexão é justamente o túnel que abrimos via ssh com aquele comandinho:
Código:
ssh seu_usuario@seuservidor -D 5000 -N
O ssh loga no servidor remoto com o parâmetro -D que diz basicamente assim:
Citação:
Estou atrás de qualquer coisa que tenha a porta 5000 aberta pra fechar uma conexão
(pegou mal essa frase hehe)
O parâmetro -N é só para assegurar que nenhuma ação será executada no servidor remoto, mantendo a conexão ativa sem prompts.
Por quê matar o navegador?
Bom, quando você fecha o navegador, não quer dizer necessariamente que os processos foram encerrados, no caso do chrome isso é mais verdade ainda, pois pra diminuir o tempo de resposta, os processos ficam em modo daemon esperando uma ação sua.
Se esses processos não forem totalmente encerrados, provavelmente quando você chamar o proxychains ele será executado em uma sessão já existente do navegador, ou seja, não terá efeito nenhum e você continuará navegando sem proxy.
Aquele comando faz o trabalho:
Não daria pra simplesmente configurar o proxy direto no navegador?
Se você quer só navegar, com certeza, é bem mais simples, basta iniciar a conexão ssh e configurar, sem a necessidade do proxychains, MAS, se você quer jogar Tibia, não dá.
O jogo é executado em flash, o flash não é built-in (não veio de fábrica no navegador) e sim um plugin, ou seja, ele é um cara meio que independente com suas próprias regras, e nesse caso ele não respeita a configuração de proxy do navegador.
Como vou saber se estou realmente usando proxy durante o jogo?
É bem simples, basta interromper o processo do túnel e verificar se seu personagem saiu do jogo, se não saiu é porque você não estava usando o proxy.
Para interromper o túnel basta dar um "ctrl + c" no processo do ssh.
É isso pessoal, espero que possa ajudar alguém =D