CrowdSec trên Linux: Vượt xa Fail2Ban với bảo mật dựa trên sức mạnh cộng đồng

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

Bảo mật máy chủ với CrowdSec

Vài năm trước, tôi thức dậy và phát hiện một VPS đã ghi nhận hơn 40.000 lần thử đăng nhập SSH thất bại chỉ trong một đêm. Trong hơn một thập kỷ qua, Fail2Ban là giải pháp tiêu chuẩn cho vấn đề này. Nó theo dõi log, xác định kẻ tấn công và thực thi lệnh chặn. Tuy nhiên, các công cụ truyền thống thường hoạt động riêng lẻ. Nếu máy chủ của tôi bị tấn công dồn dập bởi một botnet ở Frankfurt, máy chủ của bạn ở Singapore sẽ không hề hay biết cho đến khi nó trở thành mục tiêu tiếp theo. Sự cô lập này chính là điều mà CrowdSec khắc phục.

CrowdSec là một Hệ thống Phát hiện Xâm nhập (IDS) và Ngăn chặn Xâm nhập (IPS) hiện đại được xây dựng cho kỷ nguyên đám mây. Nó sử dụng phương pháp tiếp cận cộng tác. Khi instance của bạn phát hiện một cuộc tấn công, nó sẽ chia sẻ siêu dữ liệu (metadata) với một API trung tâm. Nếu một địa chỉ IP cụ thể bị gắn cờ bởi sự đồng thuận của các thành viên cộng đồng—thường là hàng ngàn báo cáo riêng biệt—nó sẽ được đưa vào danh sách chặn toàn cầu. Bạn không chỉ đang bảo vệ một cỗ máy đơn lẻ. Bạn là một phần của mạng lưới giám sát khu phố toàn cầu giúp bảo vệ hàng triệu điểm cuối.

Bắt đầu nhanh: Bảo mật từ con số 0 trong chưa đầy 5 phút

Tôi đánh giá cao các công cụ không yêu cầu hàng giờ cấu hình YAML chỉ để hoạt động. CrowdSec được đóng gói cho tất cả các bản phân phối lớn, bao gồm Debian, Ubuntu, RHEL và Rocky Linux. Chúng ta sẽ sử dụng ví dụ trên Ubuntu ở đây, vì đây là điểm khởi đầu phổ biến nhất cho hầu hết quản trị viên hệ thống.

1. Thêm Repository

Bắt đầu bằng cách tải script cài đặt chính thức. Script này tự động xử lý các GPG key và thiết lập repository để trình quản lý gói của bạn luôn sạch sẽ.

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

2. Cài đặt Security Engine

Engine là “bộ não” của quá trình vận hành. Nó giám sát log và phát hiện các mối đe dọa nhưng chưa thực sự chặn lưu lượng truy cập. Hãy coi nó như một camera an ninh chưa có ổ khóa trên cửa.

sudo apt install crowdsec

3. Xác minh cài đặt

Trong quá trình cài đặt, CrowdSec tự động nhận diện hệ thống của bạn. Nó phát hiện các dịch vụ như SSH, Nginx hoặc MariaDB và cài đặt các logic phát hiện cần thiết. Kiểm tra trạng thái bằng công cụ cscli:

sudo cscli status

Kết quả trả về sẽ xác nhận API cục bộ đang hoạt động. Nếu bạn chạy lệnh sudo cscli hub list, bạn sẽ thấy danh sách các cấu hình được cài đặt sẵn cho các dịch vụ như sshd. Không cần phải tự viết regex thủ công.

Tìm hiểu sâu: Pipeline hoạt động như thế nào

Để tận dụng tối đa CrowdSec, bạn nên hình dung nó như một pipeline gồm ba giai đoạn: Quan sát (Observe), Quyết định (Decide) và Hành động (Act). Đây là một quy trình làm việc đơn giản nhưng hiệu quả để xử lý các tín hiệu gây nhiễu.

Parsers: Đôi mắt

Log rất lộn xộn. Nhiệm vụ của một parser là chuyển văn bản thô thành dữ liệu có cấu trúc. Nó xác định rằng một dòng cụ thể trong /var/log/auth.log đại diện cho một lần đăng nhập thất bại từ IP 1.2.3.4 vào lúc 10 giờ tối. Không có parser, hệ thống về cơ bản sẽ mù quáng trước những gì ứng dụng của bạn đang làm.

Scenarios: Bộ não

Scenarios áp dụng logic for dữ liệu có cấu trúc. Chúng thường sử dụng thuật toán “Thùng rò rỉ” (Leaky Bucket). Hãy tưởng tượng một chiếc thùng đại diện cho một IP duy nhất. Mỗi lần đăng nhập thất bại sẽ thêm một giọt nước. Nếu IP đó thất bại 5 lần trong 30 giây, thùng sẽ tràn. Điều này kích hoạt một “tín hiệu” rằng IP đó là độc hại.

Bouncers: Sự thực thi

Theo mặc định, CrowdSec chỉ đưa ra cảnh báo. Để chặn cuộc tấn công, bạn cần một **Bouncer**. Đây là các plugin nhẹ thực hiện lệnh cấm (ban). Chúng giao tiếp trực tiếp với firewall (nftables/iptables), web server (Nginx/Apache) hoặc thậm chí là Cloudflare. Sự tách biệt này đảm bảo security engine không bao giờ làm chậm lưu lượng mạng của bạn.

Sử dụng nâng cao: Chuyển đổi phát hiện thành bảo vệ

Một công cụ bảo mật chỉ gửi cảnh báo trong khi CPU của bạn tăng vọt do tấn công brute-force sẽ không giúp ích gì vào lúc 3 giờ sáng. Chúng ta cần tự động hóa việc phòng thủ bằng cách cài đặt một bouncer.

Cài đặt Firewall Bouncer

Đây là thiết lập phổ biến nhất. Nó thu hẹp khoảng cách giữa CrowdSec và firewall Linux của bạn. Nếu engine gắn cờ một IP, bouncer sẽ chặn lưu lượng đó ở cấp độ mạng trước khi nó kịp tiếp cận ứng dụng của bạn.

sudo apt install crowdsec-firewall-bouncer-iptables

Xác nhận kết nối giữa engine và bouncer đang hoạt động:

sudo cscli bouncers list

CrowdSec Console

Giao diện dòng lệnh (CLI) rất mạnh mẽ, nhưng dữ liệu trực quan sẽ tốt hơn cho các xu hướng dài hạn. CrowdSec cung cấp một web console miễn phí nơi bạn có thể liên kết các máy chủ của mình. Nó cung cấp bản đồ toàn cầu về các cuộc tấn công và cho phép bạn quản lý nhiều instance từ một bảng điều khiển duy nhất. Đăng ký máy chủ của bạn bằng một lệnh duy nhất:

sudo cscli console enroll <YOUR_ENROLL_KEY>

Giám sát các ứng dụng tùy chỉnh

Nếu bạn chạy một công cụ nội bộ tùy chỉnh, bạn có thể hướng CrowdSec đến log của nó bằng cách chỉnh sửa /etc/crowdsec/acquis.yaml. Đối với một ứng dụng ghi log vào /var/log/custom-app.log, hãy thêm đoạn mã này:

filenames:
  - /var/log/custom-app.log
labels:
  type: custom_app_logs

Sau đó, bạn có thể tìm hoặc viết một parser cho custom_app_logs để bắt đầu phát hiện các mối đe dọa đặc thù.

Mẹo chuyên nghiệp để bảo trì hệ thống thực tế

Các hệ thống bảo mật không nên theo kiểu “thiết lập rồi quên luôn”, nhưng chúng cũng không nên là một công việc toàn thời gian. Dưới đây là ba điều tôi thực hiện trên mọi node chạy thực tế.

  • Whitelist IP quản trị của bạn: Đừng tự chặn chính mình. Điều đó rất khó chịu và hoàn toàn có thể tránh được. Hãy thêm IP văn phòng hoặc dải VPN của bạn vào /etc/crowdsec/parsers/s02-enrich/whitelists.yaml ngay lập tức.
  • Tự động cập nhật Hub: Các mô hình tấn công thay đổi hàng tuần. Hãy giữ cho các kịch bản phát hiện luôn nhạy bén bằng cách chạy lệnh sudo cscli hub update && sudo cscli hub upgrade thông qua một cron job hàng tuần.
  • Kiểm tra các lệnh chặn: Sử dụng sudo cscli decisions list để xem ai hiện đang bị chặn. Nếu bạn phát hiện một trường hợp nhầm lẫn (false positive), hãy xóa nó ngay lập tức bằng lệnh sudo cscli decisions delete --ip 1.2.3.4.

CrowdSec đại diện cho một sự thay đổi lớn trong cách chúng ta thực hiện server hardening. Thay vì mỗi quản trị viên hệ thống phải chiến đấu trong một cuộc chiến thầm lặng, chúng ta có thể tập hợp dữ liệu để biến internet thành một nơi khắc nghiệt đối với botnet. Nếu bạn đang khởi tạo một instance Linux mới hôm nay, đây nên là một trong ba công cụ đầu tiên bạn cài đặt.

Share: