
أول نظام حماية مفتوح المصدر من DDoS
Gatekeeper هو أول نظام حماية مفتوح المصدر من هجمات حجب الخدمة الموزعة (DDoS). صُمم ليتوسع ليتناسب مع أي عرض نطاق ذروة، لذا يمكنه الصمود أمام هجمات DDoS الحالية والمستقبلية. بالرغم من البنية الموزعة جغرافياً لـ Gatekeeper، فإن سياسة الشبكة التي تصف جميع القرارات الواجب تطبيقها على حركة المرور الواردة هي مركزية. تتيح هذه السياسة المركزية لمشغلي الشبكات استغلال الخوارزميات الموزعة التي لن تكون قابلة للتطبيق تحت زمن وصول عالٍ جداً (مثل قواعد البيانات الموزعة) ومحاربة هجمات DDoS متعددة المتجهات في وقت واحد.
المستخدمون المستهدفون لـ Gatekeeper هم مشغلو الشبكات في المؤسسات، ومزودو الخدمات والمحتوى، وشبكات الشركات، إلخ. ليس المقصود استخدامه من قبل مستخدمي الإنترنت الأفراد.
لمزيد من المعلومات، راجع ويكي Gatekeeper.
تتطلب DPDK استخدام الصفحات الضخمة؛ تعليمات تركيب الصفحات الضخمة متاحة في توثيق المتطلبات. على العديد من الأنظمة، يكفي الإعداد التالي للصفحات الضخمة:
$ echo 256 | sudo tee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
vfio-pciوحدة نواة لينكس vfio-pci مطلوبة لربط بطاقات الشبكة مع DPDK/Gatekeeper. لكي تعمل vfio-pci، يجب أن يدعمها كل من BIOS والنواة. يجب أن يكون VT-d ممكّناً في BIOS. قد يُعرف VT-d في BIOS باسم "Intel (R) VT for Directed I/O" أو "Intel (R) VT-d Feature" أو "Intel VT-d" أو "VT-d" أو أشكال مشابهة؛ لمزيد من الأمثلة، ابحث عن "BIOS VT-d" على Google Images. قد تتطلب بعض أنظمة BIOS تمكين خيار يسمى "Intel (R) Virtualization Technology" (أو أشكال من هذه السلسلة) قبل تمكين VT-d.
للتحقق من تمكين VT-d في BIOS، قم بتشغيل الأمر التالي بعد إقلاع لينكس:
$ dmesg | grep -e DMAR
إذا أعاد الأمر أعلاه بعض الأسطر، فإن VT-d مفعل. بخلاف ذلك، يجب العودة إلى BIOS لتمكينه. مزيد من المعلومات حول كيفية التحقق من تمكين VT-d في BIOS متاحة على هذه الصفحة.
بمجرد تمكين VT-d في BIOS، يجب التأكد من أن النواة تدعم IOMMU. لاحظ أنك تحتاج إلى إصدار نواة أكبر من 3.6 لدعم IOMMU. يمكن التحقق مما إذا كانت النواة قيد التشغيل تحتوي على IOMMU مفعلاً افتراضياً باستخدام الأمر التالي:
$ grep CONFIG_INTEL_IOMMU_DEFAULT_ON /boot/config-`uname -r`
على الأرجح، سيعيد الأمر أعلاه # CONFIG_INTEL_IOMMU_DEFAULT_ON is not set، أي أن النواة قيد التشغيل لا تحتوي على IOMMU مفعلاً افتراضياً. طرق بديلة للتحقق من خيارات بناء النواة (أي CONFIG_INTEL_IOMMU_DEFAULT_ON) متاحة على هذه الصفحة.
إذا كانت النواة لا تحتوي على IOMMU مفعلاً افتراضياً، يجب تمرير معامل إقلاع النواة intel_iommu=on عبر GRUB. للحصول على معلومات حول سبب الحاجة إلى معامل الإقلاع intel_iommu=on، راجع هذه الصفحة. يمكن التحقق مما إذا كانت النواة قيد التشغيل قد تلقت هذا المعامل باستخدام الأمر التالي:
$ cat /proc/cmdline | grep intel_iommu=on
إذا لم تتلق النواة قيد التشغيل المعامل intel_iommu=on، أضفه إلى GRUB، وأعد تشغيل الجهاز. معلومات حول كيفية إضافة معامل إقلاع إلى GRUB موجودة هنا.
بمجرد تمكين VT-d في BIOS ودعم النواة لـ IOMMU، يمكن التحقق من أن كل شيء جاهز باستخدام أحد الأوامر التالية:
$ ls /sys/kernel/iommu_groups
أو
$ dmesg | grep -ie 'IOMMU\s\+enabled'
كل شيء جاهز إذا كانت مخرجات الأوامر أعلاه غير فارغة.
حزم Gatekeeper لنظام دبيان متاحة لنظام Ubuntu 24.04 LTS في صفحة الإصدارات للمشروع.
بمجرد تنزيل الحزم، يمكن تثبيتها باستخدام الأوامر التالية:
$ tar -zxvf gatekeeper-ubuntu-24.04-packages.tar.gz
$ cd gatekeeper-ubuntu-24.04-packages
$ sudo dpkg -i gatekeeper-bird_*_amd64.deb gatekeeper_*_amd64.deb
عند التثبيت عبر حزم دبيان، توجد ملفات تكوين Gatekeeper في /etc/gatekeeper. يجب تعديل ملف net.lua على الأقل، وتعيين المتغيرات front_ports و front_ips و back_ports و back_ips وفقاً لبيئتك.
تقوم ملفات Lua الأخرى بتكوين كتل وظيفية مختلفة لـ Gatekeeper. يُرجى الرجوع إلى ويكي المشروع لمزيد من المعلومات حول ما إذا كانت هذه الملفات بحاجة إلى التغيير في إعدادك.
تحتاج أيضاً إلى تعديل ملف /etc/gatekeeper/envvars وتعيين المتغير GATEKEEPER_INTERFACES إلى عناوين PCI لمحولات الشبكة التي سيتم ربطها بـ DPDK. يمكن العثور عليها باستخدام الأمر lshw. على سبيل المثال:
# lshw -c network -businfo
Bus info Device Class Description
=======================================================
pci@0000:08:00.0 eth0 network I350 Gigabit Network Connection
pci@0000:08:00.1 eth1 network I350 Gigabit Network Connection
...
بناءً على هذا الإخراج، قم بتعيين GATEKEEPER_INTERFACES كما يلي:
GATEKEEPER_INTERFACES="08:00.0 08:00.1"
في نفس الملف، يمكنك اختيارياً تحديد خيارات طبقة التجريد البيئي في المتغير DPDK_ARGS و خيارات خاصة بـ Gatekeeper في GATEKEEPER_ARGS.
قم بتشغيل الأوامر أدناه لبدء Gatekeeper ولضمان تشغيله تلقائياً عند إعادة التشغيل.
$ sudo systemctl start gatekeeper
$ sudo systemctl enable gatekeeper
قم بتثبيت التبعيات البرمجية التالية:
$ sudo apt-get update
$ sudo apt-get -y -q install git clang devscripts doxygen libhugetlbfs-bin \
build-essential gcc-multilib linux-headers-`uname -r` libmnl0 libmnl-dev \
libkmod2 libkmod-dev libnuma-dev libelf1 libelf-dev libc6-dev-i386 \
autoconf flex bison libncurses5-dev libreadline-dev python3 \
python3-pyelftools libcap-dev libcap2 meson ninja-build pkg-config
ملاحظة: كل من libmnl0 و libmnl-dev مطلوبان لتجميع وتشغيل gatekeeper، ولكن libmnl0 فقط مطلوب لتشغيل gatekeeper فقط. كل من libkmod2 و libkmod-dev مطلوبان لتجميع وتشغيل gatekeeper، ولكن libkmod2 فقط مطلوب لتشغيل gatekeeper فقط. libnuma-dev مطلوب لتجميع أحدث إصدار من DPDK ودعم أنظمة NUMA. الحزمة libelf-dev مطلوبة لتجميع DPDK مع دعم قراءة برامج BPF من ملفات ELF، ولكن libelf1 فقط مطلوب لتشغيله. الحزمة libc6-dev-i386 مطلوبة لتجميع برامج BPF في المجلد . حزم و و و و مخصصة لـ BIRD. الحزمة تُستخدم لبناء حزم Gatekeeper لدبيان. الحزم و مطلوبة لبناء DPDK وتشغيل نصوص Python مثل . مطلوب لتجميع Gatekeeper، ولكن فقط مطلوب لتشغيل Gatekeeper. و مطلوبان لبناء DPDK. مطلوب لتجميع Gatekeeper.
لاستخدام DPDK، تأكد من توفر جميع المتطلبات البيئية.
قم باستنساخ مستودع Gatekeeper، بما في ذلك الوحدات الفرعية التي تحتوي على تبعيات Gatekeeper:
$ git clone --recursive http://github.com/AltraMayor/gatekeeper.git
إذا لم تستخدم خيار --recursive عند الاستنساخ، فستحتاج إلى الحصول على الوحدات الفرعية التي تحتوي على التبعيات من داخل دليل gatekeeper:
$ git submodule init
$ git submodule update
يشرح هذا القسم كيفية بناء Gatekeeper يدوياً. إذا كنت ترغب في بناء حزم دبيان، راجع القسم كيفية بناء الحزم.
أثناء وجودك في دليل gatekeeper، قم بتشغيل script الإعداد:
$ . setup.sh
يقوم هذا script بتجميع DPDK و LuaJIT و BIRD، وتحميل وحدات النواة المطلوبة. بالإضافة إلى ذلك، يحفظ أسماء الواجهات وعناوين PCI الخاصة بها في ملف lua/if_map.lua بحيث يمكن استخدام أسماء الواجهات في ملفات تكوين Gatekeeper.
بمجرد تجميع DPDK و LuaJIT، يمكن تجميع gatekeeper:
$ make
قبل استخدام gatekeeper، يجب ربط محولات الشبكة بـ DPDK. لهذا، يمكنك استخدام script dependencies/dpdk/usertools/dpdk-devbind.py. على سبيل المثال:
$ sudo dependencies/dpdk/usertools/dpdk-devbind.py --bind=vfio-pci enp131s0f0
يقوم هذا الأمر بربط الواجهة enp131s0f0 بمشغل vfio-pci بحيث يمكن تمرير الإطارات مباشرة إلى DPDK بدلاً من النواة. لاحظ أن هذا الربط يجب أن يتم بعد إعداد Gatekeeper في الخطوات أعلاه بحيث تظهر الواجهة المرتبطة في قائمة الواجهات في lua/if_map.lua.
بمجرد تجميع gatekeeper وتكوين البيئة بشكل صحيح، قم بتشغيل:
$ sudo build/gatekeeper [EAL OPTIONS] -- [GATEKEEPER OPTIONS]
حيث [EAL OPTIONS] تُحدد قبل الشرطتين المزدوجتين وتمثل معاملات طبقة التجريد البيئي لـ DPDK، و [GATEKEEPER OPTIONS] تُحدد بعد الشرطتين المزدوجتين وتمثل خيارات خاصة بـ Gatekeeper.
سيتم تسجيل التكوين المبكر للنظام، بما في ذلك تكوين الجهاز والذاكرة في DPDK، إلى stdout. بمجرد تشغيل Gatekeeper، يتم إخراج جميع المعلومات إلى سجل Gatekeeper.
يمكن بناء حزم دبيان لـ Gatekeeper باستخدام الأوامر أدناه. من المفترض تشغيلها من جذر المستودع وتفترض أن الوحدات الفرعية git قد تم سحبها، وأن تبعيات البناء قد تم تثبيتها، كما هو موضح أعلاه. سيتم تجميع Gatekeeper والوحدات الفرعية تلقائياً أثناء عملية بناء الحزمة.
$ tar --exclude-vcs -Jcvf ../gatekeeper_1.2.0.orig.tar.xz -C .. gatekeeper
$ debuild -uc -us
ستكون حزمة Gatekeeper متاحة في الدليل الأصل.
bpf/autoconfflexbisonlibncurses5-devlibreadline-devdevscriptspython3python3-pyelftoolsdpdk-devbind.pylibcap-devlibcap2mesonninja-buildpkg-config