
يتم تطبيق كل ما تم وصفه في المقال كأداة Toroxy متوفرة على GitHub
في الآونة الأخيرة ، كان إخفاء الهوية عبر الإنترنت موضوع نقاش ساخن. ليس سراً أن البيانات المتعلقة بزيارات موارد الإنترنت من جهاز محلي يمكن جمعها على مستويات مختلفة من أجل بناء "نموذج" للمستخدم ، يمكن استخدامه لاحقًا ضده (أو
يمكن ). لذلك ، ليس من المستغرب أن يصبح عدد متزايد من مستخدمي الإنترنت النشطين مقتنعين بالحاجة إلى آليات الوكيل وإخفاء الهوية. في هذا الصدد ، يوجد المزيد والمزيد من عملاء VPN الجدد ، ولكن ، كما توضح الممارسة ، لا يمكن الوثوق بهم جميعًا: إما أنه لا يعمل كل شيء ، ثم يتم إخفاء هوية حركة مرور HTTP فقط ، ثم تكون جودة التنفيذ عرجاء ، أو والمطورين يفعلون الخطيئة من خلال دمج البيانات حول مستخدميهم.
في هذه المقالة ، سنحاول تجميع الأداة الخاصة بنا مع واجهة مستخدم من عدد من مكونات البرامج ، مما سيتيح لنا إخفاء الهوية الكاملة لحركة المرور في النظام المحلي ومنع التسريبات على قنوات "الاستماع" في أي مرحلة من مراحل العمل.
سيكون هدفنا الرئيسي هو "بناء" أداة موثوقة من الأدوات الجاهزة. من الواضح أن فكرة إنشاء أداة عالية الجودة من نقطة الصفر في وقت معقول محفوفة بالأخطاء ، وبالتالي سيكون من الأسهل والأكثر موثوقية اختيار المكونات الجاهزة ، ثم توصيلها بشكل صحيح!
ما الذي يجب أن تفعله الأداة؟
- إعادة توجيه كل حركة مرور النظام الهدف إلى العقد المتوسطة (ويفضل أن تكون عدة) لإخفاء المصدر بشكل موثوق
- تتبع انتهاكات عدم الكشف عن هويتك المحتملة وتصحيحها والإبلاغ عنها باستخدام إعلامات واجهة المستخدم
المكونات المحددة لإنشاء الأداة:
- تور
- إيبتبلس
- python3
- سيستم دي
من خلال مزج جميع المكونات في غلاف يسمى "Linux" ، يمكننا بالتأكيد الحصول على شيء ذي قيمة من شأنه أن يساعد في تحقيق الهدف النهائي.
المكون رقم 1: Tor
حول هذا المكون سيتم بناء بقية البنية التحتية للأداة. يوفر Tor آلية تشكل جزءًا من أي عميل VPN - آلية لتعبئة حركة المرور من خلال عقد وسيطة مجهولة من مراقب خارجي (في التكوين القياسي لهذه العقد 3).
افتراضيًا ، يبدأ عميل Tor من مستودعات الدُفعات القياسية بعد التثبيت ، الاستماع إلى المنفذ 9050 ، والذي يقبل أي عميل يمكنه الجوارب. تكمن المشكلة في أنه بالإضافة إلى حركة الجوارب في نظامنا ، يمكن أن يكون هناك عدد كبير من الزيارات الأخرى من التطبيقات التي لا تعمل على هذا البروتوكول. في هذا الصدد ، أولاً وقبل كل شيء ، داخل النظام المحلي ، سيتعين عليك قطع نافذة في شبكة Tor لأي اتصال شبكة جديد. يتم ذلك ببساطة عن طريق رفع
الوكيل الشفاف في تكوين
torrc :
/etc/tor/torrc ... TransPort 9040 # python ControlPort 9051 ...
يجب إيلاء اهتمام خاص لحركة مرور UDP. الحقيقة هي أن مبدأ توجيه البصل يعتمد على مفهوم "التدفق" ، والذي ، كما تعلمون ، موجود فقط في TCP. عن طريق إرسال حزمة UDP عبر Tor ، لن يتمكن النظام الهدف من تلقي استجابة ، لأن حزمة الاستجابة لن تجد مسار الإرجاع. ولكن على الرغم من هذه الخصوصية ، لا تزال لدينا الفرصة لإخفاء الهوية عن استفسارات DNS ، والتي يُعرف أنها تنفذ عبر UDP ، وفي الوقت نفسه تشمل قرار .onion:
/etc/tor/torrc ... AutomapHostsOnResolve 1 DNSPort 53 ...
في هذا ، الوصول إلى Tor مفتوح داخل الاسترجاع.
المكون رقم 2: الاشياء
نظرًا لأن مهمتنا تتمثل في إخفاء المصدر الحقيقي لحركة المرور من مراقب خارجي داخل النظام بأكمله ، والنافذة في Tor مفتوحة بالفعل ، يبقى فقط التفاف كل حركة المرور في هذه النافذة. سيساعدنا جدار الحماية الموجود في نظام Linux kernel على:
# tcp iptables -t nat -A OUTPUT -p tcp --syn -j REDIRECT --to-ports $TRANS_PORT # udp (dns only) iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 53 iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # iptables -A OUTPUT -j REJECT ip6tables -A OUTPUT -j REJECT
في هذه المرحلة ، نحصل على أداة عمل تعمل بشكل مخفي على إخفاء كل حركة المرور الصادرة ، لكن هذا ليس سوى نصف العمل.
المكون رقم 3: بيثون + واجهة المستخدم لسطح المكتب
في كل مرة ، سيكون التكوين اليدوي من وحدة التحكم (حتى لو كان سيتم تشغيل البرنامج النصي bash) متعبًا للغاية ، لذلك حان الوقت لبدء كتابة أداة مساعدة صغيرة تساعدنا على وجه التحديد في ما يلي:
- التكوين التلقائي
- غير هويتك داخل Tor في أي وقت
- مراقبة iptables قواعد النزاهة وإعادة كتابة إذا انتهكت
- تتبع هويتك الحالية (IP)
- إخطار الفقرتين السابقتين مع الإخطارات الرسومية
في البداية ، ستقوم الأداة بتنزيل جميع
المكونات الضرورية بمفردها ، وعند الإطلاق اللاحق ستقوم بتكوين Tor بالتزامن مع iptables ، كما هو موضح أعلاه.
إذا كنت تريد تغيير عنوان IP الخارجي الخاص بك ، فسوف تتفاعل مع منفذ خدمة Tor - 9051 ، والذي كان مفتوحًا في البداية لأتمتة تغيير IP:
with Controller.from_port(port = 9051) as controller: controller.authenticate() controller.signal(Signal.NEWNYM)
يمكن تطبيق تتبع النزاهة بشكل غير عادي (ننفذها على الركبة) من خلال قراءة بنية قاعدة iptables بشكل دوري والتحقق من مجموع SHA256:
def rulesOk(self): RULES_CHECKSUM_CMD = "{ iptables-save && ip6tables-save; } | sed s/\-\-uid\-owner\\\\s[0-9]\\\\+\\\\s//g | grep -viE '^#' | grep -viE '^\:' | sort | uniq | sha256sum | cut -d' ' -f 1" checkSum = getoutput(RULES_CHECKSUM_CMD).strip() alright = checkSum == Strings.RULES_CHECKSUM_CORRECT_HASH if not alright: rules = getoutput('iptables-save && ip6tables-save') self.lastSnapshotFileName = "/tmp/broken-rules-%s.log" % time.strftime("%d-%m-%Y_%I-%M-%S") open(self.lastSnapshotFileName, "w").write(rules) return False else: return True
أيضًا ، إذا كان هناك تضارب مع المجموع الاختباري المتوقع ، فيمكنك حفظ تفريغ قواعد iptables في
/tmp/broken-rules-%d-%m-%Y_%I-%M-%S.log
لمزيد من الإجراءات. إذا اتضح ذلك
rulesOk() == False
سيؤدي هذا إلى إعادة كتابة جدول قواعد iptables.
ستحدث مراقبة عنوان IP الحالي عن طريق الوصول المستمر إلى بعض الموارد الخارجية التي توفر عميل IP - على سبيل المثال ،
ident.me
.
حسنًا ، أخيرًا ، سنستخدم DE UI للإبلاغ عن المشكلات المتعلقة بقواعد IP أو تغييرها. تعد كل بيئة رسومية فريدة من نوعها بطريقة ما ، خاصةً عندما يتعلق الأمر باستخدام واجهة المستخدم من عملية الخفي ، ولكن في معظم أنظمة Linux ، ستعرض شفرة bash التي تسمى من Python الإخطارات بنجاح:
من خلال دمج كل هذا في نص بيثون من 200 سطر ، نحصل على ما حققناه. هنا ، على سبيل المثال ، كيف سيبدو الإشعار بأنه قد تم تحديث هويتنا:

وهذه هي الطريقة التي سيبدو بها الإشعار بانتهاك قواعد Iptables مما يشير إلى تفريغ التفريغ الذي يحتوي على المخالفة:

المكون رقم 4: systemd
وأخيرًا ، نود بالتأكيد إجراء إعداد لمرة واحدة وعدم التفكير في سلامتنا في المستقبل ، وبالتالي يتم تشغيل التشغيل التلقائي والخدمات. لدى Linux العديد من النظم الفرعية لإدارة البرنامج الخفي: systemd ، و sysV ، و init. في حالتنا ، وقع الاختيار على systemd بسبب مرونة تكوينه.
لنفترض أن البرنامج النصي python المكتوب في الخطوة السابقة يسمى "toroxy" ويقع في
/usr/bin/
، فإن التشغيل التلقائي والمراقبة اللاحقة مع وجود مرونة معينة للتحكم في البرنامج الخفي ستكون كما يلي:
[Unit] Description=Toroxy After=network.target StartLimitIntervalSec=0 [Service] Type=simple Restart=always RestartSec=1 User=root # service toroxy start ExecStart=/usr/bin/toroxy service # service toroxy stop ExecStop=/usr/bin/toroxy stop # service toroxy reload ExecReload=/usr/bin/toroxy switch [Install] # init 3, UI Tor WantedBy=multi-user.target
تقريبا كل شيء جاهز للعمل "الصناعي". اللمسة الأخيرة التي أود إضافتها إلى الأداة لمزيد من الموثوقية هي التهيئة التلقائية لقواعد iptables عند بدء تشغيل النظام (كما تعلم ، تتم إعادة تعيين قواعد iptables عند إعادة التشغيل) باستخدام iptables-persistent:
iptables-save > /etc/iptables/rules.v4 ip6tables-save > /etc/iptables/rules.v6 netfilter-persistent start && netfilter-persistent save
استنتاج
لذلك قمنا بتجميع أداتنا الخاصة من مجموعة من المكونات المتنوعة ، والتي تتمتع بدرجة عالية من الموثوقية من القدرة على توفير هوية مستمرة لمستخدم Linux على الشبكة. في الختام ، ينبغي القول أن كل ما تم وصفه في المقالة يتم تنفيذه كأداة
Toroxy متوفرة على GitHub.