Cài đặt CrowdSec chống tấn công tự động cho VPS

Bạn vừa thuê VPS Linux mới, cài đặt xong SSH, Nginx, vài dịch vụ cơ bản. Chưa đầy 24 giờ sau, journalctl đã ghi nhận hàng trăm lượt đăng nhập SSH thất bại từ các IP lạ. Bạn có thể ngồi canh fail2ban cả ngày, hoặc cài một thứ thông minh hơn: CrowdSec. Công cụ này không chỉ chặn IP dựa trên log local, mà còn học từ cả cộng đồng để biết IP nào đang là mối đe dọa toàn cầu.
Yêu cầu trước khi bắt đầu
- Một VPS chạy Ubuntu 24.04 LTS hoặc AlmaLinux 9 (bài hướng dẫn dùng Ubuntu 24.04).
- User
sudonon-root (ví dụ useradmin). - Các dịch vụ cần bảo vệ đã chạy: SSH (port 22), web server (Nginx/Apache).
- Hiểu cơ bản về log server và tường lửa (nftables).
Nếu bạn chưa có VPS, có thể tham khảo dịch vụ thuê VPS Ubuntu 24.04 tại thueVPS với NVMe SSD, IPv4 Việt Nam, full root.
Vì sao CrowdSec thay thế Fail2ban?
Fail2ban hoạt động tốt nhưng có một giới hạn: nó chỉ nhìn vào log của chính máy bạn. Một IP đang quét 1000 server khác thì Fail2ban không biết để chặn từ đầu. CrowdSec giải quyết điều đó: mỗi lần phát hiện tấn công, nó gửi thông tin lên CrowdSec Central API, và ngay lập tức tất cả các máy trong mạng lưới (hàng trăm nghìn node) đều biết IP đó là độc hại. Về cơ bản, bạn có một mạng lưới tình báo đe dọa ngay trên VPS của mình.
Một điểm khác: CrowdSec dùng nftables (thay vì iptables) làm back-end cho việc chặn IP trên các distro hiện đại. Nếu bạn đã chuyển sang nftables (mặc định trên Ubuntu 22.04+), CrowdSec sẽ tích hợp mượt mà hơn hẳn Fail2ban phải dùng plugin cũ.
Bước 1 - Cài đặt CrowdSec Agent
CrowdSec gồm hai thành phần: Agent (thu thập log và phân tích) và LAPI (Local API, quản lý decision). Trên VPS đơn lẻ, bạn cài cả hai qua cùng một gói.
Thêm repo chính thức và cài đặt:
curl -s https://install.crowdsec.net | sudo bash
sudo apt install crowdsec -y
Sau khi cài, kiểm tra service đã chạy:
sudo systemctl status crowdsec
Output mong đợi: Active: active (running)
CrowdSec mặc định sẽ chạy với bộ collection cơ bản, tự động phát hiện log SSH. Bạn có thể kiểm tra các scenario (kịch bản phát hiện) đang hoạt động:
sudo cscli scenarios list
Bước 2 - Cấu hình CrowdSec cho dịch vụ web
Ngoài SSH, bạn cần bảo vệ web server (Nginx). CrowdSec sử dụng bouncer và collection để mở rộng khả năng phát hiện.
Cài collection cho Nginx:
sudo cscli collections install crowdsecurity/nginx
Collection này sẽ tự động tải các parser (bộ phân tích log Nginx), scenario phát hiện scan path, brute-force login, và DDoS layer 7.
Tiếp theo, cấu hình CrowdSec đọc log Nginx. Mở file cấu hình acquis:
sudo nano /etc/crowdsec/acquis.yaml
Thêm đoạn sau (nếu chưa có):
filenames:
- /var/log/nginx/access.log
- /var/log/nginx/error.log
labels:
type: nginx
Khởi động lại CrowdSec để nhận cấu hình mới:
sudo systemctl restart crowdsec
Verify CrowdSec đã đọc log Nginx:
sudo cscli metrics
Bạn sẽ thấy dòng nginx trong phần Parser, với số lượng dòng log đã xử lý tăng dần.
Bước 3 - Cài bouncer để tự động chặn IP
Phát hiện xong, CrowdSec cần một bouncer để thực thi chặn. Có nhiều loại bouncer: firewall (nftables/iptables), Cloudflare, Nginx (xóa IP khỏi upstream). Ở đây tôi dùng bouncher firewall mặc định là crowdsec-firewall-bouncer.
sudo apt install crowdsec-firewall-bouncer-nftables -y
Quá trình cài sẽ tự động tạo API key và kết nối với LAPI. Kiểm tra:
sudo systemctl status crowdsec-firewall-bouncer
Để kiểm tra bouncer đã chặn IP nào chưa:
sudo cscli decisions list
Nếu chưa có IP nào bị chặn, bạn có thể test bằng cách tự tấn công SSH sai nhiều lần, hoặc simulate:
sudo cscli decisions add --ip 1.2.3.4 --duration 2m
Sau đó kiểm tra bouncer đã apply rule vào nftables chưa:
sudo nft list ruleset | grep crowdsec
Bạn sẽ thấy chain crowdsec trong nftables với drop rule cho IP vừa thêm.
Bước 4 - Kích hoạt Blocklist cộng đồng
Đây là điểm mạnh nhất của CrowdSec: ngay cả khi chưa có kẻ tấn công nào ghé thăm VPS của bạn, CrowdSec đã có thể chặn sẵn các IP đã được cộng đồng báo cáo. Để kích hoạt:
sudo cscli hub update
sudo cscli collections install crowdsecurity/community-blocklist
Blocklist này được cập nhật mỗi 30 phút, tự động thêm IP mới vào danh sách chặn trong vòng 24 giờ. Kiểm tra số lượng IP đang bị chặn từ community:
sudo cscli decisions list -a | wc -l
Trên VPS thực tế, sau 1 giờ bật blocklist, tôi thấy thêm khoảng 15-30 IP bị chặn (tuỳ theo thời điểm và vị trí địa lý).
Xử lý lỗi thường gặp
Lỗi 1: CrowdSec không đọc được log
Triệu chứng: cscli metrics thấy parser không có dòng log nào. Nguyên nhân thường do sai quyền truy cập file log.
Cách khắc phục:
sudo chmod 644 /var/log/nginx/access.log
sudo tail -f /var/log/crowdsec/crowdsec.log
Kiểm tra log CrowdSec để thấy thông báo lỗi cụ thể.
Lỗi 2: Bouncer không chặn được
Nếu cscli decisions list có IP nhưng nft list ruleset không thấy, bouncer có thể chưa kết nối được LAPI:
sudo journalctl -u crowdsec-firewall-bouncer -n 20
sudo cscli bouncers list
Xóa bouncer cũ và cài lại với key mới nếu cần.
Lỗi 3: Quá nhiều false positive (IP bị chặn oan)
Một số CDN hoặc proxy ngược có thể bị chặn nhầm. Giải pháp: thêm IP vào whitelist:
sudo cscli decisions add --ip 1.2.3.4 --duration -1 # Chặn lâu dài (để test)
sudo cscli decisions delete --ip 1.2.3.4 # Xoá quyết định
# Whitelist thực tế: dùng file whitelist của scenario
Câu hỏi thường gặp
CrowdSec có thay thế hoàn toàn được Fail2ban không?
Có, về cơ bản CrowdSec làm được tất cả những gì Fail2ban làm: phát hiện brute-force SSH, web, mail. Thêm vào đó, nó có cộng đồng blocklist, khả năng scale tốt hơn và tích hợp nftables mượt hơn. Nếu bạn đang dùng Fail2ban, nên chuyển dần.
Cài CrowdSec có ảnh hưởng đến hiệu năng VPS không?
Rất ít. Bản thân agent sử dụng khoảng 30-50 MB RAM và CPU không đáng kể. Trên VPS 2GB RAM, bạn hoàn toàn có thể chạy CrowdSec cùng Nginx, PHP, MariaDB và một vài dịch vụ khác mà không thấy chậm.
CrowdSec có bảo vệ được DDoS layer 7 không?
Có, với scenario crowdsecurity/http-dos, CrowdSec có thể phát hiện và chặn IP gửi quá nhiều request trong thời gian ngắn. Tuy nhiên, nó không phải giải pháp chống DDoS chuyên nghiệp (VD: Cloudflare). Với DDoS nhỏ (vài trăm IP), CrowdSec xử lý tốt.
Có cần mở port gì cho CrowdSec không?
Mặc định CrowdSec LAPI chạy trên port 8080 (localhost). Bạn không cần mở port này ra ngoài nếu chỉ dùng local. Nếu muốn kết nối từ VPS khác (multi-node), cần mở trên firewall và cấu hình API key.
CrowdSec miễn phí hay có phí?
Phần core Agent, LAPI, và community blocklist hoàn toàn miễn phí và mã nguồn mở (MIT license). CrowdSec có bản thương mại với tính năng blocklist cao cấp hơn và hỗ trợ, nhưng bản free đã đủ dùng cho VPS cá nhân hoặc doanh nghiệp nhỏ.
Bài viết liên quan
- 10 cách tăng cường bảo mật VPS Linux chống tấn công 2026
- Cài đặt và cấu hình firewalld trên AlmaLinux 9 cho VPS
- Cấu hình Fail2ban chống brute-force SSH trên Ubuntu 24.04
- Cấu hình iptables cơ bản cho VPS Ubuntu 24.04


