OPNsense Crowdsec LAPI ( Multi-Server Security Engine )

wer mehrere dienste auf unterschiedlichen Server in einem Netzwerk hat, die auch Öffentlich zugänglich sind, kann diese alle ganz leicht mit Crowdsec absichern und an zentraler stelle z.b. einer OPNsense die Sperrung vornehmen lassen von bösen Aktivitäten.

– auf der OPNsense ( LAPI ) –
als erstes Crowdsec auf der OPNsense installieren über die Plugins

System → Firmware → Erweiterungen
os-crowdsec suchen und installieren

jetzt muss noch die Crowdsec Konfiguration angepasst werden, die IP von der OPNsense anpassen oder 0.0.0.0 wen auf allen Schnittstellen erreichbar sein soll
/usr/local/etc/crowdsec/config.yaml

api:
  server:
    listen_uri: 10.0.0.1:8080

/usr/local/etc/crowdsec/local_api_credentials.yaml
IP anpassen

url: http://10.0.0.1:8080/

Crowdsec neustarten

– auf den Client ( Log Processors ) –
jetzt Crowdsec auf z.b. client 1 und client 2 installieren, z.b. Debian/Ubuntu

curl -s https://install.crowdsec.net | sudo sh
apt install crowdsec

anschließend die Verbindung zur OPNsense LAPI herstellen

cscli lapi register -u http://10.0.0.1:8080

auf dem Client die lokale API deaktivieren da wir ja die OPNsense LAPI nutzen wollen
/etc/crowdsec/config.yaml

api:
  server:
    enable: false

der dienst muss jetzt angepasst werden

cp /lib/systemd/system/crowdsec.service /etc/systemd/system/crowdsec.service

datei anpassen und -no-api hinzufügen
/etc/systemd/system/crowdsec.service

[Unit]

Description=Crowdsec agent

After=syslog.target network.target remote-fs.target nss-lookup.target


[Service]

Type=notify

Environment=LC_ALL=C LANG=C

PIDFile=/var/run/crowdsec.pid

ExecStartPre=/usr/bin/crowdsec -c /etc/crowdsec/config.yaml -t

ExecStart=/usr/bin/crowdsec -c /etc/crowdsec/config.yaml -no-api

#ExecStartPost=/bin/sleep 0.1

ExecReload=/bin/kill -HUP $MAINPID


[Install]

WantedBy=multi-user.target

anschließend den dienst neu laden und neustarten

systemctl daemon-reload

systemctl restart crowdsec

– auf der OPNsense ( LAPI ) –
jetzt auf der OPNsense die Client validieren in der Konsole, dazu folgenden befehl eingeben

cscli machines list

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

 NAME                                              IP ADDRESS      LAST UPDATE           STATUS  VERSION                                                            

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

 dc6f34b3a4994700a2e333df43728701D0iARTSQ6dxiwyMR  10.0.0.1  2024-11-17T20:22:19Z  ✔️       v1.6.3-4851945a-freebsd 

 9f3602d1c9244f02b0d6fd2e92933e75zLVg8zSRkyANxHbC  10.0.0.3   2024-11-17T20:24:12Z  🚫                                                                         

 ac86209e6f9c4d7d8de43e2ea31fe28ebvde0vWDr46Mpd3L  10.0.0.2   2024-11-17T20:22:28Z  🚫                                                                         

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

in diesem Beispiel haben wir 2 Client hinzugefügt mit der IP 10.0.0.2 und 10.0.0.3 jetzt müssen wir die Client Validieren

cscli machines validate 9f3602d1c9244f02b0d6fd2e92933e75zLVg8zSRkyANxHbC

cscli machines validate ac86209e6f9c4d7d8de43e2ea31fe28ebvde0vWDr46Mpd3L

– auf den Client ( Log Processors ) –
anschließend müssen die Client Crowdsec neustarten

systemctl restart crowdsec

– auf der OPNsense (LAPI) –
jetzt müssen noch API Token für die Client erstellt werden auf der OPNsense

cscli bouncers add client-1

Api key for 'client-1':


   02954e85c72cf442a4dee357f0ca5a7c


Please keep this key since you will not be able to retrive it!
cscli bouncers add client-2

Api key for 'client-2':


   3b1030ce0840c343eecd387ac5a3a614


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

– auf den Client ( Log Processors ) –
anschließend auf Client 1 und 2 den Bouncer installieren

apt install crowdsec-firewall-bouncer-iptables

jetzt müssen wir die Bouncer yaml anpassen und die OPNsense LAPI IP hinzufügen und den Key der zuvor für die Client generiert wurde

Client 1
/etc/crowdsec/cs-firewall-bouncer/cs-firewall-bouncer.yaml

api_url: http://10.0.0.1:8080/
api_key: 02954e85c72cf442a4dee357f0ca5a7c

Client 2
/etc/crowdsec/cs-firewall-bouncer/cs-firewall-bouncer.yaml

api_url: http://10.0.0.1:8080/
api_key: 3b1030ce0840c343eecd387ac5a3a614

anschließend auf beiden Client den Bouncer neustarten

systemctl restart crowdsec-firewall-bouncer

wer noch möchte kann auf dem Client ein kosmetischen schritt machen und die bei der Installation angelegten lokalen API und Bouncer entfernen da wir ja jetzt beides extern benutzen also auf der OPNsense

cscli machines list
cscli bouncer list

und z.b. je nach dem was in der Ausgabe für einen Namen seht

cscli machines delete dedc853cde8b4118a153488cc91bb0edb6wrUz9CSq4t4bbc
cscli bouncers delete cs-firewall-bouncer-1704563299

noch einmal abschließend alles neustarten

systemctl restart crowdsec-firewall-bouncer
systemctl restart crowdsec

– auf der OPNsense ( LAPI ) –
in der OPNsense unter Dienste und Crowdsec → überblick kann man noch einmal Prüfen unter dem Reiter Machines und Bouncer ob auch die Client dort eingetragen sind und ob Last update und Last API Pull auch funktioniert, im Normalfall werden alle paar Sekunden Updates gemacht, wen ein Client mehrere Minuten kein update schickt, scheint etwas mit der Verbindung nicht zu stimmen


jetzt werden die Client ihre verdächtigen zugriffe an die OPNsense melden und dort sperren lassen