تخطَّ إلى المحتوى

bpfilter - تصفية حزم Linux المستندة إلى BPF

bpfilter - تصفية حزم Linux المستندة إلى BPF

bpfilter هو daemon الذي ينقل قواعد جدار الحماية المألوفة إلى برامج BPF محسّنة. المشكلة التي طالت اللحظة التي يعالجها: iptables لها بناء جملة مفهومة جيدًا لكن سقف أداء من تقييم القاعدة المتسلسل، بينما eBPF/XDP الخام سريع لكن يتطلب كتابة والحفاظ على رمز BPF. bpfilter يربطهم — تعرض القواعس بطريقة مألوفة، وهو يجمعها إلى BPF فعال المرفقة في الخطاف الصحيح (بما في ذلك XDP، التي تعالج الحزم قبل دخولها مكدس الشبكة).

تغييرات جدار الحماية يمكن أن تقفلك خارج مضيف بعيد. اختبر على نظام يمكن الوصول إليه من طريقة بدون إرجاع.

المتطلبات

  • Linux kernel الحديث مع دعم BPF (6.4+ موصى به)
  • امتيازات Root (يحمل برامج BPF)
  • libbpf متاح

التثبيت

الطريقةكيف
من المصدرgit clone https://github.com/facebook/bpfilter && make && sudo make install
حزمة Distroمتاح في بعض التوزيعات الأحدث
بدء daemonsudo bpfilter (أو عبر systemd)
التحققbpfilter --version

الهندسة المعمارية

القطعةالدور
bpfilter daemonيستقبل القواعس، ينشئ وينقل BPF
bfcliCLI الأصلي للتعبير عن القواعس
iptables/nftables واجهة أماميةترجمة القواعس الموجودة إلى bpfilter
برامج BPFالفلتر المُترجم المرفقة بـ hook

ربط الخطافات

الخطافحيث تتم معالجة الحزم
XDPالأقدم — في السائق، قبل المكدس (الأسرع)
TC (التحكم في حركة المرور)بعد التحليل الأساسي، الدخول/الخروج
cgroupتصفية مقبس لكل cgroup
Netfilterموضع متوافق في المسار الكلاسيكي

اختيار XDP يعطي أكبر كسب الأداء، خاصة لحزم الرفض (التخفيف من DDoS)، لأن الحزم المرفوضة أبدًا لا تعبر المكدس.

تحديد القواعس مع bfcli

# مجموعة قواعس مفهوم: الإسقاط الافتراضي والسماح SSH وحركة المرور المنشأة
sudo bfcli ruleset set --from-str '
chain BF_HOOK_XDP policy DROP
  rule
    ip4.proto tcp
    tcp.dport 22
    ACCEPT
  rule
    ip4.saddr 10.0.0.0/8
    ACCEPT
'
الأمرالوصف
bfcli ruleset set --from-file Fتحميل القواعس من ملف
bfcli ruleset getعرض مجموعة القواعس النشطة
bfcli ruleset flushإزالة جميع القواعس
bfcli chain setإدارة سلسلة واحدة

المطابقات

المطابقةالمطابقات
ip4.saddr / ip4.daddrIPv4 المصدر/الوجهة (CIDR مدعومة)
ip6.saddr / ip6.daddrعناوين IPv6
ip4.protoالبروتوكول (tcp, udp, icmp)
tcp.dport / tcp.sportمنافذ TCP
udp.dport / udp.sportمنافذ UDP
tcp.flagsمزيجات علم TCP
meta.ifindexواجهة

الأحكام

الحكمالتأثير
ACCEPTالسماح بالحزمة
DROPتجاهل بصمت
CONTINUEسقوط إلى القاعدة التالية

استخدام قواعس iptables الموجودة

bpfilter يشحن واجهات ترجمة أمامية لذا يمكنك الاحتفاظ بأدوات موجودة:

# أشر واجهة iptables-متوافقة على bpfilter
sudo iptables-bpfilter -A INPUT -p tcp --dport 22 -j ACCEPT

هذا هو مسار الهجرة: احتفظ باللغة القاعدة والسكريبتات الإدارة، اكتسب تنفيذ BPF تحتها.

التحقق

الفحصالأمر
مجموعة القواعس النشطةsudo bfcli ruleset get
برامج BPF المحملةsudo bpftool prog list
XDP المرفقةip link show <iface>
العداداتعدادات القاعدة في bfcli ruleset get
العلىsudo bpftop لرؤية تكلفة البرنامج

bpfilter مقابل البدائل

الجانبbpfilteriptablesnftablesXDP/eBPF الخام
الأداءعالي (BPF/XDP)أقل (متسلسل)أفضل من iptablesالأعلى
بناء الجملةمألوف أو bfcliمألوفحديث، موحداكتب رمز BPF
النضجأحدثناضج جداًناضجيعتمد عليك
الأفضل لـسرعة BPF مع قواعس مألوفةتوافق الموروثnetfilter حديثمسارات بيانات مخصصة

افحص تكلفته في المحقق مع bpftop؛ قارن مع iptables للمسار الكلاسيكي.

الموارد