Khi Fail2ban bắt đầu đuối sức trên hạ tầng Production
Khoảng 6 tháng trước, mình tiếp quản cụm 20 VPS Ubuntu chạy API gateway và Nginx reverse proxy. Hệ thống lúc đó chặn quét bằng Fail2ban. Vấn đề nảy sinh ngay lập tức: botnet xoay vòng hàng chục nghìn IP sạch. Mỗi IP chỉ gõ cửa 1-2 request rồi biến mất. Fail2ban hoàn toàn bất lực vì chưa kịp đủ ngưỡng (maxretry) để ban.
Hơn nữa, Fail2ban hoạt động cục bộ từng máy. Một IP vừa tấn công máy chủ A bị ban thì 2 giây sau nó vẫn ung dung quét máy chủ B. Chưa kể, worker regex bằng Python của Fail2ban liên tục ăn 35-40% CPU mỗi khi log Nginx cán mốc 15GB/ngày. Mình quyết định thay thế toàn bộ bằng CrowdSec. Từ đó đến nay, đây là gói bảo mật đầu tiên mình cài trên mọi cụm máy chủ mới.
Cơ chế hoạt động của CrowdSec có gì khác biệt?
CrowdSec giải quyết bài toán phát hiện và ngăn chặn theo mô hình phân tách rõ ràng gồm 3 phần:
- CrowdSec Security Engine (Agent): Viết bằng Golang, ăn chưa tới 60MB RAM. Engine chỉ parse log (Nginx, SSH, Syslog, Docker…) và đối chiếu với các scenario phát hiện tấn công qua cú pháp YAML.
- Remediation Components (Bouncers): Đây là bộ phận thực thi. Engine phát hiện và ra quyết định chặn, còn Bouncer đẩy rule vào
nftables,iptables, Nginx Lua hoặc trả về CAPTCHA cho người dùng. - Community Threat Intelligence (CTI): Điểm giá trị nhất. Khi server của bạn phát hiện một IP quét lỗ hổng WordPress, tín hiệu sẽ gửi về trung tâm phân tích ẩn danh. Nếu hàng nghìn server khác cũng ghi nhận cùng hành vi, IP đó lập tức vào Blocklist toàn cầu. Server của bạn tự động chặn trước khi kẻ tấn công kịp gửi request đầu tiên.
Thực hành cài đặt và cấu hình CrowdSec trên Ubuntu
Dưới đây là các bước triển khai thực tế trên Ubuntu 22.04 / 24.04 LTS.
Bước 1: Cài đặt CrowdSec Security Engine
Thêm repository chính thức của CrowdSec để luôn nhận bản cập nhật mới nhất:
# Tải script cấu hình APT repository
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash
# Cài đặt CrowdSec engine
sudo apt install -y crowdsec
# Kiểm tra trạng thái service
sudo systemctl status crowdsec
Sau khi khởi chạy, CrowdSec tự động dò tìm log hệ thống tại /var/log/auth.log và kích hoạt sẵn các parser cơ bản cho Linux và SSH.
Bước 2: Cài đặt Firewall Bouncer để thực thi chặn IP
Engine chỉ phân tích chứ không tự chặn traffic. Bạn cần cài thêm Bouncer ở tầng firewall (hỗ trợ cả iptables lẫn nftables):
# Cài đặt firewall bouncer
sudo apt install -y crowdsec-firewall-bouncer-iptables
# Xác minh bouncer đã đăng ký với Local API (LAPI)
sudo cscli bouncers list
Nếu cài đặt chuẩn, bảng thông tin sau sẽ xuất hiện:
------------------------------------------------------------------------------------------------------------------------
NAME IP ADDRESS VALID LAST API PULL TYPE VERSION
------------------------------------------------------------------------------------------------------------------------
firewall_bouncer-1696238491 127.0.0.1 ✔ 2024-03-20T10:15:30Z crowdsec-firewall-bouncer v0.0.28
------------------------------------------------------------------------------------------------------------------------
Bước 3: Cấu hình bảo vệ Web Server Nginx
Với web server, hãy cài thêm collection Nginx để nhận diện tấn công SQLi, Path Traversal, bot scan và CVE phổ biến:
# Cài đặt collection Nginx từ CrowdSec Hub
sudo cscli collections install crowdsecurity/nginx
# Mở file cấu hình nguồn log
sudo nano /etc/crowdsec/acquis.yaml
Kiểm tra và chắc chắn CrowdSec đang đọc đúng đường dẫn access log:
filenames:
- /var/log/nginx/*.log
labels:
type: nginx
---
Khởi động lại engine để áp dụng rule mới:
sudo systemctl restart crowdsec
Bước 4: Kết nối CrowdSec Console để quản lý tập trung
Quản trị từ 2 server trở lên rất cần một dashboard tổng quan. Bạn nên tận dụng giao diện web miễn phí của CrowdSec Console:
# Đăng ký tài khoản tại app.crowdsec.net, lấy mã enroll key và chạy:
sudo cscli console enroll <YOUR_ENROLL_KEY>
# Reload lại service
sudo systemctl restart crowdsec
Bước 5: Thử nghiệm và các lệnh vận hành thường dùng
Bạn có thể kiểm tra danh sách blocklist hoặc chủ động thao tác chặn IP bằng lệnh cscli:
# Xem danh sách các cảnh báo tấn công gần nhất
sudo cscli alerts list
# Kiểm tra toàn bộ quyết định chặn đang có hiệu lực
sudo cscli decisions list
# Chặn thủ công một IP nghi vấn trong 4 giờ
sudo cscli decisions add --ip 198.51.100.42 --duration 4h --reason "manual block malicious bot"
# Mở khóa ngay lập tức nếu chặn nhầm IP dev/khách hàng
sudo cscli decisions delete --ip 198.51.100.42
# Xem thống kê log đã parse và rule đã match
sudo cscli metrics
Tổng kết
Chuyển từ Fail2ban sang CrowdSec giúp hệ thống chuyển từ thế bị động sang chủ động. Thay vì đợi hacker thử sai mật khẩu hàng chục lần, máy chủ đã có sẵn danh sách hàng triệu IP xấu do cộng đồng toàn cầu đóng góp. Tải CPU nhẹ hơn rõ rệt. Lượng log rác giảm hẳn. Việc theo dõi tập trung qua CLI và Web Console cũng giúp đội vận hành tiết kiệm hàng giờ debug mỗi tuần.

