ما الذي تعنيه خدمة onion فعليًا
خدمة Tor onion هي خادم لا يمكن الوصول إليه إلا عبر شبكة Tor، على عنوان ينتهي بـ .onion ومُشتق من مفتاح تشفيري بدلاً من أن تُخصّصه جهة تسجيل. لا يوجد بحث DNS، ولا IP عام في أي سجل، ولا شهادة TLS تشتريها: العنوان المكوَّن من 56 حرفًا هو المفتاح العام للخدمة نفسه، لذا يكون الاتصال موثَّقًا ومشفّرًا من طرف إلى طرف بحكم البنية. يكتب الزائر الذي يشغِّل متصفح Tor العنوان؛ وترتّب الشبكة نقطة لقاء مشفّرة؛ ويتحادث الطرفان دون أن يتعرّف أي منهما على موقع الآخر. لا أحد في المنتصف — لا مرحّل، ولا مزوّد خدمة إنترنت، ولا مزوّد الاستضافة — يرى طرفي المحادثة في آن واحد.
النتيجة المهمّة للاستضافة هنا بنيوية لا شكلية. على خادم ويب عادي أن يستمع على منفذ عام، ما يعني أن عنوانه قابل للاكتشاف والمسح، وقابل للربط في النهاية بمن يدفع الفاتورة. أما خدمة onion فلا تستمع على أي شيء يستطيع الإنترنت الوصول إليه. لا يُجري Tor على الجهاز سوى اتصالات صادرة، فيبني دوائر إلى حفنة من نقاط التعريف (introduction points)، وينتظر. تكون الخدمة متصلة وتُقدّم حركة المرور بينما لا يُظهر ss -tlnp أي شيء مربوط بعنوان قابل للتوجيه. هذا الانقلاب هو السبب الكامل لتشغيل واحدة.
متى تكون الأداة الصحيحة — ومتى لا تكون
الجأ إلى خدمة onion حين يكون موقع الجهاز جزءًا مما تحميه: موقع يجب أن يبقى قابلاً للوصول حتى لو صودر نطاقه على clearnet، أو صندوق تسليم للمصادر أو الباحثين، أو لوحة إدارة تفضّل ألّا تعرضها إطلاقًا لإنترنت يمسح كل شيء، أو خدمة يستخدم جمهورها Tor أصلاً ويقدّر أنك لا تستطيع تسجيل IP لم تستقبله أبدًا. وهي أيضًا الإجابة الصادقة حين يكون «إخفاء الأصل» هو المطلب الفعلي — فالوسيط العكسي أمام خادم clearnet لا يفعل سوى نقل الهدف، بينما تُزيله خدمة onion تمامًا.
إنها الأداة الخاطئة حين لا يريد زوارك أو لا يستطيعون تشغيل Tor، أو حين تحتاج إلى الإنتاجية الخام وزمن استجابة أقل من 100 ميلي ثانية لخادم يمكن الوصول إليه مباشرة، أو حين تكون قابلية الاكتشاف هي بيت القصيد — فعنوان onion ليس شيئًا يعثر عليه الناس صدفة من محرك بحث. يقسم كثير من المشغّلين الفرق ويُشغّلون الاثنين معًا: موقعًا عاديًا من أجل الوصول وخدمة onion للمستخدمين الراغبين فيها، مُقدَّمَين من التطبيق نفسه. نتناول هذا النمط أدناه. لا شيء هنا بديل عن تحصين الجهاز نفسه؛ فإذا اخترق الجهاز، يتسرّب موقعه ومحتواه بصرف النظر عن طريقة نشره، لذا عامل قائمة تحقق الساعة الأولى للتحصين على أنها شرط مسبق لا فكرة لاحقة.
SP·03ما الذي يكشفه هذا الإعداد، ولمن
يستحق الأمر الدقة بشأن نموذج المجهولية، لأن «خدمة onion» كثيرًا ما تُفهَم على أنها تعني «غير قابلة للتتبع إطلاقًا»، والواقع أكثر تحديدًا من ذلك. لا يتعرّف العملاء أبدًا على عنوان IP الخادم — وهذه خاصية قوية وهي بيت القصيد. أما مزوّد الاستضافة لديك، فلا يزال يرى جهازًا على شبكته يُجري تدفقًا ثابتًا من اتصالات صادرة مشفّرة إلى شبكة Tor؛ فهو لا يستطيع رؤية عنوان onion، ولا المحتوى، ولا الزوار، لكنه يستطيع أن يرى أن الجهاز يتحدّث بروتوكول Tor. على مضيف تقليدي مرتبط بهويتك، هذا خيط يستحق أن يُسحَب. أما على VPS خارجي مدفوع مجهولاً ولا اسم مسجَّل عليه، فهذا الخيط لا يقود إلى أي مكان — وهذا بالضبط سبب انتماء التقنيتين معًا.
أنماط الفشل التي تُلغي مجهولية خدمات onion فعليًا نادرًا ما تكون Tor نفسه. إنها التطبيق الذي يسرّب IP حقيقيًا في صفحة خطأ، أو ترويسة، أو رسالة بريد إلكتروني يرسلها، أو طلب صادر إلى نقطة تحليلات أو تحديث على clearnet؛ أو خادم سيئ الإعداد يكشف اسم مضيفه أو منطقته الزمنية؛ أو ربط ناتج عن مشغّل يعيد استخدام الجهاز نفسه أو المفتاح نفسه أو أسلوب الكتابة نفسه عبر هوية على clearnet. التشفير صامد؛ لكن التوصيلات (plumbing) المحيطة به هي حيث يُقبَض على الناس. كل خطوة أدناه مكتوبة لإبقاء تلك التوصيلات محكمة — اربط بـ localhost، ولا ترسل شيئًا صادرًا بنص صريح، وأبقِ الهوية الحقيقية للجهاز بعيدًا عنه وفق إبقاء اسمك بعيدًا عن الخادم.
SP·04ثبِّت نسخة Tor حديثة، لا التي تُقدّمها توزيعتك
تُجمّد التوزيعات Tor عند أي إصدار جاء مع الإصدارة، بينما تتحرك دفاعات خدمات onion بسرعة — فحماية حجب الخدمة (DoS) على نقاط التعريف، وتفويض العملاء في الإصدار 3، وعدة إصلاحات استقرار، كلها وصلت في إصدارات أحدث مما تحمله Debian أو Ubuntu المستقرّتان افتراضيًا. ثبِّت من مستودع Tor Project المُوقَّع الخاص به كي تواكب الإصدارات الحالية وتحصل على تحديثات الأمان وفق جدوله هو، لا جدول التوزيعة. يكتشف المقتطف أدناه الاسم الرمزي لإصدارتك تلقائيًا ويُثبِّت المستودع على مفتاح توقيع المشروع، بحيث لا يستطيع مهاجم يتلاعب بالمرآة (mirror) أن يزوّدك بحزمة أقدم.
يعمل Tor بلا امتيازات بصفته المستخدم debian-tor على Debian وUbuntu، وينزل إلى بيئة معزولة (sandbox)، ولا يحتاج إلى أي امتيازات شبكة خاصة — فهو يتّصل صادرًا كأي عميل. لا شيء عليك فتحه في جدار الحماية من أجل خدمة onion نفسها، وهذه أول مفاجأة سارّة في هذا التمرين كله: يمكن لـجدار حمايتك ذي الرفض الافتراضي أن يبقى صارمًا تمامًا كما كان.
اربط التطبيق بـ localhost وحده لا غير
خدمة onion هي باب أمامي يفضي إلى خدمة محلية عادية — خادم ويب، أو تطبيق، أو خدمة SSH، أو أي شيء يتحدث TCP. القاعدة التي تحافظ على أمان كل هذا هي أن هذه الخدمة المحلية يجب ألّا تستمع إلا على واجهة loopback، أي 127.0.0.1. فإذا كانت تستمع أيضًا على IP العام، تكون قد أعدت بهدوء خلق المشكلة التي جاءت خدمة onion لحلّها: أصبح المحتوى الآن قابلاً للوصول وللتمييز (fingerprinting) مباشرة، وأي مسح يُطابق خادمك على clearnet بمحتوى onion الخاص بك يُبطل المجهولية في طلب واحد. اربط بـ loopback، وتحقق من ذلك بـ ss -tlnp، ودَع Tor هو الشيء الوحيد الذي يتصل بذلك المنفذ أبدًا.
ولأن حركة المرور بين Tor وتطبيقك تبقى على 127.0.0.1، فهي لا تلامس الشبكة أبدًا ولا تحتاج إلى TLS خاص بها — فدائرة Tor تُشفّر كل شيء بالفعل من طرف إلى طرف. لا تضع شهادة موقّعة ذاتيًا على مستمِع loopback؛ فذلك يضيف سطحًا قابلاً للتمييز ولا يجلب شيئًا. أبقِ التطبيق مملاً: بلا أي إعادة توجيه إلى clearnet، وبلا روابط مطلقة من نوع https://your-domain مُضمَّنة في القوالب، وبلا خطوط أو تحليلات من طرف ثالث قد تجعل متصفح الزائر يتّصل خارج onion وصولاً إلى الويب المفتوح.
أعلن الخدمة، ثم اقرأ عنوانك
خدمة onion هي ثلاثة أسطر من torrc: دليل يحتفظ فيه Tor بمادة المفتاح، وربط من منفذ افتراضي على عنوان onion إلى المنفذ المحلي الذي يستمع عليه تطبيقك. عند أول إعادة تشغيل، يولّد Tor زوج مفاتيح Ed25519 في ذلك الدليل ويكتب ملف hostname — عنوان .onion المكوَّن من 56 حرفًا الذي ستُسلّمه للآخرين. هذا العنوان دائم طالما احتفظت بالمفتاح. افقد المفتاح ويختفي العنوان إلى الأبد؛ وسرّبه ويستطيع شخص آخر انتحال شخصية خدمتك. عامل HiddenServiceDir معاملة جواهر التاج: 0700، مملوك لمستخدم Tor، ومنسوخ احتياطيًا مشفّرًا وخارج الجهاز.
هناك إعداران يستحقان مكانهما إلى جانب هذا الربط. يتيح HiddenServiceEnableIntroDoSDefense 1 لنقاط التعريف لديك تحديد معدّل فيضانات الاتصال قبل أن تصل إلى جهازك، وهو أقرب ما تملكه خدمة onion إلى حماية من DDoS. كما أن تثبيت HiddenServiceVersion 3 يجعل الإصدار صريحًا وصامدًا أمام المستقبل. وإذا كان ينبغي أن تكون الخدمة خاصة لا عامة، فإن تفويض العملاء في الإصدار 3 يقصرها على حاملي مفتاح توزّعه خارج النطاق (out of band) — طريقة نظيفة لتشغيل لوحة إدارة ببساطة لا تجيب أحدًا لا يملك بيانات الاعتماد.
أعلِنها، وشغِّل الاثنين معًا، واختر عنوانًا سهل التذكر
إذا كنت تُشغّل أيضًا موقعًا على clearnet، أخبر متصفح Tor عن نسخة onion عبر ترويسة الاستجابة Onion-Location (أو وسم HTML meta المكافئ لها). حينها تعرض المتصفحات التي تدعم onion على الزوار نسخة .onion تلقائيًا — وهي الطريقة المعتادة التي تُظهر بها مواقع كبرى الصحف ومحركات البحث نسخها الخاصة. تقديم التطبيق نفسه على كل من نطاق وعنوان onion هو القاعدة لا الحالة الاستثنائية: قاعدة شيفرة واحدة، وقاعدة بيانات واحدة، وبابان أماميان، مع بقاء جانب clearnet خلف الوسيط العكسي المعتاد لإخفاء الأصل وجانب onion لا يكشف شيئًا على الإطلاق.
العنوان الافتراضي سلسلة عشوائية من 56 حرفًا، وهي آمنة لكن يصعب تذكّرها. يتيح لك عنوان vanity اقتحام مفتاح بالقوة الغاشمة (brute force) يبدأ ترميزه بصيغة base32 ببادئة تختارها — بضعة أحرف مقروءة أمر سريع، لكن كل حرف إضافي يضاعف العمل 32 مرة، فأي شيء يتجاوز سبعة أو ثمانية أحرف يصبح مهمة حوسبة جادة. وَلِّد مفاتيح vanity على جهاز محلي موثوق، أبدًا على الخادم، وأدرِج المفتاح الناتج في HiddenServiceDir تمامًا كما لو كنت تستعيد نسخة احتياطية. كما أن بادئة يمكن التعرّف عليها تُضعف هجومًا حقيقيًا واحدًا: نسخ تصيّد (phishing clones) تعتمد على ألّا يقرأ أحد جدارًا من أحرف عشوائية.
حافظ عليها: الأداء والمراقبة ونظافة المفتاح
يعبر اتصال onion ستة مرحّلات بدلاً من عدم عبور أي مرحّل كالمعتاد، لذا يكون زمن الاستجابة أعلى والإنتاجية أقل من خادم يمكن الوصول إليه مباشرة — وهذه فيزياء، لا سوء إعداد، ولا يوجد إعداد يُزيلها. قاوم إغراء أوضاع القفزة الواحدة (single-hop) أو غير المجهولة لاستعادة السرعة؛ فهي تتخلى عن الخاصية نفسها التي بنيت هذا من أجلها. ما يمكنك فعله هو إبقاء Tor حديثًا، وإبقاء الحماية من هجمات حجب الخدمة على نقاط التعريف مفعّلة، ووضع خدمة مزدحمة خلف تخزين مؤقت (caching) بحيث يؤدي كل طلب عملاً أقل، وتحديد حجم الجهاز بما يوفر هامش معالج كافيًا لأن تشفير Tor ليس مجانيًا. يتعامل VPS خارجي متواضع ابتداءً من $8.00/شهريًا بارتياح مع موقع onion نموذجي.
عمليًا، ثلاث عادات تُبقي خدمة onion سليمة. راقب journalctl -u tor@default بحثًا عن أخطاء في إمكانية الوصول ونشر الواصفات (descriptor) بدلاً من افتراض أن الصمت يعني السلامة. خذ نسخة احتياطية من HiddenServiceDir في اليوم الذي تنشئه فيه وبعد أي تغيير، مشفّرة وخارج الجهاز، لأن ذلك المفتاح هو الشيء الوحيد الذي لا يمكنك توليده من جديد. وأبقِ الهوية التشغيلية للجهاز نظيفة — فمفتاح جديد على VPS مجهول جديد لا يساوي الكثير إذا كانت عادات المشغّل نفسها تربطه بشخصية على clearnet. ستعمل الخدمة بسعادة لسنوات دون أن تُمَس؛ والانضباط يكمن في التوصيلات المحيطة بها، لا في الخدمة نفسها.
خطوة بخطوة
-
01
ابدأ من جهاز مُحصَّن ومجهول الهوية
انشر VPS خارجيًا — يعمل خلال نحو 15 min — وابدأ بالعمل المملّ الأساسي أولاً: مستخدم sudo مُسمّى، وSSH بالمفتاح فقط، وجدار حماية على سياسة الرفض الافتراضي، وتحديثات أمنية تلقائية. لا تضيف خدمة onion أي شيء عليك فتحه في ذلك الجدار، فالجهاز المُحكَم الإغلاق يبقى محكم الإغلاق. لا تتخطَّ هذه الخطوة؛ فعنوان onion أمام خادم مخترَق لا يُخفي شيئًا.
ssh admin@203.0.113.10 sudo apt update && sudo apt full-upgrade -y # firewall stays default-deny; the onion service needs no inbound port sudo ufw status verbose
-
02
ثبِّت Tor من مستودع Tor Project
أضِف مستودع المشروع المُوقَّع كي تُشغّل نسخة Tor حديثة بأحدث وسائل الحماية الخاصة بخدمات onion، ثم ثبِّته. يُكتشَف الاسم الرمزي للإصدار من
/etc/os-release، ويُثبَّت المستودع على مفتاح Tor للتوقيع بحيث لا تستطيع مرآة (mirror) مُتلاعَب بها إنزال إصدارك إلى نسخة أقدم.sudo apt install -y apt-transport-https wget gpg . /etc/os-release wget -qO- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc \ | gpg --dearmor | sudo tee /usr/share/keyrings/tor.gpg >/dev/null echo "deb [signed-by=/usr/share/keyrings/tor.gpg] https://deb.torproject.org/torproject.org $VERSION_CODENAME main" \ | sudo tee /etc/apt/sources.list.d/tor.list sudo apt update && sudo apt install -y tor deb.torproject.org-keyring
-
03
اربط خدمتك بـ localhost فقط
وجّه كل ما تنشره إلى واجهة loopback وحدها ولا شيء غيرها. هنا يقدّم nginx موقعًا ثابتًا على
127.0.0.1:8080؛ وينطبق المبدأ نفسه على أي تطبيق — اربطه بـ127.0.0.1، لا بـ0.0.0.0. أعد التحميل، ثم تحقّق بواسطةssأنه لا شيء يستمع على عنوان قابل للتوجيه.# /etc/nginx/sites-available/onion.conf server { listen 127.0.0.1:8080; server_name _; root /var/www/onion; index index.html; }فعِّله، وأعد التحميل، وتأكد أن الربط مقتصر على loopback:
sudo ln -s /etc/nginx/sites-available/onion.conf /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx ss -tlnp | grep 8080 # must show 127.0.0.1:8080, never 0.0.0.0:8080
-
04
أعلن خدمة onion في torrc
أضِف الخدمة إلى
/etc/tor/torrc: دليل للمفتاح وربط منفذ من المنفذ الافتراضي 80 على عنوان onion إلى منفذك المحلي 8080. فعِّل الحماية من هجمات حجب الخدمة على نقاط التعريف، وثبِّت إصدار العنوان. ثم أعد تشغيل Tor — على Debian وUbuntu تكون النسخة العاملة هيtor@default.# /etc/tor/torrc HiddenServiceDir /var/lib/tor/onion-www/ HiddenServicePort 80 127.0.0.1:8080 HiddenServiceVersion 3 HiddenServiceEnableIntroDoSDefense 1 sudo systemctl restart tor@default
-
05
اقرأ العنوان وأحكِم قفل المفتاح
أنشأ Tor الآن مادة المفتاح وكتب عنوانك. اقرأه وسلِّمه للآخرين — وتأكد أن الدليل بصلاحية
0700ومملوك لمستخدم Tor، وهو ما يفرضه Tor نفسه لكن يمكن لاستعادة غير حذرة أن تكسره. ملفhs_ed25519_secret_keyالموجود في ذلك الدليل هو هويتك؛ لا شيء آخر كذلك.sudo cat /var/lib/tor/onion-www/hostname # example: 2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion sudo ls -l /var/lib/tor/onion-www/ # hostname hs_ed25519_public_key hs_ed25519_secret_key sudo chown -R debian-tor:debian-tor /var/lib/tor/onion-www sudo chmod 700 /var/lib/tor/onion-www
-
06
اختبرها عبر Tor، ثم أعلن عنها
تحقّق من الخدمة من جهاز يعمل عليه Tor، باستخدام
torsocksكي يمرّ الطلب عبر الشبكة لا عبر clearnet. بمجرد أن تستجيب، يمكنك اختياريًا توجيه زوار clearnet إلى نسخة onion عبر ترويسةOnion-Locationعلى موقعك العادي.# from any box running tor: torsocks curl -sSI http://2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion/ | head # advertise the onion from your clearnet nginx (inside the https server block): add_header Onion-Location "http://2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion$request_uri";
-
07
خذ نسخة احتياطية من المفتاح ودوِّن دليل التشغيل
يحيا العنوان ويموت مع دليل المفتاح. أرشِفه فور وجوده، وانقل الأرشيف خارج الجهاز إلى تخزين مشفّر، ولاحظ أن استعادته في أي مكان تُعيد إنتاج عنوان
.onionنفسه تمامًا. ثم دوِّن الأمرين اللذين ستحتاجهما فعلاً بعد ستة أشهر — أين يوجد المفتاح، وكيف تتحقق من سلامته — لأن الخدمة تعمل دون أن تُلمَس لفترة طويلة بما يكفي لأنك ستنسى فعلاً.sudo tar czf onion-www-key.tar.gz -C /var/lib/tor onion-www # copy onion-www-key.tar.gz to encrypted off-box storage, then delete the local copy # health check any time: sudo systemctl status tor@default sudo journalctl -u tor@default --since "1 hour ago" | grep -i "onion\|error"


