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

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

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

การเปลี่ยนแปลงที่สำคัญ:

  • ในเครื่องมือเพิ่มประสิทธิภาพกฎที่เรียกเมื่อระบุตัวเลือก "-o/--optimize" มีการตั้งค่าการบรรจุกฎอัตโนมัติโดยการรวมกฎและแปลงเป็นแผนที่และรายการชุด ตัวอย่างเช่น กฎคือ # cat ruleset.nft table ip x { chain y { type filter hook ตัวกรองลำดับความสำคัญของอินพุต; นโยบายลดลง; 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.4 ยอมรับ meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 ยอมรับ meta iifname eth1 ip saddr 1.1.1.2 .2.2.4.0 ip daddr 2.2.4.10-2 ยอมรับ meta iifname eth1.1.1.3 ip saddr 2.2.2.5 ip daddr 4 ยอมรับ } } หลังจาก "nft -o -c -f ruleset.nft" จะถูกแปลงเป็นชุดกฎต่อไปนี้ nft:17:74-1: meta iifname eth1.1.1.1 ip saddr 2.2.2.3 ip daddr 5 ยอมรับ ruleset.nft:17:74-1: meta iifname eth1.1.1.2 ip saddr 2.2.2.4 ip daddr 6 ยอมรับ ruleset.nft: 17:77-1: meta iifname eth1.1.1.2 ip saddr 2.2.3.0 ip daddr 24/7 ยอมรับ ruleset.nft:17:83-1: meta iifname eth1.1.1.2 ip saddr 2.2.4.0 ip daddr 2.2.4.10-8 ยอมรับ ruleset.nft:17:74-2: meta iifname eth1.1.1.3 ip saddr 2.2.2.5 ip daddr 1 ยอมรับใน: iifname ไอพีแซดเดอร์ ip daddr { eth1.1.1.1 . 2.2.2.3. 1, eth1.1.1.2 . 2.2.2.4. 1, eth1.1.1.2 . 2.2.3.0. 24/1, eth1.1.1.2 . 2.2.4.0. 2.2.4.10-2, eth1.1.1.3 . 2.2.2.5. XNUMX } ยอมรับ
  • เครื่องมือเพิ่มประสิทธิภาพยังสามารถย่อกฎที่ใช้ setlist แบบง่ายอยู่แล้วให้อยู่ในรูปแบบที่กะทัดรัดมากขึ้น เช่น # cat ruleset.nft table ip filter { chain input { type filter hook ตัวกรองลำดับความสำคัญของอินพุต; นโยบายลดลง; iifname "lo" ยอมรับสถานะ ct ที่จัดตั้งขึ้น ยอมรับความคิดเห็นที่เกี่ยวข้อง "ในการรับส่งข้อมูลที่เราเริ่มต้น เราเชื่อมั่น" iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 ยอมรับ iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept } } หลังจากเรียกใช้ "nft -o -c -f ruleset.nft" จะถูกบรรจุเช่นนี้ : ruleset.nft:6:22-149: iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 ยอมรับ ruleset.nft:7:22- 143 0 : iifname "enp31s6f64.59.144.17" ip saddr { 64.59.150.133, 10.0.0.149 } ip daddr 53 udp sport 32768 udp dport 65535-0 ยอมรับใน: iifname ไอพีแซดเดอร์ ไอพี แดร์ ยูดีพี สปอร์ต พอร์ต udp { enp31s6f209.115.181.102 . 10.0.0.149 . 123 . 32768 . 65535-0, enp31s6f216.197.228.230 . 10.0.0.149 . 123 . 32768 . 65535-0, enp31s6f64.59.144.17 . 10.0.0.149. 53 . 32768 . 65535-0, enp31s6f64.59.150.133 . 10.0.0.149. 53 . 32768 . 65535-XNUMX } ยอมรับ
  • แก้ไขปัญหาเกี่ยวกับการสร้าง bytecode สำหรับการผสานช่วงเวลาที่ใช้ประเภทที่มี endianness ต่างกัน เช่น IPv4 (endian ของเครือข่าย) และ meta mark (endian ของระบบ) ตาราง ip x { แผนที่ w { ประเภทของ ip saddr เครื่องหมายเมตา: องค์ประกอบตัวนับช่วงเวลาธงคำตัดสิน = { 127.0.0.1-127.0.0.4 0x123434-0xb00122 : ยอมรับ 192.168.0.10-192.168.1.20 0x0000aa00-0x0000aaff : ยอมรับ, } } chain k { ประเภทตัวกรอง hook ตัวกรองลำดับความสำคัญของอินพุต; นโยบายลดลง; ไอพีแซดเดอร์ เมตาเครื่องหมาย vmap @w } }
  • ปรับปรุงการแมปโปรโตคอลที่หายากเมื่อใช้นิพจน์ดิบ เช่น: meta l4proto 91 @th,400,16 0x0 ยอมรับ
  • แก้ไขปัญหาเกี่ยวกับการเปิดใช้งานกฎตามช่วงเวลา: แทรกกฎ xy tcp sport { 3478-3497, 16384-16387 } ตัวนับการยอมรับ
  • JSON API ได้รับการปรับปรุงเพื่อรองรับนิพจน์ในชุดและรายการแผนที่
  • ในส่วนขยายของไลบรารี nftables python อนุญาตให้โหลดชุดกฎสำหรับการประมวลผลในโหมดตรวจสอบ ("-c") และเพิ่มการสนับสนุนสำหรับการกำหนดตัวแปรภายนอก
  • อนุญาตให้เพิ่มความคิดเห็นในองค์ประกอบของรายการชุด
  • อนุญาตให้ระบุค่าศูนย์เป็นไบต์อัตราจำกัด

ที่มา: opennet.ru

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