ตัวกรองแพ็คเก็ต 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 ซึ่งเป็นส่วนหนึ่งของเคอร์เนล Linux นับตั้งแต่รีลีส 3.13 ระดับเคอร์เนลให้เฉพาะอินเทอร์เฟซที่ไม่ขึ้นอยู่กับโปรโตคอลทั่วไปซึ่งมีฟังก์ชันพื้นฐานสำหรับการแยกข้อมูลจากแพ็กเก็ต การดำเนินการข้อมูล และการควบคุมโฟลว์

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

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

  • เพิ่มการรองรับองค์ประกอบมาสก์ “*” ในรายการชุดแล้ว ซึ่งจะถูกทริกเกอร์สำหรับแพ็คเกจใดๆ ที่ไม่อยู่ภายใต้องค์ประกอบอื่นๆ ที่กำหนดไว้ในชุด ตาราง x { รายการบล็อกแผนที่ { ประเภท ipv4_addr : คำตัดสินธง องค์ประกอบช่วงเวลา = { 192.168.0.0/16 : ยอมรับ, 10.0.0.0/8 : ยอมรับ, * : วาง } } chain y { ประเภทตัวกรอง hook ลำดับความสำคัญในการกำหนดเส้นทางล่วงหน้า 0; ยอมรับนโยบาย ไอพี saddr vmap @blocklist } }
  • สามารถกำหนดตัวแปรจากบรรทัดคำสั่งได้โดยใช้ตัวเลือก “--define” # cat test.nft ตาราง netdev x { chain y { ประเภทอุปกรณ์กรอง hook ingress = $dev ลำดับความสำคัญ 0; นโยบายลดลง; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • ในรายการแผนที่ อนุญาตให้ใช้นิพจน์คงที่ (เก็บสถานะ) ได้: table inet filter { map portmap { type inet_service : Verdict counter element = { 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 } การกำหนดเส้นทางโซ่ { ประเภทตัวกรอง hook การกำหนดเส้นทางลำดับความสำคัญดิบ; ยอมรับนโยบาย iif vmap { "lo" : jump wan_input } } }
  • เพิ่มคำสั่ง "list hooks" เพื่อแสดงรายการตัวจัดการสำหรับตระกูลแพ็กเก็ตที่กำหนด: # nft list hooks อุปกรณ์ ip eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables] } hook input { -0000000100 chain ip ab [nf_tables] +0000000300 chain inet mz [nf_tables] } ขอไปข้างหน้า { -0000000225 selinux_ipv4_forward 0000000000 chain ip ac [nf_tables] } ตะขอเอาต์พุต { -0000000225 selinux_ipv4_output } ขอเส้นทางหลังเส้นทาง { +0000000225 4 selinux_ipvXNUMX_postroute } }
  • บล็อกคิวอนุญาตให้รวมนิพจน์ jhash, symhash และ numgen เพื่อกระจายแพ็กเก็ตไปยังคิวในพื้นที่ผู้ใช้ … คิวไปที่ symhash mod 65536 … คิวแฟล็กบายพาสไปยัง numgen inc mod 65536 … คิวไปที่ jhash oif meta mark mod 32 "queue" ยังสามารถใช้ร่วมกับรายการแผนที่เพื่อเลือกคิวในพื้นที่ผู้ใช้ตามคีย์ที่กำหนดเอง ... คิวแฟล็กข้ามไปยังแผนที่ oifname { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • เป็นไปได้ที่จะขยายตัวแปรที่รวมรายการชุดออกเป็นหลายๆ แผนที่ กำหนดอินเทอร์เฟซ = { eth0, eth1 } ตาราง ip x { chain y { ประเภทตัวกรอง hook ลำดับความสำคัญอินพุต 0; ยอมรับนโยบาย iifname vmap { แท้จริง : ยอมรับ $interfaces : drop } } } # nft -f x.nft # nft รายการชุดกฎตาราง ip x { chain y { ประเภทตัวกรอง hook ลำดับความสำคัญอินพุต 0; ยอมรับนโยบาย iifname vmap { "lo" : ยอมรับ "eth0" : drop, "eth1" : drop } } }
  • อนุญาตให้รวม vmaps (แผนที่คำตัดสิน) ในช่วงเวลา: # nft เพิ่มกฎ 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 ถึง ip saddr แผนที่ tcp dport { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5. 8888-8999 }

ที่มา: opennet.ru

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