على مستوى النواة ، يتم توفير واجهة عامة مستقلة عن البروتوكول توفر الوظائف الأساسية لاستخراج البيانات من الحزم ، وتنفيذ العمليات على البيانات ، والتحكم في التدفق. يتم تجميع قواعد التصفية نفسها والمعالجات الخاصة بالبروتوكول في رمز بايت مساحة المستخدم ، وبعد ذلك يتم تحميل هذا الرمز الثانوي في النواة باستخدام واجهة Netlink ويتم تنفيذه في النواة في جهاز ظاهري خاص يشبه BPF (مرشحات Berkeley Packet). هذا النهج يجعل من الممكن تقليل حجم كود التصفية الذي يعمل على مستوى النواة بشكل كبير ونقل جميع وظائف قواعد الإعراب ومنطق العمل مع البروتوكولات إلى مساحة المستخدم.
الابتكارات الرئيسية:
- تمت إضافة دعم لعدادات الحزم وحركة المرور المرتبطة بعناصر المجموعة إلى المجموعات. يتم تمكين العدادات باستخدام الكلمة الأساسية "counter":
جدول الملكية الفكرية س {
مجموعة ص {
نوع الملكية الفكرية الصدر
مواجهة
العناصر = {192.168.10.35 ، 192.168.10.101 ، 192.168.10.135}
}سلسلة ض {
نوع مرشح هوك مرشح الأولوية الإخراج؛ قبول السياسة؛
إب دادر @y
}
} - لتعيين القيم الأولية للعدادات، على سبيل المثال، لاستعادة العدادات السابقة بعد إعادة التشغيل، يمكنك استخدام الأمر “nft -f”:
# مجموعة قواعد القط.nft
جدول الملكية الفكرية س {
مجموعة ص {
نوع الملكية الفكرية الصدر
مواجهة
العناصر = { 192.168.10.35 حزم العداد 1 بايت 84، 192.168.10.101 \
العداد ص 192.168.10.135 حزم العداد 0 بايت 0 }
}سلسلة ض {
نوع مرشح هوك مرشح الأولوية الإخراج؛ قبول السياسة؛
إب دادر @y
}
}
# nft -f القواعد.nft
مجموعة قواعد قائمة #nft
جدول الملكية الفكرية س {
مجموعة ص {
نوع الملكية الفكرية الصدر
مواجهة
العناصر = { 192.168.10.35 حزم العداد 1 بايت 84، 192.168.10.101 \
العداد ص 192.168.10.135 حزم العداد 0 بايت 0 }
}سلسلة ض {
نوع مرشح هوك مرشح الأولوية الإخراج؛ قبول السياسة؛
إب دادر @y
}
} - تمت إضافة الدعم المضاد أيضًا إلى جدول التدفق:
الجدول ip foo {
شريط قابل للتدفق {
أولوية دخول الخطاف -100
الأجهزة = { eth0, eth1 }
مواجهة
}سلسلة إلى الأمام {
اكتب عامل التصفية مرشح الأولوية للأمام ؛
أضف التدفق @bar counter
}
}يمكنك عرض قائمة العدادات باستخدام الأمر "conntrack -L":
tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 حزم=9 بايت=608 \
src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 حزم=8 بايت=428 علامة [OFFLOAD=0 \
secctx=استخدام فارغ=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
الحزم=1005763 بايت=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
الحزم = 967505 بايت = 50310268 علامة [OFFLOAD] = 0 secctx = استخدام فارغ = 2 - في مجموعات التسلسل (التسلسل، وحزم معينة من العناوين والمنافذ التي تبسط المقارنة)، من الممكن استخدام التوجيه "typeof"، الذي يحدد نوع بيانات العناصر للأجزاء المكونة لعناصر المجموعة:
الجدول ip foo {
ضبط القائمة البيضاء {
نوع الملكية الفكرية الصدر . tcp dport
العناصر = { 192.168.10.35 . 80، 192.168.10.101. 80}
}شريط سلسلة {
نوع مرشح هوك prerouting الأولوية مرشح ؛ انخفاض السياسة
عنوان IP قبول tcp dport @whitelist
}
} - ينطبق توجيه typeof الآن أيضًا على عمليات الانضمام في قوائم الخرائط:
الجدول ip foo {
عنوان الخريطة
نوع الملكية الفكرية الصدر . tcp dport: علامة التعريف
العناصر = { 192.168.10.35 . 80 : 0x00000001,
192.168.10.135. 80 : 0x00000002 }
}شريط سلسلة {
نوع مرشح هوك prerouting الأولوية مرشح ؛ انخفاض السياسة
تعيين علامة التعريف IP Daddr . قبول خريطة tcp dport @addr2mark
}
} - تمت إضافة دعم لصلات النطاق في مجموعات مجهولة (غير مسماة):
# nft إضافة قاعدة مرشح إنت لإدخال IP Daddr . منفذ برنامج التعاون الفني\
{ 10.0.0.0/8 . 10-23، 192.168.1.1-192.168.3.8. 80-443 } قبول - يتم توفير القدرة على تجاهل الحزم التي تحمل إشارات 802.1q (VLAN) عند معالجة جسور الشبكة:
# nft إضافة قاعدة جسر foo bar ether type vlan رفض مع إعادة تعيين TCP
- تمت إضافة دعم للمطابقة بواسطة معرف جلسة TCP (معرف conntrack). لتحديد معرف conntrack، يمكنك استخدام خيار "--output id":
# conntrack -L - معرف الإخراج
udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 حزمة=2 \
بايت=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 حزمة=2 بايت=320 \
[مؤكد] علامة = 0 استخدام = 1 معرف = 2779986232# nft إضافة قاعدة foo bar ct معرف 2779986232 عداد
المصدر: opennet.ru