Saturday, January 18, 2025

[CrowdSec] – Phần 14 – Triển khai Remote LAPI cho OPNSense

-

1. Giới thiệu sơ qua về OPNsense Plugin (Plugin cho OPNsense).

Bằng cách cài đặt plugin CrowdSec trên OPNsense, bạn có thể tích hợp CrowdSec vào hệ thống bảo mật của bạn. Điều này cho phép bạn giám sát, phát hiện, và ứng phó với các mối đe dọa mạng một cách hiệu quả thông qua giao diện quản trị OPNsense.

  • OPNsense là một firewall mềm và routing nổi tiếng được dựa trên hệ điều hành FreeBSD.
  • Gói phần mềm chuẩn mà CrowdSec cung cấp cho FreeBSD (bao gồm agent+lapi và bouncer) cũng có thể chạy trên OPNsense, nhưng cần tích hợp nhiều hơn với hệ thống còn lại (ví dụ, để cung cấp dữ liệu cho firewall).
  • Bằng cách cài đặt plugin CrowdSec thông qua các kho lưu trữ của OPNsense, bạn có thể:
    • Sử dụng máy chủ OPNsense như LAPI cho các agent và bouncer khác: Điều này cho phép OPNsense hoạt động như một trung gian để các agent và bouncer CrowdSec khác trên mạng của bạn gửi và nhận thông tin.
    • Triển khai một agent trên OPNsense và quét các logs để phát hiện các cuộc tấn công: Agent này sẽ theo dõi và kiểm tra thông tin trong các logs của OPNsense để tìm kiếm các dấu hiệu của các cuộc tấn công hoặc mối đe dọa mạng.
    • Chặn các tấn công từ toàn bộ mạng của bạn bằng một bộ lọc firewall duy nhất (firewall bouncer): Bouncer là một phần quan trọng của CrowdSec, và nó có khả năng ngăn chặn các kết nối từ các địa chỉ IP được xác định là độc hại.
    • Liệt kê các plugin trung tâm (parsers, scenarios…) và các quyết định (decisions) trên giao diện quản trị OPNsense: Bạn có thể xem và quản lý các plugin từ trung tâm của CrowdSec, bao gồm các phần mềm phân tích logs (parsers), các kịch bản phát hiện sự cố (scenarios), và các quyết định được thực hiện khi phát hiện mối đe dọa.

2. Thiết lập LAPI Từ Xa cho OPNSense.

Có thể bạn muốn đặt dịch vụ LAPI (Local API) trên một máy chủ khác, có thể do bạn đã có máy chủ LAPI riêng, hoặc máy chủ OPNsense của bạn đang chạy trên một máy tính chậm, hoặc vì lý do khác – quyền của bạn để lựa chọn. Tuy nhiên, điều này đòi hỏi bạn phải điều chỉnh cấu hình thủ công.

Cần lưu ý:

Danh sách các máy chủ và bouncers hiển thị trên tab “Overview” (Tổng quan) sẽ không chính xác. Trong phiên bản hiện tại, ứng dụng CrowdSec trên OPNsense không có cách (và không được cấp quyền) để lấy danh sách máy chủ và bouncers từ LAPI nếu nó nằm trên một máy chủ khác. Do đó, nó sẽ hiển thị thông tin cục bộ (và đã cũ).

Các bước sau đây giả định rằng bạn đã thiết lập một máy chủ LAPI trung tâm có thể truy cập từ máy chủ OPNsense. Bạn cũng cần truy cập SSH với quyền root đối với cả máy chủ OPNsense và máy chủ LAPI.

Tham khảo sơ đồ của mình như sau:

Để cho tiện việc thiết lập bạn hãy mở SSH cho OPNSense.

Dùng một máy nào đó SSH vào OPNSense và lựa chọn số 8 để chúng ta có thể sử dụng lệnh cho OPNSense.

$ ssh root@192.168.13.189
Password:
Last login: Thu Aug 24 14:39:33 2023 from 192.168.13.182
----------------------------------------------
|      Hello, this is OPNsense 23.1          |         @@@@@@@@@@@@@@@
|                                            |        @@@@         @@@@
| Website:      https://opnsense.org/        |         @@@\\\   ///@@@
| Handbook:     https://docs.opnsense.org/   |       ))))))))   ((((((((
| Forums:       https://forum.opnsense.org/  |         @@@///   \\\@@@
| Code:         https://github.com/opnsense  |        @@@@         @@@@
| Twitter:      https://twitter.com/opnsense |         @@@@@@@@@@@@@@@
----------------------------------------------

*** OPNsense.localdomain: OPNsense 23.1.11_1 ***

 WAN (vtnet0)    -> v4: 192.168.13.189/23

 SSH:   SHA256 2fEP4vtR14fEQlKW0/32M1/EuCSKshcvdz9EtaXo4Bo (ECDSA)
 SSH:   SHA256 AoicXXn2BsUAcjpzZwQPnMHpi7Ej9nDO+5TyKj/uSJk (ED25519)
 SSH:   SHA256 CIddA1BeRMItSUzzWGUpSu/+a8XKGnWwXda+NFYl3g4 (RSA)

  0) Logout                              7) Ping host
  1) Assign interfaces                   8) Shell
  2) Set interface IP address            9) pfTop
  3) Reset the root password            10) Firewall log
  4) Reset to factory defaults          11) Reload all services
  5) Power off system                   12) Update from console
  6) Reboot system                      13) Restore a backup

Enter an option: 8

root@OPNsense:~ #

Trên Server LAPI hãy chạy lệnh sudo cscli bouncers add <tên định danh thiết bị> để lấy api key.

$ sudo cscli bouncers add 192.168.13.189
Api key for '192.168.13.189':

   553ccf6cb806448266d57b9faf88913e

Please keep this key since you will not be able to retrieve it!

Trên OPNSense bạn hãy mở file /usr/local/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml và truyền thông tin api_key đã lấy ở bước trên và api_url (đây là link api của LAPI).

api_key: 553ccf6cb806448266d57b9faf88913e
api_url: http://192.168.13.181:8080
blacklists_ipv4: crowdsec_blacklists
blacklists_ipv6: crowdsec6_blacklists
daemonize: true
deny_action: DROP
deny_log: false
disable_ipv6: false
insecure_skip_verify: false
ipset_type: nethash
iptables_chains:
- INPUT
log_compression: true
log_dir: /var/log/crowdsec
log_level: info
log_max_age: 30
log_max_backups: 3
log_max_size: 100
log_mode: file
mode: pf
nftables:
  ipv4:
    chain: crowdsec-chain
    enabled: true
    priority: -10
    set-only: false
    table: crowdsec
  ipv6:
    chain: crowdsec6-chain
    enabled: true
    priority: -10
    set-only: false
    table: crowdsec6
nftables_hooks:
- input
- forward
pf:
  anchor_name: ''
pid_dir: /var/run/
prometheus:
  enabled: true
  listen_addr: 127.0.0.1
  listen_port: 60601
supported_decisions_types:
- ban
update_frequency: 10s

Chạy lệnh cscli lapi register -u http://192.168.13.181:8080 để đăng ký máy OPNSense vào LAPI.

root@OPNsense:~ # cscli lapi register -u http://192.168.13.181:8080
INFO[24-08-2023 14:45:31] Successfully registered to Local API (LAPI)
INFO[24-08-2023 14:45:31] Local API credentials dumped to '/usr/local/etc/crowdsec/local_api_credentials.yaml'
WARN[24-08-2023 14:45:31] Run 'sudo service crowdsec reload' for the new configuration to be effective.

Hãy reload lại Crowdsec trên máy OPNSense.

sudo service crowdsec reload

Giờ quay lại máy chủ LAPI sử dụng lệnh dưới để list các machine và bạn sẽ thấy IP của OPNSense đã xuất hiện nhưng chưa sử dụng được.

$ cscli machines list
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 Name                                               IP Address       Last Update            Status   Version                                                            Auth Type   Last Heartbeat
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 81ad445998a76a0c0d2e3e6ba3f6722115Ojq9cb2hwEWT7o   192.168.13.181   2023-08-24T14:45:47Z   ✔️        v1.5.2-debian-pragmatic-4fbc3402fba932c8bd34b671527dcf7909d264c0   password    47s
 81ad445998a76a0c0d2e3e6ba3f67221ajNoK2V2M61PQ4MA   192.168.13.182   2023-08-24T14:46:22Z   ✔️        v1.5.2-debian-pragmatic-4fbc3402fba932c8bd34b671527dcf7909d264c0   password    12s
 81ad445998a76a0c0d2e3e6ba3f6722121d9J0i9TaHXcAOm   192.168.13.183   2023-08-24T14:46:23Z   ✔️        v1.5.2-debian-pragmatic-4fbc3402fba932c8bd34b671527dcf7909d264c0   password    12s
 3b3e9a8d2065429a876c6b4c2cedce0fQoomYL7yYlmq9hns   192.168.13.189   2023-08-24T14:45:31Z   🚫                                                                          password    1m3s
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Trên máy LAPI chạy lệnh sudo cscli machines validate để xác nhận cho OPNSense được phép kết nối vào nó.

$ sudo cscli machines validate 3b3e9a8d2065429a876c6b4c2cedce0fQoomYL7yYlmq9hns
INFO[24-08-2023 14:46:57] machine '3b3e9a8d2065429a876c6b4c2cedce0fQoomYL7yYlmq9hns' validated successfully

Quay lại OPNSense bạn hãy khởi động lại Crowdsec.

root@OPNsense:~ # service oscrowdsec restart
crowdsec not running? (check /var/run/crowdsec.pid).
crowdsec_firewall not running? (check /var/run/crowdsec_firewall.pid).
Registering LAPI
WARN[24-08-2023 14:43:50] can't load CAPI credentials from '/usr/local/etc/crowdsec/online_api_credentials.yaml' (missing field)
INFO[24-08-2023 14:43:50] push and pull to Central API disabled
WARN[24-08-2023 14:43:50] You are using sqlite without WAL, this can have a performance impact. If you do not store the database in a network share, set db_config.use_wal to true. Set explicitly to false to disable this warning.
WARN[24-08-2023 14:43:50] can't load CAPI credentials from '/usr/local/etc/crowdsec/online_api_credentials.yaml' (missing field)
INFO[24-08-2023 14:43:50] push and pull to Central API disabled
INFO[24-08-2023 14:43:50] Machine '3b3e9a8d2065429a876c6b4c2cedce0f8WqPeVLUJk75fAQa' successfully added to the local API
INFO[24-08-2023 14:43:50] API credentials dumped to '/usr/local/etc/crowdsec/local_api_credentials.yaml'
Registering CAPI
WARN[24-08-2023 14:43:51] can't load CAPI credentials from '/usr/local/etc/crowdsec/online_api_credentials.yaml' (missing field)
INFO[24-08-2023 14:43:51] push and pull to Central API disabled
WARN[24-08-2023 14:43:51] You are using sqlite without WAL, this can have a performance impact. If you do not store the database in a network share, set db_config.use_wal to true. Set explicitly to false to disable this warning.
WARN[24-08-2023 14:43:51] can't load CAPI credentials from '/usr/local/etc/crowdsec/online_api_credentials.yaml' (missing field)
INFO[24-08-2023 14:43:51] push and pull to Central API disabled
INFO[24-08-2023 14:43:53] Successfully registered to Central API (CAPI)
INFO[24-08-2023 14:43:53] Central API credentials dumped to '/usr/local/etc/crowdsec/online_api_credentials.yaml'
WARN[24-08-2023 14:43:53] Run 'sudo service crowdsec reload' for the new configuration to be effective.

Kết quả khi sử dụng lệnh cscli machines list.

$ cscli machines list
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 Name                                               IP Address       Last Update            Status   Version                                                            Auth Type   Last Heartbeat
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 81ad445998a76a0c0d2e3e6ba3f6722115Ojq9cb2hwEWT7o   192.168.13.181   2023-08-24T14:47:47Z   ✔️        v1.5.2-debian-pragmatic-4fbc3402fba932c8bd34b671527dcf7909d264c0   password    4s
 81ad445998a76a0c0d2e3e6ba3f67221ajNoK2V2M61PQ4MA   192.168.13.182   2023-08-24T14:47:22Z   ✔️        v1.5.2-debian-pragmatic-4fbc3402fba932c8bd34b671527dcf7909d264c0   password    29s
 81ad445998a76a0c0d2e3e6ba3f6722121d9J0i9TaHXcAOm   192.168.13.183   2023-08-24T14:47:23Z   ✔️        v1.5.2-debian-pragmatic-4fbc3402fba932c8bd34b671527dcf7909d264c0   password    29s
 3b3e9a8d2065429a876c6b4c2cedce0fQoomYL7yYlmq9hns   192.168.13.189   2023-08-24T14:47:29Z   ✔️        v1.5.1-freebsd-freebsd-b76e95e3                                    password    22s
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

3. Kiểm tra kết quả.

Mình sử dụng máy server-2 có IP 192.168.13.182 làm máy tấn công SSH vào OPNSense. Sau 4 lần thất bạn thì mình đã bị đóng kết nối.

Nếu bạn theo dõi logs trên máy LAPI thì bạn sẽ thấy một dòng log time="24-08-2023 15:05:59" level=info msg="(3b3e9a8d2065429a876c6b4c2cedce0fQoomYL7yYlmq9hns/crowdsec) crowdsecurity/ssh-bf by ip 192.168.13.182 (/0) : 4h ban on Ip 192.168.13.182" với ý nghĩa thông báo IP 192.168.13.182 đã bị khoá 4h.

$ tail -f /var/log/crowdsec.log
time="24-08-2023 14:59:35" level=info msg="Adding leaky bucket" cfg=empty-frost file=/etc/crowdsec/scenarios/ssh-bf.yaml name=crowdsecurity/ssh-bf
time="24-08-2023 14:59:35" level=info msg="Adding leaky bucket" cfg=polished-breeze file=/etc/crowdsec/scenarios/ssh-bf.yaml name=crowdsecurity/ssh-bf_user-enum
time="24-08-2023 14:59:35" level=info msg="Adding leaky bucket" cfg=wispy-smoke file=/etc/crowdsec/scenarios/ssh-slow-bf.yaml name=crowdsecurity/ssh-slow-bf
time="24-08-2023 14:59:35" level=info msg="Adding leaky bucket" cfg=frosty-butterfly file=/etc/crowdsec/scenarios/ssh-slow-bf.yaml name=crowdsecurity/ssh-slow-bf_user-enum
time="24-08-2023 14:59:35" level=warning msg="Loaded 4 scenarios"
time="24-08-2023 14:59:35" level=info msg="loading acquisition file : /etc/crowdsec/acquis.yaml"
time="24-08-2023 14:59:35" level=info msg="Adding file /var/log/auth.log to datasources" type=file
time="24-08-2023 14:59:35" level=info msg="Adding file /var/log/syslog to datasources" type=file
time="24-08-2023 14:59:35" level=info msg="Adding file /var/log/kern.log to datasources" type=file
time="24-08-2023 14:59:35" level=info msg="Starting processing data"
time="24-08-2023 15:05:59" level=info msg="(3b3e9a8d2065429a876c6b4c2cedce0fQoomYL7yYlmq9hns/crowdsec) crowdsecurity/ssh-bf by ip 192.168.13.182 (/0) : 4h ban on Ip 192.168.13.182"
time="24-08-2023 15:06:00" level=info msg="Signal push: 1 signals to push"

Nếu bạn sử dụng lệnh cscli decisions list bạn sẽ thấy thông tin đó.

$ cscli decisions list
╭───────┬──────────┬───────────────────┬──────────────────────┬────────┬─────────┬────┬────────┬────────────────────┬──────────╮
│  ID   │  Source  │    Scope:Value    │        Reason        │ Action │ Country │ AS │ Events │     expiration     │ Alert ID │
├───────┼──────────┼───────────────────┼──────────────────────┼────────┼─────────┼────┼────────┼────────────────────┼──────────┤
│ 30004 │ crowdsec │ Ip:192.168.13.182 │ crowdsecurity/ssh-bf │ ban    │         │    │ 6      │ 3h58m50.749626446s │ 6        │
╰───────┴──────────┴───────────────────┴──────────────────────┴────────┴─────────┴────┴────────┴────────────────────┴──────────╯

Tương tự như bài trước, hệ thống Crowdsec sẽ khoá truy cập của IP 192.168.13.182 đến tất cả các máy chủ mà Crowdsec đang quản lý trong vòng 4 giờ.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories