
पहली ओपन-सोर्स DDoS सुरक्षा प्रणाली
गेटकीपर पहली ओपन सोर्स DDoS सुरक्षा प्रणाली है। इसे किसी भी चरम बैंडविड्थ तक स्केल करने के लिए डिज़ाइन किया गया है, ताकि यह आज और कल दोनों के DDoS हमलों का सामना कर सके। गेटकीपर के भौगोलिक रूप से वितरित आर्किटेक्चर के बावजूद, नेटवर्क नीति जो आने वाले ट्रैफ़िक पर लागू किए जाने वाले सभी निर्णयों का वर्णन करती है, केंद्रीकृत है। यह केंद्रीकृत नीति नेटवर्क ऑपरेटरों को वितरित एल्गोरिदम का लाभ उठाने में सक्षम बनाती है जो बहुत अधिक विलंबता (जैसे वितरित डेटाबेस) के तहत व्यवहार्य नहीं होंगे और एक साथ कई मल्टी-वेक्टर DDoS हमलों से लड़ने में सक्षम बनाती है।
गेटकीपर के इच्छित उपयोगकर्ता संस्थानों, सेवा और सामग्री प्रदाताओं, एंटरप्राइज़ नेटवर्क आदि के नेटवर्क ऑपरेटर हैं। इसका उपयोग व्यक्तिगत इंटरनेट उपयोगकर्ताओं द्वारा करने का इरादा नहीं है।
अधिक जानकारी के लिए, गेटकीपर विकी देखें।
DPDK को ह्यूजपेज के उपयोग की आवश्यकता होती है; ह्यूजपेज माउंट करने के निर्देश आवश्यकताएँ दस्तावेज़ीकरण में उपलब्ध हैं। कई सिस्टमों पर, निम्नलिखित ह्यूजपेज सेटअप पर्याप्त है:
$ echo 256 | sudo tee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
vfio-pci सक्षम करेंलिनक्स कर्नेल मॉड्यूल vfio-pci की आवश्यकता NIC को DPDK/गेटकीपर से बाँधने के लिए होती है। vfio-pci के काम करने के लिए, BIOS और कर्नेल दोनों को इसका समर्थन करना चाहिए। BIOS में VT-d सक्षम होना चाहिए। BIOS VT-d को "Intel (R) VT for Directed I/O", "Intel (R) VT-d Feature", "Intel VT-d", "VT-d", या समान रूपांतरों के रूप में पहचान सकते हैं; अधिक उदाहरणों के लिए, Google Images पर "BIOS VT-d" खोजें। कुछ BIOS में यह आवश्यक हो सकता है कि "Intel (R) Virtualization Technology" (या इस स्ट्रिंग के रूपांतर) नामक एक विकल्प VT-d को सक्षम करने से पहले सक्षम किया जाए।
यह जाँचने के लिए कि BIOS में VT-d सक्षम है, Linux बूट होने के बाद निम्न कमांड चलाएँ:
$ dmesg | grep -e DMAR
यदि उपरोक्त कमांड कुछ पंक्तियाँ लौटाती हैं, तो VT-d सक्षम होना चाहिए। अन्यथा, इसे सक्षम करने के लिए BIOS पर वापस जाना होगा। BIOS में VT-d सक्षम होने की जाँच करने के तरीके के बारे में अधिक जानकारी इस पृष्ठ पर उपलब्ध है।
BIOS में VT-d सक्षम होने के बाद, यह सुनिश्चित करना होगा कि कर्नेल IOMMU का समर्थन करता है। ध्यान दें कि IOMMU का समर्थन करने के लिए कर्नेल संस्करण 3.6 से अधिक होना चाहिए। यह जाँचने के लिए कि चल रहे कर्नेल में डिफ़ॉल्ट रूप से 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 सक्षम नहीं है, तो GRUB के माध्यम से कर्नेल बूट पैरामीटर intel_iommu=on पास करना होगा। बूट पैरामीटर intel_iommu=on की आवश्यकता के कारणों की जानकारी के लिए, यह पृष्ठ देखें। यह जाँचा जा सकता है कि चल रहे कर्नेल को यह पैरामीटर प्राप्त हुआ है या नहीं, नीचे दिए गए कमांड से:
$ cat /proc/cmdline | grep intel_iommu=on
यदि चल रहे कर्नेल को पैरामीटर intel_iommu=on प्राप्त नहीं हुआ है, तो इसे GRUB में जोड़ें, और मशीन को रिबूट करें। GRUB में बूट पैरामीटर जोड़ने की जानकारी यहाँ पाई जा सकती है।
BIOS में VT-d सक्षम होने और कर्नेल IOMMU का समर्थन करने के बाद, निम्नलिखित कमांडों में से किसी एक से यह सत्यापित किया जा सकता है कि सब कुछ सेट है:
$ ls /sys/kernel/iommu_groups
या
$ dmesg | grep -ie 'IOMMU\s\+enabled'
यदि उपरोक्त कमांडों का आउटपुट खाली नहीं है, तो सब कुछ सेट है।
गेटकीपर डेबियन पैकेज प्रोजेक्ट के रिलीज़ पृष्ठ पर 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
डेबियन पैकेज के माध्यम से स्थापित होने पर, गेटकीपर कॉन्फ़िगरेशन फ़ाइलें /etc/gatekeeper में स्थित होती हैं। आपको कम से कम net.lua फ़ाइल को संपादित करना चाहिए और अपने वातावरण के अनुसार front_ports, front_ips, back_ports और back_ips वेरिएबल सेट करना चाहिए।
अन्य Lua फ़ाइलें विभिन्न गेटकीपर कार्यात्मक ब्लॉकों को कॉन्फ़िगर करती हैं। कृपया अपने सेटअप में इन्हें बदलने की आवश्यकता के बारे में अधिक जानकारी के लिए प्रोजेक्ट के विकी का संदर्भ लें।
आपको /etc/gatekeeper/envvars फ़ाइल को भी संपादित करना होगा और GATEKEEPER_INTERFACES वेरिएबल को DPDK से बाँधे जाने वाले नेटवर्क एडेप्टर के PCI पतों पर सेट करना होगा। ये 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_ARGS में गेटकीपर-विशिष्ट विकल्प निर्दिष्ट कर सकते हैं।
गेटकीपर प्रारंभ करने और यह सुनिश्चित करने के लिए कि यह रिबूट पर स्वचालित रूप से प्रारंभ हो, नीचे दिए गए कमांड चलाएँ।
$ 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
नोट: gatekeeper को संकलित और चलाने के लिए libmnl0 और libmnl-dev दोनों की आवश्यकता है, लेकिन केवल gatekeeper चलाने के लिए केवल libmnl0 की आवश्यकता है। gatekeeper को संकलित और चलाने के लिए libkmod2 और libkmod-dev दोनों की आवश्यकता है, लेकिन केवल gatekeeper चलाने के लिए केवल libkmod2 की आवश्यकता है। नवीनतम DPDK को संकलित करने और NUMA सिस्टम का समर्थन करने के लिए libnuma-dev की आवश्यकता है। ELF फ़ाइलों से BPF प्रोग्राम पढ़ने के समर्थन के साथ DPDK संकलित करने के लिए libelf-dev पैकेज की आवश्यकता है, लेकिन इसे चलाने के लिए केवल libelf1 की आवश्यकता है। फ़ोल्डर bpf/ में BPF प्रोग्राम संकलित करने के लिए पैकेज की आवश्यकता है। , , , , और पैकेज BIRD के लिए हैं। पैकेज का उपयोग गेटकीपर डेबियन पैकेज बनाने के लिए किया जाता है। DPDK बनाने और जैसी Python स्क्रिप्ट चलाने के लिए और पैकेज आवश्यक हैं। गेटकीपर को संकलित करने के लिए आवश्यक है, लेकिन गेटकीपर चलाने के लिए केवल आवश्यक है। DPDK बनाने के लिए और आवश्यक हैं। गेटकीपर को संकलित करने के लिए आवश्यक है।
DPDK का उपयोग करने के लिए, सुनिश्चित करें कि आपके पास सभी पर्यावरणीय आवश्यकताएँ हैं।
गेटकीपर रिपॉजिटरी को क्लोन करें, जिसमें गेटकीपर निर्भरताओं वाले सबमॉड्यूल शामिल हैं:
$ git clone --recursive http://github.com/AltraMayor/gatekeeper.git
यदि आप --recursive क्लोन विकल्प का उपयोग नहीं करते हैं, तो आपको gatekeeper निर्देशिका के भीतर से निर्भरताओं वाले सबमॉड्यूल प्राप्त करने होंगे:
$ git submodule init
$ git submodule update
यह अनुभाग बताता है कि गेटकीपर को मैन्युअल रूप से कैसे बनाया जाए। यदि आप डेबियन पैकेज बनाना चाहते हैं, तो अनुभाग पैकेज कैसे बनाएँ देखें।
gatekeeper निर्देशिका में रहते हुए, सेटअप स्क्रिप्ट चलाएँ:
$ . setup.sh
यह स्क्रिप्ट DPDK, LuaJIT और BIRD को संकलित करती है, और आवश्यक कर्नेल मॉड्यूल लोड करती है। इसके अतिरिक्त, यह इंटरफ़ेस नामों और उनके संबंधित PCI पतों को फ़ाइल lua/if_map.lua में सहेजती है ताकि गेटकीपर कॉन्फ़िगरेशन फ़ाइलों में इंटरफ़ेस नामों का उपयोग किया जा सके।
एक बार DPDK और LuaJIT संकलित हो जाने के बाद, gatekeeper को संकलित किया जा सकता है:
$ make
gatekeeper का उपयोग करने से पहले, नेटवर्क एडेप्टर को DPDK से बाँधना होगा। इसके लिए, आप स्क्रिप्ट dependencies/dpdk/usertools/dpdk-devbind.py का उपयोग कर सकते हैं। उदाहरण के लिए:
$ sudo dependencies/dpdk/usertools/dpdk-devbind.py --bind=vfio-pci enp131s0f0
यह कमांड इंटरफ़ेस enp131s0f0 को vfio-pci ड्राइवर से बाँधता है ताकि फ्रेम को कर्नेल के बजाय सीधे DPDK को पास किया जा सके। ध्यान दें कि यह बाइंडिंग उपरोक्त चरणों में गेटकीपर सेटअप के बाद होनी चाहिए ताकि बाउंड इंटरफ़ेस lua/if_map.lua में इंटरफ़ेस की सूची में दिखाई दे।
एक बार gatekeeper संकलित हो जाने और वातावरण सही ढंग से कॉन्फ़िगर हो जाने पर, चलाएँ:
$ sudo build/gatekeeper [EAL OPTIONS] -- [GATEKEEPER OPTIONS]
जहाँ [EAL OPTIONS] डबल डैश से पहले निर्दिष्ट किए जाते हैं और DPDK के पर्यावरणीय अमूर्तन परत के लिए पैरामीटर दर्शाते हैं, और [GATEKEEPER OPTIONS] डबल डैश के बाद निर्दिष्ट किए जाते हैं और गेटकीपर-विशिष्ट विकल्प दर्शाते हैं।
सिस्टम की प्रारंभिक कॉन्फ़िगरेशन, जिसमें DPDK में डिवाइस और मेमोरी कॉन्फ़िगरेशन शामिल है, stdout पर लॉग होगी। एक बार गेटकीपर बूट होने के बाद, सभी जानकारी गेटकीपर लॉग पर आउटपुट होती है।
गेटकीपर डेबियन पैकेज नीचे दिए गए कमांड से बनाए जा सकते हैं। वे रिपॉजिटरी रूट से चलाए जाने के लिए हैं और यह मानते हैं कि git सबमॉड्यूल खींच लिए गए हैं, और बिल्ड निर्भरताएँ स्थापित कर ली गई हैं, जैसा कि ऊपर निर्देशित किया गया है। पैकेज बिल्ड प्रक्रिया के दौरान गेटकीपर और सबमॉड्यूल स्वचालित रूप से संकलित हो जाएंगे।
$ tar --exclude-vcs -Jcvf ../gatekeeper_1.2.0.orig.tar.xz -C .. gatekeeper
$ debuild -uc -us
गेटकीपर पैकेज पैरेंट निर्देशिका में उपलब्ध होगा।
libc6-dev-i386autoconfflexbisonlibncurses5-devlibreadline-devdevscriptsdpdk-devbind.pypython3python3-pyelftoolslibcap-devlibcap2mesonninja-buildpkg-config