4 puntos por GN⁺ 2025-06-02 | 2 comentarios | Compartir por WhatsApp
  • Oniux es una herramienta de aislamiento a nivel de kernel que fuerza que todo el tráfico de las apps de Linux pase por la red Tor, minimizando el riesgo de fuga de datos
  • Aprovecha los namespaces de Linux para aislar cada app en un entorno de red independiente y habilitar una comunicación segura a través de Tor
  • A diferencia de torsocks, también funciona con apps que no usan libc o son binarios estáticos, bloqueando rutas directas de fuga de datos de apps maliciosas
  • Oniux está escrito en Rust sobre una nueva base de Arti y onionmasq, reforzando tanto la seguridad como la escalabilidad
  • Actualmente, Oniux es una herramienta experimental; aunque no tiene la misma estabilidad comprobada que torsocks, destaca como una solución de próxima generación para el aislamiento de tráfico Tor

Presentación de Oniux

Oniux es una utilidad de línea de comandos que eleva notablemente el nivel de protección de la privacidad mediante el aislamiento de red Tor en Linux. Está diseñada para que desarrolladores, activistas e investigadores puedan bloquear por completo la posibilidad de fuga de datos causada por configuraciones de proxy incorrectas o pequeños descuidos. Oniux funciona sobre Arti y onionmasq, y aísla cualquier app de Linux en un namespace de red separado para forzar que todo su tráfico se enrute únicamente por la red Tor.

Qué es un namespace de Linux

  • Un namespace es una función principal de aislamiento del kernel de Linux
  • Separa lógicamente ciertos recursos de una aplicación del resto del sistema
  • Permite aislar distintos recursos como red, montajes y procesos
  • Cada namespace separa recursos del sistema operativo, por lo que se usa en entornos de contenedores o con fines de seguridad
  • Soluciones de contenedores ampliamente conocidas como Docker usan los namespaces como principio básico

Qué significa combinar Tor y namespaces

  • Los namespaces protegen con aislamiento total el acceso a la red Tor de aplicaciones arbitrarias
  • Cada app se coloca de forma independiente en un namespace de red, exponiendo únicamente una interfaz personalizada llamada onion0
  • Como la app no puede acceder a las interfaces de red globales del sistema operativo (por ejemplo, eth0), se puede maximizar la seguridad
  • A diferencia del enfoque de proxy basado en SOCKS, no existe riesgo de fuga directa de tráfico por errores o fallas

Comparación entre Oniux y torsocks

  • Torsocks intercepta las funciones de red de libc mediante la técnica LD_PRELOAD para redirigirlas al proxy SOCKS de Tor
  • Oniux funciona mediante aislamiento con namespaces, por lo que evita al 100% las fugas de tráfico incluso con binarios estáticos o lenguajes como Zig
  • Comparación principal
    • Oniux: no requiere un daemon de Tor independiente, usa namespaces, soporta todas las apps, bloquea incluso syscalls directas de apps maliciosas, solo para Linux, nuevo/experimental, basado en Arti, escrito en Rust
    • Torsocks: requiere daemon de Tor, usa hackeo de ld.so, solo soporta apps enlazadas con libc, las syscalls directas pueden filtrar tráfico, multiplataforma, validado por más de 15 años, motor CTor, escrito en C

Cómo usar Oniux

  • Se necesita un sistema Linux con entorno de desarrollo de Rust configurado
  • Oniux puede instalarse y ejecutarse fácilmente desde la línea de comandos

Ejemplos principales de uso:

  • $ oniux curl https://icanhazip.com # Consultar la IP obtenida a través de Tor
  • $ oniux bash # Ejecutar todo el shell con aislamiento Tor
  • $ oniux hexchat # También puede forzar el tráfico de apps GUI a través de Tor
  • $ RUST_LOG=debug oniux curl ... # Soporte de logging para depuración

Funcionamiento interno

  • Oniux crea un proceso hijo en namespaces independientes de red, montaje, PID y usuario mediante la syscall clone(2)
  • El proceso hijo monta /proc de forma independiente y ajusta permisos con mapeo de UID/GID
  • Monta por bind un archivo temporal con información del nameserver en /etc/resolv.conf para forzar el uso de un resolvedor de nombres basado en Tor
  • Crea una interfaz TUN (onion0) con onionmasq y luego asigna y configura la IP
  • El proceso hijo transfiere el fd de la interfaz al proceso padre mediante un socket de dominio Unix y minimiza privilegios
  • Finalmente, usando capacidades de Rust, ejecuta el comando ingresado por el usuario

La naturaleza experimental de Oniux

  • Oniux es una versión inicial construida sobre tecnologías nuevas como Arti y onionmasq
  • Aunque actualmente funciona correctamente, aún carece de la experiencia acumulada de madurez que sí tiene torsocks tras muchos años
  • Se necesita retroalimentación diversa de uso real para asegurar estabilidad y mejorar el rendimiento

Créditos y apoyo

  • Se expresa agradecimiento a desarrolladores como 7ppKb5bW, que brindaron consejos para el desarrollo de smoltcp, una pila IP basada en Rust, y sobre cómo aprovechar los user namespaces
  • El proyecto oniux se mantiene gracias al apoyo de The Tor Project y su comunidad, y se recomienda contribuir para impulsar la privacidad y el software abierto

2 comentarios

 
ndrgrd 2025-06-03

Tor no parece estar mal para la privacidad, pero no estoy seguro de que sea una herramienta adecuada para el anonimato. También se dice que las agencias estatales ya tienen controlados los nodos de salida.

 
GN⁺ 2025-06-02
Comentarios de Hacker News
  • Hace como 10 años, cuando los namespaces de red se pusieron de moda, tuve una conversación con desarrolladores de Tor sobre este tema. Si recuerdo bien, el comentario que recibí entonces fue que el aislamiento mediante namespaces hace que la gente se sienta segura, pero que todavía puede filtrarse mucha información identificable, así que no siguieron impulsándolo.
    • Creo que fue un error estratégico por parte del equipo de Tor enfatizar tanto ese punto. Es cierto que quienes están expuestos a amenazas serias deberían usar Tor Browser y también cuidar otras vías de filtración de información, pero si Tor se hubiera vuelto la opción por defecto para todos, la vigilancia masiva en sí misma habría sido mucho más difícil. Ahora, el simple hecho de quién usa Tor ya es objeto de vigilancia, pero si todos lo usaran, esa información dejaría de tener sentido.
    • torsock y torify básicamente cumplen el mismo papel, pero me da la impresión de que son menos robustos.
  • En mi caso, siguiendo los comandos de la guía de instalación no funciona. Hay que cambiar el número de versión de 0.4.0 a 0.5.0.
    cargo install --git https://gitlab.torproject.org/tpo/core/oniux oniux@0.5.0
  • Yo asumía que, como torsocks, el tráfico salía a través de un demonio local de Tor. Pero aunque apague el demonio local de Tor, oniux sigue funcionando bien, mientras que torify y torsocks no. Viendo la documentación, efectivamente así está diseñado. Me pareció un dato muy curioso. También funciona bien en Docker, aunque tuve que usar la opción --privileged, y simplemente copiar el binario a un contenedor debian:12 también me funcionó.
    docker run -it --rm --privileged -v "$PWD/oniux:/usr/bin/oniux" debian:12
  • Me pregunto si todo esto aplica solo a TCP, o sea, si también se protege el tráfico que no es TCP.
    • No lo sé en detalle, pero viendo https://gitlab.torproject.org/tpo/core/onionmasq, parece que están intentando crear un stack de red en espacio de usuario que soporte no solo TCP sino también UDP y lo reenvíe a la red Tor.
    • Me pregunto cómo manejan YouTube, DNS y HTTP/3 quienes usan Tor Browser.
    • El tráfico que no es TCP no se enruta; simplemente falla la transmisión.
  • Oniux parece ser una herramienta con soporte oficial. Es parecida a orjail, aunque orjail no ha tenido commits en 4 años y aun así sigue funcionando bien como script de shell junto con herramientas iptables/iproute.
    orjail también tiene una opción para aislamiento adicional con firejail, algo que Oniux todavía no tiene.
    https://github.com/orjail/orjail/blob/master/usr/sbin/orjail
  • Ahora me pregunto si ya es posible acceder a sitios .tor con Chrome.
    • Se puede, pero no lo recomendaría. Chrome no tiene las distintas estrategias anti-fingerprinting que sí tiene Tor Browser. Si usas un navegador común, destacas aún más.
    • En realidad, desde hace tiempo se puede acceder desde navegadores como Chrome siempre que configures bien la variable de entorno del proxy (o la configuración). El puerto estándar del demonio de Tor es 9050. También es relativamente fácil escribir directamente un proxy SOCKS para enrutar tráfico. Por ejemplo, se puede enviar tráfico a algo como Syncthing usando un proxy socks5.
      https://github.com/acheong08/syndicate
  • Ponen a hexchat como ejemplo, pero si se usan tal cual los ajustes del perfil del usuario, ¿no se filtraría el nombre de usuario de IRC?
    Si se lanza un navegador, también podrían filtrarse cosas como las cookies.
    • La separación de roles es importante. Tor invierte mucho esfuerzo en evitar el fingerprinting, pero en esencia el objetivo de Tor y de Oniux es que no se pueda rastrear la IP de origen. Si inicias sesión en Gmail a través de Tor, pasa el mismo tipo de problema (salvo que no se use HTTPS).
    • Me pregunto qué significa exactamente "filtrar el nombre de usuario". En la práctica, eso solo revela que ese nombre de usuario está usando Tor. Si el mismo nombre de usuario se conecta repetidamente al mismo host de IRC, sí puede revelarse que se trata de la misma persona. Si lo que se busca es anonimato, IRC es una opción bastante riesgosa. Mucha gente guarda registros vinculados a eventos como cortes de conexión de red, así que puede haber exposición por correlación.
  • La parte de DevEx (experiencia de desarrollo) está realmente muy bien lograda, hasta el punto de sentirse a prueba de tontos. Quisiera aplaudir al equipo de desarrollo.
    • En realidad no creo que sea totalmente así. Los tontos siempre encuentran formas creativas de equivocarse, y garantizar anonimato requiere una operación extremadamente cuidadosa, a un nivel que probablemente no se le puede pedir a la mayoría de los usuarios.
  • Si reescribieran el código en C, lo usaría con gusto.
    • Ya está escrito en Rust. Me da curiosidad por qué querrías específicamente una versión en C.