En un movimiento sin sentido, el Juez Pedraz de la Audiencia Nacional ha dado orden de bloquear el acceso a la aplicación de mensajería Telegram porque se está usando para copiar contenido propiedad de Telecinco, Antena3 o Movistar+… Cualquier día amanecemos sin Internet para evitar que alguien pueda ver un partido de LaLiga sin pagar. Más de 8 millones de usuarios en España pueden quedarse sin acceso.
Afortunadamente nuestros juzgados todavía están saliendo del Siglo XIX y les viene muy grande la tecnología, que aparentan no entender… o quizás lo hacen y solo es de cara a la galería el tomar estas decisiones tan ridículas.
Vamos a ver varias opciones para saltarnos el bloque de Telegram si es que se llega a hacer efectivo.
Habitualmente, cuando bloquean otros tipo de webs como las de descargas, la mayoría de operadoras españoles se limitan a que los servidores DNS que nos dan con su conexión no resuelvan las direcciones web del servicio bloqueado. Solo Movistar suele inspeccionar el tráfico de sus usuarios buscando el dominio bloqueado.
En el caso de ser un bloqueo de DNS la solución, es sencilla, dejar de usar sus DNS y empezar a utilizar unos cifrados, ya que el tráfico DNS por defecto no se cifra y es visible por nuestra operadora de Internet.
En este otro artículo contaba cuales hay y como usarlos.
La segunda opción es usar una VPN y cifrar todo el tráfico que sale de nuestros dispositivos.
Aunque siempre decimos que cuando no pagas por un producto es que el producto eres tú, hay algunos como ProtonVPN que ofrecen un servicio gratuito limitado y confiable.
Si por cualquier razón no queremos meter todo nuestro tráfico por una VPN, Telegram dispone de una opción en su configuración en la que configurar un Proxy que oculte su tráfico de los intentos de bloqueo del Gran Hermano.
Hay canales en Telegram con listados de servidores Proxy que se pueden usar gratuitamente, a cambio te añaden a tus chats a la cuenta/grupo de Telegram que patrocina o mantiene ese proxy.
Un proxy es simplemente un repetidor que no tiene posibilidad de ver el contenido de nuestras conversaciones ya que estas van entre nuestro cliente de Telegram y los servidores cifradas usando HTTPS, y con extra de cifrado si el chat tiene activado el cifrado punto a punto.
Lo único que podría ver el propietario del Proxy es la dirección IP que tu proveedor de Internet te ha asignado.
La última opción pasa por montar nuestro propio servidor Proxy para acceder a Telegram.
Para ello lo primero que tenemos que hacer es buscar un servidor virtual bien de precio fuera de España, por ejemplo en Hetzner, tienen máquinas en Alemania, Finlancia y EE.UU.
El más barato sale por poco más de 4€ al mes, 1 core y 2GB de RAM si elegimos hardware Intel/AMD y 2 cores, 4GB de RAM y 40GB de disco si optamos por hardware ARM64 Ampere.
Como sistema operativo elegiremos Ubuntu 22.04.
En nuestra primera conexión actualizaremos la lista de paquetes e instalaremos unos cuantos que necesitaremos.
apt update && apt install nginx golang certbot python3-certbot-nginx git make -y
Configuraremos el cortafuegos:
ufw allow https
ufw allow http
ufw allow ssh
Después nos bajaremos el código fuente de MTG, un proxy de Telegram hecho en Go y que es el más actualizado que he encontrado.
git clone https://github.com/9seconds/mtg.git
Ahora compilaremos MTG.
cd mtg
make static
cp mtg /usr/local/bin
Ahora vamos a montar el servicio HTTPS para simular que es un simple servidor web si viene algún visitante, editamos /etc/nginx/sites-enabled/default y cambiamos la siguiente línea:
server_name _;
Por:
server_name pedraz.louzao.network;
Cambiad pedraz.louzao.network por el dominio/subdominio que queráis usar. En Freenom podéis conseguir uno gratuito.
systemctl restart nginx
Después de reiniciar Nginx crearemos un certificado gratuito con Let’s Encrypt:
certbot --nginx
Al ir avanzando nos mostrará el dominio que hemos configurado en Nginx, lo seleccionamos y certbot se encargará de gestionar el certificado y de configurar Nginx por nosotros.
Ahora volvemos a editar /etc/nginx/sites-enabled/default para cambiar el puerto en el que Nginx va a escuchar el tráfico HTTPS de 443 a 8443, lo que nos permitirá usar el puerto 443 para nuestro Proxy.
Reiniciamos Nginx
systemctl restart nginx
Ahora vamos a crear el certificado/clave con el que nos conectaremos al Proxy, cambiad el dominio de ejemplo por el vuestro:
mtg generate-secret pedraz.louzao.network
Este comando nos devolverá una cadena parecida a esta:
7v3o0br0YZfzOzDzpGfJ7Nxwcm94eS5sb3V6YW8ubmV0d29yaw (no es la real)
La apuntaremos ya que nos hará falta para terminar la configuración y para posteriormente conectarnos.
Tocar crear el archivo de configuración en /etc/mtg.conf con el siguiente contenido:
# Esto lo dejamos por si necesitamos hacer debug más adelante.
debug = false
# Esta es la cadena generada en el paso anterior
secret = "7v3o0br0YZfzOzDzpGfJ7Nxwcm94eS5sb3V6YW8ubmV0d29yaw"
# Aquí le decimos a MTG que escuche el puerto 443
bind-to = "0.0.0.0:443"
# Número máximo de conexiones simultáneas, se puede incrementar.
concurrency = 1024
# Le indicamos que preferimos conectar por ipv4, ipv6 o solo por ipv4 usando only-ipv4 u only-ipv6
prefer-ip = "prefer-ipv4"
# Aquí le decimos en que puerto está el servidor web para simular ser lo que no somos, el puertos es el 8443 que configuramos antes en Nginx
domain-fronting-port = 8443
tolerate-time-skewness = "5s"
# Servidor DNS que usará MTG, Quad9 nos vale con su soporte de DNS sobre HTTPS
doh-ip = "9.9.9.9"
[network.timeout]
tcp = "5s"
http = "10s"
idle = "1m"
# Esto es útil en países donde se toman más en serio bloquear Telegram
[defense.anti-replay]
enabled = true
max-size = "1mib"
error-rate = 0.001
La Lista completa de opciones de configuración se puede ver aquí:
https://raw.githubusercontent.com/9seconds/mtg/master/example.config.toml
Ya solo nos queda crear el servicio que arranque esto, editamos /etc/systemd/system/mtg.service
[Unit]
Description=mMTProto proxy server
Documentation=https://github.com/9seconds/mtg
After=network.target
[Service]
ExecStart=/usr/local/bin/mtg run /etc/mtg.conf
Restart=always
RestartSec=3
DynamicUser=true
AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target
Ahora lo activaremos y lo pondremos en marcha:
systemctl daemon-reload
systemctl enable mtg
systemctl start mtg
Si todo ha ido bien, entraremos en un navegador web en nuestro dominio y no saldrá la página de bienvenida de Nginx, yo la he cambiado por una página simple de En Construcción:
Ya solo nos queda configurarlo en nuestro cliente de Telegram, en la sección Proxy de los Ajustes, seleccionaremos el tipo de proxy como MTProto:
Y listo, ya estamos a salvo de la censura absurda de un sistema judicial decimonónico que quiere cazar moscas a cañonazos.