מסנן החבילות nftables גרסה 0.9.9 שוחרר. הוא מאחד ממשקי סינון חבילות עבור IPv4, IPv6, ARP וגשרי רשת (מיועד כתחליף ל-iptables, ip6table, arptables ו-ebtables). ספריית libnftnl גרסה 1.2.0 הנלווית, המספקת API ברמה נמוכה לאינטראקציה עם תת-המערכת nf_tables, שוחררה בו זמנית. השינויים הנדרשים עבור nftables גרסה 0.9.9 שולבו בליבת המערכת. Linux 5.13-rc1.
חבילת nftables מכילה את רכיבי מסנן החבילות הפועלים במרחב המשתמש, בעוד שעבודה ברמת הליבה מסופקת על ידי תת-המערכת nf_tables, שהיא חלק מהליבה. Linux מאז גרסה 3.13, מסופק רק ממשק כללי שאינו תלוי בפרוטוקול ברמת הליבה, המספק פונקציונליות בסיסית לחילוץ נתונים ממנות, ביצוע פעולות נתונים ובקרת זרימה.
כללי הסינון עצמם ומטפלים ספציפיים לפרוטוקול עוברים קומפילציה לבייטקוד במרחב המשתמש, ולאחר מכן בייטקוד זה נטען לתוך הליבה באמצעות ממשק Netlink ומופעל בליבת הקובץ בצורה מיוחדת. מכונה וירטואלית, המזכיר את BPF (מסנני חבילות ברקלי). גישה זו מאפשרת הפחתה משמעותית של גודל קוד הסינון הפועל ברמת הליבה ומעבירה את כל ניתוח הכללים ולוגיקת הפרוטוקול למרחב המשתמש.
חידושים עיקריים:
- יושם היכולת להעביר את עיבוד טבלת הזרימה לצד מתאם הרשת, באמצעות הדגל 'offload'. טבלת הזרימה היא מנגנון לאופטימיזציה של נתיב העברת החבילות, שבו חצייה מלאה של כל שרשראות עיבוד הכללים מוחלת רק על החבילת הראשונה, וכל החבילות האחרות בזרימה מועברות ישירות. table ip global { flowtable f { hook ingress priority filter + 1 devices = { lan3, lan0, wan } flags offload } chain forward { type filter hook forward priority filter; policy accept; ip protocol { tcp, udp } flow add @f } chain post { type nat hook postrouting priority filter; policy accept; oifname "wan" masquerade } }
- נוספה תמיכה בצירוף דגל בעלים לטבלה, מה שמבטיח שימוש בלעדי בטבלה על ידי תהליך. כאשר תהליך מסתיים, הטבלה המשויכת נמחקת אוטומטית. פרטי התהליך מוצגים בקובץ rules dump כהערה: table ip x { # programname nft flags owner chain y { type filter hook input priority filter; policy accept; counter packets 1 bytes 309 } }
- נוספה תמיכה עבור מפרט IEEE 802.1ad (VLAN stacking או QinQ), אשר מגדיר את האמצעים להחלפת מספר תגיות VLAN במסגרת Ethernet אחת. לדוגמה, כדי לבדוק את סוג מסגרת ה-Ethernet החיצונית 8021ad ואת vlan id=342, ניתן להשתמש במבנה ... ether type 802.1ad vlan id 342 כדי לבדוק את סוג מסגרת ה-Ethernet החיצונית 8021ad/vlan id=1, מקוננת 802.1q/vlan id=2, ולכסות עוד יותר את חבילת ה-IP: ... ether type 8021ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip counter
- נוספה תמיכה בניהול משאבים באמצעות היררכיית cgroups v2 המאוחדת. ההבדל העיקרי בין cgroups v2 ו-v1 הוא השימוש בהיררכיית cgroups משותפת לכל סוגי המשאבים, במקום היררכיות נפרדות להקצאת משאבי CPU, ניהול זיכרון וקלט/פלט. לדוגמה, כדי לבדוק האם אב קדמון של socket ברמה הראשונה של cgroupv2 תואם למסיכה "system.slice", ניתן להשתמש במבנה הבא: ... socket cgroupv2 level 1 "system.slice"
- נוספה היכולת לבדוק את רכיבי חבילות SCTP (הפונקציונליות הנדרשת לפעולה תופיע בליבת המערכת). Linux 5.14). לדוגמה, כדי לבדוק אם חבילה מכילה קבוצה (chuck) עם הסוג 'data' והשדה 'type': ... sctp chunk data קיים ... sctp chunk data type 0
- טעינת כללים באמצעות הדגל "-f" הוכפלה בערך במהירות. פלט רשימת הכללים הואץ גם כן.
- מסופקת צורה קומפקטית של בדיקת הגדרת הביטים בדגלים. לדוגמה, כדי לבדוק שביטי הסטטוס snat ו-dnat אינם מוגדרים, ניתן לציין: ... ct status ! snat,dnat כדי לבדוק שביט syn מוגדר במסיכת הביטים syn,ack: ... tcp flags syn / syn,ack כדי לבדוק שביטי fin ו-rst אינם מוגדרים במסיכת הביטים syn,ack,fin,rst: ... tcp flags != fin,rst / syn,ack,fin,rst
- מילת המפתח "verdict" מותרת בהגדרות typeof עבור set/map: add map xm { typeof iifname . ip protocol . th dport : verdict ; }
מקור: OpenNet.ru
