nftables حزمة مرشح 0.9.1 الإصدار

بعد عام من التطوير المقدمة الافراج عن مرشح الحزمة نفتابل 0.9.1، تم تطويره كبديل لـ iptables وip6table وarptables وebtables من خلال توحيد واجهات تصفية الحزم لـ IPv4 وIPv6 وARP وجسور الشبكة. تتضمن حزمة nftables مكونات مرشح الحزمة التي تعمل في مساحة المستخدم، بينما يتم توفير العمل على مستوى kernel بواسطة النظام الفرعي nf_tables، والذي كان جزءًا من Linux kernel منذ الإصدار 3.13.

يوفر مستوى kernel فقط واجهة عامة مستقلة عن البروتوكول توفر وظائف أساسية لاستخراج البيانات من الحزم وتنفيذ عمليات البيانات والتحكم في التدفق.
يتم تجميع منطق التصفية نفسه والمعالجات الخاصة بالبروتوكول في كود بايت في مساحة المستخدم، وبعد ذلك يتم تحميل هذا الكود الثانوي في النواة باستخدام واجهة Netlink وتنفيذه في جهاز ظاهري خاص يذكرنا بـ BPF (مرشحات حزم بيركلي). يتيح لك هذا الأسلوب تقليل حجم كود التصفية الذي يعمل على مستوى kernel بشكل كبير ونقل جميع وظائف قواعد التحليل والمنطق للعمل مع البروتوكولات إلى مساحة المستخدم.

الابتكارات الرئيسية:

  • دعم IPsec، مما يسمح بمطابقة عناوين النفق بناءً على الحزمة ومعرف طلب IPsec وعلامة SPI (فهرس معلمة الأمان). على سبيل المثال،

    ... IPSEC في IP Saddr 192.168.1.0/24
    ... IPSEC في SPI 1-65536

    من الممكن أيضًا التحقق مما إذا كان المسار يمر عبر نفق IPsec. على سبيل المثال، لمنع حركة المرور عبر IPSec:

    … تصفية الإخراج RT IPSEC في عداد المفقودين

  • دعم IGMP (بروتوكول إدارة مجموعة الإنترنت). على سبيل المثال، يمكنك استخدام قاعدة لتجاهل طلبات عضوية مجموعة IGMP الواردة

    nft إضافة قاعدة netdev foo bar igmp نوع إسقاط عداد استعلام العضوية

  • إمكانية استخدام المتغيرات لتحديد السلاسل الانتقالية (jump/goto). على سبيل المثال:

    تحديد الوجهة = ber
    إضافة قاعدة ip foo bar الانتقال إلى $dest

  • دعم الأقنعة لتحديد أنظمة التشغيل (OS Fingerprint) بناءً على قيم TTL في الرأس. على سبيل المثال، لوضع علامة على الحزم بناءً على نظام تشغيل المرسل، يمكنك استخدام الأمر:

    ... مجموعة العلامات الوصفية osf ttl تخطي خريطة الاسم { "Linux" : 0x1,
    "ويندوز": 0x2،
    "ماك": 0x3،
    "غير معروف" : 0x0 }
    ...osf ttl تخطي الإصدار "Linux:4.20"

  • القدرة على مطابقة عنوان ARP للمرسل وعنوان IPv4 للنظام المستهدف. على سبيل المثال، لزيادة عداد حزم ARP المرسلة من العنوان 192.168.2.1، يمكنك استخدام القاعدة التالية:

    الجدول آرب س {
    سلسلة ص {
    نوع عامل التصفية هوك مرشح أولوية الإدخال؛ قبول السياسة؛
    ARP Saddr IP 192.168.2.1 الحزم المضادة 1 بايت 46
    }
    }

  • دعم التوجيه الشفاف للطلبات من خلال الوكيل (tproxy). على سبيل المثال، لإعادة توجيه المكالمات من المنفذ 80 إلى المنفذ الوكيل 8080:

    جدول الملكية الفكرية س {
    سلسلة ص {
    اكتب خطاف مرشح أولوية التوجيه المسبق -150؛ قبول السياسة؛
    tcp dport 80 tproxy إلى: 8080
    }
    }

  • دعم وضع علامات على المقابس مع القدرة على الحصول على العلامة المحددة عبر setockopt() في وضع SO_MARK. على سبيل المثال:

    الجدول آينت س {
    سلسلة ص {
    اكتب خطاف مرشح أولوية التوجيه المسبق -150؛ قبول السياسة؛
    تعيين علامة TCP DPORT 8080 علامة المقبس
    }
    }

  • دعم لتحديد أسماء النصوص ذات الأولوية للسلاسل. على سبيل المثال:

    nft add chain ip x Raw { نوع خطاف مرشح التوجيه المسبق للأولوية الخام؛ }
    nft add chain ip x filter { نوع مرشح ربط مرشح الأولوية المسبق ؛ }
    nft add chain ip x filter_later { نوع مرشح الخطاف المسبق للأولوية filter + 10; }

  • دعم علامات SELinux (Secmark). على سبيل المثال، لتعريف علامة "sshtag" في سياق SELinux، يمكنك تشغيل:

    nft إضافة علامة secmark لمرشح inet "system_u:object_r:ssh_server_packet_t:s0"

    ثم استخدم هذه التسمية في القواعد:

    nft إضافة قاعدة إدخال مرشح inet tcp dport 22 meta secmark set "sshtag"

    nft إضافة خريطة inet filter secmapping { اكتب inet_service : secmark؛ }
    nft إضافة عنصر مرشح inet secmapping { 22 : "sshtag" }
    nft إضافة قاعدة مرشح inet، إدخال meta secmark، تعيين tcp dport، خريطةsecmapping

  • القدرة على تحديد المنافذ المخصصة للبروتوكولات في شكل نص، كما تم تعريفها في ملف /etc/services. على سبيل المثال:

    nft إضافة القاعدة xy tcp dport "ssh"
    مجموعة قواعد قائمة NFT -l
    الجدول × {
    سلسلة ص {
    ...
    منفذ تي سي بي "SSH"
    }
    }

  • القدرة على التحقق من نوع واجهة الشبكة. على سبيل المثال:

    إضافة قاعدة إنت الخام prerouting meta iifkind "vrf" قبول

  • دعم محسّن للتحديث الديناميكي لمحتويات المجموعات من خلال تحديد العلامة "الديناميكية" بشكل صريح. على سبيل المثال، لتحديث المجموعة "s" لإضافة عنوان المصدر وإعادة تعيين الإدخال في حالة عدم وجود حزم لمدة 30 ثانية:

    إضافة جدول x
    إضافة مجموعة xs {نوع ipv4_addr؛ الحجم 128؛ مهلة 30 ثانية؛ الأعلام ديناميكية. }
    إضافة سلسلة xy {نوع أولوية إدخال خطاف المرشح 0؛ }
    إضافة القاعدة xy تحديث @s { ip Saddr }

  • القدرة على تحديد شرط مهلة منفصلة. على سبيل المثال، لتجاوز المهلة الافتراضية للحزم التي تصل إلى المنفذ 8888، يمكنك تحديد:

    مرشح IP للجدول {
    مهلة ct العدوانية-tcp {
    بروتوكول تكب؛
    l3proto الملكية الفكرية.
    السياسة = {التأسيس: 100، إغلاق_الانتظار: 4، إغلاق: 4}
    }
    سلسلة الإخراج {
    ...
    مجموعة المهلة tcp dport 8888 ct "العدوانية-tcp"
    }
    }

  • دعم NAT لعائلة آينت:

    الجدول إنت نات {
    ...
    IP6 أبي ميت::2::1 dnat إلى ميت:2::99
    }

  • تحسين الإبلاغ عن الأخطاء المطبعية:

    Nft إضافة اختبار مرشح السلسلة

    خطأ: لا يوجد مثل هذا الملف أو الدليل؛ هل تقصد الجدول "مرشح" في IP الخاص بالعائلة؟
    إضافة اختبار مرشح السلسلة
    ^^^^^^

  • القدرة على تحديد أسماء الواجهات في مجموعات:

    مجموعة الشوري {
    اكتب inet_service . com.ifname
    العناصر = { "سش" . "eth0" }
    }

  • تحديث بناء جملة قواعد جدول التدفق:

    nft إضافة جدول x
    nft addflowtable x ft { أولوية دخول الخطاف 0; الأجهزة = { eth0، wlan0 }؛ }
    ...
    nft إضافة القاعدة x إلى الأمام بروتوكول IP {tcp, udp} تدفق إضافة @ft

  • تحسين دعم JSON.

المصدر: opennet.ru

إضافة تعليق