
nftables là gì? Tường lửa Linux thế hệ mới thay thế iptables
nftables là hệ thống lọc và phân loại gói tin trong nhân Linux, có mặt từ nhân 3.13 phát hành ngày 19/01/2014. Công cụ này thay thế hoàn toàn thành phần iptables cũ trong bộ khung Netfilter, mang đến cú pháp hợp nhất, ít trùng lặp mã nguồn và dễ mở rộng cho giao thức mới.
Khác với iptables vốn phải có sẵn 4 bản riêng biệt cho IPv4, IPv6, ARP và Ethernet bridging, nftables đưa logic lọc vào một máy ảo (virtual machine) bytecode duy nhất ngay trong nhân. Nhờ vậy, cùng một bộ quy tắc chạy được cho mọi giao thức.

Ba khái niệm cốt lõi: table, chain, rule
Toàn bộ cấu hình nftables dựa trên ba khái niệm:
- Table (bảng): nhóm các chain cùng mục đích, ví dụ bảng
ipxử lý IPv4,ip6xử lý IPv6,inetxử lý chung cả hai. - Chain (chuỗi): danh sách các rule được gọi theo thứ tự từ một hook của nhân. Có hai loại: chain cơ sở (base chain) gắn với hook như
input,output,forward; và chain thường (regular chain) do người dùng tự định nghĩa. - Rule (quy tắc): một phép so khớp gói tin kèm hành động
accept,drophoặcreject.
Cấu trúc mô hình được mô tả rõ trong tài liệu Wikipedia về nftables và trang dự án chính thức của Netfilter.

Ví dụ cú pháp nftables
Chặn mọi gói tin đi tới địa chỉ 1.2.3.4, bằng nftables:
nft add rule ip filter output ip daddr 1.2.3.4 drop
Cùng nhiệm vụ trong iptables phải viết dài hơn nhiều:
iptables -A OUTPUT -d 1.2.3.4 -j DROP
Cú pháp nftables thoạt nhìn dài dòng hơn nhưng linh hoạt hơn nhiều. Một ví dụ thực tế chặn SSH từ mọi nơi ngoài mạng nội bộ:
nft add rule inet filter input tcp dport 22 ip saddr != 192.168.1.0/24 drop
Tập dữ liệu và bảng tra cứu: điểm mạnh lớn nhất
iptables buộc phải viết một rule cho mỗi địa chỉ cần chặn. nftables bổ sung các cấu trúc dữ liệu như dictionary, map và concatenation, cho phép gom hàng trăm địa chỉ vào một tập rồi tra cứu bằng một phép so khớp duy nhất. Số chain và rule cần thiết để mô tả cùng một thiết kế giảm mạnh, đồng thời việc thêm hay sửa quy tắc diễn ra theo kiểu tăng dần (incremental) hiệu quả hơn.
Cập nhật luật nguyên tử qua Netlink
Một cải tiến quan trọng khác là API người dùng của nftables cho phép thay thế nguyên tử (atomic) một hoặc nhiều rule trong cùng một giao dịch Netlink. Điều này nhanh hơn hẳn khi bộ quy tắc lớn, đồng thời tránh được tình trạng tranh chấp trong lúc các luồng gói tin đang chạy.
Chuyển đổi từ iptables sang nftables
Không cần viết lại toàn bộ từ đầu. Công cụ iptables-translate dịch hầu hết quy tắc iptables cũ sang dạng tương đương của nft, và iptables-nft cung cấp lớp tương thích để các ứng dụng vẫn dùng giao diện cũ nhưng chạy trên nền nftables. Debian 10 (Buster) trở đi đã chuyển sang nftables làm backend lọc gói tin mặc định.

Hạn chế cần biết
iptables từng cung cấp khả năng khớp theo chuỗi dùng cho DPI, chẳng hạn lọc theo tên miền qua trường SNI của TLS. nftables hiện chưa hỗ trợ tính năng này — đây là nhược điểm được ghi nhận rõ trong tài liệu. Với hệ thống cần lọc theo tên miền, vẫn phải bổ sung thêm lớp xử lý khác như proxy hoặc kết hợp nhiều công cụ.
Một điểm khác cần lưu ý là cách hai công cụ quản lý quy tắc. iptables lưu cấu hình dưới dạng văn bản phẳng trong tệp, nên nhiều công cụ như Ansible hay Puppet có thể chỉ việc ghi đè tệp rồi nạp lại. nftables dùng Netlink để giao tiếp với nhân, cấu hình nằm trong bộ nhớ kernel chứ không có tệp quy chuẩn. Vì vậy khi triển khai tự động, bạn phải dùng tập lệnh nft riêng chạy qua `nft -f`, hoặc dùng công cụ như `nftables-persistent` để lưu và khôi phục quy tắc sau mỗi lần khởi động. Nếu không, sau khi reboot máy chủ sẽ mất toàn bộ cấu hình tường lửa đang chạy.
Quy trình nâng cấp an toàn từ iptables
Trước khi chuyển đổi, hãy luôn giữ một phiên SSH mở sẵn, vì một cú pháp sai có thể khiến bạn tự khóa chính mình ra khỏi máy chủ. Trình tự an toàn gồm các bước:
- Chụp lại toàn bộ quy tắc hiện tại bằng `iptables-save` ra tệp, để có đường quay lui.
- Dịch sang dạng nft bằng `iptables-translate` rồi xem lại kết quả, vì công cụ không dịch được mọi trường hợp.
- Chạy thử bằng `nft -c -f tap_cau_hinh.nft` để kiểm tra cú pháp mà không áp dụng.
- Chuyển sang chạy song song thay vì xóa thẳng, giữ nguyên iptables làm lớp dự phòng trong giai đoạn thử nghiệm.
- Sau khi ổn định, mới chuyển toàn bộ dịch vụ sang lớp tương thích `iptables-nft` hoặc viết cấu hình nft thuần.
Lệnh `nft list ruleset` cho phép xem toàn bộ cấu hình đang chạy dưới dạng cú pháp nft, ngay cả khi những quy tắc đó được tạo ra bởi lớp tương thích iptables. Đây là cách nhanh nhất để kiểm tra trạng thái thực tế của tường lửa trên một máy chủ đang chạy.
Khi nào vẫn nên giữ iptables
Dù nftables đã ổn định, hệ sinh thái quản trị cấu hình vẫn chưa hoàn toàn chuyển sang. Nhiều vai trò trong Ansible, một số tường lửa ảo hóa và công cụ giám sát cũ vẫn sinh lệnh dạng iptables. Với những môi trường như vậy, chạy lớp tương thích `iptables-nft` là lựa chọn ít rủi ro nhất, vì bạn vẫn dùng cú pháp cũ mà nhân xử lý bằng máy ảo nftables bên dưới. Ngược lại, với hệ thống mới hoặc khi bạn muốn kiểm soát chính xác tập dữ liệu, sets và maps, hãy viết cấu hình nft thuần.
Tóm tắt
nftables là tường lửa thế hệ mới của Linux, thay thế iptables từ năm 2014. Những lợi thế chính gồm một máy ảo bytecode duy nhất cho mọi giao thức, tập dữ liệu giảm số lượng rule, cập nhật nguyên tử qua Netlink và lớp tương thích giúp chuyển đổi dễ dàng. Với dự án mới, nên viết cấu hình bằng nft ngay từ đầu thay vì tiếp tục phụ thuộc iptables cũ.
