¿Cómo instalar MTProto Proxy en Ubuntu?

¿Cómo instalar MTProto Proxy en Ubuntu?

Hace unos días Telegram lanzo MTPRoto Proxy un proxy especial para Telegram para evitar la censura y que es parte de su proyecto para Telegram Open Network también conocido como TON. Para más información mirar el post: ¿Qué es el MTProxy? ¿Cómo se diferencia de Socks5?

Finalmente ya tenemos disponible el código fuente del mismo en GitHub y hoy os vamos a enseñar a instalarlo en Ubuntu, pero sirve para casi todas las distribuciones de linux. Nosotros lo instalamos en un VPS usando Ubuntu Server 16.04 y también lo usamos en Debian sin ningún problema.

Primeramente instalamos todas las dependencias que necesitamos para hacer la posterior instalación de MTProxy, la instalación la realizamos usando los siguientes comandos:

apt-get install nano
apt-get install git
apt-get install gcc make
apt-get install curl
apt-get install build-essential libssl-dev -y

Nano lo usamos como el editor de textos para crear y editar ficheros, git para poder copiar el repositorio del proxy de MTProto, gcc make son las herramientas para poder compilar los archivos que nos descargamos por git y crear un binario llamado "mtproto-proxy", curl para hacer peticiones de algunos ficheros de configuración a los servidores de Telegram y "build-essential libssl-dev -y" es para tener algunas herramientas para la librería de ssh que requiere el proxy en el momento de la ejecución.

Una vez tenemos todo lo anterior intalado procedemos a clonar el repositorio en la carpeta "/var" (podéis hacerlo en cualquier carpeta). Una vez finaliza el clonado del repositorio nos metemos en la carpeta "MTProxy" que se nos creo en la carpeta "/var" y dentro de la ruta "/var/MTProxy" ejecutamos el comando "make" que procederá a compilar los archivos y crear el binario "mtproto-proxy" que se guardara en la ruta "/var/MTProxy/objs/bin". Aquí os dejamos la lista de comandos a usar:

cd /var
git clone https://github.com/TelegramMessenger/MTProxy.git
cd MTProxy
make
cd /var/MTProxy/objs/bin

Una vez completado el proceso anterior nos encontramos en la ruta "/var/MTProxy/objs/bin". Así que procedemos a ejecutar y configurar el binario mtproto-proxy:

  1. Necesitamos obtener un secreto que se usa para conectarse a servidores de Telegram. Para ello usamos el siguiente comando:

curl -s https://core.telegram.org/getProxySecret -o proxy-secret

  1. Necesitamos también obtener la configuración actual de Telegram. Esta configuracón puede cambiar (ocasionalmente), por lo que le recomendamos que lo actualice una vez al día. Para descargar la configuración usamos el siguiente comando:

curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf

  1. Generamos un secreto para ser utilizado por los usuarios para conectarse a su proxy

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

En mi caso al ejecutar el comando anterior me devuelve el siguiente secreto "0c3831368fdae5f3133dbfb4da2abe14".

Ahora procedemos a ejecutarlo para comprobar su funcionamiento para ello tenemos que usar un comando como el siguiente. Asegúrate de cambiar los números despues de "-S" que corresponde al secreto que generamos con el anterior comando. En mi caso es "0c3831368fdae5f3133dbfb4da2abe14".

./mtproto-proxy -u nobody -p 8888 -H 443 -S 0c3831368fdae5f3133dbfb4da2abe14 --aes-pwd proxy-secret proxy-multi.conf -M 1

mtproto-proxy-funcionando

Resultado al usar el comando

Como podéis vez ya lo tenemos ejecutando pero hay un pequeño problema, si cerramos la consola se apaga el proceso del proxy, así que lo tenemos que convertir en un servicio. Para ello primero detenemos el proceso pulsando control + c y vamos a la ruta "/etc/systemd/system/" y creamos un archivo llamado tgproxy.service de la siguiente manera:

cd /etc/systemd/system/
nano tgproxy.service

Dentro del archivo tgproxy.service tenemos que escribir lo siguiente:

[Unit]
Description=MTProxy
After=network.target

[Service]
WorkingDirectory=/var/MTProxy/objs/bin
ExecStart=/var/MTProxy/objs/bin/mtproto-proxy -u nobody -p 8888 -H 443 -S 0c3831368fdae5f3133dbfb4da2abe14 --aes-pwd proxy-secret proxy-multi.conf -M 1

[Install]
WantedBy=multi-user.target

Una vez gurdados los cambios procedemos a activar el servicio y ejecutarlo usando los siguientes comandos:

systemctl enable tgproxy.service
systemctl start tgproxy.service

Para comprobar el estado del servicio puedes usar el siguiente comando:

systemctl status tgproxy.service

servicio-tgproxy

El resultado debería ser similar al de la imagen superior

¿Cómo mostrar un canal Sponsor en tu MTProto Proxy?

canal-patrocinado-por-proxy

Imagen canal Sponsor

Para poder mostrar un canal patrocinado a los usuarios que usan vuestro MTProto Proxy tendremos que hacer los siguiente:

  1. Usamos el bot @MTProxybot para realizar obtener el Tag
  2. Después escribir "/newproxy"
  3. Escribimos ip:puerto, la ip es la de nuestro servidor y el puerto por defecto en el proxy es el 443. Tener en cuenta que tiene que ser un ip pública, no la local. Ej: 89.40.4.149:443
  4. Después nos solicitara el secreto que es el código que habíamos generado con anterioridad y tenemos configurado en nuestro proxy. En mi caso es: "0c3831368fdae5f3133dbfb4da2abe14".
  5. Una vez hecho esto nos saldrá como resultado un mensaje similar al siguiente:
Success!
Your proxy has been successfully registered. You can now pass this proxy tag to the software you are using: fd49254bc69fca0cf32ac143d911ed29.
Here is a link to your proxy server: https://t.me/proxy?server=89.40.4.149&port=443&secret=0c3831368fdae5f3133dbfb4da2abe14
And here is a direct link for those who have the Telegram app installed: tg://proxy?server=89.40.4.149&port=443&secret=0c3831368fdae5f3133dbfb4da2abe14
  1. Como podéis ver en mi caso el tag es "fd49254bc69fca0cf32ac143d911ed29"
  2. Ahora tenemos que cambiar la configuración del servicio que habíamos creado con anterioridad y añadir la linea del Tag. Para ellos hacemos lo siguiente:
cd /etc/systemd/system/
nano tgproxy.service

Lo que hacemos es añadir después del "-S" y su código "-P" y nuestro tag como puedes ver en el siguiente ejemplo:

[Unit]
Description=MTProxy
After=network.target

[Service]
WorkingDirectory=/var/MTProxy/objs/bin
ExecStart=/var/MTProxy/objs/bin/mtproto-proxy -u nobody -p 8888 -H 443 -S 0c3831368fdae5f3133dbfb4da2abe14 -P fd49254bc69fca0cf32ac143d911ed29 --aes-pwd proxy-secret proxy-multi.conf -M 1

[Install]
WantedBy=multi-user.target
  1. Ahora tenemos que reiniciar systemctl para que aplique los cambios en la configuración y vuelva a ejecutar el proxy. Lo hacemos de la siguiente manera:
systemctl daemon-reload
systemctl restart tgproxy

configuracion-canal-patrocinado-MTProxy

Imagen explicativa del proceso con el bot

Explicación detallada del comando

./mtproto-proxy -u USERNAME -p LOCALPORT -H PUBLICPORT -S SECRET -P TAG --aes-pwd proxy-secret proxy-multi.conf -M 1

  • USERNAME es el nombre de usuario. mtproto-proxy llama a setuid() para descartar privilegios
  • LOCALPORT es el puerto local para ejecutar el proxy en el servidor
  • PUBLICPORT un puerto público que utiliza el proxy de Telegram para conectarse
  • SECRETO secreto para confirmar tu Telegram
  • TAG es la etiqueta que el bot de Telegram te envía

Importante: Tener de actualizado el archivo "proxy-multi.conf"

Para tener la configuración de Telegram actualizada, ya que pueden cambiarla ocasionalmente creamos un cron para que se actualice una vez al día de forma automática.

Para ello nos situamos en la carpeta en la que tenemos el binario. En mi caso "/var/MTProxy/objs/bin" y creamos un archivo llamado "tgcron.sh" usando nano. De la siguiente manera:

cd /var/MTProxy/objs/bin
nano tgcron.sh

Dentro del archivo tgcron.sh tenemos que meter el siguiente código:

curl -s https://core.telegram.org/getProxyConfig -o /var/MTProxy/objs/bin/proxy-multi.conf;
systemctl restart tgproxy;

Después guardas el archivo y solo nos queda darle permisos a ese archivo de la siguiente manera:

chmod 0755 /var/MTProxy/objs/bin/tgcron.sh

Y para que se ejecute una vez al día tenéis que escribir siguiente comando:

@daily /var/MTProxy/objs/bin/tgcron.sh

Otra opción que funciona igual que @daily seria usar el siguiente comando:

0 * * * * * /usr/bin/sh /var/MTProxy/objs/bin/tgcron.sh

Con esto listo ya tenemos la configuración siempre actualizada todos los días a las 00:00h.