Bộ lọc gói nftables 1.0.7 đã được phát hành. Nó thống nhất các giao diện lọc gói cho IPv4, IPv6, ARP và các cầu nối mạng (nhằm mục đích thay thế iptables, ip6table, arptables và ebtables). Gói nftables bao gồm các thành phần lọc gói ở không gian người dùng, trong khi chức năng ở cấp độ nhân được cung cấp bởi hệ thống con nf_tables, một phần của nhân hệ điều hành. Linux Kể từ phiên bản 3.13, chỉ có một giao diện chung không phụ thuộc vào giao thức được cung cấp ở cấp độ nhân hệ điều hành, cung cấp các chức năng cơ bản để trích xuất dữ liệu từ các gói tin, thực hiện các thao tác dữ liệu và kiểm soát luồng.
Các quy tắc lọc và các trình xử lý dành riêng cho giao thức được biên dịch thành mã bytecode trong không gian người dùng, sau đó mã bytecode này được tải vào nhân hệ điều hành bằng giao diện Netlink và được thực thi trong nhân hệ điều hành trong một hàm đặc biệt. máy ảoTương tự như BPF (Berkeley Packet Filters). Cách tiếp cận này cho phép giảm đáng kể kích thước mã lọc chạy ở cấp độ nhân hệ điều hành và chuyển toàn bộ quá trình phân tích quy tắc và logic giao thức vào không gian người dùng.
Sự thay đổi chính:
- Đối với các hệ thống có nhân Linux Phiên bản 6.2+ bổ sung hỗ trợ cho việc khớp các giao thức vxlan, geneve, gre và gretap, cho phép sử dụng các biểu thức đơn giản để kiểm tra tiêu đề trong các gói tin được đóng gói. Ví dụ, để kiểm tra Các địa chỉ IP Trong phần tiêu đề của gói tin nhúng từ VxLAN, giờ đây bạn có thể sử dụng các quy tắc (mà không cần phải giải mã tiêu đề VxLAN trước và liên kết bộ lọc với giao diện vxlan0): ... udp dport 4789 vxlan ip protocol udp ... udp dport 4789 vxlan ip saddr 1.2.3.0/24 ... udp dport 4789 vxlan ip saddr . vxlan ip daddr { 1.2.3.4 . 4.3.2.1 }
- Hỗ trợ tự động hợp nhất các phần còn lại sau khi xóa một phần thành phần danh sách tập hợp đã được triển khai, cho phép bạn xóa một phần tử hoặc một phần của phạm vi khỏi phạm vi hiện có (trước đây, một phạm vi chỉ có thể bị xóa hoàn toàn). Ví dụ: sau khi xóa phần tử 25 khỏi danh sách tập hợp có phạm vi 24-30 và 40-50, danh sách sẽ vẫn là 24, 26-30 và 40-50. Các bản sửa lỗi cần thiết để quá trình tự động hóa hoạt động sẽ được cung cấp trong các bản phát hành bảo trì của các nhánh ổn định của kernel 5.10+. # nft list quy tắc bảng ip x { set y { typeof tcp dport flags interval các phần tử tự động hợp nhất = { 24-30, 40-50 } } } # nft xóa phần tử ip xy { 25 } # nft list bảng quy tắc ip x { set y { typeof tcp dport flags các phần tử tự động hợp nhất khoảng thời gian = { 24, 26-30, 40-50 } } }
- Cho phép sử dụng danh bạ và phạm vi khi ánh xạ dịch địa chỉ (NAT). bảng ip nat { định tuyến trước chuỗi { gõ nat hook ưu tiên định tuyến trước dstnat; chính sách chấp nhận; dnat sang ip Daddr. bản đồ dport tcp { 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 } dai dẳng } }
- Đã thêm hỗ trợ cho biểu thức "last", cho phép bạn tìm ra lần cuối cùng một phần tử quy tắc hoặc danh sách tập hợp được sử dụng. Tính năng này đã được hỗ trợ từ phiên bản cốt lõi. Linux 5.14. table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic,timeout last timeout 1h } chain z { type filter hook output priority filter; policy accept; update @y { ip daddr . tcp dport } } } # nft list set ip xy table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic,timeout last timeout 1h elements = { 172.217.17.14 . 443 last used 1s591ms timeout 1h expires 59m58s409ms, 172.67.69.19 . 443 last used 4s636ms timeout 1h expires 59m55s364ms, 142.250.201.72 . 443 lần cuối sử dụng 4s748ms, thời gian chờ 1h, hết hạn sau 59m55s252ms, 172.67.70.134. 443 lần cuối sử dụng 4s688ms, thời gian chờ 1h, hết hạn sau 59m55s312ms, 35.241.9.150. 443 lần cuối sử dụng 5s204ms, thời gian chờ 1h, hết hạn sau 59m54s796ms, 138.201.122.174. 443 lần cuối sử dụng 4s537ms, thời gian chờ 1h, hết hạn sau 59m55s463ms, 34.160.144.191. 443 lần cuối sử dụng 5s205ms, thời gian chờ 1h, hết hạn sau 59m54s795ms, 130.211.23.194. 443 lần cuối sử dụng 4s436ms thời gian chờ 1h hết hạn 59m55s564ms } } }
- Đã thêm khả năng xác định hạn ngạch trong danh sách đã đặt. Ví dụ: để xác định hạn ngạch lưu lượng cho từng địa chỉ IP mục tiêu, bạn có thể chỉ định: bảng netdev x { set y { typeof ip Daddr size 65535 hạn ngạch trên 10000 mbyte } chuỗi y { type filter hook egress device "eth0" bộ lọc ưu tiên; chính sách chấp nhận; ip Daddr @y drop } } # nft thêm phần tử inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft list bảng quy tắc netdev x { set y { type ipv4_addr size 65535 hạn ngạch trên 10000 mbyte phần tử = { 8.8.8.8. Hạn ngạch 10000 trên 196 MB được sử dụng 0 byte } } chuỗi y { loại bộ lọc móc thiết bị đầu ra bộ lọc ưu tiên “ethXNUMX”; chính sách chấp nhận; ip Daddr @y thả } }
- Việc sử dụng các hằng số trong danh sách tập hợp được cho phép. Ví dụ: khi sử dụng địa chỉ đích và Vlan ID làm khóa danh sách, bạn có thể chỉ định trực tiếp số Vlan (daddr . 123): table netdev t { set s { typeof ether saddr . vlan id kích thước 2048 cờ động, hết thời gian chờ 1m } chuỗi c { loại bộ lọc móc vào thiết bị ưu tiên eth0 0; chính sách chấp nhận; loại ether != 8021q cập nhật @s { ether Daddr . 123 } bộ đếm } }
- Một lệnh "destroy" mới đã được thêm vào để xóa đối tượng mà không cần điều kiện (không giống như lệnh delete, nó không tạo ra lỗi ENOENT khi cố gắng xóa một đối tượng bị thiếu). Yêu cầu tối thiểu kernel. Linux 6.3-rc. xóa bảng ip bộ lọc
Nguồn: opennet.ru
