Transmission على لينكس: فرض الخروج حسب مالك العملية
منفذ الأقران ليس القصة كاملة. اربط قاعدة جدار الحماية بحساب العميل، وغطِّ عائلتي العناوين، واختبر مع سقوط النفق.
حجب منفذ الدخول في Transmission ليس سياسة VPN. يفتح عميل التورنت اتصالات صادرة إلى الأقران والمتتبعات، ويحل الأسماء، وقد يعرّض مستمعًا للتحكم عن بُعد، وكل واحد من هذه يمكن أن يخرج عبر واجهة لم تقصدها. اتبع الفحوص الخمسة بالترتيب واعتبر قاعدة جدار الحماية، لا إعدادات العميل، هي الحد. الفحصان الأخيران هما اللذان يتخطاهما الناس، وهما يقرران ما إذا كان الضمان يصمد عندما يسقط النفق.
سمِّ العملية التي تملك النقل
يعمل تطبيق سطح المكتب وخادم النظام تحت حسابين مختلفين، والقاعدة القائمة على المالك تتبع الحساب لا اسم البرنامج. اكتشف أيهما يعمل قبل كتابة أي قاعدة. الحساب الخدمي المخصص يمنح السياسة موضوعًا دقيقًا، بينما يشارك مستخدم سطح المكتب هويته مع المتصفحات والمحررات وكل شيء آخر في الجلسة. أكّد UID بدلًا من افتراض أن اسم الحساب القادم من الحزمة هو المستخدم.
systemctl status transmission-daemon
ps -o user=,pid=,cmd= -C transmission-daemon
إذا لم يكن الحساب موجودًا بعد، فأنشئه لهذا الغرض ولا تعطه شيئًا آخر ليشغله. اكتب الحساب وUID في تعليق القاعدة، لأن القاعدة بلا موضوع قاعدة لا يستطيع أحد تعديلها بأمان.
افصل حقول الاستماع عن المسار
يوثّق Transmission 4.x عناوين استماع الأقران بشكل منفصل عن rpc-bind-address، والفرق مهم. إعداد RPC يتحكم في مستمع التحكم عن بُعد فقط، لذا تغييره لا يختار مسارًا لحركة الأقران. قراءة الإعدادين كإعداد واحد هي السبب الأكثر شيوعًا لاستمرار تسرب إعداد يبدو دقيقًا. توثّق الوثائق نفسها حالة احتياطية عندما يكون عنوان استماع الأقران غير صالح، أي أن العنوان غير المتاح حالة احتياطية موثقة، لا رفضًا مضمونًا.
grep -E '"(peer-port|rpc-bind-address|bind-address-ipv4)"' /var/lib/transmission-daemon/.config/transmission-daemon/settings.json
استخدم أدوات العميل لما هي عليه، وضع الضمان في جدار الحماية. قد يظل إعداد الاستماع مفيدًا، لكنه لا يثبت أن الاتصال بالمتتبعات أو الاكتشاف المحلي أو البحث المفوَّض كلها تخرج عبر النفق. وعندما يختلف الاثنان، فجدار الحماية هو من يقرر.
اكتب مطابقة المالك في السلسلة الصحيحة
دليل Netfilter حول مطابقة المالك يشرح كيف تُنسب الحزم المولَّدة محليًا إلى المستخدم أو المجموعة المالكة لملف المقبس. لا يمتد هذا النسب إلى الحركة المعاد توجيهها، وتتطلب مطابقة المجموعات الإضافية خيارًا صريحًا. اقرأ دليل الامتداد الذي تستخدمه فعلًا لا أول مثال تجده.
iptables -A OUTPUT -m owner --uid-owner transmission -o tun0 -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner transmission -j REJECT
ip6tables -A OUTPUT -m owner --uid-owner transmission -o tun0 -j ACCEPT
ip6tables -A OUTPUT -m owner --uid-owner transmission -j REJECT
الترتيب لا يقل أهمية عن المطابقة. القبول الواسع في أعلى السلسلة يبطل رفضًا دقيقًا في أدناها، فراجع السلسلة كلها بدلًا من إضافة قاعدة والأمل. أدرج عائلتي العناوين إذا كان المضيف يشغّل IPv6، لأن سياسة v4 فقط تترك مسارًا مفتوحًا لا يراقبه أحد. أبقِ القواعد مثبتة عبر إعادات تشغيل العميل والنفق.
قرّر ما يحدث عندما يختفي tun0
سياسة الفشل هي جوهر التمرين. إذا اختفى النفق وأزالت الخطافة نفسها القواعد، يصبح العميل حرًا في استخدام الواجهة الفيزيائية حتى يوقفه شيء آخر. التصميم الآمن يبقي القواعد ويتركها ترفض، وهذا ما يجعل الحد مستقلًا عن صحة النفق. وخطافة التفكيك التي تحذف القواعد أيضًا هي نقيض سياسة الفشل.
ip link show tun0
iptables -S OUTPUT
اختبر ذلك عن قصد: أوقف النفق، وابدأ نقلًا آمنًا للتخلي عنه، وراقب هل يخرج شيء. ثم أعد النفق وأكّد أن المسار المقصود يعمل من جديد.
غطِّ المسارات التي لا تراها القاعدة
قد يتولى عملية محلِّل مستقلة حل الأسماء، وقد يوفر فضاء أسماء أو بوابة مخصصة حدًّا آخر إذا صُممت مسارات المشاركة والإقلاع لذلك. قرّر أي مكوّن يملك DNS وهل يتبع قاعدة الخروج نفسها. ثم انظر إلى RPC: إذا كان rpc-whitelist مستخدمًا، فشبكة الإدارة المعتمدة جزء من العقد، ونطاق RFC1918 الواسع ليس كذلك.
ss -tunp | grep -i transmission
يمكن لعدادات الواجهة أن تدعم الملاحظة، لكنها لا تستطيع إثبات أي عملية أنتجت البايتات. نفّذ نقلًا يُسمح لك بالتخلي عنه: أولًا على المسار العامل، ثم دون نفق عند الإقلاع، ثم عبر انقطاع وإعادة اتصال وواجهة أُنشئت للتو. اختبر محاولة جديدة واتصالًا كان مفتوحًا بالفعل، لأن القاعدة قد لا تكون طُبقت على المقبس الأقدم. سجّل التاريخ والحساب والنتيجة مع الاختبار.
لصق مثال يمسح السلسلة كلها يبادل ثغرة واحدة بعدة ثغرات، لذا أضف قواعد بدلًا من مسحها. عندما تنجح الفحوص الخمسة كلها، يكون الضمان صريحًا: حركة العميل تخرج عبر النفق أو لا تخرج إطلاقًا، والقاعدة التي تفرض ذلك تصمد أمام فشل النفق نفسه.