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

Sau một năm phát triển trình bày giải phóng bộ lọc gói nftables 0.9.1, phát triển để thay thế cho iptables, ip6table, arptables và ebtables bằng cách thống nhất các giao diện lọc gói cho IPv4, IPv6, ARP và cầu nối mạng. 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 hạt nhân được cung cấp bởi hệ thống con nf_tables, vốn là một phần của hạt 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 logic 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ã byte trong không gian người dùng, sau đó mã byte này được tải vào kernel bằng giao diện Netlink và được thực thi trong một máy ảo đặc biệt gợi nhớ đến BPF (Bộ lọc gói Berkeley). Cách tiếp cận này cho phép bạn giảm đáng kể kích thước của mã lọc đang chạy ở cấp kernel 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ợ IPsec, cho phép khớp các địa chỉ đường hầm dựa trên gói, ID yêu cầu IPsec và thẻ SPI (Chỉ số tham số bảo mật). Ví dụ,

    ... ipsec trong ip saddr 192.168.1.0/24
    ... ipsec trong spi 1-65536

    Cũng có thể kiểm tra xem tuyến đường có đi qua đường hầm IPsec hay không. Ví dụ: để chặn lưu lượng truy cập không qua IPSec:

    … đầu ra bộ lọc rt ipsec bị thiếu thả

  • Hỗ trợ IGMP (Giao thức quản lý nhóm Internet). Ví dụ: bạn có thể sử dụng quy tắc để loại bỏ các yêu cầu thành viên nhóm IGMP gửi đến

    nft thêm quy tắc netdev foo bar igmp loại thả bộ đếm truy vấn thành viên

  • Khả năng sử dụng các biến để xác định chuỗi chuyển tiếp (nhảy / goto). Ví dụ:

    xác định đích = ber
    thêm quy tắc ip foo bar nhảy $dest

  • Hỗ trợ mặt nạ nhận dạng hệ điều hành (OS Vân tay) dựa trên giá trị TTL trong tiêu đề. Ví dụ: để đánh dấu các gói dựa trên hệ điều hành của người gửi, bạn có thể sử dụng lệnh:

    ... bộ dấu meta osf ttl bỏ qua tên bản đồ { "Linux" : 0x1,
    "Cửa sổ": 0x2,
    "MacOS": 0x3,
    "không xác định" : 0x0 }
    ... osf ttl bỏ qua phiên bản "Linux:4.20"

  • Khả năng khớp địa chỉ ARP của người gửi và địa chỉ IPv4 của hệ thống đích. Ví dụ: để tăng bộ đếm các gói ARP được gửi từ địa chỉ 192.168.2.1, bạn có thể sử dụng quy tắc sau:

    bảng arp x {
    chuỗi y {
    loại bộ lọc móc lọc ưu tiên đầu vào; chính sách chấp nhận;
    arp saddr ip 192.168.2.1 gói truy cập 1 byte 46
    }
    }

  • Hỗ trợ chuyển tiếp yêu cầu một cách minh bạch thông qua proxy (tproxy). Ví dụ: để chuyển hướng cuộc gọi đến cổng 80 sang cổng proxy 8080:

    bảng ip x {
    chuỗi y {
    loại móc lọc ưu tiên định tuyến trước -150; chính sách chấp nhận;
    tcp dport 80 tproxy tới :8080
    }
    }

  • Hỗ trợ đánh dấu ổ cắm với khả năng lấy thêm dấu đã đặt thông qua setsockopt() ở chế độ SO_MARK. Ví dụ:

    bảng inet x {
    chuỗi y {
    loại móc lọc ưu tiên định tuyến trước -150; chính sách chấp nhận;
    Dấu hiệu tcp dport 8080 được đặt dấu ổ cắm
    }
    }

  • Hỗ trợ chỉ định tên văn bản ưu tiên cho chuỗi. Ví dụ:

    nft thêm chuỗi ip x raw { gõ bộ lọc móc ưu tiên định tuyến trước thô; }
    nft thêm chuỗi ip x filter { gõ bộ lọc hook bộ lọc ưu tiên định tuyến trước; }
    nft thêm chuỗi ip x filter_later { gõ bộ lọc móc ưu tiên định tuyến trước bộ lọc + 10; }

  • Hỗ trợ thẻ SELinux (Secmark). Ví dụ: để xác định thẻ "sshtag" trong ngữ cảnh SELinux, bạn có thể chạy:

    nft thêm secmark bộ lọc inet sshtag "system_u:object_r:ssh_server_packet_t:s0"

    Và sau đó sử dụng nhãn này trong các quy tắc:

    nft thêm quy tắc bộ lọc inet đầu vào tcp dport 22 meta secmark set “sshtag”

    nft thêm bản đồ bộ lọc inet secmapping { gõ inet_service : secmark; }
    nft thêm phần tử bộ lọc inet secmapping { 22 : "sshtag" }
    nft thêm quy tắc bộ lọc inet đầu vào meta secmark set tcp dport map @secmapping

  • Khả năng chỉ định các cổng được gán cho giao thức ở dạng văn bản, vì chúng được xác định trong tệp /etc/services. Ví dụ:

    nft thêm quy tắc xy tcp dport "ssh"
    bộ quy tắc danh sách nft -l
    bảng x {
    chuỗi y {
    ...
    tcp dport "ssh"
    }
    }

  • Khả năng kiểm tra loại giao diện mạng. Ví dụ:

    thêm quy tắc inet raw prerouting meta iifkind "vrf" chấp nhận

  • Cải thiện hỗ trợ cập nhật động nội dung của các bộ bằng cách chỉ định rõ ràng cờ “động”. Ví dụ: để cập nhật bộ "s" để thêm địa chỉ nguồn và đặt lại mục nhập nếu không có gói nào trong 30 giây:

    thêm bảng x
    thêm bộ xs { gõ ipv4_addr; cỡ 128; thời gian chờ 30 giây; cờ năng động; }
    thêm chuỗi xy { loại bộ lọc móc ưu tiên đầu vào 0; }
    thêm quy tắc cập nhật xy @s { ip saddr }

  • Khả năng thiết lập một điều kiện thời gian chờ riêng biệt. Ví dụ: để ghi đè thời gian chờ mặc định cho các gói đến trên cổng 8888, bạn có thể chỉ định:

    bộ lọc ip bảng {
    ct hết thời gian chờ tích cực-tcp {
    giao thức tcp;
    l3proto ip;
    chính sách = {đã thành lập: 100, close_wait: 4, đóng: 4}
    }
    đầu ra chuỗi {
    ...
    tcp dport 8888 ct đặt thời gian chờ "aggressive-tcp"
    }
    }

  • Hỗ trợ NAT cho họ inet:

    bảng inet nat {
    ...
    ip6 cha đã chết::2::1 dnat đến chết:2::99
    }

  • Cải thiện báo cáo lỗi đánh máy:

    kiểm tra bộ lọc chuỗi nft thêm

    Lỗi: Không có tập tin hoặc thư mục như vậy; ý bạn là bảng "bộ lọc" trong ip gia đình phải không?
    thêm kiểm tra bộ lọc chuỗi
    ^ ^ ^ ^ ^ ^ ^

  • Khả năng chỉ định tên giao diện theo bộ:

    đặt sc {
    gõ inet_service . tên nếu
    phần tử = {"ssh" . "eth0" }
    }

  • Cú pháp quy tắc flowtable được cập nhật:

    nft thêm bảng x
    nft thêm flowtable x ft { ưu tiên xâm nhập hook 0; thiết bị = { eth0, wlan0 }; }
    ...
    nft thêm quy tắc x chuyển tiếp giao thức ip { tcp, udp } luồng thêm @ft

  • Hỗ trợ JSON được cải thiện.

Nguồn: opennet.ru

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