Volver al Blog
José Manuel Requena Plens

Ejecutando un Bridge Tor en Linux: Guía Completa obfs4 y WebTunnel

Guía para ejecutar bridges Tor obfs4 y WebTunnel en Linux con camuflaje Nginx, firewall, monitoreo Prometheus e integración CrowdSec.

Imagen de portada de Ejecutando un Bridge Tor en Linux: Guía Completa obfs4 y WebTunnel

En 2026, más de 2.5 millones de personas usan la red Tor todos los días para acceder a Internet libre y abierto. Periodistas en regímenes autoritarios, activistas organizando protestas, denunciantes exponiendo corrupción y ciudadanos ordinarios protegiendo su privacidad — todos ellos dependen de una red que es completamente operada por voluntarios.

¿El problema? Solo hay aproximadamente 2,000 bridges sirviendo a esos millones de usuarios. Los bridges son el recurso más crítico y escaso en el ecosistema Tor — son el primer punto de contacto para usuarios en países censurados, y cada nuevo bridge ayuda directamente a alguien a acceder a la información libremente.

Esta guía te enseñará todo lo que necesitas saber sobre la red Tor, el enrutamiento onion, y cómo configurar un bridge obfs4 + WebTunnel listo para producción en Linux — completo con camuflaje Nginx, endurecimiento de firewall, monitoreo con Prometheus e integración con CrowdSec.

TL;DR — Lo Que Construirás
  • Un bridge Tor ejecutando dos pluggable transports simultáneamente: obfs4 (tráfico aleatorizado) y WebTunnel (camuflaje HTTPS)
  • Un proxy inverso Nginx que hace que el tráfico WebTunnel sea indistinguible de la navegación HTTPS normal
  • Reenvío de puertos y reglas de firewall para entornos NAT
  • Métricas de Prometheus exportables a Grafana para monitoreo en tiempo real
  • Reglas de bypass de CrowdSec para que tu IDS no bloquee clientes legítimos de Tor
  • Un stack de servicios gestionado por systemd que sobrevive reinicios

La Red Tor: Una Introducción

¿Qué es Tor?

Tor (The Onion Router) es una red descentralizada operada por voluntarios, diseñada para proteger la privacidad de los usuarios y resistir la censura. Cuando usas Tor, tu tráfico de Internet se enruta a través de una serie de relés cifrados, lo que hace que sea extremadamente difícil para cualquiera — tu ISP, gobierno o un actor malicioso — rastrear tu actividad y asociarla contigo.

Pero Tor no es solo una herramienta de privacidad. Es una parte esencial de la infraestructura de derechos humanos. En países como China, Irán, Rusia y Myanmar, donde los gobiernos bloquean activamente el acceso a la información, Tor es a menudo la única forma para que los ciudadanos accedan a Internet sin censura.

Una Breve Historia

Los orígenes de Tor se remontan a los años 90 en el Laboratorio de Investigación Naval de EE.UU. (NRL), donde investigadores Paul Syverson, David Goldschlag y Michael Reed desarrollaron el concepto de enrutamiento onion — una técnica para comunicación anónima sobre una red de computadoras. Puedes leer más sobre el historial completo de Tor en el sitio oficial.

  1. Hito Enrutamiento Onion Inventado

    Syverson, Goldschlag y Reed en el Laboratorio de Investigación Naval de EE.UU. desarrollan el concepto de cifrado en capas para comunicación anónima.

  2. Estándar Proyecto Tor Lanzado

    Roger Dingledine y Nick Mathewson (graduados del MIT) se unen a Syverson para construir 'The Onion Router' — Tor. El código se lanza como software de código abierto con aproximadamente una docena de nodos voluntarios.

  3. Estándar EFF Comienza a Financiar

    La Electronic Frontier Foundation reconoce la importancia de Tor para los derechos digitales y proporciona financiamiento crítico temprano. NRL libera el código al dominio público.

  4. Hito Tor Project, Inc. Fundada

    El Proyecto Tor se convierte en una organización sin fines de lucro 501(c)(3) con sede en Massachusetts, asegurando desarrollo y gobierno a largo plazo.

  5. Estándar Bridges Presentados

    Se desarrollan direcciones de relé secretas (bridges) para ayudar a los usuarios a eludir firewalls en países censurados donde el directorio de Tor está bloqueado.

  6. Estándar Desarrollo del Navegador Tor Comienza

    Un navegador dedicado que empaqueta Tor en una aplicación fácil de usar, reduciendo dramáticamente la barrera de entrada para usuarios no técnicos.

  7. Hito Primavera Árabe

    Tor juega un papel crítico cuando activistas en Túnez, Egipto, Libia y Siria lo utilizan para organizar protestas y comunicarse de forma segura a pesar de la censura gubernamental.

  8. Obsoleto Revelaciones de Snowden

    Las revelaciones de Edward Snowden sobre programas de vigilancia masiva global impulsan un aumento masivo en la adopción de Tor en todo el mundo.

  9. Estándar WebTunnel Lanzado

    Un nuevo pluggable transport que disfraza el tráfico de Tor como HTTPS ordinario, haciéndolo casi imposible de bloquear sin daño colateral.

  10. Hoy

    ~8,000 relés, ~2,000 bridges, y 2.5+ millones de usuarios diarios en más de 200 países. La red es completamente operada por voluntarios.

Cómo Funciona el Enrutamiento Onion

El enrutamiento onion debe su nombre a las capas de una cebolla — tus datos se envuelven en múltiples capas de cifrado, y cada relé en el circuito “pela” una capa para revelar el siguiente destino. Ningún relé único conoce jamás tanto el origen como el destino del tráfico.

DestinationExit RelayMiddle RelayGuard RelayUserDestinationExit RelayMiddle RelayGuard RelayUserCifra con 3 capas:Capa 3 (clave Guard)Capa 2 (clave Middle)Capa 1 (clave Exit)Pela Capa 3Conoce: IP del usuarioNo conoce: DestinoPela Capa 2Conoce: Nada útil(solo relé anterior y siguiente)Pela Capa 1Conoce: DestinoNo conoce: IP del usuario🧅🧅🧅 [3 capas cifradas]🧅🧅 [2 capas cifradas]🧅 [1 capa cifrada]📄 [Texto plano o HTTPS]
Enrutamiento onion: tres capas de cifrado a través de tres relés

Así es lo que hace esto seguro:

Lo Que Cada Relé Conoce
ReléConoceNo Conoce
Guard (Entrada)Tu dirección IP realQué sitios web estás visitando
MiddleSolo relé anterior y siguienteNi tu IP ni tu destino
ExitEl sitio web de destinoTu dirección IP real

Detalles técnicos clave de la construcción de circuitos de Tor (ver también la descripción general del sistema en la especificación de Tor):

  • Selección de ruta de circuito: El cliente selecciona aleatoriamente relés, evitando dos relés en la misma subred /16 o país para diversidad.
  • Intercambio de claves: Cada salto utiliza un apretón de manos ntor (basado en Curve25519) para establecer un secreto compartido, proporcionando secreto futuro perfecto.
  • Celdas de tamaño fijo: Todos los datos dentro de Tor se transmiten en celdas de 512 bytes, previniendo análisis de tráfico basado en tamaño de paquete.
  • Rotación de circuito: Los circuitos se rotan aproximadamente cada 10 minutos para limitar la ventana para ataques de correlación de tráfico.
  • Autoridades de directorio: Nueve servidores de confianza mantienen consenso sobre el estado de la red, claves de relé e indicadores.

El Ecosistema Tor: Tipos de Voluntarios

La red Tor está compuesta por diferentes tipos de nodos operados por voluntarios, cada uno sirviendo un propósito distinto:

Roles de Voluntarios de Tor
RolQué HaceNivel de RiesgoImpacto
Guard RelayPrimer salto del circuito. Ve la IP del usuario pero no el destino.BajoAlto — proporciona ancho de banda
Middle RelaySalto intermedio. No ve nada útil.Muy BajoMedio — añade ancho de banda y diversidad de ruta
Exit RelayÚltimo salto. Se conecta al destino en nombre del usuario.AltoMuy Alto — el recurso más necesario y escaso
BridgePunto de entrada oculto para usuarios en países censurados. No está listado en el directorio público de Tor.BajoCrítico — habilita directamente la evasión de censura
Snowflake ProxyProxy WebRTC efímero que ayuda a los usuarios censurados a llegar a la red Tor.Muy BajoMedio — fácil de ejecutar, incluso en una pestaña del navegador
Directory AuthorityServidor de confianza que mantiene el consenso de la red.N/ACrítico — solo existen 9, ejecutados por el Proyecto Tor

Entender los Pluggable Transports

Los censores no solo bloquean Tor por IP — usan Inspección Profunda de Paquetes (DPI) para identificar y bloquear el protocolo Tor en sí. Los pluggable transports resuelven esto disfrazando el tráfico de Tor como algo completamente diferente.

Comparación de Pluggable Transports
TransporteMétodo de DisfrazResistencia a CensuraVelocidadDespliegue
obfs4Hace que el tráfico parezca bytes aleatoriosAlto — resiste la huella dactilar DPIRápidoAmpliamente implementado, fácil de configurar
WebTunnelImita tráfico HTTPS/WebSocketMuy Alto — parece navegación web normalRápidoMás nuevo, requiere servidor web + dominio
SnowflakeUsa WebRTC a través de proxies efímerosMuy Alto — los proxies rotan constantementeVariableSolo cliente (los voluntarios ejecutan proxies de navegador)
meekDisfraza el tráfico como solicitudes a servicios en la nube (Azure, CDN)Extremo — bloquearlo significa bloquear servicios en la nubeLentoCostoso de mantener, último recurso
¿Cuál deberías ejecutar? Así es como decidir:
Quiero máximo impacto con mínima complejidad

Ejecuta un bridge obfs4. Es el pluggable transport más ampliamente implementado, fácil de configurar y sirve al número más grande de usuarios. Este es donde el Proyecto Tor necesita la ayuda más.

Ya tengo un servidor web y nombre de dominio

Ejecuta ambos obfs4 y WebTunnel. WebTunnel disfraza el tráfico de Tor como navegación HTTPS normal, haciéndolo casi imposible de bloquear. Cuando se combinan con obfs4, proporcionas dos métodos de evasión diferentes desde un único servidor.

No tengo un servidor, pero quiero ayudar ahora mismo

Instala la extensión del navegador Snowflake — toma 30 segundos y convierte tu navegador en un proxy temporal para usuarios censurados. Sin mantenimiento requerido.

Quiero contribuir el máximo ancho de banda a la red

Ejecuta un relé middle o (si estás cómodo con las implicaciones legales) un relé exit. Estos proporcionan capacidad de ancho de banda bruto para toda la red. Considera ejecutarlos en un VPS con un ISP que explícitamente permita tráfico Tor.

En esta guía, configuraremos tanto obfs4 como WebTunnel en el mismo servidor — maximizando tu impacto con una máquina única.


Requisitos Previos


Paso 1: Instalar Tor del Repositorio Oficial

Instalar Tor y Dependencias
  1. Instalar requisitos previos

    sudo apt update sudo apt install -y apt-transport-https gpg curl
  2. Añadir la clave GPG del Proyecto Tor

    curl -fsSL https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc \ | sudo gpg --dearmor -o /usr/share/keyrings/tor-archive-keyring.gpg
  3. Añadir el repositorio de Tor

    Reemplaza CODENAME con el nombre de código de tu distribución (por ejemplo, bookworm, trixie, jammy):

    CODENAME=$(lsb_release -cs) echo "deb [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] \ https://deb.torproject.org/torproject.org $CODENAME main" \ | sudo tee /etc/apt/sources.list.d/tor.list
  4. Instalar Tor y obfs4proxy

    sudo apt update sudo apt install -y tor deb.torproject.org-keyring obfs4proxy

    Verifica la instalación:

    tor --version obfs4proxy -version
    Tor version 0.4.9.6.
    obfs4proxy-0.0.14

Paso 2: Instalar WebTunnel (Opcional pero Recomendado)

WebTunnel es un pluggable transport más nuevo que disfraza conexiones de Tor como tráfico HTTPS regular. A diferencia de obfs4 (que se ve como datos aleatorios), WebTunnel realmente usa actualizaciones de WebSocket sobre HTTPS, haciéndolo casi indistinguible de la navegación web legítima. El Proyecto Tor proporciona instrucciones de configuración oficiales y una guía para construir desde la fuente.

Compilar Servidor WebTunnel
  1. Instalar Go (si aún no está instalado)

    sudo apt install -y golang-go

    Verifica que Go 1.21+ esté instalado:

    go version
  2. Clonar y compilar WebTunnel

    cd /tmp git clone https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/webtunnel.git cd webtunnel/main/server go build -o webtunnel-server . sudo cp webtunnel-server /usr/local/bin/ sudo chmod +x /usr/local/bin/webtunnel-server
  3. Verificar el binario

    /usr/local/bin/webtunnel-server --help 2>&1 | head -5

Paso 3: Configurar Tu Bridge de Tor

Ahora para la configuración principal. El archivo torrc controla todo el comportamiento de Tor.

Reemplaza los contenidos de /etc/tor/torrc con:

/​etc/​tor/​torrc
# =============================================================
# Tor Bridge Configuration — obfs4 + WebTunnel
# =============================================================

# --- General Settings ---
SocksPort 0                        # Not a client — disable SOCKS
RunAsDaemon 0                      # Managed by systemd
DataDirectory /var/lib/tor
Log notice file /var/log/tor/notices.log
Log notice syslog

# --- Security Hardening ---
DisableDebuggerAttachment 1        # Prevent ptrace/debugger attachment

# --- Bridge Mode ---
BridgeRelay 1                      # This is a bridge, not a relay
PublishServerDescriptor bridge     # Publish to BridgeDB (not public directory)

# --- ORPort — IPv4 (NAT from router) + IPv6 (direct, global) ---
# IMPORTANT: Use 0.0.0.0 for NAT environments, not 127.0.0.1
ORPort 0.0.0.0:9001
ORPort [YOUR_IPV6_ADDRESS]:9001
ExtORPort auto

# --- Contact & Identity ---
ContactInfo your-email<at>example<dot>com
Nickname YourBridgeName

# --- obfs4 Transport ---
# Port 4443 must be forwarded from your router
ServerTransportPlugin obfs4 exec /usr/bin/obfs4proxy
ServerTransportListenAddr obfs4 0.0.0.0:4443

# --- WebTunnel Transport ---
# Listens locally; Nginx reverse-proxies HTTPS to it
ServerTransportPlugin webtunnel exec /usr/local/bin/webtunnel-server
ServerTransportListenAddr webtunnel 127.0.0.1:15000
ServerTransportOptions webtunnel url=https://YOUR-DOMAIN/YOUR-SECRET-PATH

# --- Bandwidth Limits ---
# Adjust to what your connection can sustain (example: 250 Mbps)
RelayBandwidthRate 31 MBytes       # Sustained rate
RelayBandwidthBurst 35 MBytes     # Burst allowance

# --- Memory — cap internal queue memory (OOM protection) ---
MaxMemInQueues 4096 MB

# --- Statistics ---
ConnDirectionStatistics 1          # Enable connection direction stats

# --- DoS Protection ---
DoSRefuseSingleHopClientRendezvous 1

# --- Monitoring: Prometheus Metrics ---
MetricsPort 0.0.0.0:9052
MetricsPortPolicy accept 192.168.0.0/16
MetricsPortPolicy accept 127.0.0.0/8

# --- Control Port (for Nyx monitoring tool) ---
ControlPort 9051
CookieAuthentication 1

Analicemos las secciones críticas:

Opciones de Configuración Clave Explicadas

BridgeRelay 1
Modo bridge Le dice a Tor que es un bridge, no un relay público. Los bridges no se enumeran en el directorio público de Tor.
ORPort 0.0.0.0:9001
Onion Router Port (IPv4) El puerto que Tor usa para la comunicación entre relays. Usa 0.0.0.0 (no 127.0.0.1) si está detrás de NAT — Tor necesita vincularse en todas las interfaces para que el self-test pase.
ORPort [IPv6]:9001
Onion Router Port (IPv6) Si tienes una dirección IPv6 global, añade una segunda línea ORPort con tu dirección IPv6 entre corchetes. IPv6 no requiere NAT — la dirección es directamente accesible.
ExtORPort auto
Extended ORPort Canal de comunicación interno entre Tor y pluggable transports. 'auto' deja que Tor elija un puerto local aleatorio.
ServerTransportListenAddr obfs4
Dirección de escucha de obfs4 El puerto donde obfs4proxy escucha conexiones ofuscadas entrantes. Debe ser alcanzable desde Internet.
ServerTransportListenAddr webtunnel
Dirección de escucha de WebTunnel Se vincula solo a 127.0.0.1 porque Nginx maneja el HTTPS público y realiza un proxy inverso a este puerto.
DisableDebuggerAttachment 1
Endurecimiento de seguridad Impide que herramientas como ptrace o gdb se adjunten al proceso de Tor. Protege las claves criptográficas en memoria de volcados o depuración.
MaxMemInQueues 4096 MB
Límite de memoria para colas Limita la memoria que Tor utiliza para colas de circuitos. Previene escenarios de OOM (sin memoria) en servidores con alta carga de tráfico.
ConnDirectionStatistics 1
Estadísticas de dirección de conexiones Habilita la recopilación de estadísticas sobre la dirección de las conexiones (entrada vs. salida). Útil para análisis de tráfico del bridge.
DoSRefuseSingleHopClientRendezvous 1
Protección DoS Rechaza clientes que intentan hacer rendiciones de un solo salto, lo cual es un patrón de ataque común contra bridges. Refuerza el modelo de seguridad de Tor.
MetricsPort
Punto final de Prometheus Expone métricas internas de Tor en formato Prometheus. Restringe el acceso con MetricsPortPolicy.

Generar una Ruta Secreta de WebTunnel

El transporte WebTunnel usa una ruta de URL secreta que actúa como un token de autenticación. Genera una cadena aleatoria de 24 caracteres:

echo $(cat /dev/urandom | tr -cd 'a-zA-Z0-9' | head -c 24)
7Zkw18j2NWGK9X7PiiPUQRJB

Usa este valor en dos lugares:

  1. El torrc: ServerTransportOptions webtunnel url=https://your-domain.com/YOUR_SECRET
  2. La configuración de Nginx: location = /YOUR_SECRET

Paso 4: Configurar Nginx para Camuflaje WebTunnel

La belleza de WebTunnel es que tu servidor se ve como un sitio web completamente normal. Los visitantes ven una página HTML regular; solo aquellos que conocen la ruta secreta pueden conectarse al bridge de Tor. Esto se llama camuflaje o domain fronting.

Configurar Camuflaje de Nginx
  1. Crear un sitio web de camuflaje

    Esto es lo que ven los visitantes (y censores) cuando visitan tu dominio:

    sudo mkdir -p /var/www/tor-camouflage cat << 'EOF' | sudo tee /var/www/tor-camouflage/index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Welcome</title> <style> body { font-family: system-ui, sans-serif; max-width: 800px; margin: 50px auto; padding: 20px; color: #333; } h1 { color: #2c3e50; } </style> </head> <body> <h1>Welcome</h1> <p>This is a personal project page. Nothing to see here.</p> </body> </html> EOF
  2. Obtener un certificado TLS (si aún no tienes uno)

    sudo apt install -y certbot python3-certbot-nginx sudo certbot --nginx -d your-domain.com
  3. Crear el bloque de servidor de Nginx

    /​etc/​nginx/​sites-available/​tor-bridge.conf
    # Tor WebTunnel Bridge — Camouflage configuration
    # This looks like a normal HTTPS website but proxies
    # a secret path to the WebTunnel pluggable transport
    
    server {
        listen 443 ssl;
        listen [::]:443 ssl;
        http2 on;
    
        server_name your-domain.com;
    
        # TLS certificates
        ssl_certificate     /etc/letsencrypt/live/your-domain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
        ssl_protocols       TLSv1.2 TLSv1.3;
        ssl_ciphers         HIGH:!aNULL:!MD5;
    
        # === Normal website (camouflage) ===
        root /var/www/tor-camouflage;
        index index.html;
    
        location / {
            try_files $uri $uri/ =404;
        }
    
        # === WebTunnel reverse proxy (secret path) ===
        # Replace YOUR_SECRET_PATH with your generated secret
        location = /YOUR_SECRET_PATH {
            proxy_pass http://127.0.0.1:15000;
            proxy_http_version 1.1;
    
            # WebSocket upgrade headers (required for WebTunnel)
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
    
            # Standard proxy headers
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Accept-Encoding "";
            add_header Front-End-Https on;
    
            proxy_redirect off;
            proxy_buffering off;
            proxy_request_buffering off;
    
            # Long timeout for persistent Tor connections
            proxy_read_timeout 36000s;
            proxy_send_timeout 36000s;
    
            # Disable logging for the secret path (privacy)
            access_log off;
            error_log off;
        }
    }
    
    # HTTP to HTTPS redirect
    server {
        listen 80;
        listen [::]:80;
        server_name your-domain.com;
        return 301 https://$host$request_uri;
    }
  4. Habilitar el sitio y probar

    sudo ln -sf /etc/nginx/sites-available/tor-bridge.conf \ /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx
Lo que ven los censores

Sitio web HTTPS normal

Una solicitud GET / a tu dominio devuelve una página HTML simple. DPI ve tráfico TLS 1.3 estándar a un dominio registrado. Nada sospechoso.

HTTP/1.1 200 OK
Content-Type: text/html
<html>Welcome...</html>
Lo que realmente sucede

Conexión del bridge de WebTunnel

Una solicitud GET /SECRET_PATH con un encabezado Connection: Upgrade llega al servidor WebTunnel, que establece un túnel persistente para tráfico de Tor — todo dentro de la misma sesión TLS.

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
[El tráfico de Tor fluye a través del túnel]

Paso 5: Configurar Reenvío de Puertos

Si tu servidor está detrás de un router (común en configuraciones domésticas), necesitas reenviar los siguientes puertos desde la IP pública de tu router a tu IP local de servidor:

Reenvíos de Puertos Requeridos
PuertoProtocoloPropósito¿Requerido?
9001TCPORPort — comunicación entre relaysSí (siempre)
4443TCPobfs4 — transporte ofuscadoSí (si ejecuta obfs4)
443TCPHTTPS — WebTunnel vía NginxSí (si ejecuta WebTunnel)

Los pasos exactos dependen de tu router. Aquí está el proceso general:

Reenvío de Puertos de Router Genérico
  1. Accede al panel de administración de tu router (usualmente en 192.168.0.1 o 192.168.1.1)

  2. Encuentra la sección de reenvío de puertos (a menudo bajo “NAT”, “Firewall” o “Port Forwarding”)

  3. Crea reglas para cada puerto:

    • Puerto externo: 9001 → IP interna: la IP de LAN de tu servidor → Puerto interno: 9001
    • Puerto externo: 4443 → IP interna: la IP de LAN de tu servidor → Puerto interno: 4443
    • Puerto externo: 443 → IP interna: la IP de LAN de tu servidor → Puerto interno: 443 (si no está ya reenviado)
  4. Guarda y aplica los cambios

Firewall del Servidor (UFW)

Si estás usando UFW (Firewall Sin Complicaciones) en tu servidor:

sudo ufw allow 9001/tcp comment "Tor ORPort" sudo ufw allow 4443/tcp comment "Tor obfs4 Bridge" # Port 443 is likely already open if you run Nginx sudo ufw allow 443/tcp comment "HTTPS" sudo ufw reload

Si usas iptables directamente:

sudo iptables -A INPUT -p tcp --dport 9001 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 4443 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

IPv6: Sin NAT Necesario

Verifica que el puerto IPv6 esté abierto:

# Verifica que Tor escuche en IPv6 ss -tlnp6 | grep 9001 # Prueba de accesibilidad IPv6 desde otra máquina nc -6zv TU_DIRECCIÓN_IPV6 9001

Paso 6: Configuración de AppArmor

En sistemas Debian/Ubuntu, AppArmor puede restringir lo que Tor y obfs4proxy pueden hacer. Necesitas asegurar que el perfil de obfs4proxy permita la ejecución:

# Check if the profile exists sudo aa-status 2>/dev/null | grep obfs4proxy # If restricted, set to complain mode sudo aa-complain /usr/bin/obfs4proxy 2>/dev/null # Or create an explicit allow rule echo "/usr/bin/obfs4proxy mr," | sudo tee -a /etc/apparmor.d/local/system_tor sudo apparmor_parser -r /etc/apparmor.d/system_tor

Paso 7: Iniciar y Verificar

Iniciar el Puente
  1. Inicia Tor

    sudo systemctl restart tor
  2. Verifica los logs para ver si el bootstrap fue exitoso

    sudo journalctl -u tor -f --no-pager | head -30

    Busca estos mensajes clave:

    Bootstrapped 0% (starting): Starting
    Bootstrapped 5% (conn): Connecting to a relay
    Bootstrapped 10% (conn_done): Connected to a relay
    Bootstrapped 14% (handshake): Handshaking with a relay
    Bootstrapped 15% (handshake_done): Handshake with a relay done
    Bootstrapped 75% (enough_dirinfo): Loaded enough directory info to build circuits
    Bootstrapped 90% (ap_handshake_done): Handshake finished with a relay to build circuits
    Bootstrapped 95% (circuit_create): Establishing a Tor circuit
    Bootstrapped 100% (done): Done
    Self-testing indicates your ORPort 86.x.x.x:9001 is reachable from the outside. Excellent.
    Registered server transport 'obfs4' at '0.0.0.0:4443'
    Registered server transport 'webtunnel' at '127.0.0.1:15000'
  3. Verifica que los tres procesos estén en ejecución

    ps aux | grep -E "(tor|obfs4|webtunnel)" | grep -v grep

    Deberías ver tres procesos: tor, obfs4proxy, y webtunnel-server.

  4. Verifica que todos los puertos estén en escucha

    ss -tlnp | grep -E "(9001|4443|15000|9051|9052)"
    LISTEN  0  4096   0.0.0.0:9001   0.0.0.0:*  users:(("tor",pid=...,fd=...))
    LISTEN  0  4096   0.0.0.0:4443   0.0.0.0:*  users:(("obfs4proxy",pid=...,fd=...))
    LISTEN  0  4096 127.0.0.1:15000  0.0.0.0:*  users:(("webtunnel-ser",pid=...,fd=...))
    LISTEN  0  4096 127.0.0.1:9051   0.0.0.0:*  users:(("tor",pid=...,fd=...))
    LISTEN  0  4096   0.0.0.0:9052   0.0.0.0:*  users:(("tor",pid=...,fd=...))
  5. Recupera la huella digital de tu puente

    cat /var/lib/tor/fingerprint

Verificar Accesibilidad Externa

Desde otra máquina (o usando un verificador de puertos en línea), verifica que tus puertos sean accesibles:

# From another machine: nc -zv YOUR_PUBLIC_IP 9001 nc -zv YOUR_PUBLIC_IP 4443 curl -I https://your-domain.com/

Paso 8: Monitoreo con Prometheus y Grafana

Tor expone un conjunto rico de métricas vía su MetricsPort en formato Prometheus. Estas métricas te permiten monitorear el uso de ancho de banda, conexiones, construcción de circuitos y la salud del relay en tiempo real.

Configurar Scraping de Prometheus

Añade un target de scrape para tu puente Tor en tu configuración de Prometheus:

prometheus.yml (snippet)
scrape_configs:
  - job_name: 'tor-bridge'
    scrape_interval: 30s
    scrape_timeout: 10s
    metrics_path: '/metrics'
    static_configs:
      - targets: ['YOUR_SERVER_IP:9052']
        labels:
          instance: 'tor-bridge'
          nickname: 'YourBridgeName'

Métricas Clave para Monitorear

Tor expone docenas de métricas de Prometheus. Aquí están las más importantes para un operador de puente:

Métricas Esenciales de Prometheus de Tor
MétricaTipoLo que te dice
tor_relay_connections_totalCounterConexiones totales por tipo y dirección (inbound/outbound, OR/directory)
tor_relay_traffic_bytesCounterBytes totales leídos/escritos — tu contribución de ancho de banda a la red
tor_relay_flagGaugeBanderas de directorio asignadas a tu relay (Stable, Running, Valid, etc.)
tor_relay_circuits_totalGaugeNúmero de circuitos activos por estado (abiertos, cerrados, etc.)
tor_relay_streams_totalCounterStreams procesados — un proxy para conexiones reales de usuarios
tor_relay_load_oom_bytes_totalCounterEventos sin memoria — si aumenta, añade más RAM
tor_relay_load_tcp_exhaustion_totalCounterAgotamiento de puertos TCP — si aumenta, ajusta la configuración de red del kernel
process_resident_memory_bytesGaugeUso actual de RAM del proceso Tor
process_cpu_seconds_totalCounterTiempo de CPU consumido por Tor

Dashboard de Grafana

Puedes construir un panel de control Grafana comprehensivo con paneles para:

  1. Ancho de bandarate(tor_relay_traffic_bytes[5m]) — throughput en tiempo real entrada/salida
  2. Conexionestor_relay_connections_total por tipo — quién está conectándose
  3. Banderas del Relaytor_relay_flag — ¿ha reconocido la red tu puente?
  4. Circuitostor_relay_circuits_total — cuántos circuitos están activos
  5. Recursos del Sistemaprocess_resident_memory_bytes, process_cpu_seconds_total
  6. Saludtor_relay_load_oom_bytes_total, tor_relay_load_tcp_exhaustion_total

Nyx: Monitoreo Basado en Terminal

Nyx es una interfaz de usuario de terminal para monitorear Tor en tiempo real. Se conecta al ControlPort y muestra gráficos de ancho de banda, conexiones, circuitos y configuración.

sudo apt install -y nyx sudo -u debian-tor nyx

Paso 9: Integración con CrowdSec (Si Aplica)

Si ejecutas CrowdSec en el mismo servidor (común cuando ejecutas Nginx), enfrentarás un desafío: CrowdSec está diseñado para bloquear IPs maliciosas, pero los clientes del puente Tor pueden desencadenar falsos positivos. Los usuarios legítimos de Tor que se conectan a tu puente podrían ser bloqueados por tu propio IDS.

La solución es un bypass de tres capas que asegura que el tráfico de Tor nunca sea bloqueado:

Capa 1: iptables — Eludir el Firewall Bouncer

Inserta reglas ACCEPT para puertos específicos de Tor antes del CROWDSEC_CHAIN:

# IPv4 sudo iptables -I INPUT 1 -p tcp --dport 4443 -j ACCEPT # obfs4 sudo iptables -I INPUT 1 -p tcp --dport 9001 -j ACCEPT # ORPort # IPv6 sudo ip6tables -I INPUT 1 -p tcp --dport 4443 -j ACCEPT sudo ip6tables -I INPUT 1 -p tcp --dport 9001 -j ACCEPT

Capa 2: Nginx — Eludir el Lua Bouncer

Si tu bouncer de Nginx de CrowdSec usa un rewrite_by_lua_block a nivel http {}, añade una excepción para tu dominio de Tor:

/​etc/​nginx/​conf.d/​crowdsec_nginx.conf (sección modificada)
rewrite_by_lua_block {
    local cs = require "plugins.crowdsec.lib.crowdsec"

    -- Bypass CrowdSec for Tor bridge domain
    if ngx.var.host == "your-tor-domain.com" then
        -- Skip CrowdSec check entirely for Tor bridge traffic
    else
        local ok, err = cs.Allow(ngx.var.remote_addr)
        if not ok then
            ngx.exit(ngx.HTTP_CLOSE)
        end
    end
}

Capa 3: Lista Blanca del Parser de CrowdSec

Incluso con lo anterior, CrowdSec seguirá analizando tus logs de Tor y puede crear decisiones locales. Crea una lista blanca del parser para que ignore todo el tráfico a tu dominio de Tor:

/​etc/​crowdsec/​parsers/​s02-enrich/​tor-bridge-whitelist.yaml
name: custom/tor-bridge-whitelist
description: "Ignore all traffic to the Tor bridge domain"
whitelist:
  reason: "Tor bridge traffic — legitimate by definition"
  expression:
    - evt.Parsed.target_fqdn == 'your-tor-domain.com'

Para que CrowdSec detecte el target_fqdn, tus logs de Nginx deben incluir la variable $host. Crea un formato de log personalizado:

/​etc/​nginx/​conf.d/​tor_log_format.conf
# Log format with vhost prefix for CrowdSec target_fqdn detection
log_format combined_vhost
    '$host $remote_addr - $remote_user [$time_local] '
    '"$request" $status $body_bytes_sent '
    '"$http_referer" "$http_user_agent"';

Luego úsalo en tu bloque de servidor de Tor:

access_log /var/log/nginx/tor.access.log combined_vhost;

Después de hacer cambios, recarga ambos servicios:

sudo systemctl reload crowdsec sudo systemctl reload nginx

Persistir Reglas de iptables Después de Reinicios

Las reglas de bypass de iptables se perderían en el reinicio. Crea un servicio systemd para reaplicarlas:

/​etc/​systemd/​system/​tor-bypass-crowdsec.service
[Unit]
Description=Tor Bridge — iptables bypass for CrowdSec
After=crowdsec-firewall-bouncer.service
Wants=crowdsec-firewall-bouncer.service

[Service]
Type=oneshot
RemainAfterExit=yes

# IPv4: Accept Tor traffic before CROWDSEC_CHAIN
ExecStart=/bin/sh -c '\
  iptables  -C INPUT -p tcp --dport 4443 -j ACCEPT 2>/dev/null || \
  iptables  -I INPUT 1 -p tcp --dport 4443 -j ACCEPT; \
  iptables  -C INPUT -p tcp --dport 9001 -j ACCEPT 2>/dev/null || \
  iptables  -I INPUT 1 -p tcp --dport 9001 -j ACCEPT'

# IPv6: Same rules
ExecStart=/bin/sh -c '\
  ip6tables -C INPUT -p tcp --dport 4443 -j ACCEPT 2>/dev/null || \
  ip6tables -I INPUT 1 -p tcp --dport 4443 -j ACCEPT; \
  ip6tables -C INPUT -p tcp --dport 9001 -j ACCEPT 2>/dev/null || \
  ip6tables -I INPUT 1 -p tcp --dport 9001 -j ACCEPT'

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload sudo systemctl enable --now tor-bypass-crowdsec.service

Descripción General de la Arquitectura

Aquí está la arquitectura completa de lo que has construido:

📊 Monitoring

🖥️ Linux Server

🔧 Router

🌍 Censored Users

📦 Nginx :443

🛡️ CrowdSec Bypass

:4443 obfs4

:443 HTTPS

:4443 IPv6

:4443

:443

direct

ExtORPort

ExtORPort

Tor Client

(obfs4)

Tor Client

(WebTunnel)

IPv4 Port Forward

9001, 4443, 443

IPv6 Firewall

Accept 9001, 4443

iptables / ip6tables

Nginx Lua

obfs4proxy

:4443

Camouflage Page

(GET /)

WebTunnel Proxy

(GET /secret)

webtunnel-server

:15000

🧅 Tor Process

ORPort :9001 · IPv4 + IPv6

MetricsPort :9052

🧅 Tor Network

Prometheus

Grafana

Arquitectura Completa del Puente Tor (Dual-Stack IPv4 + IPv6)

Lista de Verificación

Después de que todo esté configurado, repasa esta lista de verificación para confirmar que tu bridge funciona completamente:

Verificación Posterior a la Instalación
  • Servicio Tor activo: systemctl is-active tor
  • Bootstrap al 100%: journalctl -u tor | grep "Bootstrapped 100%"
  • Prueba automática de ORPort IPv4 pasada: grep "is reachable from the outside" /var/log/tor/notices.log
  • Prueba automática de ORPort IPv6 pasada (si configurado): busca tu dirección IPv6 en el mensaje de accesibilidad
  • Tres procesos en ejecución: tor, obfs4proxy, webtunnel-server
  • Cinco puertos escuchando: 9001, 4443, 15000, 9051, 9052
  • Puerto IPv6 escuchando (si configurado): ss -tlnp6 | grep 9001
  • Configuración de Nginx válida: nginx -t
  • Página de camuflaje devuelve HTTP 200: curl -I https://your-domain.com/
  • Ruta de WebTunnel devuelve 502: curl -I https://your-domain.com/SECRET (esperado — requiere protocolo correcto)
  • Prometheus raspando: curl http://localhost:9052/metrics | head
  • Reglas de firewall permiten puertos de Tor: ufw status | grep -E "9001|4443"
  • Huella digital del puente existe: cat /var/lib/tor/fingerprint
  • Banderas del relé aparecen (¡paciencia!): tarda 1–72 horas dependiendo de la bandera
  • Accesibilidad IPv6 desde el exterior: nc -6zv TU_IPV6 9001
  • Bypass de CrowdSec funcionando (si aplica): cscli explain con una línea de log de prueba

Notas Operacionales

Qué Sucede Después de Que Comiences

  1. Estándar Bootstrap y Prueba Automática

    Tor se conecta a la red, descarga el consenso y prueba si tu ORPort es accesible. Si la prueba automática es exitosa, tu puente está operacional.

  2. Publicación del Descriptor

    Tor publica tu descriptor del puente a la Autoridad de Puentes. Tu puente se conoce en BridgeDB pero aún no se distribuye a usuarios.

  3. Estándar Distribución de BridgeDB

    BridgeDB comienza a distribuir tu línea del puente a usuarios que solicitan puentes. Puedes comenzar a ver tus primeras conexiones de clientes.

  4. Acumulación de Banderas

    Las autoridades de directorio asignan banderas basadas en el comportamiento de tu puente. 'Running' (En Ejecución) y 'Valid' (Válido) llegan primero; 'Stable' (Estable) requiere ~7 días de tiempo de actividad continuo.

  5. Hito Estado Estable

    Tu puente está totalmente integrado en la red Tor. Monitorea métricas, mantén el software actualizado y mantén el tiempo de actividad para máximo impacto.

Mejores Prácticas de Mantenimiento

Mantenimiento Continuo
  • Mantén Tor actualizado: Verifica actualizaciones semanalmente — sudo apt update && sudo apt upgrade tor
  • Monitorea logs: Verifica /var/log/tor/notices.log para advertencias y errores
  • Observa métricas: Configura alertas de Grafana para caídas inusuales de ancho de banda o fallos de conexión
  • Mantén el tiempo de actividad: La red Tor penaliza a los relays que se desconectan frecuentemente
  • Nunca elimines /var/lib/tor/pt_state/ — esto contiene tus claves obfs4. Perderlas significa obtener una nueva identidad de puente
  • ¿IP Dinámica? Si tu IP pública cambia, la línea del puente obfs4 se vuelve inválida. WebTunnel no se ve afectado (usa nombre de dominio). Considera un servicio DDNS para obfs4.
  • Renueva certificados TLS: Si usas Let’s Encrypt con renovación automática, esto se maneja automáticamente

Hacer Backup de Archivos Críticos

Estos archivos contienen la identidad de tu bridge. Perderlos significa comenzar de nuevo con una nueva huella digital:

sudo tar czf /root/tor-bridge-backup-$(date +%Y%m%d).tar.gz \ /var/lib/tor/fingerprint \ /var/lib/tor/keys/ \ /var/lib/tor/pt_state/ \ /etc/tor/torrc \ /etc/nginx/sites-available/tor-bridge.conf

Solución de Problemas

¿Algo no funciona? Vamos a diagnosticar:
Tor falla en el bootstrap (atascado por debajo del 100%)

Verifica si tu servidor puede alcanzar la red Tor:

curl -s https://check.torproject.org/ | grep -i congratulations

Si esto falla, tu ISP podría estar bloqueando Tor. Verifica la resolución de DNS e intenta usar servidores DNS públicos (8.8.8.8, 1.1.1.1).

La prueba automática de ORPort falla

Esto significa que Tor no puede alcanzar tu servidor desde afuera en el puerto 9001. Verifica:

  1. El reenvío de puertos está correctamente configurado en tu router
  2. ORPort está configurado a 0.0.0.0:9001 (no 127.0.0.1)
  3. El firewall de tu servidor permite el puerto 9001
  4. Prueba desde una máquina externa: nc -zv YOUR_PUBLIC_IP 9001
obfs4proxy se bloquea o no se inicia

Verifica AppArmor:

sudo aa-status | grep obfs4

Si está restringido, establécelo en modo de queja: sudo aa-complain /usr/bin/obfs4proxy

También verifica los permisos en el directorio de datos de Tor:

ls -la /var/lib/tor/pt_state/
WebTunnel devuelve 502 en curl (¡esto en realidad es normal!)

Un 502 Bad Gateway al hacer curl a la ruta secreta es comportamiento esperado. WebTunnel requiere un apretón de manos correcto del protocolo WebSocket/WebTunnel — un GET HTTP simple no funcionará. Si los clientes de Tor pueden conectarse, todo está bien.

No aparecen banderas del relay después de 24+ horas

Verifica que:

  1. Tu puente está publicando descriptores: grep "publishing" /var/log/tor/notices.log
  2. La prueba automática de ORPort fue exitosa
  3. Tu puente ha estado ejecutándose sin interrupciones
  4. Verifica Tor Metrics Relay Search con tu huella digital (los puentes pueden tardar 24–48h en aparecer)
Sin conexiones de clientes después de varios días

Esto es normal para puentes nuevos. BridgeDB distribuye puentes gradualmente:

  1. Confirma que tu puente aparece en Relay Search
  2. Los puentes se distribuyen según la demanda — algunos transportes obtienen más usuarios que otros
  3. Los puentes de WebTunnel tienden a obtener usuarios más rápido en regiones fuertemente censuradas
  4. Dale hasta una semana antes de preocuparte

La Red Te Necesita

Ejecutar un bridge de Tor es una de las cosas más impactantes que puedes hacer por la libertad de Internet. Cada bridge que operas es una línea de vida directa para gente bajo censura — periodistas en Irán, activistas en China, estudiantes en Rusia, ciudadanos en Myanmar. La barrera técnica es modesta; el impacto humano es inmensurable.

Tu Contribución a la Libertad de Internet

Al ejecutar un puente obfs4 + WebTunnel con monitoreo adecuado, endurecimiento de firewall y camuflaje, estás proporcionando uno de los recursos más valiosos en el ecosistema de Tor. La red tiene ~8,000 relays pero solo ~2,000 puentes — tu puente sirve directamente a los usuarios más vulnerables.

Si encontraste esta guía útil, considera compartirla con otros que podrían querer contribuir. Cuantos más bridges tengamos, más difícil será para los censores bloquear el acceso a Internet libre.

Y si quieres ir más allá: configura un servidor dedicado para exit relays — son el recurso más escaso e impactante en toda la red Tor. Esa es una guía para otro día.