phát hành bộ lọc gói nftables 1.0.0

Bản phát hành bộ lọc gói nftables 1.0.0 đã được xuất bả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 thay thế iptables, ip6table, arptables và ebtables). Những thay đổi cần thiết để bản phát hành nftables 1.0.0 hoạt động được bao gồm trong nhân Linux 5.13. Sự thay đổi đáng kể về số phiên bản không liên quan đến bất kỳ thay đổi cơ bản nào mà chỉ là hệ quả của việc tiếp tục đánh số nhất quán theo ký hiệu thập phân (bản phát hành trước đó là 0.9.9).

Gói nftables bao gồm các thành phần bộ lọc gói chạy trong không gian người dùng, trong khi công việc ở cấp độ kernel được cung cấp bởi hệ thống con nf_tables, vốn là một phần của nhân Linux kể từ bản phát hành 3.13. Cấp độ kernel chỉ cung cấp một giao diện chung độc lập với giao thức, cung cấp các chức năng cơ bản để trích xuất dữ liệu từ các gói, thực hiện các hoạt động dữ liệu và kiểm soát luồng.

Bản thân các quy tắc lọc và trình xử lý dành riêng cho giao thức được biên dịch thành mã byte không gian người dùng, sau đó mã byte này được tải vào nhân bằng giao diện Netlink và được thực thi trong nhân trong một máy ảo đặc biệt giống như BPF (Bộ lọc gói Berkeley). Cách tiếp cận này giúp giảm đáng kể kích thước của mã lọc chạy ở cấp hạt nhân và di chuyển tất cả các chức năng của quy tắc phân tích cú pháp và logic làm việc với các giao thức vào không gian người dùng.

Những đổi mới chính:

  • Hỗ trợ cho phần tử mặt nạ “*” đã được thêm vào danh sách tập hợp, được kích hoạt cho bất kỳ gói nào không thuộc các phần tử khác được xác định trong tập hợp. bảng x { danh sách chặn bản đồ { type ipv4_addr : các phần tử khoảng thời gian của cờ phán quyết = { 192.168.0.0/16 : chấp nhận, 10.0.0.0/8 : chấp nhận, * : thả } } chuỗi y { loại móc lọc ưu tiên định tuyến trước 0; chính sách chấp nhận; ip saddr vmap @blocklist } }
  • Có thể xác định các biến từ dòng lệnh bằng cách sử dụng tùy chọn “--define”. # cat test.nft bảng netdev x { chuỗi y { loại bộ lọc hook thiết bị xâm nhập = $dev ưu tiên 0; giảm chính sách; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • Trong danh sách bản đồ, được phép sử dụng các biểu thức không đổi (trạng thái): bảng inet filter { map portmap { type inet_service : phần tử bộ đếm phán quyết = { 22 gói bộ đếm 0 byte 0 : nhảy ssh_input, * gói bộ đếm 0 byte 0 : thả } } chuỗi ssh_input { } chuỗi wan_input { tcp dport vmap @portmap } định tuyến trước chuỗi { loại bộ lọc hook ưu tiên định tuyến trước thô; chính sách chấp nhận; iif vmap { "lo" : nhảy wan_input } } }
  • Đã thêm lệnh "list hooks" để hiển thị danh sách các trình xử lý cho một họ gói nhất định: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables] } hook input { -0000000100 chuỗi ip ab [nf_tables] +0000000300 chuỗi inet mz [nf_tables] } hook Forward { -0000000225 selinux_ipv4_forward 0000000000 chain ip ac [nf_tables] } hook out { -0000000225 selinux_ipv4_output } hook postrou ting { +0000000225 4 selinux_ipvXNUMX_postroute } }
  • Khối hàng đợi cho phép kết hợp các biểu thức jhash, symhash và numgen để phân phối gói đến hàng đợi trong không gian người dùng. … xếp hàng tới symhash mod 65536 … cờ xếp hàng bỏ qua numgen inc mod 65536 … xếp hàng tới jhash oif . meta mark mod 32 "queue" cũng có thể được kết hợp với danh sách bản đồ để chọn hàng đợi trong không gian người dùng dựa trên các khóa tùy ý. ... cờ xếp hàng bỏ qua oifname map { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Có thể mở rộng các biến bao gồm một danh sách cố định thành nhiều bản đồ. xác định giao diện = { eth0, eth1 } bảng ip x { chuỗi y { loại bộ lọc hook ưu tiên đầu vào 0; chính sách chấp nhận; iifname vmap { lo : chấp nhận, $interfaces : drop } } } # nft -f x.nft # nft list bảng quy tắc ip x { chuỗi y { loại bộ lọc móc ưu tiên đầu vào 0; chính sách chấp nhận; iifname vmap { "lo" : chấp nhận, "eth0" : thả, "eth1" : thả } } }
  • Cho phép kết hợp vmaps (bản đồ phán đoán) theo từng khoảng thời gian: # nft add quy tắc xy tcp dport . ip saddr vmap {1025-65535 . 192.168.10.2 : chấp nhận }
  • Cú pháp đơn giản hóa cho ánh xạ NAT. Được phép chỉ định phạm vi địa chỉ: ... snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } hoặc các địa chỉ IP và cổng rõ ràng: ... dnat to ip saddr map { 10.141.11.4 : 192.168.2.3 . 80 } hoặc kết hợp dải IP và cổng: ... dnat to ip saddr . bản đồ dport tcp { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5. 8888-8999 }

Nguồn: opennet.ru

Thêm một lời nhận xét