Cài Đặt nftables trên Linux
Giới Thiệu
nftables là một framework lọc gói dữ liệu (packet filtering) thế hệ tiếp theo cho nhân Linux, được thiết kế để thay thế các công cụ cũ hơn như iptables, ip6tables, arptables, và ebtables. Với kiến trúc hợp nhất và cú pháp linh hoạt hơn, nftables mang lại hiệu suất tốt hơn, khả năng mở rộng cao hơn và dễ quản lý hơn, đặc biệt đối với các hệ thống có quy tắc tường lửa phức tạp. Việc chuyển đổi sang nftables giúp bạn tận dụng các tính năng hiện đại của nhân Linux để bảo mật mạng.
📋 Thời gian: 15 phút | Độ khó: Cơ bản
Yêu Cầu
Để thực hiện hướng dẫn này, bạn cần:
- Một máy chủ hoặc máy ảo chạy hệ điều hành Linux (ví dụ: Ubuntu, Debian, CentOS, RHEL).
- Quyền truy cập root hoặc người dùng có quyền
sudo. - Kiến thức cơ bản về dòng lệnh Linux.
- ⚠️ Lưu ý quan trọng: Nếu bạn đang sử dụng
iptableshoặc các dịch vụ tường lửa khác nhưfirewalld, bạn nên tắt hoặc gỡ bỏ chúng trước khi cài đặt nftables để tránh xung đột.
Các Bước Thực Hiện
Bước 1: Cập nhật hệ thống
Luôn bắt đầu bằng cách cập nhật các gói phần mềm trên hệ thống của bạn để đảm bảo bạn có các phiên bản mới nhất và các bản vá bảo mật.
Trên Debian/Ubuntu:
sudo apt update
sudo apt upgrade -y
Trên CentOS/RHEL/Fedora:
sudo dnf update -y
# Hoặc sudo yum update -y cho các phiên bản cũ hơn của CentOS/RHEL
Bước 2: Kiểm tra trạng thái nftables hiện tại
Trước khi cài đặt, hãy kiểm tra xem nftables có sẵn hoặc đã được cài đặt trên hệ thống của bạn hay chưa.
nft list ruleset
Nếu bạn nhận được thông báo lỗi như Error: Could not process rule: No such file or directory hoặc nft: command not found, điều đó có nghĩa là nftables chưa được cài đặt hoặc chưa có quy tắc nào được định nghĩa.
Bước 3: Cài đặt nftables
Tùy thuộc vào bản phân phối Linux của bạn, hãy sử dụng lệnh cài đặt phù hợp.
Trên Debian/Ubuntu:
sudo apt install nftables -y
Trên CentOS/RHEL/Fedora:
sudo dnf install nftables -y
# Hoặc sudo yum install nftables -y cho các phiên bản cũ hơn của CentOS/RHEL
✅ Sau khi cài đặt hoàn tất, bạn có thể kiểm tra phiên bản của nftables:
nft --version
Bước 4: Kích hoạt và kiểm tra dịch vụ nftables
Sau khi cài đặt, bạn cần kích hoạt dịch vụ nftables để nó khởi động cùng hệ thống và kiểm tra trạng thái của nó.
sudo systemctl enable nftables
sudo systemctl start nftables
sudo systemctl status nftables
Bạn sẽ thấy Active: active (exited) hoặc Active: active (running) nếu dịch vụ đã được kích hoạt thành công. Trạng thái exited lư bình thường đối với nftables vì nó chỉ tải các quy tắc và sau đó thoát, không chạy như một daemon liên tục.
Bước 5: Vô hiệu hóa hoặc gỡ bỏ iptables (Tùy chọn nhưng được khuyến nghị)
⚠️ Cảnh báo: Bước này rất quan trọng để tránh xung đột giữa nftables và iptables. Đảm bảo bạn hiểu rõ các quy tắc tường lửa hiện có trước khi thực hiện.
Trên Debian/Ubuntu:
sudo systemctl stop netfilter-persistent
sudo systemctl disable netfilter-persistent
sudo apt purge iptables -y # Chỉ gỡ bỏ nếu bạn chắc chắn
Trên CentOS/RHEL/Fedora (sử dụng firewalld):
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo dnf remove firewalld -y # Chỉ gỡ bỏ nếu bạn chắc chắn
💡 Mẹo: Trước khi gỡ bỏ, bạn có thể sao lưu cấu hình iptables hiện tại bằng lệnh sudo iptables-save > ~/iptables.rules.backup.
Bước 6: Tạo cấu hình nftables cơ bản (Ví dụ)
Để đảm bảo nftables hoạt động đúng cách, hãy tạo một bộ quy tắc cơ bản. Ví dụ này sẽ cho phép SSH (cổng 22) và lưu lượng truy cập đã thiết lập, đồng thời từ chối tất cả các kết nối khác.
-
Tạo một tệp cấu hình mới:
sudo nano /etc/nftables.conf -
Dán nội dung sau vào tệp:
#!/usr/sbin/nft -f
# Xóa tất cả các bảng hiện có
flush ruleset
# Tạo bảng ip tên "filter"
table ip filter {
# Tạo chuỗi input để xử lý gói đến
chain input {
type filter hook input priority 0; policy drop;
# Cho phép các kết nối đã thiết lập và liên quan
ct state { established, related } accept
# Cho phép các gói loopback
iif "lo" accept
# Cho phép SSH (port 22)
tcp dport 22 accept
# Từ chối tất cả các gói còn lại (do policy drop)
}
# Tạo chuỗi forward (nếu hệ thống là router, nếu không thì không cần thiết)
chain forward {
type filter hook forward priority 0; policy drop;
}
# Tạo chuỗi output để xử lý gói đi
chain output {
type filter hook output priority 0; policy accept;
}
} -
Lưu và đóng tệp (Ctrl+X, Y, Enter).
-
Kiểm tra cú pháp của tệp cấu hình:
sudo nft -c -f /etc/nftables.confNếu không có lỗi, lệnh sẽ không trả về gì. Nếu có lỗi, nó sẽ hiển thị thông báo lỗi.
-
Tải các quy tắc từ tệp cấu hình:
sudo nft -f /etc/nftables.confHoặc khởi động lại dịch vụ nftables để nó tải cấu hình mặc định:
sudo systemctl restart nftables -
Kiểm tra các quy tắc đã tải:
sudo nft list rulesetBạn sẽ thấy các quy tắc bạn vừa định nghĩa được liệt kê.
Troubleshooting
-
Lỗi:
nftables service failed to starthoặcError: Could not process rule: No such file or directory- Nguyên nhân: Thường do lỗi cú pháp trong tệp
/etc/nftables.confhoặc các tệp cấu hình khác được tải. - Giải pháp:
- Kiểm tra lại cú pháp của tệp cấu hình bằng
sudo nft -c -f /etc/nftables.conf. - Kiểm tra log hệ thống để biết thêm chi tiết:
sudo journalctl -u nftables.service. - Đảm bảo rằng không có dịch vụ tường lửa nào khác đang chạy và xung đột với nftables.
- Kiểm tra lại cú pháp của tệp cấu hình bằng
- Nguyên nhân: Thường do lỗi cú pháp trong tệp
-
Lỗi:
Cannot add rules: Permission denied- Nguyên nhân: Bạn không có đủ quyền hoặc module kernel
nf_tableschưa được từi. - Giải pháp:
- Đảm bảo bạn đang sử dụng
sudocho tất cả các lệnh quản trị. - Thử tải module kernel thủ công:
sudo modprobe nf_tables.
- Đảm bảo bạn đang sử dụng
- Nguyên nhân: Bạn không có đủ quyền hoặc module kernel
-
Bị khóa khỏi hệ thống (không thể SSH/truy cập web) sau khi áp dụng quy tắc
- Nguyên nhân: Quy tắc tường lửa đã áp dụng chặn truy cập hợp lệ, thường là do chính sách mặc định là
dropnhưng không có quy tắcacceptcho dịch vụ bạn đang sử dụng. - Giải pháp:
- Nếu bạn có quyền truy cập vật lý hoặc thông qua bảng điều khiển ảo (console), hãy đăng nhập và chỉnh sửa tệp
/etc/nftables.confđể cho phép truy cập SSH (cổng 22) hoặc các dịch vụ khác. - Sau đó, tải lại quy tắc:
sudo nft -f /etc/nftables.confhoặcsudo systemctl restart nftables. - Nếu không có quyền truy cập, bạn có thể cần khởi động lại hệ thống vào chế độ cứu hộ (recovery mode) để chỉnh sửa tệp. ⚠️ Luôn kiểm tra quy tắc trên môi trường thử nghiệm trước khi triển khai trên môi phẩm.
- Nếu bạn có quyền truy cập vật lý hoặc thông qua bảng điều khiển ảo (console), hãy đăng nhập và chỉnh sửa tệp
- Nguyên nhân: Quy tắc tường lửa đã áp dụng chặn truy cập hợp lệ, thường là do chính sách mặc định là
Kết Luận
Bạn đã cài đặt thành công nftables và thiết lập một bộ quy tắc cơ bản. nftables là một cũng cụ mạnh mẽ và linh hoạt, cung cấp khả năng kiểm soát tường lửa chi tiết và hiệu quả hơn. Việc làm quen với cú pháp và các tính năng của nó sẽ giúp bạn bảo mật hệ thống Linux của mình một cách tối ưu.
💡 Best practices:
- Thực hành cẩn thận: Luôn kiểm tra các quy tắc mới trong môi trường thử nghiệm trước khi áp dụng chúng vào hệ thống sản xuất.
- Sao lưu cấu hình: Luôn sao lưu tệp cấu hình
/etc/nftables.confcủa bạn trước khi thực hiện các thay đổi lớn. - Tìm hiểu thêm: nftables có nhiều tính năng nâng cao. Hãy dành thời gian đọc tài liệu chính thức và các ví dụ để khai thác tối đa sức mạnh của nó.
- Chỉ cho phép những gì cần thiết: Áp dụng nguyên tắc "deny by default, allow by exception" để tăng cường bảo mật.