- यह एक ऐसा टूल है जो किसी भी Linux प्रोग्राम को अलग नेटवर्क वातावरण में सीमित करके उसका सारा ट्रैफ़िक Tor के जरिए भेजता है, जिससे ऐप-स्तरीय proxy settings पर निर्भर रहने से होने वाले leak जोखिम कम होते हैं
- इसका मुख्य आधार Linux kernel के network namespaces हैं, जो ऐप को सिस्टम interfaces की जगह केवल
onion0 दिखाते हैं, जिससे bypass connections करना कठिन हो जाता है
- मौजूदा torsocks libc functions को override करने के तरीके पर आधारित है, इसलिए static binaries या Zig ecosystem जैसे ऐसे calls में डेटा लीक हो सकता है जो libc से होकर नहीं जाते
- oniux, Arti और onionmasq पर आधारित Linux-only Rust टूल है, जबकि torsocks, CTor पर आधारित C implementation है, cross-platform है, और 15 साल से अधिक समय से इस्तेमाल में है
- उपयोगकर्ता मौजूदा command के आगे
oniux जोड़कर curl, bash, hexchat आदि चला सकते हैं, लेकिन यह ध्यान रखना चाहिए कि यह नया और experimental टूल है
oniux जिस Tor isolation समस्या को हल करना चाहता है
- जब privacy-संवेदनशील apps या services चलाई जाती हैं, तो यह ज़रूरी है कि हर packet वास्तव में सिर्फ Tor के जरिए ही बाहर जाए
- अगर proxy settings गलत डाली जाएँ या SOCKS wrapper के बाहर system calls हो जाएँ, तो डेटा उजागर हो सकता है
- oniux एक command-line utility है जो Linux namespaces का उपयोग करके third-party applications को Tor network isolation प्रदान करती है
- यह Arti और onionmasq के ऊपर काम करती है और Linux प्रोग्राम्स को उनके अपने network namespace में रखकर Tor के जरिए route करती है
- दस्तावेज़ के शीर्ष पर चेतावनी दी गई है कि oniux की अब अलग वेबसाइट है और इस लेख का version number काफी पुराना हो चुका है
Linux namespaces की भूमिका
- Namespaces Linux kernel की isolation सुविधा हैं, जिन्हें लगभग 2000 के आसपास पेश किया गया था
- इनके जरिए किसी application के कुछ हिस्सों को सिस्टम के बाकी हिस्सों से सुरक्षित रूप से अलग किया जा सकता है
- namespaces, isolation के लक्ष्य के अनुसार कई प्रकार के होते हैं
- network namespace
- mount namespace
- process namespace
- और कई अन्य प्रकार
- Linux के system resources पर सामान्यतः सभी applications वैश्विक रूप से पहुँच सकती हैं
- operating system clock
- पूरी process list
- file system
- user list
- namespaces, application के कुछ हिस्सों को operating system के बाकी भाग से containerize करते हैं, और Docker भी isolation primitives देने के लिए इसी सुविधा का उपयोग करता है
Tor और namespaces को साथ जोड़ने का तरीका
- oniux हर application को ऐसे network namespace के भीतर चलाता है जहाँ उसे पूरे सिस्टम के network interfaces तक पहुँच नहीं मिलती
- उस namespace में
eth0 जैसे सिस्टम interfaces की जगह केवल custom network interface onion0 उपलब्ध कराया जाता है
- यह तरीका operating system kernel द्वारा उपलब्ध कराए गए security primitives पर निर्भर करता है ताकि arbitrary applications की Tor access को isolate किया जा सके
- SOCKS तरीके के विपरीत, इसमें developer की गलती से कुछ connections configured SOCKS के बाहर चले जाने और डेटा leak होने की संभावना कम हो जाती है
oniux और torsocks में अंतर
torsocks एक ऐसा टूल है जो Tor द्वारा दिए गए SOCKS proxy के जरिए ट्रैफ़िक भेजने के लिए network-संबंधित libc functions को override करता है
- यह तरीका oniux की तुलना में अधिक cross-platform है, लेकिन dynamic linked libc से होकर न जाने वाले system calls में डेटा leak हो सकता है
- खास तौर पर pure static binaries और Zig ecosystem के applications, torsocks के समर्थन दायरे से बाहर हैं
-
oniux
- यह एक standalone application है
- यह Linux namespaces का उपयोग करता है
- यह सभी applications में काम करता है
- इसकी संरचना ऐसी है कि malicious applications भी डेटा leak नहीं कर पाते
- यह केवल Linux के लिए है
- यह नया और experimental टूल है
- यह Arti को engine के रूप में उपयोग करता है
- यह Rust में लिखा गया है
-
torsocks
- इसके लिए चल रहा Tor daemon चाहिए
- यह
ld.so preload hack का उपयोग करता है
- यह सिर्फ उन applications में काम करता है जो libc के जरिए system calls करते हैं
- malicious applications raw assembly से system calls बनाकर डेटा leak कर सकते हैं
- यह cross-platform है
- यह 15 साल से अधिक समय से परखा गया है
- यह CTor को engine के रूप में उपयोग करता है
- यह C में लिखा गया है
इंस्टॉलेशन और उपयोग के उदाहरण
- Linux system और Rust toolchain की आवश्यकता है
- इंस्टॉलेशन
cargo install से किया जाता है
cargo install --git https://gitlab.torproject.org/tpo/core/oniux --tag v0.4.0 oniux
- एक साधारण HTTPS request को Tor के जरिए चलाया जा सकता है
oniux curl https://icanhazip.com
- IPv6 requests भी समर्थित हैं
oniux curl -6 https://ipv6.icanhazip.com
- onion service तक पहुँचना भी संभव है
oniux curl http://2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion/…
- logging को
RUST_LOG=debug से सक्रिय किया जा सकता है
RUST_LOG=debug oniux curl https://icanhazip.com
- पूरे shell को Tor के जरिए चलाने पर उसके भीतर की सभी processes isolate की जा सकती हैं
oniux bash
- desktop environment में graphical applications को भी isolate किया जा सकता है
oniux hexchat
अंदरूनी कार्यप्रवाह
- oniux सबसे पहले
clone(2) system call से child process बनाता है
- child process को उसके अपने network, mount, PID, और user namespaces के भीतर isolate किया जाता है
- इसके बाद child process
/proc की अपनी copy को mount करता है और parent process के UID और GID के अनुसार UID/GID mapping सेट करता है
- application को Tor के जरिए name resolution कराने के लिए nameserver entries वाली एक temporary file बनाई जाती है और उसे
/etc/resolv.conf पर bind mount किया जाता है
- child process, onionmasq का उपयोग करके
onion0 नाम का TUN interface बनाता है
- इसके बाद
rtnetlink(7) operations के जरिए interface configure किया जाता है, जिनमें IP address assignment जैसे काम शामिल हैं
- child process, TUN interface का file descriptor Unix Domain socket के जरिए parent process को भेजता है
- parent process शुरुआती
clone(2) चलने के बाद इसी संदेश का इंतज़ार करता है
- ट्रांसफ़र पूरा होने पर child process, user namespace का root process बनने पर मिली सभी capabilities छोड़ देता है
- अंत में, उपयोगकर्ता द्वारा दिया गया command Rust standard library की सुविधाओं से चलाया जाता है
experimental स्थिति और उपयोग संबंधी सावधानियाँ
- oniux अपेक्षाकृत नई सुविधा है और Arti तथा onionmasq जैसे नए Tor software का उपयोग करती है
- फिलहाल यह उम्मीद के मुताबिक काम करती है, लेकिन torsocks को 15 साल से अधिक उपयोग में रहने के कारण कहीं अधिक वास्तविक अनुभव मिला है
- लक्ष्य यह है कि oniux भी भविष्य में torsocks जैसी परिपक्वता तक पहुँचे
2 टिप्पणियां
Tor प्राइवेसी के लिए तो ठीक-ठाक लगता है, लेकिन यह anonymity के लिए सच में उपयुक्त टूल है या नहीं, इस पर मुझे पूरा भरोसा नहीं है। ऐसी बातें भी सुनने में आती हैं कि exit nodes पर पहले से ही सरकारी एजेंसियों का कब्ज़ा है।
Hacker News की राय
करीब 10 साल पहले, जब network namespaces अभी लोकप्रिय हो रहे थे, मैंने इस विषय पर एक Tor developer से बात की थी
उस समय जो feedback मिला वह यह था कि यह लोगों को सुरक्षित होने का भ्रम देते हुए भी पहचान योग्य जानकारी बहुत आसानी से leak करा सकता है, इसलिए मैंने इसे आगे नहीं बढ़ाया
गंभीर खतरे में मौजूद लोगों को Tor Browser इस्तेमाल करना चाहिए और दूसरे leak paths को लेकर भी लगातार सावधान रहना चाहिए, यह सही है, लेकिन अगर Tor हर जगह इस्तेमाल होने वाली चीज़ बन गया होता, तो mass surveillance कहीं ज़्यादा मुश्किल हो जाती
अभी mass surveillance यह detect कर सकती है कि कौन Tor इस्तेमाल कर रहा है, लेकिन अगर सभी इसका इस्तेमाल कर रहे होते, तो यह तथ्य बहुत मायने नहीं रखता
क्या यह सब सिर्फ TCP पर लागू नहीं होता? दूसरे शब्दों में, मैं जानना चाहता हूँ कि non-TCP activity को किस तरह protect किया जा सकता है
यह project एक simple userspace network stack implement करने की कोशिश है, जो TCP और UDP state को handle कर सके और traffic को Tor network तक forward कर सके
पहले page की installation guide काम नहीं करती। version number को 0.4.0 से 0.5.0 करना होगा
cargo install --git https://gitlab.torproject.org/tpo/core/oniux oniux@0.5.0
Oniux orjail जैसा “official” supported tool लगता है। orjail में 4 साल से कोई commit नहीं है, लेकिन iptables/iproute tools इस्तेमाल करने वाली shell script के रूप में यह अभी भी बहुत अच्छी तरह काम करता है [1]
orjail में extra isolation के लिए firejail के साथ run करने का option भी है, जो feature Oniux में अभी नहीं दिखता
[1] https://github.com/orjail/orjail/blob/master/usr/sbin/orjail
https://raw.githubusercontent.com/orjail/orjail/master/usr/s...
शुरुआत में मुझे लगा था कि यह torsocks की तरह locally चल रहे tor daemon के जरिए traffic भेजता है
लेकिन local tor daemon stop करने पर भी oniux चलता रहा, जबकि torify और torsocks नहीं चले। docs में सचमुच ऐसा ही लिखा था। काफी अच्छा है
यह Docker के अंदर भी चलता है, लेकिन
--privilegedचाहिए था। binary कोdebian:12container में copy किया तो वहाँ भी चल गया:docker run -it --rm --privileged -v "$PWD/oniux:/usr/bin/oniux" debian:12
https://tpo.pages.torproject.net/core/arti/
मजेदार बात यह है कि यह curl में 5 साल से broken था, और blog examples भी वैसे ही थे। क्योंकि Tor developers पहले इस बात पर अड़े थे कि apps को
.oniondomain name resolve करने की कोशिश नहीं करनी चाहिए: https://daniel.haxx.se/blog/2025/05/16/leeks-and-leaks/उम्मीद है कोई solution मिल पाएगा
क्या इसका मतलब है कि अब Chrome से Tor websites access की जा सकती हैं?
असल में arbitrary protocols के जरिए traffic route करवाने वाला SOCKS proxy बनाना अपेक्षाकृत आसान है। उदाहरण के लिए SOCKS5 proxy को translation layer की तरह इस्तेमाल करके syncthing के ऊपर websites serve या visit की जा सकती हैं: https://github.com/acheong08/syndicate
example में hexchat इस्तेमाल किया गया है, क्या ऐसे processes user settings के साथ run होते हैं? अगर settings बदलना भूल जाएँ तो क्या IRC username leak नहीं होगा
Browser चलाएँ तो cookies भी leak हो सकती हैं?
Gmail में Tor से login करने पर भी यही बात कही जा सकती थी। अगर HTTPS न होता तो
उसी IRC host से connect होने वाले सभी usernames एक ही व्यक्ति के हैं, यह बात भी फिर भी सामने आ जाएगी
अगर anonymity बनाए रखने की कोशिश कर रहे हैं तो IRC काफी risk भरा लगता है। क्योंकि बहुत से लोग disconnect times record करते हैं, और उन्हें दूसरे network outage events से correlate किया जा सकता है
यहाँ developer experience बहुत अच्छी तरह बनाया गया है, इतना कि कोई fool भी इसे इस्तेमाल कर सके। बनाने वालों ने बढ़िया काम किया <3
अच्छा है। अब prototype को C में फिर से लिख दें तो मैं खुशी से इस्तेमाल करूँगा