מהדורת מסנן מנות nftables 1.0.0

פורסם השחרור של מסנן מנות nftables 1.0.0, המאחד ממשקי סינון מנות עבור IPv4, IPv6, ARP וגשרי רשת (שמטרתם להחליף iptables, ip6table, arptables ו-ebtables). השינויים הנדרשים כדי שהגרסה של nftables 1.0.0 תעבוד כלולים בליבת Linux 5.13. שינוי משמעותי במספר הגרסה אינו קשור לשינויים מהותיים כלשהם, אלא הוא רק תוצאה של המשך עקבי של מספור בסימון עשרוני (הגרסה הקודמת הייתה 0.9.9).

חבילת nftables כוללת רכיבי מסנן מנות הפועלים בחלל המשתמש, בעוד שהעבודה ברמת הליבה מסופקת על ידי תת-המערכת nf_tables, שהייתה חלק מליבת לינוקס מאז גרסה 3.13. רמת הקרנל מספקת רק ממשק גנרי בלתי תלוי בפרוטוקול המספק פונקציות בסיסיות לחילוץ נתונים ממנות, ביצוע פעולות נתונים ובקרת זרימה.

כללי הסינון עצמם ומטפלים ספציפיים לפרוטוקול עוברים קומפילציה לבייטקוד במרחב המשתמש, ולאחר מכן בייטקוד זה נטען לתוך הליבה באמצעות ממשק Netlink ומופעל בליבת הקובץ בצורה מיוחדת. מכונה וירטואלית, המזכיר את BPF (מסנני חבילות ברקלי). גישה זו מאפשרת הפחתה משמעותית של גודל קוד הסינון הפועל ברמת הליבה ומעבירה את כל ניתוח הכללים ולוגיקת הפרוטוקול למרחב המשתמש.

חידושים עיקריים:

  • תמיכה באלמנט המסכה "*" נוספה לרשימות סט, המופעלות עבור כל חבילה שאינה נופלת תחת רכיבים אחרים שהוגדרו בסט. table x { map blocklist { type ipv4_addr : verdict flags interval elements = { 192.168.0.0/16 : accept, 10.0.0.0/8 : accept, * : drop } } chain y { type filter hook prerouting priority 0; קבלת מדיניות; ip saddr vmap @blocklist } }
  • ניתן להגדיר משתנים משורת הפקודה באמצעות האפשרות "--define". # cat test.nft table netdev x { chain y { type filter hook ingress devices = $dev priority 0; ירידת מדיניות; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • ברשימות מפות, השימוש בביטויים קבועים (מצביים) מותר: table inet filter { map portmap { type inet_service : verdict counter elements = { 22 counter packets 0 bytes 0 : jump ssh_input, * counter packets 0 bytes 0 : drop } } chain ssh_input { } chain wan_input { tcp dport vmap @portmap } chain prerouting { type filter hook prerouting priority raw; קבלת מדיניות; iif vmap { "lo" : jump wan_input } }
  • נוספה פקודת "list hooks" כדי להציג רשימה של מטפלים עבור משפחת מנות נתונה: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw input [nf_tables] } { -0000000100 chain ip ab [nf_tables] +0000000300 chain inet mz [nf_tables] } הוק קדימה { -0000000225 selinux_ipv4_forward 0000000000 chain inet mz [nf_tables] } הוק קדימה { -0000000225 selinux_ipv4_forward 0000000225 chain ip-ac [nf_4_XNUMX chain ip-ac [nf_XNUMX_XNUMX chain] XNUMX_output } hook postrouting { +XNUMX XNUMX selinux_ipvXNUMX_postroute } }
  • בלוקים בתור מאפשרים לשלב ביטויי jhash, symhash ו-numgen כדי להפיץ מנות לתורים בחלל המשתמש. … תור ל-symhash mod 65536 … דגלי תור עוקפים ל-numgen inc mod 65536 … תור ל-jhash oif . meta mark mod 32 "תור" ניתן גם לשלב עם רשימות מפות לבחירת תור במרחב המשתמש על סמך מפתחות שרירותיים. ... דגלי תור עוקפים למפת oifname { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • אפשר להרחיב משתנים הכוללים רשימת סט למספר מפות. הגדרת ממשקים = ​​{ eth0, eth1 } table ip x { chain y { type filter hook priority input 0; קבלת מדיניות; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft list set rulet table ip x { chain y { type filter hook input priority 0; קבלת מדיניות; iifname vmap { "lo" : accept, "eth0": drop, "eth1": drop } }
  • שילוב של vmaps (מפת פסק דין) במרווחים מותר: # nft add rule xy tcp dport . ip saddr vmap {1025-65535. 192.168.10.2 : קבל }
  • התחביר של מיפויי NAT ​​פושט. כעת ניתן לציין טווחי כתובות: ... snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } או טווחים מפורשים. כתובות IP ופורטים: ... dnat to ip saddr map { 10.141.11.4 : 192.168.2.3 . 80 } או שילובים של טווחי IP ופורטים: ... dnat to ip saddr . tcp dport map { 192.168.1.2 . 80 : 10.141.10.2-10.141.10.5 . 8888-8999 }

מקור: OpenNet.ru

הוספת תגובה