nftables là một framework tường lửa hiện đại trong kernel Linux, được thiết kế để thay thế iptables (và các công cụ liên quan như ip6tables, arptables, ebtables). Nó được giới thiệu lần đầu trong kernel Linux 3.13 (năm 2014) và ngày càng trở thành chuẩn mặc định trên nhiều bản phân phối nhờ hiệu suất cao, cú pháp đơn giản hơn, và khả năng mở rộng tốt. Dưới đây là những điều cơ bản để bạn hiểu về nftables:
1. Nftables là gì?
-
- Định nghĩa: nftables là một hệ thống lọc gói tin (packet filtering) và phân loại (classification) trong kernel Linux, cho phép bạn định nghĩa các quy tắc (rules) để xử lý lưu lượng mạng (ví dụ: chấp nhận, từ chối, chuyển tiếp gói tin).
So với iptables:
-
- iptables dùng các bảng cố định (filter, nat, mangle, raw) và xử lý tuần tự.
-
- nftables dùng một bảng duy nhất (table) với các chain và rule linh hoạt, xử lý hiệu quả hơn nhờ cơ chế tập hợp (set) và từ điển (map).
2. Các thành phần chính của nftables
-
- Table: Một container cấp cao, chứa các chain và rule. Table xác định loại địa chỉ (IPv4, IPv6, inet – hỗ trợ cả hai, v.v.).
-
- Chain: Tập hợp các quy tắc (rules) để xử lý gói tin. Chain có thể gắn vào các hook (điểm xử lý trong kernel) như input, output, forward.
-
- Rule: Quy tắc cụ thể để khớp (match) và xử lý gói tin (accept, drop, reject, v.v.).
-
- Set: Tập hợp các phần tử (IP, port, v.v.) để khớp nhanh hơn, hỗ trợ timeout và điều kiện động.
-
- Map: Ánh xạ từ một giá trị sang giá trị khác (ví dụ: IP -> hành động).
3. Cách hoạt động
- Hook: nftables gắn các chain vào các điểm xử lý trong vòng đời của gói tin:
- input: Gói tin đến máy.
-
- output: Gói tin đi từ máy.
-
- forward: Gói tin được chuyển tiếp qua máy (dành cho router).
-
- prerouting và postrouting: Dùng cho NAT.
- Matching: Khớp gói tin dựa trên tiêu chí như địa chỉ IP, port, giao thức (TCP/UDP), v.v.
- Action: Thực hiện hành động như accept (cho phép), drop (bỏ), reject (từ chối có thông báo), hoặc ghi log.
4. Ưu điểm của nftables
-
- Hiệu suất: Tối ưu hóa xử lý gói tin trong kernel, nhanh hơn iptables khi có nhiều rule.
-
- Cú pháp đơn giản: Một cú pháp duy nhất thay vì nhiều công cụ riêng lẻ như iptables, ip6tables.
-
- Hỗ trợ tập hợp (set): Cho phép xử lý nhiều địa chỉ/port trong một rule, giảm số lượng quy tắc.
-
- Tính linh hoạt: Dễ dàng mở rộng với các tính năng như NAT, ghi log, đếm traffic.
5. Cú pháp cơ bản
Dưới đây là ví dụ cơ bản để bạn hình dung:
Tạo table và chain
nft add table inet my_table
nft add chain inet my_table input { type filter hook input priority 0 \; policy drop \; }
-
- inet: Hỗ trợ cả IPv4 và IPv6.
-
- type filter hook input: Chain xử lý lưu lượng đến.
-
- policy drop: Chính sách mặc định là bỏ gói tin nếu không khớp rule nào.
Thêm rule
nft add rule inet my_table input tcp dport 22 accept
nft add rule inet my_table input ip saddr 192.168.1.10 drop
-
- Rule 1: Cho phép kết nối TCP đến port 22 (SSH).
-
- Rule 2: Chặn IP nguồn 192.168.1.10.
Tạo và dùng set
nft add set inet my_table banned_ips { type ipv4_addr \; flags timeout \; }
nft add rule inet my_table input ip saddr @banned_ips drop
nft add element inet my_table banned_ips { 10.0.0.1 timeout 1h }
-
- Tạo một tập hợp banned_ips để lưu IP bị chặn.
-
- Chặn tất cả IP trong tập hợp.
-
- Thêm IP 10.0.0.1 vào tập hợp, tự xóa sau 1 giờ.
Xem cấu hình
nft list ruleset
6. Ví dụ thực tế
Chặn IP kết nối quá nhiều (kết hợp với Fail2Ban)
Như đã hướng dẫn trước, bạn có thể dùng nftables để lưu danh sách IP bị chặn:
table inet filter {
set banned_ips {
type ipv4_addr
flags timeout
}
chain input {
type filter hook input priority 0; policy accept;
ip saddr @banned_ips drop
}
}
Fail2Ban sẽ tự động thêm IP vào banned_ips khi phát hiện hành vi bất thường.
Đếm traffic trên port
nft add rule inet my_table input tcp dport 80 counter accept
nft list ruleset # Xem số liệu đếm
7. So sánh với iptables
Đặc điểm | iptables | nftables |
---|---|---|
Cú pháp | Nhiều lệnh riêng | Một lệnh nft duy nhất |
Hiệu suất | Tốt cho ít rule | Tốt hơn với nhiều rule |
Hỗ trợ IPv6 | Dùng ip6tables riêng | Tích hợp trong inet |
Tập hợp (set) | Không có native | Có, rất mạnh mẽ |
Tương lai | Đang bị thay thế | Là chuẩn mới |
8. Lưu ý khi dùng nftables
-
- Tương thích ngược: Có công cụ iptables-nft để chạy lệnh iptables trên nền nftables.
-
- Học cú pháp: Nếu quen iptables, bạn cần làm quen với cách tổ chức table/chain trong nftables.
-
- Công cụ hỗ trợ: Nhiều phần mềm như Fail2Ban, Docker đã hỗ trợ nftables, nhưng cần kiểm tra phiên bản.
Kết luận
nftables là một bước tiến lớn so với iptables, mang lại sự linh hoạt và hiệu quả trong quản lý tường lửa. Nếu bạn muốn hiểu sâu hơn về một phần cụ thể (ví dụ: cách dùng set, NAT, hoặc tích hợp với công cụ khác), cứ hỏi mình nhé! Bạn đã thử dùng nftables chưa, hay đang cần hướng dẫn gì thêm?