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ỗi | Hậu quả | Cách khắc phục |
|---|---|---|
Thiếu quy tắc ct state established | Các phản hồi cho yêu cầu đi ra bị cắt | Thêm nó làm quy tắc đầu tiên |
Quên iif lo accept | Các dịch vụ và cơ sở dữ liệu cục bộ hỏng | Cho phép interface loopback |
| Đã áp dụng quy tắc nhưng chưa lưu | Mọi thứ đều mở sau khi khởi động lại | Ghi vào /etc/nftables.conf |
| Dùng ufw và nftables cùng nhau | Kết quả khó lường | Chỉ 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ụ.