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.

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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
Así es lo que hace esto seguro:
| Relé | Conoce | No Conoce |
|---|---|---|
| Guard (Entrada) | Tu dirección IP real | Qué sitios web estás visitando |
| Middle | Solo relé anterior y siguiente | Ni tu IP ni tu destino |
| Exit | El sitio web de destino | Tu 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
/16o 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:
| Rol | Qué Hace | Nivel de Riesgo | Impacto |
|---|---|---|---|
| Guard Relay | Primer salto del circuito. Ve la IP del usuario pero no el destino. | Bajo | Alto — proporciona ancho de banda |
| Middle Relay | Salto intermedio. No ve nada útil. | Muy Bajo | Medio — añade ancho de banda y diversidad de ruta |
| Exit Relay | Último salto. Se conecta al destino en nombre del usuario. | Alto | Muy Alto — el recurso más necesario y escaso |
| Bridge | Punto de entrada oculto para usuarios en países censurados. No está listado en el directorio público de Tor. | Bajo | Crítico — habilita directamente la evasión de censura |
| Snowflake Proxy | Proxy WebRTC efímero que ayuda a los usuarios censurados a llegar a la red Tor. | Muy Bajo | Medio — fácil de ejecutar, incluso en una pestaña del navegador |
| Directory Authority | Servidor de confianza que mantiene el consenso de la red. | N/A | Crí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.
| Transporte | Método de Disfraz | Resistencia a Censura | Velocidad | Despliegue |
|---|---|---|---|---|
| obfs4 | Hace que el tráfico parezca bytes aleatorios | Alto — resiste la huella dactilar DPI | Rápido | Ampliamente implementado, fácil de configurar |
| WebTunnel | Imita tráfico HTTPS/WebSocket | Muy Alto — parece navegación web normal | Rápido | Más nuevo, requiere servidor web + dominio |
| Snowflake | Usa WebRTC a través de proxies efímeros | Muy Alto — los proxies rotan constantemente | Variable | Solo cliente (los voluntarios ejecutan proxies de navegador) |
| meek | Disfraza el tráfico como solicitudes a servicios en la nube (Azure, CDN) | Extremo — bloquearlo significa bloquear servicios en la nube | Lento | Costoso de mantener, último recurso |
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 requisitos previos
sudo apt update sudo apt install -y apt-transport-https gpg curlAñ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.gpgAñadir el repositorio de Tor
Reemplaza
CODENAMEcon 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.listInstalar Tor y obfs4proxy
sudo apt update sudo apt install -y tor deb.torproject.org-keyring obfs4proxyVerifica la instalación:
tor --version obfs4proxy -versionTor 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.
Instalar Go (si aún no está instalado)
sudo apt install -y golang-goVerifica que Go 1.21+ esté instalado:
go versionClonar 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-serverVerificar 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:
# =============================================================
# 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 1Analicemos las secciones críticas:
Opciones de Configuración Clave Explicadas
- BridgeRelay 1
Modo bridgeLe 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 ORPortCanal 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 obfs4El puerto donde obfs4proxy escucha conexiones ofuscadas entrantes. Debe ser alcanzable desde Internet.- ServerTransportListenAddr webtunnel
Dirección de escucha de WebTunnelSe 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 seguridadImpide 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 colasLimita 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 conexionesHabilita 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 DoSRechaza 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 PrometheusExpone 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:
7Zkw18j2NWGK9X7PiiPUQRJBUsa este valor en dos lugares:
- El
torrc:ServerTransportOptions webtunnel url=https://your-domain.com/YOUR_SECRET - 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.
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> EOFObtener un certificado TLS (si aún no tienes uno)
sudo apt install -y certbot python3-certbot-nginx sudo certbot --nginx -d your-domain.comCrear 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; }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
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>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:
| Puerto | Protocolo | Propósito | ¿Requerido? |
|---|---|---|---|
| 9001 | TCP | ORPort — comunicación entre relays | Sí (siempre) |
| 4443 | TCP | obfs4 — transporte ofuscado | Sí (si ejecuta obfs4) |
| 443 | TCP | HTTPS — WebTunnel vía Nginx | Sí (si ejecuta WebTunnel) |
Los pasos exactos dependen de tu router. Aquí está el proceso general:
Accede al panel de administración de tu router (usualmente en
192.168.0.1o192.168.1.1)Encuentra la sección de reenvío de puertos (a menudo bajo “NAT”, “Firewall” o “Port Forwarding”)
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)
Guarda y aplica los cambios
Firewall del Servidor (UFW)
Si estás usando UFW (Firewall Sin Complicaciones) en tu servidor:
Si usas iptables directamente:
IPv6: Sin NAT Necesario
Verifica que el puerto IPv6 esté abierto:
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:
Paso 7: Iniciar y Verificar
Inicia Tor
sudo systemctl restart torVerifica los logs para ver si el bootstrap fue exitoso
sudo journalctl -u tor -f --no-pager | head -30Busca 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'Verifica que los tres procesos estén en ejecución
ps aux | grep -E "(tor|obfs4|webtunnel)" | grep -v grepDeberías ver tres procesos:
tor,obfs4proxy, ywebtunnel-server.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=...))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:
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:
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étrica | Tipo | Lo que te dice |
|---|---|---|
tor_relay_connections_total | Counter | Conexiones totales por tipo y dirección (inbound/outbound, OR/directory) |
tor_relay_traffic_bytes | Counter | Bytes totales leídos/escritos — tu contribución de ancho de banda a la red |
tor_relay_flag | Gauge | Banderas de directorio asignadas a tu relay (Stable, Running, Valid, etc.) |
tor_relay_circuits_total | Gauge | Número de circuitos activos por estado (abiertos, cerrados, etc.) |
tor_relay_streams_total | Counter | Streams procesados — un proxy para conexiones reales de usuarios |
tor_relay_load_oom_bytes_total | Counter | Eventos sin memoria — si aumenta, añade más RAM |
tor_relay_load_tcp_exhaustion_total | Counter | Agotamiento de puertos TCP — si aumenta, ajusta la configuración de red del kernel |
process_resident_memory_bytes | Gauge | Uso actual de RAM del proceso Tor |
process_cpu_seconds_total | Counter | Tiempo de CPU consumido por Tor |
Dashboard de Grafana
Puedes construir un panel de control Grafana comprehensivo con paneles para:
- Ancho de banda —
rate(tor_relay_traffic_bytes[5m])— throughput en tiempo real entrada/salida - Conexiones —
tor_relay_connections_totalpor tipo — quién está conectándose - Banderas del Relay —
tor_relay_flag— ¿ha reconocido la red tu puente? - Circuitos —
tor_relay_circuits_total— cuántos circuitos están activos - Recursos del Sistema —
process_resident_memory_bytes,process_cpu_seconds_total - Salud —
tor_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.
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:
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:
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:
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:
# 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:
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:
[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.targetDescripción General de la Arquitectura
Aquí está la arquitectura completa de lo que has construido:
Lista de Verificación
Después de que todo esté configurado, repasa esta lista de verificación para confirmar que tu bridge funciona completamente:
- 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 explaincon una línea de log de prueba
Notas Operacionales
Qué Sucede Después de Que Comiences
- 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.
- 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.
- 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.
- 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.
- 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
- Mantén Tor actualizado: Verifica actualizaciones semanalmente —
sudo apt update && sudo apt upgrade tor - Monitorea logs: Verifica
/var/log/tor/notices.logpara 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:
Solución de Problemas
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.
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.