
تفويض الحزمة الواحدة > طرق المنافذ
يطبق fwknop مخطط تفويض يُعرف باسم تفويض الحزمة الواحدة (SPA) لإخفاء الخدمات بشكل قوي. يتطلب SPA حزمة واحدة فقط تكون مشفرة وغير قابلة لإعادة التشغيل وموثقة عبر HMAC من أجل التواصل مع الوصول المطلوب إلى خدمة مخفية خلف جدار ناري في وضع تصفية رفض افتراضي. التطبيق الرئيسي لـ SPA هو استخدام جدار ناري لإسقاط جميع محاولات الاتصال بخدمات مثل SSH لجعل استغلال الثغرات (سواء 0-day أو الكود غير المحدث) أكثر صعوبة. نظرًا لعدم وجود منافذ مفتوحة، فإن أي خدمة يتم إخفاؤها بواسطة SPA لا يمكن مسحها ضوئيًا باستخدام Nmap بشكل طبيعي. يدعم مشروع fwknop أربعة جدران نارية مختلفة: iptables و firewalld و PF و ipfw عبر Linux و OpenBSD و FreeBSD و Mac OS X. يوجد أيضًا دعم للبرامج النصية المخصصة بحيث يمكن جعل fwknop يدعم بنى تحتية أخرى مثل ipset أو nftables.
SPA هو في الأساس الجيل التالي من طرق طرق الباب (Port Knocking - PK)، ولكنه يحل العديد من القيود التي يظهرها PK مع الاحتفاظ بفوائده الأساسية. تشمل قيود PK صعوبة عامة في الحماية من هجمات إعادة التشغيل، وعادةً لا يمكن دعم الشفرات غير المتماثلة ومخططات HMAC بشكل موثوق، ومن السهل جدًا شن هجوم حجب الخدمة (DoS) ضد خادم PK فقط عن طريق تزييف حزمة إضافية في تسلسل PK أثناء عبورها للشبكة (مما يقنع خادم PK بأن العميل لا يعرف التسلسل الصحيح). يتم حل كل هذه العيوب بواسطة SPA. في نفس الوقت، يخفي SPA الخدمات خلف سياسة جدار ناري افتراضية للإسقاط، ويحصل على بيانات SPA بشكل سلبي (عادةً عبر libpcap أو وسائل أخرى)، وينفذ عمليات تشفير قياسية لمصادقة حزم SPA وتشفيرها/فك تشفيرها.
تستخدم حزم SPA التي يولدها fwknop HMAC للتشفير الموثق في نموذج التشفير ثم التوثيق. على الرغم من أن استخدام HMAC اختياري حاليًا (يتم تفعيله عبر خيار سطر الأوامر --use-hmac)، إلا أنه يوصى بشدة لثلاثة أسباب:
السبب الأخير أعلاه هو السبب في أنه يجب استخدام HMAC حتى عندما يتم تشفير حزم SPA باستخدام GnuPG نظرًا لأن بيانات SPA لا تُرسل عبر وظائف libgpgme ما لم يتم التحقق من HMAC أولاً. GnuPG و libgpgme هما قطعتان برمجيتان معقدتان نسبيًا، وبالتالي فإن تقييد قدرة المهاجم المحتمل على التفاعل مع هذا الكود من خلال عملية HMAC يساعد في الحفاظ على موقف أمني أقوى. يتطلب توليد HMAC لاتصالات SPA مفتاحًا مخصصًا بالإضافة إلى مفتاح التشفير العادي، ويمكن توليدهما معًا باستخدام خيار --key-gen.
يقوم fwknop بتشفير حزم SPA إما باستخدام تشفير الكتلة Rijndael أو عبر GnuPaG والتشفير غير المتماثل المرتبط به. إذا تم اختيار طريقة التشفير المتماثل، فكما هو معتاد يتم مشاركة مفتاح التشفير بين العميل والخادم (انظر ملف /etc/fwknop/access.conf للتفاصيل). يتم توليد مفتاح التشفير الفعلي المستخدم لتشفير Rijndael عبر خوارزمية اشتقاق المفاتيح القياسية PBKDF1، ويتم تعيين وضع CBC. إذا تم اختيار طريقة GnuPG، فتُشتق مفاتيح التشفير من حلقات مفاتيح GnuPG.
عادةً ما يصل الأشخاص الذين يستخدمون تفويض الحزمة الواحدة (SPA) أو ابن عمه الأقل أمانًا وهو طرق الباب (PK) إلى خدمة SSHD التي تعمل على نفس النظام الذي يتم فيه نشر برنامج SPA/PK. أي أن جدارًا ناريًا يعمل على مضيف لديه سياسة رفض افتراضية ضد جميع اتصالات SSH الواردة بحيث لا يمكن مسح SSHD ضوئيًا، لكن خفي SPA يعيد تكوين الجدار الناري لمنح الوصول مؤقتًا إلى عميل SPA موثوق بشكل سلبي:
"استخدام SPA الأساسي للوصول إلى SSHD"
يدعم fwknop ما سبق، ولكنه يذهب أيضًا إلى أبعد من ذلك ويستخدم NAT بشكل قوي (لجدران iptables/firewalld). بعد كل شيء، الجدران النارية المهمة عادةً ما تكون بوابات بين الشبكات بدلاً من نشرها فقط على المضيفات المستقلة. يُستخدم NAT بشكل شائع على هذه الجدران النارية (على الأقل لاتصالات IPv4) لتوفير الوصول إلى الإنترنت للشبكات الداخلية الموجودة على مساحة عناوين RFC 1918، وكذلك للسماح للمضيفات الخارجية بالوصول إلى الخدمات المستضافة على الأنظمة الداخلية.
نظرًا لأن fwknop يتكامل مع NAT، يمكن استغلال SPA للوصول إلى الخدمات الداخلية عبر الجدار الناري من قبل المستخدمين على الإنترنت الخارجي. على الرغم من أن هذا له تطبيقات عديدة على الشبكات التقليدية الحديثة، إلا أنه يسمح أيضًا لـ fwknop بدعم بيئات الحوسبة السحابية مثل Amazon AWS:
"استخدام SPA على بيئات سحابية من Amazon AWS"
واجهة المستخدم الرسمية لعميل fwknop عبر المنصات fwknop-gui
(تنزيل، github)
تم تطويرها بواسطة Jonathan Bennett. يتم دعم معظم أوضاع SPA الرئيسية للعميل بما في ذلك طلبات NAT ومفاتيح HMAC وRijndael (GnuPG غير مدعوم بعد) وحفظ مقطع fwknoprc والمزيد. يعمل fwknop-gui حاليًا على Linux و Mac OS X و Windows - وإليك لقطة شاشة من OS X:
"fwknop-gui على Mac OS X"
وبالمثل، يتوفر
عميل Android
مُحدّث أيضًا.
يمكن العثور على برنامج تعليمي شامل حول fwknop هنا:
http://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html
فيما يلي قائمة كاملة بالميزات التي يدعمها مشروع fwknop:
tcpdump -w <file>) أو من كاتب pcap لـ iptables ULOG أو مباشرة عبر مقبس UDP في وضع --udp-server.تم إصدار مشروع fwknop كبرنامج مفتوح المصدر بموجب شروط رخصة جنو العمومية العامة (GPL v2) أو (حسب اختيارك) أي إصدار لاحق. يمكن العثور على أحدث إصدار في http://www.cipherdyne.org/fwknop/
يصف ملف README هذا الحالة الحالية لمشروع fwknop اعتبارًا من
الإصدار 2.5 الذي صدر في يوليو 2013. في الوقت الحالي، لدينا تنفيذ لمكتبة
مشغل طرق الباب للجدار الناري؛ libfko، بالإضافة إلى تطبيقات عميل fwknop وخادمه.
توفر المكتبة API ووظائف الخلفية لإدارة بيانات تفويض الحزمة الواحدة (SPA) التي تستخدمها مكونات fwknop الأخرى. يمكن أيضًا استخدامها بواسطة برامج أخرى تحتاج وظائف SPA (انظر دليل perl لوحدة FKO perl كمثال، وهناك روابط بايثون أيضًا في دليل python).
إذا كنت تقوم بالترقية من إصدار أقدم من fwknop (وهذا يشمل تنفيذ perl الأصلي أيضًا)، فستحتاج إلى قراءة الرابط التالي لضمان انتقال سلس إلى fwknop-2.5 أو أحدث:
http://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html#backwards-compatibility
يستخدم هذا التوزيع GNU autoconf لإعداد البناء. يُرجى مراجعة
ملف INSTALL للأساسيات العامة حول استخدام autoconf.
هناك بعض خيارات "configure" الخاصة بـ fwknop. وهي (مستخرجة من ./configure --help):
--disable-client لا تقم ببناء مكون عميل fwknop. الافتراضي هو بناء العميل.
--disable-server لا تقم ببناء مكون خادم fwknop. الافتراضي هو بناء الخادم.
--with-gpgme دعم تشفير gpg باستخدام libgpgme [default=check]
--with-gpgme-prefix=PFX بادئة حيث تم تثبيت GPGME (اختياري)
--with-gpg=/path/to/gpg حدد المسار إلى ملف gpg القابل للتنفيذ الذي ستستخدمه gpgme [default=check path]
--with-firewalld=/path/to/firewalld
حدد المسار إلى ملف firewalld القابل للتنفيذ [default=check path]
--with-iptables=/path/to/iptables
حدد المسار إلى ملف iptables القابل للتنفيذ [default=check path]
--with-ipfw=/path/to/ipfw
حدد المسار إلى ملف ipfw القابل للتنفيذ [default=check path]
--with-pf=/path/to/pfctl
حدد المسار إلى ملف pf القابل للتنفيذ [default=check path]
--with-ipf=/path/to/ipf حدد المسار إلى ملف ipf القابل للتنفيذ [default=check path]
أمثلة:
./configure --disable-client --with-firewalld=/bin/firewall-cmd
./configure --disable-client --with-iptables=/sbin/iptables --with-firewalld=no
لأولئك منكم الذين يستخدمون حاليًا إصدار Perl ويخططون للترحيل إلى هذا الإصدار، هناك بعض الأشياء التي يجب أن تكونوا على دراية بها:
لم يتم نقل جميع ميزات ووظائف fwknop المستند إلى Perl إلى هذا التنفيذ. شعرنا أنه من المهم إبقاء إصدار C بسيطًا وخفيفًا قدر الإمكان. يمكن تحقيق معظم الميزات/الوظائف المحذوفة (مثل التنبيهات البريدية) من خلال وسائل أخرى (أي استخدام برنامج نصي خارجي لمراقبة ملفات السجل والتنبيه بناءً على رسائل السجل المناسبة).
هناك بعض الاختلافات في توجيهات وقيم ملفات التكوين والوصول لـ fwknop. بعضها دقيق إلى حد ما. يجب عليك الانتباه جيدًا إلى التوثيق والتعليقات في تلك الملفات.
إذا كنت تسحب هذا التوزيع من git، فيجب عليك تشغيل البرنامج النصي autogen.sh لتوليد ملفات autoconf. إذا حصلت على أخطاء حول أدلة أو ملفات مفقودة، حاول تشغيل autogen.sh مرة أخرى. بعد ذلك يمكنك تشغيل autoreconf -i عندما تريد إعادة توليد التكوين. إذا، لسبب ما، لم يعمل autoreconf لك، فإن البرنامج النصي autogen.sh يجب أن يكون كافيًا.
يتم تضمين مصادر nroff لصفحات الدليل الخاصة بـ fwknop و fwknopd في أدلتها الخاصة (العميل والخادم). هذه الملفات nroff مشتقة من مصادر asciidoc في دليل 'docs'. راجع README في docs للحصول على التفاصيل.