Back to articles
Technology Insight

Tối Ưu Hóa Bảo Mật: Cấu Hình Fail2ban Kết Hợp Set Trong Nftables Để Chặn Hàng Triệu IP Bots Cào Dữ Liệu Trong 1 Giây

June 2, 2026

Giới thiệu về thách thức Scraping và hạn chế của cơ chế truyền thống

Trong kỷ nguyên số, dữ liệu trở thành tài sản vô giá. Tuy nhiên, việc các hệ thống liên tục bị tấn công bởi hàng triệu IP Bots, các công cụ cào dữ liệu (Scraping) hoặc các đợt DDoS cường độ cao là một thách thức lớn đối với quản trị viên hệ thống. Khi số lượng IP độc hại tăng lên đến hàng chục, hàng trăm nghìn, các cơ chế tường lửa truyền thống dựa trên IPTables bắt đầu bộc lộ những điểm yếu chết người về mặt hiệu năng.

Mỗi khi một gói tin đi qua IPTables, hệ thống sẽ phải duyệt tuyến tính (linear search) qua từng quy tắc (rules) từ trên xuống dưới. Điều này có nghĩa là nếu bạn có 100.000 IP bị chặn, gói tin từ người dùng hợp lệ có thể phải trải qua 100.000 lần so khớp trước khi được cho phép đi qua. Khi đó, CPU của máy chủ sẽ nhanh chóng bị quá tải (100% CPU), dẫn đến tình trạng nghẽn cổ chai và sập dịch vụ.

Giải pháp đột phá: Sự kết hợp giữa Fail2ban và Set trong Nftables

Để giải quyết bài toán hiệu năng này, hệ sinh thái Linux hiện đại đã chuyển dịch từ IPTables sang Nftables. Trọng tâm của sức mạnh này nằm ở cấu trúc dữ liệu Set (tương đương với IPSET của IPTables trước đây).

Cơ chế hoạt động: Thay vì tạo hàng triệu quy tắc riêng lẻ cho từng IP, Nftables cho phép chúng ta nhóm toàn bộ các IP bị chặn vào một tập hợp duy nhất gọi là "Set". Set này sử dụng cấu trúc bảng băm (Hash Table) với độ phức tạp tìm kiếm là O(1).

Nhờ vào độ phức tạp O(1), dù danh sách đen của bạn chứa 10 IP hay 1 triệu IP, tốc độ kiểm tra và block gói tin của Nftables vẫn diễn ra chỉ trong vòng 1 giây mà không làm tiêu tốn tài nguyên CPU của hệ thống. Khi kết hợp với Fail2ban — công cụ tự động quét log và phát hiện hành vi bất thường — chúng ta sẽ có một hệ thống phòng thủ tự động hóa, thông minh và cực kỳ mạnh mẽ.

Hướng dẫn từng bước cấu hình chi tiết

Dưới đây là các bước chi tiết để triển khai hệ thống bảo mật hiệu năng cao này trên các bản phân phối Linux hiện đại (Debian 11/12, Ubuntu 22.04/24.04, RHEL...).

Bước 1: Cài đặt và kích hoạt Nftables & Fail2ban

Trước tiên, hãy đảm bảo rằng hệ thống của bạn đã cài đặt đầy đủ cả hai dịch vụ và cấu hình Nftables làm tường lửa mặc định.

# Cập nhật hệ thống và cài đặt dịch vụ
sudo apt update && sudo apt install nftables fail2ban -y

# Kích hoạt và khởi động dịch vụ cùng hệ thống
sudo systemctl enable nftables
sudo systemctl start nftables
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Bước 2: Cấu hình Bảng và Set trong Nftables

Thông thường, Fail2ban phiên bản mới có khả năng tự động tạo bảng khi chạy hành động (banaction). Tuy nhiên, để tối ưu hóa và quản lý chủ động, chúng ta nên định nghĩa một bảng (table) và tập hợp (set) riêng biệt dành cho việc chặn IP trong cấu hình Nftables mặc định (/etc/nftables.conf) hoặc để Fail2ban tự quản lý qua cấu trúc inet f2b-table.

Cấu trúc Set trong Nftables cần hỗ trợ cả IPv4 và IPv6, đồng thời bật cờ interval để có thể chặn cả các dải IP (CIDR) nếu cần thiết:

# Ví dụ lệnh thủ công để tạo cấu trúc bảo vệ
sudo nft add table inet f2b-table
sudo nft add set inet f2b-table bot-blackhole { type ipv4_addr; flags interval; }
sudo nft add rule inet f2b-table input ip saddr @bot-blackhole drop

Bước 3: Tối ưu hóa cấu hình Fail2ban (jail.local)

Để Fail2ban không sử dụng IPTables cũ kỹ nữa, chúng ta cần khai báo rõ ràng việc sử dụng hành động nftables trong tệp cấu hình local. Hãy tạo hoặc chỉnh sửa tệp /etc/fail2ban/jail.local:

sudo nano /etc/fail2ban/jail.local

Thêm đoạn cấu hình mẫu dưới đây để áp dụng trên toàn hệ thống và cấu hình riêng cho dịch vụ Web (Nginx/Apache) nơi thường xuyên bị Bots tấn công cào dữ liệu:

[DEFAULT]
# Sử dụng nftables làm hành động cấm mặc định cho toàn bộ các jail
banaction = nftables[type=multiport]
banaction_allports = nftables[type=allports]

# Cấu hình thời gian chặn nghiêm khắc hơn đối với Bots cào dữ liệu
bantime  = 1d
findtime = 10m
maxretry = 5

[nginx-noscript]
enabled  = true
port     = http,https
filter   = nginx-noscript
logpath  = /var/log/nginx/error.log

[nginx-badbots]
enabled  = true
port     = http,https
filter   = nginx-badbots
logpath  = /var/log/nginx/access.log
maxretry = 2
bantime  = 7d

Bước 4: Kiểm tra và áp dụng cấu hình

Sau khi đã lưu lại các thiết lập cấu hình, tiến hành khởi động lại dịch vụ Fail2ban để áp dụng các quy tắc mới vào tường lửa Nftables:

sudo systemctl restart fail2ban

Để kiểm tra xem Fail2ban đã tạo Set thành công trong Nftables hay chưa, bạn sử dụng lệnh kiểm tra danh sách ruleset sau:

sudo nft list ruleset

Bạn sẽ thấy sự xuất hiện của một table có tên là inet f2b-table chứa các set tương ứng với từng jail (ví dụ: @f2b-nginx-badbots). Khi một IP vi phạm quy tắc, Fail2ban sẽ ngay lập tức đẩy IP đó vào set này thông qua lệnh nguyên tử (atomic command) của Nftables.

Đánh giá hiệu năng thực tế

Sự khác biệt về mặt hiệu năng giữa cơ chế duyệt quy tắc tuyến tính của IPTables và cơ chế bảng băm của Nftables Set được thể hiện rõ ràng qua bảng so sánh dưới đây:

Tiêu chí so sánh IPTables (Truyền thống) Nftables + Set (Hiện đại)
Thuật toán tìm kiếm Duyệt tuyến tính (Linear Search - O(N)) Bảng băm (Hash Table Lookup - O(1))
Tốc độ xử lý với 1 triệu IP Chậm dần theo số lượng IP, gây nghẽn CPU Tốc độ không đổi, xử lý trong < 1 giây
Tiêu thụ tài nguyên RAM/CPU Tăng vọt khi bị tấn công dồn dập Cực kỳ thấp và ổn định
Hỗ trợ kiến trúc hiện đại Hạn chế, kiến trúc cũ, quản lý cồng kềnh Tích hợp sẵn trong Kernel Linux mới, cú pháp tối giản

Kết luận và khuyến nghị quản trị

Việc kết hợp Fail2ban với giải pháp cấu trúc Set trong Nftables không chỉ mang lại khả năng phản ứng nhanh trước các cuộc tấn công cào dữ liệu tự động, mà còn đảm bảo tính toàn vẹn và độ sẵn sàng cao cho tài nguyên máy chủ của doanh nghiệp. Đây là giải pháp bắt buộc phải có đối với các hệ thống Web lớn, các trang thương mại điện tử hoặc các API công cộng đang phải đối mặt với vấn nạn tốn băng thông và tài nguyên bởi các hệ thống Bots không mong muốn.

Lời khuyên từ chuyên gia: Hãy thường xuyên kiểm tra tệp cấu hình bộ lọc (filter) để cập nhật các biểu thức chính quy (Regex) nhận diện hành vi Bots mới nhất, đồng thời thiết lập thời gian cấm (bantime) lũy tiến đối với những IP cố tình tái phạm nhiều lần nhằm làm sạch hoàn toàn lưu lượng truy cập hệ thống của bạn.

Tối Ưu Hóa Bảo Mật: Cấu Hình Fail2ban Kết Hợp Set Trong Nftables Để Chặn Hàng Triệu IP Bots Cào Dữ Liệu Trong 1 Giây | DPTCloud