Skip to content
VDS · Mạng, địa chỉ IP và tên miền

nftables: các quy tắc phức tạp hơn

Khi ufw không còn đủ: cấu trúc bảng và chain của nftables, một config hoạt động sẵn dùng, tập hợp địa chỉ, giới hạn tốc độ, và chuyển tiếp cổng.

Cập nhật 23 tháng 8, 2026

nftables chính là cơ chế kernel mà ufw chạy bên trên. Bạn nên dùng trực tiếp nó khi cần các tập địa chỉ có tên, giới hạn tốc độ, chính sách khác nhau cho từng interface, hoặc chuyển tiếp cổng — tức là khi các quy tắc của bạn không còn gói gọn trong “cho phép một cổng”.

Bạn không cần dùng cả hai công cụ cùng lúc: trước khi chuyển, hãy tắt ufw bằng ufw disable, nếu không các quy tắc sẽ chồng lấn và gây rối khi bạn gỡ lỗi.

Cấu trúc

Các quy tắc nằm trong table, table chứa chain, và chain chứa các quy tắc. Mỗi chain gắn với một giai đoạn xử lý gói tin (input, forward, output) và có một chính sách mặc định.

apt install -y nftables
systemctl enable --now nftables
nft list ruleset

Cấu hình đang hoạt động

Tệp /etc/nftables.conf:

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
    set admins {
        type ipv4_addr
        elements = { 203.0.113.5, 198.51.100.7 }
    }

    chain input {
        type filter hook input priority 0; policy drop;

        iif lo accept
        ct state established,related accept
        ct state invalid drop

        ip protocol icmp icmp type echo-request limit rate 5/second accept

        tcp dport 22 ip saddr @admins accept
        tcp dport 22 ct state new limit rate 6/minute accept
        tcp dport { 80, 443 } accept
    }

    chain forward {
        type filter hook forward priority 0; policy drop;
    }

    chain output {
        type filter hook output priority 0; policy accept;
    }
}

Áp dụng và lưu:

nft -c -f /etc/nftables.conf
nft -f /etc/nftables.conf
systemctl restart nftables

Cờ -c chỉ kiểm tra cú pháp mà không áp dụng các quy tắc. Hãy luôn dùng nó: một chính sách drop kèm lỗi gõ sẽ cắt quyền truy cập, và bạn sẽ phải vào lại qua console trong bảng điều khiển /hosting/vds/m/<id>.

Tập địa chỉ và giới hạn tốc độ

Một tập có tên được chỉnh sửa ngay lập tức, không cần nạp lại quy tắc:

nft add element inet filter admins { 192.0.2.10 }
nft delete element inet filter admins { 198.51.100.7 }
nft list set inet filter admins

Một tập động có timeout rất tiện cho các block tùy chỉnh:

set blocked {
    type ipv4_addr
    flags timeout
    timeout 1h
}

Chuyển tiếp và thay thế địa chỉ

Cần thiết nếu bên trong có một container hoặc tunnel đang chạy:

table ip nat {
    chain prerouting {
        type nat hook prerouting priority -100;
        tcp dport 8443 dnat to 10.10.0.2:443
    }
    chain postrouting {
        type nat hook postrouting priority 100;
        oifname "eth0" masquerade
    }
}

Lỗi thường gặp

LỗiHậu quảCách khắc phục
Thiếu quy tắc ct state establishedCác phản hồi cho yêu cầu đi ra bị cắtThêm nó làm quy tắc đầu tiên
Quên iif lo acceptCác dịch vụ và cơ sở dữ liệu cục bộ hỏngCho phép interface loopback
Đã áp dụng quy tắc nhưng chưa lưuMọi thứ đều mở sau khi khởi động lạiGhi vào /etc/nftables.conf
Dùng ufw và nftables cùng nhauKết quả khó lườngChỉ giữ một công cụ

Hãy thử bộ quy tắc mới trong một phiên riêng mà không đóng phiên đang làm việc. Một cách bảo hiểm đơn giản: chạy sleep 300 && nft flush ruleset ở chế độ nền — nếu bạn tự khóa mình ra ngoài, quyền truy cập sẽ tự khôi phục.

Nếu bạn không cần những chi tiết này, hãy quay lại ufw: nó đáp ứng hầu hết các tác vụ.