Quick start: Triển khai CrowdSec và Firewalld bouncer trong 5 phút
Chỉ cần mở cổng SSH 22 ra Internet, mỗi ngày một con VPS cỏ cũng hứng chịu 3.000 đến 5.000 lượt dò mật khẩu tự động. Fail2ban từng là công cụ quen thuộc suốt nhiều năm. Dù vậy, cơ chế đọc log regex đơn luồng của nó đã bộc lộ rõ hạn chế hiệu năng. CrowdSec giải quyết triệt để vấn đề này: vừa phát hiện tấn công cục bộ, vừa chủ động chặn trước hàng chục nghìn IP xấu được cộng đồng chia sẻ.
Các bước triển khai nhanh trên Fedora Server (yêu cầu quyền root hoặc sudo):
Bước 1: Thêm official repository của CrowdSec
# Cài đặt script cấu hình repo chính thức từ PackageCloud
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.rpm.sh | sudo bash
Bước 2: Cài đặt Security Engine và Firewall Bouncer
# Cài đặt engine phân tích và thành phần tương tác firewall
sudo dnf install -y crowdsec crowdsec-firewall-bouncer-iptables
Bước 3: Khởi chạy và kích hoạt service cùng hệ thống
# Khởi chạy CrowdSec daemon
sudo systemctl enable --now crowdsec
# Khởi chạy Firewall Bouncer
sudo systemctl enable --now crowdsec-firewall-bouncer
Bước 4: Xác thực kết nối
# Xem danh sách IP đang bị chặn
sudo cscli decisions list
# Kiểm tra bouncer đã liên kết thành công với engine chưa
sudo cscli bouncers list
Khi cột Valid trả về true, hệ thống đã bắt đầu phân tích log và sẵn sàng đẩy IP vi phạm vào firewalld.
Kiến trúc vận hành: Bóc tách Engine và Bouncer
Fedora Server mặc định dùng firewalld với backend nftables. Trước đây, nhiều anh em cài fail2ban trên Fedora thường bị xung đột tập luật hoặc làm phình chuỗi iptables tuyến tính. CrowdSec xử lý mượt mà hơn nhờ kiến trúc module hóa hoàn toàn.
1. Cơ chế phối hợp giữa Engine và Bouncer
Thay vì gộp việc phân tích log và chặn mạng vào một tiến trình nặng nề, CrowdSec chia việc cho hai bên:
- CrowdSec Engine: Chuyên đọc và mổ xẻ log. Tiến trình này chạy nền, tiêu tốn chỉ khoảng 60–80MB RAM. Nó parse trực tiếp log từ
journald, Nginx hay SSH qua các scenario định sẵn. Thấy client gõ sai pass 5 lần trong 10 giây? Engine lập tức sinh ra một Decision (lệnh trừng phạt) kèm thời gian ban, thường là 4 giờ. - Firewall Bouncer: Chuyên thi hành lệnh. Bouncer định kỳ hỏi Engine qua Local API trên cổng
8080(chỉ mở cho localhost). Khi có lệnh mới, nó nạp ngay IP vi phạm vào danh sách chặn củafirewalld. Quá trình này diễn ra tức thì, không cần khởi động lại tường lửa hay làm ngắt quãng phiên kết nối hiện có.
2. Mạng lưới cảnh báo sớm (Crowd-sourced Intelligence)
Đây là lợi thế lớn nhất của CrowdSec so với Fail2ban truyền thống. Giả sử một botnet vừa quét lỗ hổng một máy chủ Fedora đặt tại Frankfurt. Địa chỉ IP đó lập tức được gửi về trung tâm CrowdSec, xác thực thuật toán để lọc tín hiệu rác. Chỉ sau vài phút, máy chủ của bạn nhận được cập nhật danh sách đen này. Kẻ tấn công vừa chạm tới mép mạng là bị drop gói tin ngay lập tức, chưa kịp chạm vào tiến trình SSH hay Nginx.
Cấu hình tối ưu cho môi trường Production
1. Tinh chỉnh Bouncer tận dụng ipset của firewalld
Mở file cấu hình của bouncer:
sudo nano /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
Xác nhận các thông số đã đặt đúng chế độ firewalld:
mode: firewalld
blacklists_ipv4: crowdsec-blacklists
blacklists_ipv6: crowdsec6-blacklists
supported_actions:
- ban
Ở chế độ này, bouncer sẽ tạo một ipset mang tên crowdsec-blacklists gán trực tiếp vào zone hiện tại. Nhờ cơ chế hash table với tốc độ tra cứu O(1), bảng chặn có chứa tới 50.000 IP thì CPU máy chủ vẫn nhàn rỗi, không hề bị rớt throughput mạng.
Khởi động lại bouncer để áp dụng thay đổi:
sudo systemctl restart crowdsec-firewall-bouncer
2. Bật scenario bảo vệ Nginx và quét mã độc web
Mặc định sau cài đặt, CrowdSec chỉ mới phân tích log SSH. Nếu server có chạy thêm Nginx hoặc reverse proxy, hãy bổ sung các kịch bản tương ứng từ CrowdSec Hub:
# Bắt các hành vi dò đường dẫn nhạy cảm và tấn công web Nginx
sudo cscli collections install crowdsecurity/nginx
# Chặn các công cụ quét tự động như SQLmap, Nikto
sudo cscli collections install crowdsecurity/http-cve
# Nạp lại cấu hình cho engine
sudo systemctl reload crowdsec
3. Quản lý tập trung qua CrowdSec Console
Khi bạn phải quản lý từ 3 node Fedora trở lên, theo dõi từng server qua terminal rất mất thời gian. Đăng ký một tài khoản miễn phí tại app.crowdsec.net để gom toàn bộ alert về dashboard trực quan:
# Gắn node vào dashboard bằng token từ web console
sudo cscli console enroll <YOUR_ENROLL_KEY>
# Restart engine để kích hoạt đồng bộ
sudo systemctl restart crowdsec
Kinh nghiệm thực chiến khi vận hành
1. Cấu hình Whitelist để không tự khóa chính mình
Tình huống dở khóc dở cười nhất: mở 4 tab SSH cùng lúc bằng script hoặc nhập sai private key khiến chính bạn bị ban mất nửa ngày. Hãy thêm IP tĩnh văn phòng hoặc subnet VPN vào whitelist trước:
sudo nano /etc/crowdsec/parsers/s02-enrich/my-whitelist.yaml
Điền nội dung:
name: my/admin-whitelist
description: "Whitelist IP quan tri vien"
filter: "true"
whitelist:
reason: "IP co dinh cua Admin"
ip:
- "123.45.67.89" # IP tinh cua ban
cidr:
- "192.168.1.0/24" # Dai mang noi bo
- "10.8.0.0/24" # Subnet WireGuard hoac OpenVPN
Nạp lại engine để cập nhật danh sách an toàn:
sudo systemctl reload crowdsec
2. Gỡ ban IP nhanh khi đồng nghiệp bị chặn nhầm
Nếu người trong team nhập sai mật khẩu dẫn đến bị block, bạn có thể giải phóng IP ngay lập tức:
# Go ban cho mot IP cu the
sudo cscli decisions delete --ip 198.51.100.25
# Truong hop khan cap: xoa toan bo danh sach ban hien tai
sudo cscli decisions delete --all
3. Đọc dữ liệu vận hành bằng cscli metrics
Đừng đoán mò xem hệ thống có đang bắt trúng log hay không. Hãy chạy lệnh:
sudo cscli metrics
Màn hình terminal sẽ xuất bảng thống kê chi tiết: số dòng log đã đọc, bao nhiêu sự kiện parse thành công, và scenario nào bị kích hoạt nhiều nhất trong 24 giờ qua. Đây là căn cứ chuẩn xác nhất để bạn tinh chỉnh threshold mà không cần lục tìm từng dòng log thô.
