- Es una herramienta que encierra cualquier programa de Linux en un entorno de red separado y envía todo su tráfico por Tor, reduciendo el riesgo de filtraciones que antes dependía de la configuración de proxy por aplicación
- Su núcleo son los namespaces de red del kernel de Linux, que hacen que la app solo vea
onion0 en lugar de las interfaces del sistema, dificultando las conexiones por fuera de ese entorno
- El enfoque de torsocks consiste en sobreescribir funciones de libc, por lo que puede haber fugas de datos con binarios estáticos o llamadas que no pasan por libc, como en el ecosistema de Zig
- oniux es una herramienta de Rust exclusiva para Linux basada en Arti y onionmasq, mientras que torsocks es una implementación en C basada en CTor, multiplataforma y usada desde hace más de 15 años
- Los usuarios pueden ejecutar
oniux antes de comandos existentes para correr curl, bash, hexchat y más, aunque deben tener en cuenta que sigue siendo una herramienta nueva y experimental
El problema de aislamiento de Tor que oniux busca resolver
- Al ejecutar apps o servicios donde la privacidad es importante, todos los paquetes deben salir realmente solo a través de Tor
- Si se configura mal el proxy o una llamada al sistema ocurre fuera del envoltorio SOCKS, los datos pueden quedar expuestos
- oniux es una utilidad de línea de comandos que ofrece aislamiento de red de Tor para aplicaciones de terceros usando namespaces de Linux
- Funciona sobre Arti y onionmasq, colocando los programas de Linux dentro de su propio namespace de red y enrutándolos por Tor
- En la parte superior de la documentación aparece una advertencia: oniux ahora tiene su propio sitio web y la versión de este artículo está bastante desactualizada
El papel de los namespaces de Linux
- Los namespaces son una función de aislamiento del kernel de Linux introducida alrededor del año 2000
- Permiten separar de forma segura partes específicas de una aplicación del resto del sistema
- Existen varios tipos de namespaces según lo que se quiera aislar
- Namespace de red
- Namespace de montaje
- Namespace de procesos
- Y varios más
- Normalmente, los recursos del sistema en Linux son accesibles globalmente para todas las aplicaciones
- El reloj del sistema operativo
- La lista completa de procesos
- El sistema de archivos
- La lista de usuarios
- Los namespaces contenedorizan partes de una aplicación respecto al resto del sistema operativo, y Docker también usa esta función para ofrecer primitivas de aislamiento
Cómo se combinan Tor y los namespaces
- oniux ejecuta cada aplicación dentro de un namespace de red que no puede acceder a las interfaces de red globales del sistema
- Dentro de ese namespace, en vez de interfaces del sistema como
eth0, solo se expone una interfaz de red personalizada llamada onion0
- Este enfoque aísla el acceso a Tor de aplicaciones arbitrarias apoyándose en primitivas de seguridad provistas por el kernel del sistema operativo
- A diferencia del enfoque con SOCKS, reduce los casos en que un error del desarrollador hace que algunas conexiones no pasen por el SOCKS configurado y terminen filtrando datos
Diferencias entre oniux y torsocks
torsocks es una herramienta que sobreescribe funciones de red de libc para enviar el tráfico por el proxy SOCKS que ofrece Tor
- Este enfoque es más multiplataforma que oniux, pero puede filtrar datos cuando las llamadas al sistema no pasan por una libc enlazada dinámicamente
- En particular, los binarios totalmente estáticos y las aplicaciones del ecosistema Zig quedan fuera del alcance de soporte de torsocks
-
oniux
- Es una aplicación independiente
- Usa namespaces de Linux
- Funciona con todas las aplicaciones
- Tiene una estructura en la que incluso una aplicación maliciosa no puede filtrar datos
- Es exclusiva de Linux
- Es una herramienta nueva y experimental
- Usa Arti como motor
- Está escrita en Rust
-
torsocks
- Requiere un daemon de Tor en ejecución
- Usa hacks de preload de
ld.so
- Solo funciona con aplicaciones que hacen llamadas al sistema a través de libc
- Una aplicación maliciosa puede hacer llamadas al sistema en raw assembly y filtrar datos
- Es multiplataforma
- Tiene más de 15 años de validación
- Usa CTor como motor
- Está escrita en C
Instalación y ejemplos de uso
- Se necesita un sistema Linux y el toolchain de Rust
- La instalación se hace con
cargo install
cargo install --git https://gitlab.torproject.org/tpo/core/oniux --tag v0.4.0 oniux
- Se puede ejecutar una solicitud HTTPS simple a través de Tor
oniux curl https://icanhazip.com
- También soporta solicitudes por IPv6
oniux curl -6 https://ipv6.icanhazip.com
- También permite acceder a servicios onion
oniux curl http://2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion/…
- El logging puede activarse con
RUST_LOG=debug
RUST_LOG=debug oniux curl https://icanhazip.com
- Si se ejecuta un shell completo a través de Tor, se pueden aislar todos los procesos dentro de él
oniux bash
- En un entorno de escritorio, también se pueden aislar aplicaciones gráficas
oniux hexchat
Flujo interno de funcionamiento
- oniux primero crea un proceso hijo con la llamada al sistema
clone(2)
- El proceso hijo queda aislado dentro de sus propios namespaces de red, montaje, PID y usuario
- Después, el proceso hijo monta su propia copia de
/proc y configura el mapeo de UID/GID para coincidir con el UID y GID del proceso padre
- Crea un archivo temporal con una entrada de nameserver para que la aplicación resuelva nombres a través de Tor, y lo monta con bind mount sobre
/etc/resolv.conf
- El proceso hijo usa onionmasq para crear una interfaz TUN llamada
onion0
- Luego configura la interfaz mediante operaciones de
rtnetlink(7), incluyendo tareas como asignar direcciones IP
- El proceso hijo pasa el file descriptor de la interfaz TUN al proceso padre a través de un socket de dominio Unix
- El proceso padre espera este mensaje después de la ejecución inicial de
clone(2)
- Una vez completada la transferencia, el proceso hijo descarta todas las capabilities que obtuvo al convertirse en el proceso root dentro del namespace de usuario
- Por último, ejecuta el comando proporcionado por el usuario usando funciones de la biblioteca estándar de Rust
Estado experimental y precauciones de uso
- oniux es una función relativamente nueva y usa software Tor reciente como Arti y onionmasq
- Por ahora funciona como se espera, pero torsocks acumula más experiencia en el mundo real tras más de 15 años de uso
- El objetivo es que oniux alcance un nivel de madurez similar al de torsocks
2 comentarios
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.
Comentarios de Hacker News
Hace como 10 años hablé de este tema con un desarrollador de Tor, cuando los namespaces de red apenas empezaban a aparecer
La retroalimentación que recibí en ese momento fue que era una forma fácil de hacer que la gente creyera equivocadamente que estaba segura, mientras seguía filtrando bastante información identificable, así que no lo impulsé más
Es cierto que las personas bajo amenazas serias deberían usar Tor Browser y seguir cuidándose de otras vías de filtración, pero si Tor se hubiera usado en todas partes, la vigilancia masiva habría sido mucho más difícil
Ahora la vigilancia masiva puede detectar quién usa Tor, pero si todos lo usaran, ese hecho no significaría mucho
¿No aplica todo esto únicamente a TCP? O sea, me pregunto cómo se podría proteger cualquier actividad que no sea TCP
Este proyecto es un intento de implementar una pila de red simple en espacio de usuario que pueda manejar estado de TCP y UDP, para poder reenviar tráfico a la red Tor
Las instrucciones de instalación de la primera página no funcionan. 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
Oniux parece una herramienta con soporte “oficial”, parecida a orjail. orjail no ha tenido commits en 4 años, pero sigue funcionando muy bien como script de shell que usa herramientas iptables/iproute [1]
orjail también tiene una opción para ejecutarse junto con firejail para aislamiento adicional, algo que Oniux todavía no parece tener
[1] https://github.com/orjail/orjail/blob/master/usr/sbin/orjail
https://raw.githubusercontent.com/orjail/orjail/master/usr/s...
Al principio pensé que esto funcionaba como torsocks, enviando el tráfico a través de un daemon de tor ejecutándose localmente
Pero vi que oniux sigue funcionando incluso si detienes el daemon local de tor, mientras que torify y torsocks no funcionan. De hecho, eso estaba escrito en la documentación. Bastante bueno
También funciona dentro de Docker, pero necesité
--privileged. Copié el binario a un contenedordebian:12y también funcionó ahí:docker run -it --rm --privileged -v "$PWD/oniux:/usr/bin/oniux" debian:12
https://tpo.pages.torproject.net/core/arti/
Dato curioso: esto ha estado roto en curl durante 5 años, y los ejemplos del blog también, porque los desarrolladores de Tor antes insistían en que las apps no debían intentar resolver nombres de dominio
.onion: https://daniel.haxx.se/blog/2025/05/16/leeks-and-leaks/Ojalá puedan encontrar una solución
Entonces, ¿esto significa que ahora puedo acceder a sitios web de Tor con Chrome?
De hecho, es relativamente fácil crear un proxy SOCKS que permita enrutar tráfico a través de un protocolo arbitrario. Por ejemplo, puedes usar un proxy SOCKS5 como capa de conversión para servir o visitar sitios web sobre syncthing: https://github.com/acheong08/syndicate
Usan hexchat en el ejemplo, pero ¿procesos así se ejecutan con la configuración del usuario? Si olvidas cambiar la configuración, ¿no se filtraría tu nombre de usuario de IRC?
Si ejecutas el navegador, ¿también podrían filtrarse las cookies?
Lo mismo podría haberse dicho de iniciar sesión en Gmail a través de Tor. Si no fuera HTTPS, claro
También seguirá siendo evidente que todos los nombres de usuario que se conectan al mismo host de IRC son la misma persona
Si intentas mantener el anonimato, IRC parece bastante riesgoso, porque mucha gente registra las horas de desconexión y puede correlacionarlas con otros eventos de caída de red
La experiencia de desarrollador aquí está muy bien hecha, tan bien que hasta un tonto podría usarla. Bien hecho por quienes la hicieron <3
Bien. Ahora solo falta que reescriban el prototipo en C y con gusto lo usaré