Chuyển tới nội dung chính

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 iptables hoặ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.

  1. Tạo một tệp cấu hình mới:

    sudo nano /etc/nftables.conf
  2. 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;
    }
    }
  3. Lưu và đóng tệp (Ctrl+X, Y, Enter).

  4. Kiểm tra cú pháp của tệp cấu hình:

    sudo nft -c -f /etc/nftables.conf

    Nế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.

  5. Tải các quy tắc từ tệp cấu hình:

    sudo nft -f /etc/nftables.conf

    Hoặc khởi động lại dịch vụ nftables để nó tải cấu hình mặc định:

    sudo systemctl restart nftables
  6. Kiểm tra các quy tắc đã tải:

    sudo nft list ruleset

    Bạ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 start hoặc Error: 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.conf hoặ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.
  • Lỗi: Cannot add rules: Permission denied

    • Nguyên nhân: Bạn không có đủ quyền hoặc module kernel nf_tables chưa được từi.
    • Giải pháp:
      • Đảm bảo bạn đang sử dụng sudo cho tất cả các lệnh quản trị.
      • Thử tải module kernel thủ công: sudo modprobe nf_tables.
  • 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à drop nhưng không có quy tắc accept cho 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.conf hoặc sudo 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.

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.conf củ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.