Hướng Dẫn Tự Động Chặn Bot Quét Website Bằng CrowdSec Trên Windows Server
Mỗi ngày, các website vận hành trên nền tảng .NET và IIS phải hứng chịu hàng chục nghìn lượt rà quét tự động từ các botnet. Kẻ tấn công liên tục gửi request dò tìm file nhạy cảm như /.env, /wp-login.php, /actuator/health, hoặc khai thác lỗi SQL Injection và Path Traversal. Nếu chỉ chặn bằng code bên trong ứng dụng, máy chủ vẫn phải gánh tải xử lý HTTP và mở kết nối TCP, dễ dẫn đến nghẽn CPU trong các đợt càn quét lớn.
Giải pháp tối ưu và triệt để nhất là ngăn chặn từ tầng hệ điều hành thông qua CrowdSec kết hợp cùng Windows Firewall Bouncer. Khi phát hiện IP có hành vi quét bất thường, hệ thống sẽ tự động thêm IP đó vào danh sách đen của Windows Defender Firewall để ngắt kết nối ngay từ tầng mạng (Kernel level). Bài viết này ghi lại quy trình triển khai thực tế trên Windows Server và cách khắc phục lỗi tràn bộ nhớ RAM (lên tới hàng chục GB) thường gặp khi đọc log IIS.

1. Cơ chế hoạt động của CrowdSec trên Windows Server
CrowdSec hoạt động dựa trên mô hình tách biệt giữa bộ não phân tích và công cụ thực thi:
- CrowdSec Security Engine: Đóng vai trò dịch vụ nền (Windows Service), đọc liên tục các dòng log phát sinh từ IIS W3C log, Windows Event Log (RDP, SQL Server) theo thời gian thực.
- Kịch bản phát hiện (Scenarios): So khớp hành vi truy cập với các mẫu tấn công định sẵn (dò file nhạy cảm, brute force mật khẩu, quét lỗ hổng CVE).
- Windows Firewall Bouncer: Nhận lệnh từ Engine khi có vi phạm và tự động sinh rule chặn IP trực tiếp trong
Windows Defender Firewall with Advanced Security. - Cơ chế đồng thuận cộng đồng (Consensus CTI): Tự động tải về danh sách hàng chục nghìn IP độc hại đang hoạt động trên toàn cầu để ngăn chặn từ sớm.
2. Các bước cài đặt CrowdSec và Windows Firewall Bouncer
Bước 1: Cài đặt CrowdSec Security Engine
Mở PowerShell với quyền Administrator và tải bản cài đặt .msi chính thức từ Tài liệu chính thức của CrowdSec:
Invoke-WebRequest -Uri "https://github.com/crowdsecurity/crowdsec/releases/latest/download/crowdsec_installer_x64.msi" -OutFile "$env:TEMP\crowdsec.msi"
Start-Process msiexec.exe -ArgumentList "/i `"$env:TEMP\crowdsec.msi`" /qn /norestart" -WaitSau khi hoàn tất, kiểm tra trạng thái dịch vụ bằng lệnh Get-Service CrowdSec.
Bước 2: Cài đặt Windows Firewall Bouncer
Truy cập Kho mã nguồn CrowdSec Windows Firewall Bouncer và lưu ý chọn bản phát hành ổn định v0.0.5. Tránh sử dụng các bản dựng thử nghiệm đòi hỏi .NET runtime preview để đảm bảo an toàn cho môi trường máy chủ.
Invoke-WebRequest -Uri "https://github.com/crowdsecurity/cs-windows-firewall-bouncer/releases/download/v0.0.5/cs_windows_firewall_installer_bundle.exe" -OutFile "$env:TEMP\cs_windows_firewall_installer_bundle.exe"
Start-Process "$env:TEMP\cs_windows_firewall_installer_bundle.exe"Sau khi cài xong, kiểm tra liên kết giữa Bouncer và Engine bằng lệnh:
& "C:\Program Files\CrowdSec\cscli.exe" bouncers listNếu cột Valid xuất hiện dấu tích xanh thì Bouncer đã sẵn sàng can thiệp vào tường lửa hệ thống.
Bước 3: Thiết lập Whitelist IP quản trị viên
Để ngăn trường hợp chính quản trị viên chạy công cụ kiểm thử hoặc quét bảo mật bị server tự động khóa kết nối, hãy tạo file whitelist nội bộ tại đường dẫn C:\ProgramData\CrowdSec\config\parsers\s02-enrich\my-whitelist.yaml:
name: my/admin-whitelist
description: "Whitelist IP Admin tranh bi chan nham"
whitelist:
reason: "Admin kiem tra he thong"
ip:
- "123.45.67.89" # Thay bang IP tinh mang cua ban
cidr:
- "127.0.0.1/32"
- "192.168.1.0/24"3. Khai báo Log IIS và Các Kịch Bản Bảo Vệ Trọng Yếu
Mở file cấu hình khai báo log C:\ProgramData\CrowdSec\config\acquis.yaml và chỉ định đường dẫn lưu trữ log của các website IIS:
filenames:
- C:/inetpub/logs/LogFiles/W3SVC*/*.log
labels:
type: iis
use_time_machine: trueKích hoạt các kịch bản chuyên phát hiện hành vi dò quét website:
$cs = "C:\Program Files\CrowdSec\cscli.exe"
& $cs collections install crowdsecurity/iis
& $cs collections install crowdsecurity/http-cve
& $cs scenarios install crowdsecurity/http-path-traversal
& $cs scenarios install crowdsecurity/http-generic-bfĐồng thời, cấu hình IIS ghi log ngay lập tức mà không giữ trong bộ đệm bằng lệnh:
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter 'system.applicationHost/sites/siteDefaults/logFile' -name 'flushInterval' -value '00:00:01'4. Sự cố thực tế: Khắc phục lỗi CrowdSec chiếm dụng hàng chục GB RAM
Trong quá trình cài đặt trên hệ thống có sẵn, rất nhiều quản trị viên gặp tình trạng tiến trình crowdsec.exe nuốt trọn từ 20GB đến gần 50GB RAM chỉ sau vài phút khởi động. Nguyên nhân bắt nguồn từ hai yếu tố:
- Sốc dữ liệu log lịch sử: Khi mới cài đặt, CrowdSec chưa có mốc đánh dấu (position offset). Dấu sao
*.logkhiến nó quét toàn bộ file log cũ tích tụ từ nhiều tuần trước đó. Hàng triệu dòng log quá khứ bị đọc đồng thời trong vài giây. - Kịch bản
http-crawl-non_statics: Kịch bản này tạo một vùng nhớ (Leaky Bucket) cho từng IP truy cập tài nguyên động. Khi hàng trăm nghìn IP cũ được phân tích cùng lúc mà cơ chế xả nước không theo kịp thời gian thực, bộ nhớ heap của Go sẽ bùng nổ.
Quy trình xử lý dứt điểm:
- Bước 1: Mở Task Manager hoặc gõ
taskkill /F /IM crowdsec.exeđể hạ tiến trình ngay lập tức. - Bước 2: Vào thư mục log
C:\inetpub\logs\LogFiles\W3SVC*\, tạo thư mụcArchivevà di chuyển toàn bộ file log của những ngày trước vào đó. Tương tự như kỹ thuật chuyển thư mục dữ liệu trên Windows để tối ưu ổ đĩa, việc cô lập log cũ giúp hệ thống chỉ còn duy nhất file log của ngày hôm nay. - Bước 3: Gỡ bỏ kịch bản bắt bot cào dữ liệu không cần thiết bằng lệnh
& $cs scenarios remove crowdsecurity/http-crawl-non_statics --force. Các kịch bản chống quét CVE, dò thư mục nhạy cảm và Brute Force vẫn hoạt động độc lập và chỉ tiêu tốn dưới 150MB RAM. - Bước 4: Bổ sung tham số
use_time_machine: truevào fileacquis.yamlđể CrowdSec phân tích log theo đúng mốc thời gian thực tế ghi trong log. - Bước 5: Đặt giới hạn trần bộ nhớ cho Go runtime trên Windows bằng lệnh PowerShell:
[System.Environment]::SetEnvironmentVariable("GOMEMLIMIT", "1024MiB", "Machine").
5. Kiểm tra kết quả và vận hành hàng ngày
Sau khi hoàn tất cấu hình, khởi động lại dịch vụ và theo dõi danh sách IP đang bị ngăn chặn:
Restart-Service CrowdSec
Restart-Service cs-windows-firewall-bouncer
& "C:\Program Files\CrowdSec\cscli.exe" decisions listTrong Windows Defender Firewall with Advanced Security, bạn sẽ thấy các quy tắc mang tên CrowdSec_ tự động cập nhật danh sách IP bị chặn. Từ thời điểm này trở đi, CrowdSec sẽ ghi nhớ con trỏ đọc log và tự động xoay vòng mỗi ngày mà không xảy ra tình trạng phình RAM nữa.
Lời kết
Việc kết hợp CrowdSec và Windows Firewall Bouncer tạo nên một lớp lá chắn vững chắc cho website .NET trên môi trường IIS. Phương pháp chặn tại tầng tường lửa hệ điều hành vừa triệt tiêu gánh nặng tài nguyên cho Web Server, vừa phản ứng tức thời trước các đợt rà quét tự động của botnet.