Hướng Dẫn Tự Động Chặn Bot Quét Website Bằng CrowdSec Trên Windows Server

dung17 tháng 9, 20267 phút đọc1 lượt xem

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.

Tự động chặn bot quét website bằng CrowdSec trên Windows Server
Hệ thống phòng thủ CrowdSec tự động giám sát và khóa IP scanner tại Windows Firewall

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" -Wait

Sau 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 list

Nế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: true

Kí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ố:

  1. 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 *.log khiế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.
  2. 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ục Archive và 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: true vào file acquis.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 list

Trong 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.

Chia sẻ:

Đánh giá bài viết này

5.0 / 5 (1 đánh giá)