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

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

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

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

  • สำหรับระบบเคอร์เนล Linux 6.2+ มีการเพิ่มการสนับสนุนการจับคู่โปรโตคอล vxlan, geneve, gre และ gretap ทำให้ใช้นิพจน์อย่างง่ายในการตรวจสอบส่วนหัวในแพ็กเก็ตที่ห่อหุ้ม ตัวอย่างเช่น ในการตรวจสอบที่อยู่ IP ในส่วนหัวของแพ็กเก็ตที่ซ้อนกันจาก VxLAN ตอนนี้คุณสามารถใช้กฎ (โดยไม่จำเป็นต้องแยกส่วนหัวของ VxLAN ก่อนและผูกตัวกรองเข้ากับอินเทอร์เฟซ vxlan0): ... udp dport 4789 โปรโตคอล vxlan ip udp ... udp dport 4789 vxlan ip saddr 1.2.3.0. 24/4789 ... udp dport 1.2.3.4 vxlan ip saddr vxlan ip daddr { 4.3.2.1 . XNUMX}
  • ดำเนินการรองรับการรวมส่วนที่เหลือโดยอัตโนมัติหลังจากการลบบางส่วนขององค์ประกอบ set-list ซึ่งอนุญาตให้ลบองค์ประกอบหรือบางส่วนของช่วงจากช่วงที่มีอยู่ (ก่อนหน้านี้ ช่วงสามารถลบได้ทั้งหมดเท่านั้น) ตัวอย่างเช่น หลังจากลบองค์ประกอบ 25 ออกจากรายการชุดที่มีช่วง 24-30 และ 40-50 แล้ว 24, 26-30 และ 40-50 จะยังคงอยู่ในรายการ การแก้ไขที่จำเป็นสำหรับการรวมอัตโนมัติเพื่อให้ทำงานได้นั้นจะได้รับการเสนอในรีลีสแก้ไขของเคอร์เนลเวอร์ชัน 5.10+ ที่เสถียร # รายการ nft ตารางชุดกฎ ip x { set y { typeof tcp dport แฟล็กช่วงเวลารวมองค์ประกอบอัตโนมัติ = { 24-30, 40-50 } } } # nft ลบองค์ประกอบ ip xy { 25 } # ตารางชุดกฎรายการ nft ip x { set y { typeof tcp dport flags ช่วงเวลารวมองค์ประกอบอัตโนมัติ = { 24, 26-30, 40-50 } } }
  • อนุญาตให้ใช้ผู้ติดต่อและช่วงในการแมปการแปลที่อยู่ (NAT) ตาราง ip nat { การกำหนดเส้นทางลูกโซ่ { ประเภท nat hook การจัดลำดับความสำคัญก่อนกำหนดเส้นทาง dstnat; นโยบายยอมรับ; dnat เป็น ip daddr แผนที่ tcp dport { 10.1.1.136 . 80 : 1.1.2.69 . 1024, 10.1.1.10-10.1.1.20. 8888-8889 : 1.1.2.69 . 2048-2049 } ถาวร } }
  • เพิ่มการรองรับนิพจน์ "สุดท้าย" ซึ่งช่วยให้คุณทราบเวลาของการใช้องค์ประกอบกฎหรือรายการชุดล่าสุด คุณลักษณะนี้ได้รับการสนับสนุนตั้งแต่เคอร์เนล Linux 5.14 ตาราง ip x { set y { ประเภทของ ip daddr tcp dport ขนาด 65535 แฟล็ก ไดนามิก, หมดเวลา หมดเวลาล่าสุด 1 ชม. } chain z { ตัวกรองชนิด hook ตัวกรองลำดับความสำคัญเอาต์พุต; นโยบายยอมรับ; อัปเดต @y { ip daddr tcp dport } } } # รายการ nft set ip xy ตาราง ip x { set y { typeof ip daddr tcp dport ขนาด 65535 แฟล็กไดนามิก หมดเวลาล่าสุด หมดเวลา 1 ชม. องค์ประกอบ = { 172.217.17.14 443 ใช้ล่าสุด 1s591ms หมดเวลา 1 ชม. หมดอายุ 59m58s409ms, 172.67.69.19 443 ใช้ล่าสุด 4s636ms หมดเวลา 1 ชม. หมดอายุ 59m55s364ms, 142.250.201.72 443 ใช้ล่าสุด 4s748ms หมดเวลา 1 ชม. หมดอายุ 59m55s252ms, 172.67.70.134 443 ใช้ล่าสุด 4s688ms หมดเวลา 1 ชม. หมดอายุ 59m55s312ms, 35.241.9.150 443 ใช้ล่าสุด 5s204ms หมดเวลา 1 ชม. หมดอายุ 59m54s796ms, 138.201.122.174 443 ใช้ล่าสุด 4s537ms หมดเวลา 1 ชม. หมดอายุ 59m55s463ms, 34.160.144.191 443 ใช้ล่าสุด 5s205ms หมดเวลา 1 ชม. หมดอายุ 59m54s795ms, 130.211.23.194 443 ใช้ล่าสุด 4s436ms หมดเวลา 1 ชม. หมดอายุ 59m55s564ms } } }
  • เพิ่มความสามารถในการกำหนดโควต้าในรายการชุด ตัวอย่างเช่น หากต้องการกำหนดโควต้าการรับส่งข้อมูลสำหรับที่อยู่ IP เป้าหมายแต่ละรายการ คุณสามารถระบุ: table netdev x { set y { typeof ip daddr size 65535 Quota over 10000 mbytes } chain y { type filter hook egress device "eth0" Priority filter; นโยบายยอมรับ; ip daddr @y drop } } # nft เพิ่มองค์ประกอบ inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # ตารางชุดกฎรายการ nft netdev x { set y { ประเภท ipv4_addr ขนาด 65535 โควต้าองค์ประกอบมากกว่า 10000 mbytes = { 8.8.8.8. 10000 โควต้ามากกว่า 196 เมกะไบต์ใช้ 0 ไบต์ } } chain y { type filter hook egress device "ethXNUMX" ตัวกรองลำดับความสำคัญ; นโยบายยอมรับ; ip daddr @y วาง } }
  • อนุญาตให้ใช้ค่าคงที่ในรายการชุด ตัวอย่างเช่น เมื่อใช้รายการที่อยู่ปลายทางและ VLAN ID เป็นคีย์ คุณสามารถระบุหมายเลข VLAN ได้โดยตรง (daddr . 123): table netdev t { set s { typeof ether saddr vlan id size 2048 แฟล็ก dynamic, timeout timeout 1m } chain c { type filter hook ingress device eth0 ลำดับความสำคัญ 0; นโยบายยอมรับ; ประเภทอีเธอร์ != 8021q update @s { อีเธอร์ daddr 123 } เคาน์เตอร์ } }
  • มีการเพิ่มคำสั่ง "ทำลาย" ใหม่เพื่อลบวัตถุอย่างไม่มีเงื่อนไข (ไม่เหมือนกับคำสั่งลบ คำสั่งนี้จะไม่สร้าง ENOENT เมื่อพยายามลบวัตถุที่หายไป) ต้องการเคอร์เนล Linux 6.3-rc เป็นอย่างน้อยจึงจะทำงานได้ ทำลายตัวกรอง ip ของตาราง

ที่มา: opennet.ru

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