VPS پر .onion سائٹ کیسے چلائیں
Ubuntu VPS پر v3 onion service بنائیں: tor اور nginx کو loopback پر bind کریں، پھر وہ leaks بند کریں جو آپ کے .onion address کو public IP سے جوڑ سکتے ہیں۔
آپ کیا بنا رہے ہیں
Onion site ایک عام web server ہے جو صرف Tor network کے ذریعے جواب دیتا ہے۔ tor انسٹال کریں، /etc/tor/torrc میں دو سطریں شامل کریں، Tor کی لکھی ہوئی address پڑھیں، پھر nginx کو 127.0.0.1 پر bind کریں تاکہ public IP پر کوئی سروس جواب نہ دے۔ انسٹالیشن میں دس منٹ لگتے ہیں۔ اس guide کا باقی حصہ ممکنہ leaks کی فہرست ہے، کیونکہ onion site کے ناکام ہونے کی عام وجہ یہ ہوتی ہے کہ اس کی اپنی configuration operator کے server کی طرف براہ راست واپس اشارہ کرتی ہے۔
Tor کا آغاز "the onion router" کے نام سے ہوا تھا، اور onion service ایسی service ہے جس تک صرف Tor کے ذریعے رسائی ممکن ہوتی ہے۔ Version 3 address میں 56 characters کے بعد .onion ہوتا ہے۔ یہ characters service کی ed25519 public key، checksum اور version byte پر مشتمل ہوتے ہیں اور base32 میں encoded ہوتے ہیں۔ Version 2 addresses، جن میں 16 characters ہوتے تھے، 2021 میں network سے ہٹا دیے گئے۔ اس لیے آج generate کیا جانے والا ہر address v3 ہوتا ہے۔ Address ہی key ہے، جس کے دو نتائج ہیں۔ Connection کسی certificate authority کے بغیر end-to-end encrypted اور authenticated ہوتا ہے، اور key file ضائع ہونے کا مطلب address کا ہمیشہ کے لیے ضائع ہو جانا ہے۔
آپ کا server کبھی بھی inbound connection قبول نہیں کرتا۔ Tor چند relays کو introduction points کے طور پر منتخب کرتا ہے، directory servers پر signed descriptor upload کرتا ہے، اور ہر visitor سے اس کے منتخب کردہ rendezvous relay پر رابطہ قائم کرتا ہے۔ ان تمام connections کا آغاز آپ کے server سے outbound ہوتا ہے۔ کوئی port کھولنے اور کوئی DNS record publish کرنے کی ضرورت نہیں ہوتی۔
Tor Project repository سے tor انسٹال کریں
Ubuntu، universe میں tor package فراہم کرتا ہے، لیکن یہ عموماً اس version کے قریب رہتا ہے جو release freeze کے وقت موجود تھا۔ Tor Project کی اپنی repository موجودہ stable release کو follow کرتی ہے۔ اس سافٹ ویئر کے لیے یہی مطلوب ہے جو یہ طے کرتا ہے کہ آپ کا address آپ ہی کے پاس رہے۔
sudo apt update
sudo apt install -y apt-transport-https gnupg wget
KEYURL=https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc
wget -qO- "$KEYURL" | gpg --dearmor | sudo tee /usr/share/keyrings/deb.torproject.org-keyring.gpg >/dev/nullRepository entry deb822 format استعمال کرتی ہے، اور Suites آپ کا Ubuntu codename ہونا چاہیے۔ اسے ٹائپ کرنے کے بجائے /etc/os-release سے پڑھیں، کیونکہ غلط codename سے ایسی repository ملتی ہے جو درست resolve ہو جاتی ہے، لیکن آپ کی release کے لیے کوئی package موجود نہیں ہوتا۔
. /etc/os-release
sudo tee /etc/apt/sources.list.d/tor.sources >/dev/null <<EOF
Types: deb deb-src
URIs: https://deb.torproject.org/torproject.org/
Suites: $VERSION_CODENAME
Components: main
Signed-By: /usr/share/keyrings/deb.torproject.org-keyring.gpg
EOF
sudo apt update
sudo apt install -y tor deb.torproject.org-keyringdeb.torproject.org-keyring package signing key کو تازہ رکھتا ہے، اس لیے key rotation ایک سال بعد apt update کو متاثر نہیں کرے گی۔ تصدیق کریں کہ tor شروع ہو گیا ہے اور network تک پہنچ گیا ہے:
tor --version
sudo journalctl -u tor@default -n 20Journal کا اختتام Bootstrapped 100% (done): Done پر ہونا چاہیے۔ Bootstrapped 10% پر اٹکا ہوا tor باہر جانے کا راستہ نہیں رکھتا، اس لیے provider کا network firewall اور اپنی egress rules چیک کریں: sudo ufw status verbose میں allow (outgoing) کو default کے طور پر دکھنا چاہیے۔
اب سے دو نام اہم ہیں۔ Package tor کو debian-tor user کے طور پر چلاتا ہے، اور running unit tor@default.service ہے، کیونکہ Debian اور Ubuntu پر tor.service instance کے گرد wrapper کا کام کرتا ہے۔ Status اور logs کے لیے instance name استعمال کریں تاکہ آپ کو ہمیشہ اصل process کی معلومات ملیں۔
torrc میں onion service configure کریں
/etc/tor/torrc کے آخر میں یہ دو سطریں شامل کریں:
HiddenServiceDir /var/lib/tor/onion_site/
HiddenServicePort 80 127.0.0.1:8080HiddenServiceDir وہ جگہ ہے جہاں tor اس service کے لیے keys اور address محفوظ کرتا ہے۔ اسے خود نہ بنائیں۔ Tor start ہوتے وقت مطلوبہ owner اور mode کے ساتھ یہ directory خود بناتا ہے۔ اگر آپ نے اسے root کے طور پر بنایا تو نیچے دی گئی failure list میں پہلی failure پیدا ہوگی۔
HiddenServicePort کے دو حصے ہیں، اور انہیں آپس میں خلط ملط کرنا پہلی عام غلطی ہے۔ پہلا number وہ port ہے جس سے visitor tunnel کے اندر connect کرتا ہے، اس لیے 80 وہی ہے جس کی لوگ توقع کرتے ہیں اور اسے تبدیل کرنے کی کوئی وجہ نہیں۔ دوسرا حصہ وہ local address ہے جہاں tor اس traffic کو forward کرتا ہے۔ صرف HiddenServicePort 80 لکھنے سے traffic 127.0.0.1:80 پر forward ہوتا ہے، اس لیے address واضح طور پر لکھنے اور high port استعمال کرنے سے onion vhost، port 80 پر پہلے سے listening کسی چیز سے الگ رہتا ہے۔
sudo systemctl restart tor@default
sudo ls -l /var/lib/tor/onion_site/Listing میں hostname، hs_ed25519_public_key، hs_ed25519_secret_key اور ایک خالی authorized_clients directory ہونی چاہیے۔
اپنا .onion address پڑھیں
sudo cat /var/lib/tor/onion_site/hostnameایک لائن واپس آتی ہے: 56 base32 حروف اور .onion۔ یہ string سائٹ کی مکمل شناخت ہے۔ اسے کوئی assign نہیں کرتا، کوئی اسے transfer نہیں کر سکتا، اور جب تک key file آپ کے پاس ہے، کوئی اسے آپ سے چھین نہیں سکتا۔ اسے ابھی copy کریں، کیونکہ نیچے دی گئی ہر configuration میں اس کی ضرورت ہوگی۔ اس گائیڈ کے باقی حصے میں اسے <your-address>.onion کے طور پر لکھا گیا ہے۔
nginx کو 127.0.0.1 سے bind کر کے site فراہم کریں
sudo apt install -y nginx
sudo install -d -m 755 /srv/onion/etc/nginx/sites-available/onion لکھیں:
server {
listen 127.0.0.1:8080;
server_name <your-address>.onion;
root /srv/onion;
index index.html;
server_tokens off;
etag off;
access_log off;
error_log /var/log/nginx/onion.error.log error;
}echo '<h1>hello from the onion</h1>' | sudo tee /srv/onion/index.html
sudo ln -s /etc/nginx/sites-available/onion /etc/nginx/sites-enabled/onion
sudo nginx -t
sudo systemctl reload nginxاب server سے دو باتوں کی تصدیق کریں۔ پہلی یہ کہ nginx onion name کے لیے جواب دیتا ہے۔ یہی وہ درست Host header ہے جو tor بھیجے گا:
curl -s -H 'Host: <your-address>.onion' http://127.0.0.1:8080/دوسری یہ کہ nginx صرف اسی address پر جواب دیتا ہے، کسی اور جگہ نہیں:
sudo ss -tlnp | grep 8080address column میں 127.0.0.1:8080 لکھا ہونا چاہیے۔ اگر اس میں 0.0.0.0:8080 یا *:8080 لکھا ہو تو آپ کی onion site public internet پر بھی دستیاب ہے۔ یہ leak list کی پہلی خرابی ہے۔ ایسا listen 8080; line جس میں address نہ ہو، ہر interface سے bind ہوتی ہے۔ یہی default ہے۔
Tor Browser میں address کھولیں۔ پہلی بار load ہونے میں چند seconds لگ سکتے ہیں، کیونکہ client آپ کا descriptor حاصل کرتا ہے اور rendezvous circuit بناتا ہے۔
Tor Project کی اپنی documentation loopback port کے بجائے unix socket استعمال کرنے کو ترجیح دیتی ہے: HiddenServicePort 80 unix:/var/run/tor/onion_site.sock، جبکہ nginx اس path پر listen کرتا ہے۔ دوسرے host سے socket تک بالکل رسائی نہیں ہو سکتی، چاہے بعد میں machine پر دوسرا interface بھی شامل ہو جائے۔ اس طریقے میں file permissions کا مسئلہ ہوتا ہے، کیونکہ nginx socket بناتا ہے اور tor اس سے debian-tor کے طور پر connect کرتا ہے۔ اس لیے دونوں users کو directory کے permissions پر متفق ہونا پڑتا ہے۔ تصدیق شدہ ss output کے ساتھ loopback درست طریقے سے configure کرنا آسان ہے، اور اس guide کے باقی حصے میں یہی طریقہ فرض کیا گیا ہے۔
site کو loopback پر رکھنے کے بعد server کو اس کے لیے کسی inbound rule کی ضرورت نہیں رہتی۔ اپنے لیے 22 کھلا رکھیں اور باقی سب deny کریں (VPS پر ترتیب دینے کے قابل ufw defaults)۔ یاد رکھیں کہ firewall اس service کو غیر مؤثر نہیں کرتا جو 0.0.0.0 سے bind ہو۔ Firewall صرف ان packets کو filter کرتا ہے جو firewall تک پہنچتے ہیں۔ Containers میں یہ فرق مزید اہم ہو جاتا ہے، کیونکہ Docker port publish کرنے سے ufw سے پہلے iptables rules لکھے جاتے ہیں۔ اس لیے -p 8080:80 آپ کے onion backend کو public IP پر دستیاب کر دیتا ہے، جبکہ ufw اب بھی port کو denied دکھاتا ہے۔ Container ports کو -p 127.0.0.1:8080:80 کے طور پر publish کریں۔
وہ رساؤ جو onion site کی شناخت ظاہر کرتے ہیں
Tor سرور کا مقام چھپاتا ہے۔ Tor سرور کے بھیجے ہوئے مواد کو نہیں چھپاتا۔ ذیل میں ہر چیز وہ ہے جسے آپ کا اپنا stack شائع کرتا ہے۔
آپ کے public IP پر وہی site جواب دے رہی ہو
یہ وہ مسئلہ ہے جو اکثر لوگوں کو پکڑ لیتا ہے۔ Scanners ہر routable address کے HTTP response کو مسلسل index کرتے ہیں، اور یہ نتائج public اور searchable ہوتے ہیں۔ اپنی public IP اور onion address، دونوں پر وہی page serve کریں تو انہیں ملانا صرف ایک query کا کام ہے: ایک ہی title، ایک ہی favicon hash، ایک ہی ETag اور headers کی ایک ہی ترتیب۔ اوپر دی گئی listen 127.0.0.1:8080; line اس کا حل ہے۔ اس کی تصدیق سرور سے نہیں بلکہ کسی دوسری machine سے کریں:
curl -sv --max-time 5 http://<your-public-ip>:8080/Connection refused یا timeout درست نتیجہ ہے۔ کوئی بھی HTML اس بات کی علامت ہے کہ site public ہے۔ اگر اس box پر clearnet site بھی چل رہی ہے تو اس vhost کو اپنا root دیں اور public listener پر واضح default_server block رکھیں، تاکہ unmatched Host header کبھی onion vhost تک نہ پہنچ سکے۔
Version banners
curl -sI http://127.0.0.1:8080/ | grep -i '^server'default nginx Server: nginx/1.24.0 کا جواب دیتا ہے۔ یہ version string، دیگر headers کی درست ترتیب کے ساتھ، ایک ایسا fingerprint بناتی ہے جو آپ کے onion host کو clearnet host سے ملاتا ہے۔ server_tokens off; اسے Server: nginx تک محدود کر دیتا ہے۔ یہ header کو ختم نہیں کرتا، اور nginx میں ایسا کرنے کے لیے built-in directive موجود نہیں؛ اس لیے اگر آپ اسے مکمل طور پر ہٹانا چاہتے ہیں تو headers-more module عام حل ہے۔ PHP، expose_php = Off set کرنے تک X-Powered-By شامل کرتا ہے۔ etag off; بھی اسی فہرست میں شامل ہے، کیونکہ nginx ETag کو file کے modification time اور size سے بناتا ہے۔ اسی لیے دو servers پر copy کی گئی ایک جیسی files، دونوں جگہ ایک ہی ETag دیتی ہیں۔
آپ کے clearnet domain کی طرف اشارہ کرنے والے absolute URLs
ایک rel="canonical" tag، ایک Open Graph og:url، RSS feed، sitemap، password reset email یا hardcoded logo URL۔ ان میں سے کوئی بھی onion کے ذریعے serve ہونے والے page کے اندر clearnet site کا نام ظاہر کر دیتا ہے۔ /static/logo.svg جیسی root-relative paths استعمال کریں، اور application کو base URL کسی constant کے بجائے request host سے پڑھنے دیں۔ Redirects بھی اسی مسئلے کی ایک اور صورت ہیں: catch-all block میں return 301 https://example.com$request_uri; onion visitor کو آپ کے اصل domain پر بھیج دیتا ہے، جبکہ Location header براہ راست مطلوبہ جواب فراہم کر دیتا ہے۔
Clearnet site کے ساتھ مشترک TLS certificate
onion address خود کو authenticate کرتا ہے، کیونکہ address ہی public key ہوتا ہے۔ اس لیے onion connection پر http:// پہلے ہی end-to-end encrypted ہوتا ہے، اور Tor Browser اسے secure context سمجھتا ہے۔ اپنے موجودہ certificate کو onion vhost پر install کرنے سے دونوں کے درمیان تعلق ظاہر ہو جاتا ہے، کیونکہ ہر publicly trusted certificate Certificate Transparency logs میں record ہوتا ہے۔ یہ logs public، مستقل اور نام کے ذریعے searchable ہوتے ہیں۔ Let's Encrypt certificates کو clearnet vhost پر رکھیں اور onion vhost کو plain HTTP پر رہنے دیں۔
Third-party fonts اور analytics
CDN (content delivery network) سے حاصل کردہ font یا analytics script۔ Visitor کا browser ہر چیز براہ راست fetch کرتا ہے، اس لیے third party کو معلوم ہو جاتا ہے کہ کسی نے آپ کا page load کیا ہے اور عموماً کون سا page load کیا ہے۔ Tor Browser کی زیادہ سخت security levels اس request کو ویسے بھی block کرتی ہیں، جس سے layout خراب رہ جاتا ہے۔ Page کو درکار ہر asset خود host کریں۔
Host header کا عدم مطابقت
اگر server_name، tor کے بھیجے ہوئے Host header سے مطابقت نہ رکھتا ہو تو nginx اس listen address کے default server پر fallback کرتا ہے۔ ایک vhost والے box پر یہ مسئلہ نظر نہیں آتا، کیونکہ واحد server block ہی default بھی ہوتا ہے۔ بعد میں clearnet vhost شامل کرنے پر onion requests اس vhost پر پہنچنا شروع ہو سکتی ہیں، اور ساتھ ہی اس کے canonical tags اور redirects بھی لا سکتی ہیں۔ ہر nginx تبدیلی کے بعد curl -H 'Host: ...' check دوبارہ چلائیں، اور نتیجے میں اپنے اصل domain کو grep کریں:
curl -s -H 'Host: <your-address>.onion' http://127.0.0.1:8080/ | grep -o 'https\?://[^"]*' | sort -uکون سا process کس socket کا مالک ہے، یہ جاننا اس کام کا بڑا حصہ ہے (Linux پر ports اور listening sockets کیسے کام کرتے ہیں)۔
Logs میں باقی رہنے والی معلومات
ہر request 127.0.0.1 سے آتی ہے، اس لیے nginx کے پاس record کرنے کے لیے visitor address نہیں ہوتا، اور access_log off; کی لاگت بھی نہیں آتی۔ اس کے اوپر چلنے والی application الگ معاملہ ہے، کیونکہ order، email address یا uploaded file کا metadata آپ کو خود handle کرنا ہوتا ہے۔ آپ کی اپنی عادات بھی اہم ہیں: box کو غیر محفوظ login کے ذریعے administer کرنا ان چیزوں سے باہر ہے جنہیں Tor تحفظ دیتا ہے۔ اس لیے اسی VPS پر SSH hardening کو اس build کا حصہ سمجھیں۔
نجی کلید کا بیک اپ لیں، کیونکہ یہی آپ کا ایڈریس ہے
/var/lib/tor/onion_site/hs_ed25519_secret_key سروس ہے۔ یہاں کوئی registrar یا recovery mechanism نہیں ہوتا۔ اسے کھو دیں تو ایڈریس بھی ختم ہو جاتا ہے۔ اس کی نقل بنائیں، تو جس کے پاس وہ نقل ہو وہ آپ کے ایڈریس پر اپنا مواد پیش کر سکتا ہے، اور آپ کے پاس اسے منسوخ کرنے کا کوئی طریقہ نہیں رہتا۔
sudo systemctl stop tor@default
sudo tar -C /var/lib/tor -czf onion-keys.tgz onion_site
sudo chmod 600 onion-keys.tgz
sudo systemctl start tor@defaultاس archive کو encrypt کریں (gpg -c onion-keys.tgz) اور اسے سرور سے باہر منتقل کریں۔ نئے VPS پر بحالی کے لیے archive اور وہ ownership درکار ہوتی ہے جس کی tor توقع کرتا ہے:
sudo systemctl stop tor@default
sudo tar -C /var/lib/tor -xzf onion-keys.tgz
sudo chown -R debian-tor:debian-tor /var/lib/tor/onion_site
sudo chmod 700 /var/lib/tor/onion_site
sudo systemctl start tor@default
sudo cat /var/lib/tor/onion_site/hostnameنئے hardware پر یہی ایڈریس دوبارہ دستیاب ہو جاتا ہے، tor کے descriptor کو دوبارہ publish کرنے کے ایک یا دو منٹ بعد۔ یہی مکمل migration ہے: نہ DNS میں تبدیلی درکار ہے اور نہ certificate دوبارہ جاری کرنے کی۔
Onion-Location، جب ویب سائٹ clearnet پر بھی موجود ہو
اگر onion ایک سہولت ہے، راز نہیں، تو اسے clearnet vhost سے ظاہر کریں:
add_header Onion-Location http://<your-address>.onion$request_uri;اس کے بعد Tor Browser address bar میں .onion available بٹن دکھاتا ہے اور switch کرنے کی پیشکش کرتا ہے۔ یہ header صرف اسی وقت تسلیم کیا جاتا ہے جب clearnet page، HTTPS پر serve ہو رہا ہو اور value ایک درست onion URL ہو۔
یہاں nginx کا ایک rule اہم ہے۔ add_header directives، location block سے صرف اسی وقت inherit ہوتے ہیں جب اس block میں اپنے کوئی directives موجود نہ ہوں۔ اس لیے اپنے add_header کے ساتھ موجود location خاموشی سے Onion-Location کو ہٹا دیتا ہے۔ اسے وہاں دوبارہ شامل کریں، یا تمام response headers ایک ہی جگہ رکھیں۔ یہ header جان بوجھ کر publish کرنے سے دونوں sites باہم منسلک ہو جاتی ہیں۔ یہ mirror کے لیے درست ہے، لیکن ایسی کسی چیز کے لیے غلط ہے جسے غیر منسلک رکھنا مقصود ہو۔
مطلوبہ سابقے والے پتے
mkp224o ایسے key pairs بناتا ہے جب تک کہ ان میں سے کسی ایک سے ایسا address تیار نہ ہو جائے جو آپ کے بتائے ہوئے prefix سے شروع ہوتا ہو۔ یہ brute force تلاش ہے، اس لیے prefix اور انتظار کے لیے آپ کی مقررہ مدت کے علاوہ کسی اور configuration کی ضرورت نہیں۔
sudo apt install -y git gcc libc6-dev libsodium-dev make autoconf
git clone https://github.com/cathugger/mkp224o
cd mkp224o
./autogen.sh
./configure --enable-amd64-51-30k
make
./mkp224o -d onionkeys blogہر کامیاب نتیجہ onionkeys/<address>.onion/ میں محفوظ ہوتا ہے، جہاں hostname اور hs_ed25519_secret_key موجود ہوتے ہیں۔ اسے install کرنے کے لیے tor کو روکیں، اس directory کو اپنے HiddenServiceDir پر copy کریں، پھر restore کے اوپر دیے گئے وہی chown اور chmod 700 لاگو کریں۔
Prefix کی لمبائی ہی پوری لاگت کا تعین کرتی ہے۔ Address base32 میں ہوتا ہے، اس لیے آپ کے مطلوبہ ہر اضافی character سے متوقع key pairs کی تعداد 32 گنا بڑھ جاتی ہے۔ مختصر prefix laptop پر مکمل ہو جاتا ہے۔ طویل prefix آپ کی ملکیت کے کسی بھی سسٹم پر مکمل نہیں ہوگا۔ Vanity prefix قارئین کو پورے address کے بجائے ابتدائی چند characters پہچاننے کا عادی بھی بناتا ہے، اور onion sites کی phishing نقول اسی عادت کو بنیاد بناتی ہیں۔
خرابی کی صورتیں، اور دکھائی دینے والے پیغامات
Restart کے بعد hostname فائل موجود نہیں ہے۔ Tor شروع نہیں ہوا، یا اس نے directory مسترد کر دی۔ sudo journalctl -u tor@default -n 50 اس کا نام دکھاتا ہے:
/var/lib/tor/onion_site/ is not owned by this user (debian-tor, 108) but by root (0). Perhaps you are running Tor as the wrong user?دستی طور پر بنائی گئی directory ایسی ہی نظر آتی ہے۔ ownership اور mode درست کریں، یا directory حذف کر دیں تاکہ tor اسے خود بنا سکے۔
Tor Browser Onionsite Not Found (0xF0) دکھاتا ہے۔ client descriptor حاصل نہیں کر سکا، اس لیے network کے لحاظ سے اس address پر کچھ بھی publish نہیں ہوا۔ تصدیق کریں کہ tor چل رہا ہے اور bootstrap مکمل ہو چکا ہے۔ اپنے درج کردہ address کا sudo cat /var/lib/tor/onion_site/hostname سے حرف بہ حرف موازنہ کریں، پھر clock چیک کریں۔ Tor کو descriptors publish اور validate کرنے کے لیے درست وقت درکار ہوتا ہے، اور timedatectl کو System clock synchronized: yes رپورٹ کرنا چاہیے۔
Address resolve ہو جاتا ہے لیکن page کبھی load نہیں ہوتا۔ Tor نے rendezvous مکمل کر لیا، پھر آخری hop پر، یعنی tor سے nginx تک، ناکام ہو گیا۔ چونکہ یہ hop local ہے، اس لیے tor log خاموش رہتا ہے۔ Server پر curl -sI http://127.0.0.1:8080/ چلائیں۔ Connection refused کا مطلب ہے کہ nginx بند ہے یا اس address پر listening کر رہا ہے جو HiddenServicePort کی طرف اشارہ نہیں کرتا۔
Page load ہو جاتا ہے اور ہر link آپ کے حقیقی domain پر جاتا ہے۔ Templates میں absolute URLs موجود ہیں۔ اوپر دیا گیا grep -o 'https\?://[^"]*' check چلائیں اور address کہیں share کرنے سے پہلے اس کے output میں دکھائی جانے والی خرابی درست کریں۔
یہ کام کرتا ہے، پھر reboot کے بعد رک جاتا ہے۔ Site پر انحصار کرنے سے پہلے جان بوجھ کر box کو ایک بار reboot کریں، پھر sudo systemctl status tor@default اور sudo systemctl status nginx چلائیں۔ کسی شخص کے ہاتھ سے شروع کی گئی service، machine کے restart ہونے تک enabled service جیسی ہی نظر آتی ہے۔
FAQ
کیا مجھے Tor onion service کے لیے اپنے firewall میں کوئی port کھولنا ہوگا؟
نہیں۔ tor daemon صرف outbound connections بناتا ہے: directory servers، اپنے introduction points اور ہر rendezvous relay سے۔ اس لیے کسی inbound rule کی ضرورت نہیں ہوتی، اور web server خود 127.0.0.1 پر listening کرتا ہے۔ incoming traffic کے لیے ufw کو default deny پر رکھیں اور SSH کی اجازت دیں۔ اسی خصوصیت کی وجہ سے onion service ایسی مشین سے بھی کام کرتی ہے جو NAT (network address translation) کے پیچھے ہو اور اس کے پاس کوئی public IP نہ ہو۔
میں Tor Browser میں اپنا .onion address کیوں نہیں کھول سکتا؟
سرور سے باہر کی سمت مرحلہ وار جانچ کریں۔ sudo journalctl -u tor@default -n 50 میں Bootstrapped 100% (done): Done دکھائی دینا چاہیے۔ پھر سرور پر curl -sI http://127.0.0.1:8080/ چلانے سے ایک status line واپس آنی چاہیے۔ اس کے بعد اپنے درج کردہ address کا hostname فائل سے موازنہ کریں، کیونکہ ایک غلط character بھی بالکل مختلف service کی نشاندہی کرتا ہے۔ Onionsite Not Found (0xF0) کا مطلب ہے کہ اس address کے لیے کوئی descriptor نہیں ملا۔ عموماً اس کی وجہ یہ ہوتی ہے کہ tor نہیں چل رہا یا system clock غلط ہے۔
کیا میں اپنی onion site کو نئے سرور پر منتقل کرکے وہی address برقرار رکھ سکتا ہوں؟
ہاں۔ یہ address hs_ed25519_secret_key سے اخذ کیا جاتا ہے۔ اس لیے پورا HiddenServiceDir نئی مشین پر copy کریں، اس کی ownership debian-tor کو دیں اور mode 700 مقرر کریں، پھر tor شروع کریں۔ descriptor دوبارہ publish ہونے کے بعد address دوبارہ فعال ہو جائے گا، اور کسی DNS record کو update کرنے کی ضرورت نہیں ہوگی۔ اگر یہ فائل ضائع ہو جائے تو address بحال نہیں کیا جا سکتا۔ اس لیے اسے تخلیق کے دن ہی encrypted شکل میں اور سرور سے باہر backup کریں۔
کیا onion site کو HTTPS certificate درکار ہوتا ہے؟
نہیں۔ 56-character address service کی public key ہوتا ہے، اس لیے connection پہلے ہی end-to-end encrypted اور authenticated ہوتا ہے۔ Tor Browser http:// کو .onion نام پر secure context سمجھتا ہے۔ اپنے clearnet certificate کو onion vhost پر دوبارہ استعمال کرنا کچھ نہ کرنے سے بھی بدتر ہے، کیونکہ Certificate Transparency logs public ہوتے ہیں اور یہ مستقل طور پر record کرتے ہیں کہ کون سے names ایک ہی certificate کے ساتھ وابستہ ہیں۔ .onion نام کے لیے certificate خریدنے کی واحد وجہ کسی CA سے brand assurance حاصل کرنا ہے جو ایسے certificates جاری کرتی ہو، اور یہ link design کے لحاظ سے public ہوتا ہے۔