Tecnologia

Como criar um proxy MTProto para usar no Telegram

Publicado em 27/06/2020    14 minutos de leitura

O Telegram atende desde pessoas comuns até jornalistas, ativistas e defensores dos direitos humanos. Muitas vezes essas pessoas enfrentam bloqueios ou censura e se torna necessário o uso de proxies. Hoje vamos conhecer um baseado no protocolo MTProto.

Um pouco de contexto

Em alguns países, o Telegram não está disponível. Ele chegou a ser bloqueado no Irã e na Rússia e com isso surgiu a necessidade de criar um proxy para burlar esses impedimentos. As pessoas precisam se comunicar, seja por qual for o motivo.

Os proxies que existiam até então, como soluções HTTP e SOCKS5, tem como grave limitação o envio de dados de autenticação sem criptografia. Assim governos autoritários eram capazes de entrar no túnel, ver o conteúdo e bloqueá-lo.

Mesmo numa rede de empresa ou faculdade eles são facilmente detectáveis e bloqueáveis por meio de Inspeção Profunda de Pacotes (DPI). E uma vez que esses proxies convencionais se tornavam públicos, logo entravam em listas de bloqueio.

Sem falar no spam gerado e até crimes, se aproveitando do frágil anonimato. Quem pagava o pato era o dono do servidor. Sobre o motivo dos bloqueios, na Rússia foi pela negativa do mensageiro em entregar dados dos usuários.

No Irã, país amigo da Rússia, o bloqueio também foi por ordem judicial, alegando suposto risco à segurança nacional. Ambos acontecem desde 2018, mas a Rússia voltou atrás recentemente. O Irã, por outro lado, intensificou a censura (não só ao Telegram) este ano.

Surge o MTProto

Para tentar contornar isso, os criadores do Telegram desenvolveram um protocolo de criptografia chamado MTProto. Baseado nele surgiu o MTProto Proxy, que funciona apenas no Telegram e fala o mesmo idioma que a criptografia nativa dele.

Isso por si só já melhora o controle de abusos e crimes.

Além de que, para adicionar o proxy, não basta um endereço e uma porta. É preciso saber também uma sequência alfanumérica chamada de “Segredo”. Caso abusem do seu proxy, basta alterar o Segredo e somente quem conhecer o novo poderá se conectar.

É um proxy totalmente criptografado e que não usa nome de usuário e senha nem envia os detalhes de autenticação em texto puro. Além disso é capaz de burlar técnicas de sondagem, como o DPI. O tráfego muito se parece com aquele gerado por acessar um site HTTPS qualquer.

Quem tentar analisar o tráfego protegido dentro de um proxy MTProto vai dar de cara com um site que o dono do túnel pode escolher, como o Google por exemplo. Isso se chama “TLS falso”, sendo uma das técnicas para driblar ferramentas de inspeção.

Outra forma é usar tamanhos de pacotes variados no tráfego produzido e assim também enganar os curiosos. Vamos aprender a usar isso tudo a seguir. Assim dificilmente existirá uma rede no mundo que impeça você de se comunicar através do Telegram.

Não importa se sua conversa é casual ou questão de vida ou morte, se você quer ter acesso ao mensageiro na faculdade ou em algum país com governo autoritário. O importante é que você estará mais protegido e terá mais privacidade no uso do Telegram.

Criando um proxy MTProto

Antes de começar

Existem várias implementações disponíveis. Aqui vamos usar uma escrita em Python, chamada de MTProtoProxy. E mais uma vez vamos precisar de um VPS rodando alguma distribuição Linux. No exemplo deste texto, vamos usar um VPS Vultr com Debian 10.

Você também pode dar uma olhada nas ofertas da Hostgator, DigitalOcean, Linode ou ReadyDedis. Os links são de afiliado e recebo uma pequena comissão. Na DigitalOcean e Vultr você ganha US$ 100 para testar o VPS por até 60 dias.

Para continuar, você precisa de noções básicas sobre como operar um VPS. Precisa saber como conectar a ele por meio de SSH e lidar com um terminal. De resto, pode seguir cegamente o tutorial que no fim vai dar certo (a menos que alterem algo significativamente).

O MTProtoProxy é um servidor leve, rápido e que possui baixa latência, bem menor que soluções tradicionais de proxy e outras mais modernas como o Shadowsocks. O MTProtoProxy suporta até 4.000 usuários simultâneos em um VPS com 1 núcleo e 1 GB de memória.

Ele permite múltiplos usar Segredos, determinar os modos para cada segredo e balancear a carga entre múltiplos núcleos de CPU executando múltiplas instâncias, entre outras configurações.

Mas para manter tudo mais simples e fácil de entender, vamos focar no básico que é criar um servidor e conectar nele.

Primeiros passos

Antes de mais nada, vamos instalar o necessário para que o servidor proxy funcione. Comece executando esse comando no terminal SSH para conseguir o que vamos precisar:

apt install git python3 python3-pip

Agora vamos instalar alguns módulos Python para melhorar o desempenho do servidor proxy. Digite os seguintes comandos no terminal SSH:

pip3 install cryptogrpaphy
pip3 install pycryptodome
pip3 install pycrypto
pip3 install uvloop

Com isso, a performance do proxy deve melhorar em cerca de 30%. A seguir explico como criar um serviço no sistema para facilitar nossas vidas e dispensar soluções como o screen. Digite esse comando no terminal SSH:

nano /etc/systemd/system/mtproxy.service

Então cole o seguinte na tela que surge no terminal:

[Unit]
Description=MTProtoProxy
After=network.target

[Service]
Type=simple
User=nobody
WorkingDirectory=/opt/mtprotoproxy
ExecStart=/bin/python3 /opt/mtprotoproxy/mtprotoproxy.py
Restart=always

[Install]
WantedBy=multi-user.target

Depois salve as alterações pressionando CTRL + O e saia do editor Nano pressionando CTRL + X. Em seguida, digite no terminal:

systemctl daemon-reload
systemctl enable mtproxy

Isso vai fazer o sistema perceber o novo serviço e também ativar ele durante o boot, caso o VPS precise ser reiniciado.

Configurando o MTProtoProxy

Agora vamos por a mão na massa. No terminal, digite:

cd /opt
git clone -b stable https://github.com/alexbers/mtprotoproxy.git
cd mtprotoproxy

Vamos editar o arquivo config.py. Ele contém os parâmetros de configuração para que o servidor proxy funcione como nós quisermos. Para começar a edição, digite no terminal SSH:

nano config.py

Esse é o conteúdo padrão do arquivo:

PORT = 443

# name -> secret (32 hex chars)
USERS = {
    "tg":  "00000000000000000000000000000001",
    # "tg2": "0123456789abcdef0123456789abcdef",
}

MODES = {
    # Classic mode, easy to detect
    "classic": False,

    # Makes the proxy harder to detect
    # Can be incompatible with very old clients
    "secure": False,

    # Makes the proxy even more hard to detect
    # Can be incompatible with old clients
    "tls": True
}

# The domain for TLS mode, bad clients are proxied there
# Use random existing domain, proxy checks it on start
# TLS_DOMAIN = "www.google.com"

# Tag for advertising, obtainable from @MTProxybot
# AD_TAG = "3c09c680b76ee91a4c25ad51f742267d"

A quantidade de linhas é grande por conta dos comentários, mas ao final vai ficar bem menor. Vamos explicar então o que significa cada coisa neste arquivo:

  • PORT: determina qual a porta pela qual o Telegram vai se conectar ao servidor. Se for possível, mantenha a 443 pois é a mesma usada para acesso a sites seguros (HTTPS) e inviável de ser bloqueada. Caso não seja possível, mude para 80, 8080 ou outra a gosto;
  • USERS: aqui você define o Segredo que será usado para se conectar ao proxy. Suporta definir vários deles, mas aqui vamos usar só um;
  • MODES: aqui você determina quais os modos de funcionamento do proxy ficarão ativos. São três possíveis: classic, secure e tls. Defina True para ativar um determinado modo ou False para desativar. Já explico cada um deles;
  • TLS_DOMAIN: aqui você informa o endereço de um site que vai servir de camuflagem para o modo tls acima (mais sobre isso a seguir);
  • AD_TAG: caso você tenha um canal no Telegram e queira promover ele aos usuários conectados no proxy, informe aqui a tag gerada pelo @MTProxyBot.

Se não quiser usar alguma das configurações, como o AD_TAG para quem não tem canal no Telegram a promover, basta colocar um sinal de jogo-da-velha # no início da linha, comentando-a. Assim o proxy vai ignorar ela.

Para gerar o código hex que forma a sequência alfanumérica de um Segredo, digite no terminal:

head -c 16 /dev/urandom | xxd -ps

Agora que você já sabe o que cada parâmetro faz, vamos reduzir o tamanho do arquivo config.py. Apague tudo dentro dele e cole isso no lugar:

PORT            = 443
USERS           = { "meuproxy":  "449ae525b009ac79ff0e5af15d64f284", }
MODES           = { "classic": True, "secure": True, "tls": True }
TLS_DOMAIN      = "www.google.com.br"
AD_TAG          = "57d83931389a87496a0390206985f9e2"
TO_CLT_BUFSIZE  = 262144
TO_TG_BUFSIZE   = 262144

Lembre de alterar a porta, caso a 443 não esteja disponível. Mas a 443 é ideal pois em algumas redes somente determinadas portas estão desbloqueadas. Altere também o Segredo na linha USERS e defina a AD_TAG se for o caso ou comente a linha.

Se quiser um endereço diferente para a camuflagem do modo TLS falso, defina na linha TLS_DOMAIN. Há um requisito para o site que é inserido aqui. Mais informações a seguir. Acima incluímos ainda dois novos parâmetros, chamados de TO_CLT_BUFSIZE e TO_TG_BUFSIZE.

Eles são indicados pelo autor do MTProtoProxy para melhorar o desempenho. Com tudo configurado, vamos iniciar o serviço e, com isso, o servidor proxy:

service mtproxy start

Obtendo as credenciais

O próprio MTProtoProxy gera os endereços que serão necessários para se conectar ao proxy no Telegram. Para ter acesso a eles, digite:

journalctl -u mtproxy | cat

Como resultado, você verá algo assim:

IPv6 found, using it for external communication
meuproxy: tg://proxy?server=123.456.789.321&port=443&secret=449ae525b009ac79ff0e5af15d64f284
meuproxy: tg://proxy?server=123.456.789.321&port=443&secret=dd449ae525b009ac79ff0e5af15d64f284
meuproxy: tg://proxy?server=123.456.789.321&port=443&secret=ee449ae525b009ac79ff0e5af15d64f2847777772e676f6f676c652e636f6d2e6272
Found uvloop, using it for optimal performance
Got cert from the MASK_HOST www.google.com.br, its length is 2502

Já que ativamos os três modos no arquivo de configuração de exemplo, foram gerados três endereços, sendo um para cada modo. Caso seu VPS tenha IPv6, aparecerão outras três linhas, também uma para cada modo. Tudo nessa sequência:

  • Primeiro endereço: modo Clássico (classic);
  • Segundo endereço: modo Seguro (secure);
  • Terceiro endereço: modo TLS falso (tls).

Se você ativou apenas alguns dos modos disponíveis, para diferenciar qual endereço usa qual modo é assim:

  • O modo Clássico não possui prefixo nem sufixo, apenas seu Segredo;
  • O modo Seguro tem o prefixo dd antes do seu Segredo;
  • O modo TLS falso tem o prefixo ee, seu Segredo e uma sequência em hex com o endereço do parâmetro TLS_DOMAIN codificado.

Opcional: se preferir, você pode registrar um domínio gratuitamente na Freenom e apontar ele para todos os IPs do seu VPS. Antes de usar ou compartilhar os links de conexão ao seu proxy, é só trocar os IPs pelo endereço do seu domínio.

O exemplo anterior, portanto, ficaria assim após você editar:

IPv6 found, using it for external communication
meuproxy: tg://proxy?server=meuproxy.ml&port=443&secret=449ae525b009ac79ff0e5af15d64f284
meuproxy: tg://proxy?server=meuproxy.ml&port=443&secret=dd449ae525b009ac79ff0e5af15d64f284
meuproxy: tg://proxy?server=meuproxy.ml&port=443&secret=ee449ae525b009ac79ff0e5af15d64f2847777772e676f6f676c652e636f6d2e6272
Found uvloop, using it for optimal performance
Got cert from the MASK_HOST www.google.com.br, its length is 2502

Mesmo que também tenham sido geradas linhas usando o endereço IPv6 do seu VPS (se disponível), as três linhas acima dão para o gasto, pois apontarão também para o endereço IPv6 do seu servidor.

Conhecendo melhor os modos

Modo Clássico

Essa é a forma mais básica de se conectar no seu servidor proxy através do Telegram para quem não precisa de técnicas avançadas e quer apenas lidar com problemas de conexão e rota, além de ter mais segurança e privacidade por meio deste proxy criptografado.

Os dois outros modos abaixo são usados para burlar bloqueios. Vamos começar pelo mais fácil de configurar.

Modo Seguro

Todo tráfego gerado pelo seu uso de sites, aplicativos, redes sociais e tudo mais em redes como a internet se dá por meio de pacotes. Não estou falando da franquia de internet da sua operadora, mas do que é enviado em cada solicitação, a cada link clicado na web.

Alguns provedores ficam de olho nesses pacotes e são capazes de identificar o proxy MTProto pelo tamanho deles. Com o modo Seguro, o proxy vai variar o tamanho dos pacotes para evitar detecção pelas ferramentas de inspeção.

Modo TLS falso

A técnica do TLS falso faz com que o proxy se passe por um site que é definido no arquivo de configuração (parâmetro TLS_DOMAIN). Assim, quando as ferramentas de inspeção analisarem o tráfego do proxy, tudo o que vão ver é o site que você definiu.

No exemplo desse texto é o Google, um site permitido em redes de quase todo o mundo. O tráfego produzido pelo proxy se parece com aquele que geramos ao acessar um site HTTPS qualquer, por isso é possível usar essa técnica.

Se você pode usar a porta 443 no seu VPS para o proxy, melhor ainda, pois é a porta destinada a esse tipo de tráfego, o que ajuda a não levantar suspeitas.

Atenção: o site que você escolher precisa usar TLS 1.3. Para saber se é o caso, digite o endereço dele nesta ferramenta e veja se aparece um sinal verde como resultado.

Ah, com o MTProtoProxy, você pode usar os três modos acima ao mesmo tempo. Basta se conectar no endereço que corresponde ao modo desejado.

Configurando os clientes

Após anotar os endereços gerados pelo proxy, envie aquele que preferir através de uma mensagem pelo próprio Telegram:

Link MTProto proxy
Envie o link gerado como mensagem para você mesmo ou amigos

Toque no link, confirme as informações e depois vá em Conectar proxy:

Adicionar MTProto proxy
Confirme os dados e conecte-se

Você saberá que está conectado quando aparecer um ícone de escudo no aplicativo do Telegram. Ele ainda serve de atalho para editar os detalhes de algum dos proxies que você tiver salvo (caso o Segredo mude, por exemplo), trocar de proxy ou parar de usá-los.

MTProto proxy em funcionamento
Ícone de escudo indica funcionamento do proxy

Caso o proxy que você criou promova um canal do Telegram, ele ficará fixado no topo da lista de conversas para quem não fizer parte dele ou não for administrador.

E é isto. Agora você dispõe de uma ferramenta de alta segurança e privacidade para usar o Telegram onde desejar. Se quiser, compartilhe o link do seu proxy com os amigos.

Caso queira uma VPN para usar no navegador, computador ou celular, conheça o Shadowsocks, aprenda como se conectar em qualquer lugar e também burlar tentativas de bloqueio ou censura.

Visitante, fique por dentro!
Para mais conteúdos como este, siga:

E se você gostou da leitura
Compartilhe esta postagem e espalhe a palavra: