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 | متاح في بعض التوزيعات الأحدث |
| بدء daemon | sudo bpfilter (أو عبر systemd) |
| التحقق | bpfilter --version |
الهندسة المعمارية
| القطعة | الدور |
|---|
bpfilter daemon | يستقبل القواعس، ينشئ وينقل BPF |
bfcli | CLI الأصلي للتعبير عن القواعس |
| 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.daddr | IPv4 المصدر/الوجهة (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 مقابل البدائل
| الجانب | bpfilter | iptables | nftables | XDP/eBPF الخام |
|---|
| الأداء | عالي (BPF/XDP) | أقل (متسلسل) | أفضل من iptables | الأعلى |
| بناء الجملة | مألوف أو bfcli | مألوف | حديث، موحد | اكتب رمز BPF |
| النضج | أحدث | ناضج جداً | ناضج | يعتمد عليك |
| الأفضل لـ | سرعة BPF مع قواعس مألوفة | توافق الموروث | netfilter حديث | مسارات بيانات مخصصة |
افحص تكلفته في المحقق مع bpftop؛ قارن مع iptables للمسار الكلاسيكي.
الموارد