Cài đặt và cấu hình CrowdSec trên Ubuntu: Giải pháp bảo vệ server cộng đồng thế hệ mới

Security tutorial - IT technology blog
Security tutorial - IT technology blog

Giới thiệu vấn đề: Vì sao server của bạn cần thêm một lớp bảo vệ?

Khi quản lý các server công khai trên Internet, việc đảm bảo an ninh mạng luôn là ưu tiên số một. Sau khi kiểm tra bảo mật cho hơn 10 server khác nhau, mình nhận thấy hầu hết đều có chung những lỗ hổng cơ bản. Một trong số đó là việc thiếu đi một lớp bảo vệ chủ động, đủ mạnh mẽ để chống lại các cuộc tấn công tự động và có quy mô lớn.

Các giải pháp truyền thống như firewall hệ điều hành (UFW, iptables) hiệu quả ở lớp mạng, giúp ngăn chặn truy cập trái phép vào các cổng cụ thể. Tuy nhiên, chúng khó đối phó với những cuộc tấn công tinh vi hơn ở lớp ứng dụng, chẳng hạn như brute-force SSH, dò quét lỗ hổng web, hay tấn công từ chối dịch vụ (DDoS) lớp 7.

Các công cụ như Fail2Ban đã làm khá tốt nhiệm vụ chống brute-force cục bộ, nhưng chúng chỉ dựa trên các luật tĩnh và hoạt động độc lập trên từng server. Trong bối cảnh botnet ngày càng tinh vi và quy mô lớn, một giải pháp bảo vệ cục bộ thôi chưa đủ. Thay vào đó, chúng ta cần một hệ thống có thể ‘học’ từ các mối đe dọa toàn cầu. Hệ thống này phải chủ động phát hiện hành vi bất thường và phối hợp chặn đứng chúng trên diện rộng. Đó chính là lúc CrowdSec trở thành một giải pháp đáng cân nhắc.

Khái niệm cốt lõi: CrowdSec hoạt động như thế nào?

CrowdSec là gì?

CrowdSec là một Hệ thống Ngăn chặn Xâm nhập (Intrusion Prevention System – IPS) mã nguồn mở, được thiết kế để phát hiện và phản ứng lại các cuộc tấn công mạng dựa trên hành vi. Điểm đặc biệt của CrowdSec nằm ở tính “cộng đồng”: nó thu thập dữ liệu về các IP tấn công từ hàng triệu agent trên khắp thế giới, sau đó chia sẻ thông tin này để bảo vệ tất cả các thành viên trong mạng lưới.

Cơ chế hoạt động của CrowdSec

Để hiểu rõ hơn, mình sẽ phác thảo cơ chế hoạt động của CrowdSec qua các thành phần chính:

  • Agent: Đây là phần mềm chạy trên server của bạn. Nhiệm vụ của nó là theo dõi và thu thập các tệp log từ hệ thống và ứng dụng (ví dụ: log của SSH, Nginx, Apache, Redis, MySQL…).
  • Parsers: Agent sẽ sử dụng các parser để phân tích các dòng log thô thành các sự kiện có cấu trúc và dễ hiểu hơn. Ví dụ, một dòng log về SSH đăng nhập thất bại sẽ được parser chuyển thành một sự kiện chứa thông tin về IP nguồn, thời gian, và loại lỗi.
  • Scenarios: Đây là các bộ luật định nghĩa hành vi tấn công. Ví dụ, một scenario có thể quy định rằng “nếu có 10 sự kiện đăng nhập SSH thất bại từ cùng một IP trong vòng 5 phút, đó là một cuộc tấn công brute-force”. Khi các sự kiện được parser xử lý khớp với một scenario, CrowdSec sẽ tạo ra một cảnh báo (alert).
  • Decisions: Dựa trên các cảnh báo, CrowdSec đưa ra các quyết định về cách xử lý IP tấn công. Quyết định phổ biến nhất là “chặn IP này trong một khoảng thời gian nhất định”, ví dụ 4 giờ.
  • Bouncers: Là các module chịu trách nhiệm thi hành các quyết định của CrowdSec. Ví dụ, crowdsec-firewall-bouncer sẽ thêm luật vào firewall của hệ điều hành (như iptables hoặc nftables) để chặn IP đó. Các bouncer khác có thể tích hợp với Cloudflare, Nginx, hoặc các hệ thống khác để chặn ở nhiều cấp độ.
  • CrowdSec Security Engine (Community Blocklist): Đây là trái tim của hệ thống cộng đồng. Khi một agent phát hiện và chặn một IP tấn công, thông tin về IP đó (đã được ẩn danh hóa và kiểm duyệt) có thể được chia sẻ lên cơ sở dữ liệu của CrowdSec. Sau đó, các agent khác có thể tải về danh sách các IP độc hại này để chủ động chặn chúng, ngay cả khi chúng chưa từng tấn công server của họ. Mình đặc biệt đánh giá cao tính năng này. Nó giúp tạo ra một mạng lưới phòng thủ chung, nơi mỗi server đều đóng góp và nhận được sự bảo vệ từ cộng đồng.

So sánh với Fail2Ban và các giải pháp khác

Như mình đã đề cập, Fail2Ban là một công cụ tốt cho việc chặn brute-force cục bộ. Nhưng so với CrowdSec, nó có những hạn chế:

  • Phạm vi phát hiện: Fail2Ban chỉ tập trung vào các dịch vụ cục bộ. CrowdSec có thể theo dõi và phản ứng với một dải rộng hơn các kiểu tấn công trên nhiều ứng dụng.
  • Tính cộng đồng: Fail2Ban hoàn toàn cục bộ, không có khả năng chia sẻ thông tin về các IP tấn công với các server khác. CrowdSec, với Community Blocklist, giúp bạn tự động bảo vệ khỏi các mối đe dọa đã được phát hiện ở nơi khác.
  • Tính năng: CrowdSec có CLI (cscli) mạnh mẽ để quản lý các thành phần, xem metrics, cảnh báo, và quyết định một cách tập trung.
  • Mở rộng: CrowdSec dễ dàng mở rộng với các bouncer khác nhau để chặn ở nhiều lớp, không chỉ giới hạn ở firewall hệ điều hành.

Tóm lại, nếu Fail2Ban giống như một người gác cổng cá nhân, thì CrowdSec là một mạng lưới phòng thủ quy mô lớn. Hệ thống này có tổ chức chặt chẽ và chủ động hơn nhiều trong việc bảo vệ server.

Thực hành chi tiết: Cài đặt và cấu hình CrowdSec trên Ubuntu

Bây giờ, chúng ta sẽ bắt tay vào cài đặt và cấu hình CrowdSec trên server Ubuntu của bạn. Mình sẽ hướng dẫn từng bước một.

Bước 1: Chuẩn bị hệ thống

Trước tiên, hãy cập nhật hệ thống để đảm bảo các gói phần mềm và mọi phụ thuộc đều ở phiên bản mới nhất.


sudo apt update
sudo apt upgrade -y

Bước 2: Cài đặt CrowdSec

CrowdSec có repository riêng, giúp việc cài đặt và cập nhật dễ dàng hơn.

Đầu tiên, thêm repository của CrowdSec:


curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash

Tiếp theo, cài đặt CrowdSec agent và crowdsec-firewall-bouncer-iptables. Bouncer này sẽ tự động tích hợp với firewall iptables của bạn để chặn các IP độc hại.


sudo apt install crowdsec crowdsec-firewall-bouncer-iptables -y

Sau khi cài đặt xong, xác minh trạng thái của các dịch vụ để đảm bảo chúng đang chạy bình thường:


sudo systemctl status crowdsec
sudo systemctl status crowdsec-firewall-bouncer

Bạn sẽ thấy cả hai dịch vụ đều có trạng thái active (running).

Bước 3: Cấu hình cơ bản và khám phá với cscli

cscli (CrowdSec Command Line Interface) là công cụ chính để tương tác với CrowdSec. Mình sẽ giới thiệu một số lệnh cơ bản.

Sử dụng cscli

  • Kiểm tra metrics: Để xem thông tin tổng quan về hiệu suất và số lượng sự kiện/quyết định.

sudo cscli metrics
  • Xem danh sách các quyết định (Decisions): Đây là danh sách các IP hiện đang bị CrowdSec chặn.

sudo cscli decisions list
  • Xem danh sách các Scenario: Các luật phát hiện tấn công mà CrowdSec đang sử dụng.

sudo cscli scenarios list
  • Xem danh sách các Parsers: Các bộ phân tích log.

sudo cscli parsers list
  • Xem danh sách các Collections: Một collection là tập hợp các parsers và scenarios được cấu hình sẵn cho một dịch vụ cụ thể (ví dụ: SSH, Nginx).

sudo cscli collections list

Kích hoạt collection cho dịch vụ

Mặc định, CrowdSec sẽ theo dõi SSH. Để CrowdSec hoạt động hiệu quả với các dịch vụ khác trên server của bạn, bạn cần cài đặt các collection tương ứng.

Ví dụ với SSH: Collection crowdsecurity/ssh-auth thường đã được cài đặt mặc định khi bạn cài crowdsec. Nếu không, bạn có thể cài nó:


sudo cscli collections install crowdsecurity/ssh-auth
sudo systemctl restart crowdsec

Ví dụ với Nginx (nếu server của bạn có Nginx):


sudo cscli collections install crowdsecurity/nginx
sudo systemctl restart crowdsec

Tương tự, nếu bạn dùng Apache, có collection crowdsecurity/apache2. Bạn có thể tìm kiếm các collection khác bằng lệnh cscli collections list -a.

Kiểm tra hoạt động của CrowdSec

Để xem CrowdSec hoạt động như thế nào, bạn có thể thử mô phỏng một cuộc tấn công SSH brute-force đơn giản từ một máy tính khác (hoặc một terminal khác) không phải server của bạn.

Từ một máy khác, cố gắng đăng nhập SSH vào server của bạn với mật khẩu sai nhiều lần. Ví dụ, 5-10 lần:


ssh user@your_server_ip
# Nhập mật khẩu sai nhiều lần

Sau vài lần thử sai, quay lại terminal của server và kiểm tra các alert và decisions:


sudo cscli alerts list
sudo cscli decisions list

Bạn sẽ thấy các alert về việc đăng nhập SSH thất bại và sau đó là một decision để chặn IP nguồn của máy tấn công. Nếu bạn thử SSH lại từ máy đó, bạn sẽ không thể kết nối được nữa.

Để xem luật chặn đã được thêm vào iptables như thế nào, bạn có thể dùng lệnh:


sudo iptables -L -n | grep crowdsec

Bạn sẽ thấy một chain có tên crowdsec-blacklists và các luật chặn IP được thêm vào đó.

Bước 4: Tận dụng Community Blocklist

Để thực sự hưởng lợi từ sức mạnh cộng đồng của CrowdSec, bạn nên đăng ký server của mình vào CrowdSec Central API.

Khi đăng ký, server của bạn sẽ đóng góp các IP tấn công đã phát hiện (được kiểm duyệt và ẩn danh) cho CrowdSec. Đổi lại, bạn sẽ nhận được danh sách các IP độc hại từ hàng triệu agent khác trên toàn thế giới.

Để đăng ký, bạn cần tạo một tài khoản miễn phí trên app.crowdsec.net. Sau đó, bạn sẽ nhận được một enrollment key để kết nối agent của mình:


sudo cscli console enroll [YOUR_ENROLL_KEY]

Việc này không bắt buộc nhưng mình rất khuyến khích vì nó sẽ nâng cao đáng kể khả năng phòng thủ của server bạn.

Bước 5: Một số lệnh cscli hữu ích khác

  • Xóa tất cả quyết định chặn: Nếu bạn vô tình chặn một IP hợp lệ (hoặc IP của chính bạn) và muốn mở chặn ngay lập tức.

sudo cscli decisions delete --all
  • Liệt kê các máy (agents) đã đăng ký: Hữu ích nếu bạn quản lý nhiều server.

sudo cscli machines list
  • Liệt kê các bouncers đã cài đặt:

sudo cscli bouncers list

Kết luận: Bảo vệ server hiệu quả hơn với CrowdSec

Đến đây, bạn đã hoàn thành việc cài đặt và cấu hình CrowdSec trên server Ubuntu của mình. Việc này mang lại một lớp bảo mật chủ động và mạnh mẽ, giúp server của bạn chống lại các cuộc tấn công tự động như brute-force hay dò quét.

Với cách tiếp cận dựa trên cộng đồng, CrowdSec không chỉ bảo vệ server cá nhân của bạn. Nó còn đóng góp vào việc xây dựng một không gian mạng an toàn hơn cho tất cả người dùng Internet.

Việc bảo mật là một quá trình liên tục, không phải là một giải pháp “cài đặt một lần rồi quên”. Tuy nhiên, tích hợp CrowdSec vào chiến lược phòng thủ sẽ giúp bạn giảm thiểu đáng kể rủi ro từ các mối đe dọa phổ biến. Hãy tiếp tục theo dõi hiệu suất của nó và khám phá thêm các tính năng nâng cao khác của CrowdSec để tối ưu hóa khả năng bảo vệ cho hạ tầng của bạn.

Share: