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

การเปิดตัวตัวกรองแพ็คเก็ต 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 (Berkeley Packet Filters) วิธีการนี้ทำให้สามารถลดขนาดของรหัสการกรองที่ทำงานในระดับเคอร์เนลได้อย่างมาก และย้ายฟังก์ชันทั้งหมดของกฎการแยกวิเคราะห์และตรรกะของการทำงานกับโปรโตคอลไปยังพื้นที่ผู้ใช้

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

  • ความสามารถในการย้ายการประมวลผลแบบ Flowtable ไปยังด้านอะแดปเตอร์เครือข่ายได้ถูกนำมาใช้แล้ว โดยเปิดใช้งานโดยใช้แฟล็ก 'offload' Flowtable เป็นกลไกในการปรับเส้นทางการเปลี่ยนเส้นทางแพ็กเก็ตให้เหมาะสม ซึ่งเส้นทางที่สมบูรณ์ของห่วงโซ่การประมวลผลกฎทั้งหมดจะถูกนำไปใช้กับแพ็กเก็ตแรกเท่านั้น และแพ็กเก็ตอื่น ๆ ทั้งหมดในโฟลว์จะถูกส่งต่อโดยตรง ตาราง ip ทั่วโลก { flowtable f { ตัวกรองลำดับความสำคัญของ hook ingress + 1 อุปกรณ์ = { lan3, lan0, wan } แฟล็กออฟโหลด } ส่งต่อลูกโซ่ { ตัวกรองประเภทตัวกรองตัวกรองลำดับความสำคัญของตะขอไปข้างหน้า; ยอมรับนโยบาย โปรโตคอล ip { tcp, udp } กระแสเพิ่ม @f } โพสต์ลูกโซ่ { พิมพ์ตัวกรองลำดับความสำคัญหลังเส้นทาง nat hook; ยอมรับนโยบาย oifname "wan" สวมหน้ากาก } }
  • เพิ่มการสนับสนุนสำหรับการแนบแฟล็กเจ้าของเข้ากับตารางเพื่อให้แน่ใจว่ามีการใช้ตารางแบบเอกสิทธิ์เฉพาะบุคคลตามกระบวนการ เมื่อกระบวนการยุติ ตารางที่เกี่ยวข้องกับกระบวนการนั้นจะถูกลบโดยอัตโนมัติ ข้อมูลเกี่ยวกับกระบวนการจะแสดงอยู่ในกฎการถ่ายโอนข้อมูลในรูปแบบของความคิดเห็น: ตาราง ip x { # progname nft ธงเจ้าของเชน y { ตัวกรองประเภท hook ตัวกรองลำดับความสำคัญอินพุต; ยอมรับนโยบาย ตัวนับแพ็กเก็ต 1 ไบต์ 309 } }
  • เพิ่มการรองรับข้อกำหนด IEEE 802.1ad (VLAN stacking หรือ QinQ) ซึ่งกำหนดวิธีการแทนที่แท็ก VLAN หลายแท็กลงในเฟรมอีเธอร์เน็ตเดียว ตัวอย่างเช่น หากต้องการตรวจสอบประเภทของเฟรมอีเทอร์เน็ตภายนอก 8021ad และ vlan id=342 คุณสามารถใช้โครงสร้าง ... อีเทอร์ประเภท 802.1ad vlan id 342 เพื่อตรวจสอบประเภทภายนอกของเฟรมอีเทอร์เน็ต 8021ad/vlan id=1 ที่ซ้อนกัน 802.1 q/vlan id=2 และการห่อหุ้มแพ็กเก็ต IP เพิ่มเติม: ... ประเภทอีเธอร์ 8021ad vlan id 1 vlan ประเภท 8021q vlan id 2 ประเภท vlan ip counter
  • เพิ่มการสนับสนุนสำหรับการจัดการทรัพยากรโดยใช้ลำดับชั้นแบบรวม cgroups v2 ข้อแตกต่างที่สำคัญระหว่าง cgroups v2 และ v1 คือการใช้ลำดับชั้น cgroups ทั่วไปสำหรับทรัพยากรทุกประเภท แทนที่จะแยกลำดับชั้นสำหรับการจัดสรรทรัพยากร CPU เพื่อควบคุมการใช้หน่วยความจำ และสำหรับ I/O ตัวอย่างเช่น หากต้องการตรวจสอบว่าบรรพบุรุษของซ็อกเก็ตในระดับแรก cgroupv2 ตรงกับมาสก์ "system.slice" หรือไม่ คุณสามารถใช้โครงสร้าง: ... socket cgroupv2 ระดับ 1 “system.slice”
  • เพิ่มความสามารถในการตรวจสอบส่วนประกอบของแพ็กเก็ต SCTP (ฟังก์ชันที่จำเป็นสำหรับสิ่งนี้จะปรากฏในเคอร์เนล Linux 5.14) ตัวอย่างเช่น หากต้องการตรวจสอบว่าแพ็กเก็ตมีชิ้นส่วนประเภท 'data' และช่อง 'type' หรือไม่: ... มีข้อมูล sctp chunk อยู่ ... sctp chunk data type 0
  • การดำเนินการโหลดกฎถูกเร่งขึ้นประมาณสองเท่าโดยใช้แฟล็ก "-f" ผลลัพธ์ของรายการกฎก็ถูกเร่งเช่นกัน
  • รูปแบบกะทัดรัดสำหรับการตรวจสอบว่ามีการตั้งค่าบิตแฟล็กไว้หรือไม่ ตัวอย่างเช่น หากต้องการตรวจสอบว่าไม่ได้ตั้งค่าบิตสถานะ snat และ dnat คุณสามารถระบุ: ... ct status ! snat,dnat เพื่อตรวจสอบว่าบิต syn ถูกตั้งค่าไว้ใน bitmask syn,ack: ... tcp flags syn / syn,ack เพื่อตรวจสอบว่า fin และ rst bits ไม่ได้ถูกตั้งค่าใน bitmask syn,ack,fin,rst: ... แฟล็ก tcp ! = fin,rst / syn,ack,fin,rst
  • อนุญาตให้ใช้คีย์เวิร์ด "คำตัดสิน" ในคำจำกัดความประเภทชุด/แผนที่: เพิ่ม map xm { typeof iifname โปรโตคอลไอพี วันที่: คำตัดสิน ;}

ที่มา: opennet.ru

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