ตัวกรองแพ็คเก็ต nftables ปล่อย 1.0.2

การเปิดตัวตัวกรองแพ็คเก็ต nftables 1.0.2 ได้รับการเผยแพร่แล้ว โดยเป็นการรวมอินเทอร์เฟซการกรองแพ็คเก็ตสำหรับ IPv4, IPv6, ARP และบริดจ์เครือข่าย (มีวัตถุประสงค์เพื่อแทนที่ iptables, ip6table, arptables และ ebtables) การเปลี่ยนแปลงที่จำเป็นสำหรับการเผยแพร่ nftables 1.0.2 จะรวมอยู่ในเคอร์เนล Linux 5.17-rc

แพ็คเกจ nftables มีส่วนประกอบตัวกรองแพ็กเก็ตที่ทำงานในพื้นที่ผู้ใช้ ในขณะที่งานระดับเคอร์เนลจัดทำโดยระบบย่อย nf_tables ซึ่งเป็นส่วนหนึ่งของเคอร์เนล Linux นับตั้งแต่รีลีส 3.13 ระดับเคอร์เนลให้เฉพาะอินเทอร์เฟซที่ไม่ขึ้นอยู่กับโปรโตคอลทั่วไปซึ่งมีฟังก์ชันพื้นฐานสำหรับการแยกข้อมูลจากแพ็กเก็ต การดำเนินการข้อมูล และการควบคุมโฟลว์

กฎการกรองเองและตัวจัดการเฉพาะโปรโตคอลจะถูกคอมไพล์เป็นไบต์โค้ดพื้นที่ผู้ใช้ หลังจากนั้นโค้ดไบต์นี้จะถูกโหลดลงในเคอร์เนลโดยใช้อินเตอร์เฟส Netlink และดำเนินการในเคอร์เนลในเครื่องเสมือนพิเศษที่คล้ายกับ BPF (Berkeley Packet Filters) วิธีการนี้ทำให้สามารถลดขนาดของรหัสการกรองที่ทำงานในระดับเคอร์เนลได้อย่างมาก และย้ายฟังก์ชันทั้งหมดของกฎการแยกวิเคราะห์และตรรกะของการทำงานกับโปรโตคอลไปยังพื้นที่ผู้ใช้

นวัตกรรมหลัก:

  • มีการเพิ่มโหมดการเพิ่มประสิทธิภาพกฎ โดยเปิดใช้งานโดยใช้ตัวเลือก "-o" ("--optimize") ใหม่ ซึ่งสามารถใช้ร่วมกับตัวเลือก "--check" เพื่อตรวจสอบและปรับการเปลี่ยนแปลงไฟล์ชุดกฎให้เหมาะสมโดยไม่ต้องโหลดจริง . การเพิ่มประสิทธิภาพช่วยให้คุณสามารถรวมกฎที่คล้ายกันได้ เช่น กฎ: meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 ยอมรับ meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.5 ยอมรับ ip saddr 1.1.1.1 ip daddr 2.2.2.2 .2.2.2.2 ยอมรับ ip saddr 3.3.3.3 ip daddr XNUMX ดรอป

    จะถูกรวมเข้าเป็น meta iifname ไอพี ซาดร์ ip daddr { eth1 . 1.1.1.1. 2.2.2.3, eth1 . 1.1.1.2. 2.2.2.5 } ยอมรับ ip saddr ip daddr vmap { 1.1.1.1 . 2.2.2.2 : ยอมรับ, 2.2.2.2 . 3.3.3.3 : หล่น }

    ตัวอย่างการใช้งาน: # nft -c -o -f Ruleset.test การผสาน: Ruleset.nft:16:3-37: ip daddr 192.168.0.1 ตัวนับยอมรับกฎชุด nft:17:3-37: ip daddr 192.168.0.2 ตัวนับยอมรับ Ruleset.nft:18:3-37: ip daddr 192.168.0.3 ตัวนับยอมรับใน: ip daddr { 192.168.0.1, 192.168.0.2, 192.168.0.3 } ตัวนับแพ็กเก็ต 0 ไบต์ 0 ยอมรับ

  • รายการชุดใช้ความสามารถในการระบุตัวเลือก ip และ tcp เช่นเดียวกับ sctp chunks: set s5 { typeof ip option ra value element = { 1, 1024 } } set s7 { typeof sctp chunk init num-inbound-streams element = { 1, 4 } } chain c5 { ตัวเลือก ip ra ค่า @s5 ยอมรับ } chain c7 { sctp chunk init num-inbound-streams @s7 ยอมรับ }
  • เพิ่มการรองรับตัวเลือก TCP fastopen, md5sig และ mptcp
  • เพิ่มการสนับสนุนสำหรับการใช้ประเภทย่อย mp-tcp ในการแมป: ตัวเลือก tcp ประเภทย่อย mptcp 1
  • ปรับปรุงรหัสการกรองฝั่งเคอร์เนล
  • ขณะนี้ Flowtable รองรับรูปแบบ JSON เต็มรูปแบบแล้ว
  • มีความสามารถในการใช้การดำเนินการ "ปฏิเสธ" ในการดำเนินการจับคู่เฟรมของอีเธอร์เน็ต อีเธอร์ saddr aa:bb:cc:dd:ee:ff ip daddr 192.168.0.1 ปฏิเสธ

ที่มา: opennet.ru

เพิ่มความคิดเห็น