Anleitung: OPNsense als Corwdsec LAPI

Hallo zusammen,

hier einmal kurz Zusammengefasst, wie ihr die OPNsense als LAPI einrichtet und eure Heimserver ihre Meldungen an die OPNsense übermitteln. Diese Anleitung basiert auf der Anleitung von Dennis Schröder und Linux Journal. Die Anleitung von Linux Journal lässt sich mit aktuelleren Versionen von Crowdsec nicht mehr umsetzen. Daher habe ich die Änderungen in dieser Anleitung zusammengefasst.

1. Crowdsec auf der OPNsense vorbereiten
Unter Services → CrowdSec → Settings → Reiter Settings müssen die Haken bei " Enable LAPI" und " Manual LAPI configuration" gesetzt sein. Dann muss die gewünschte IP-Adresse und der Port in " LAPI listen address" und " LAPI listen port" eingetragen werden.

2. Crowdsec Repository
Als erstes muss das Crowdsec Repository hinzugefügt werden.
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash

3. Crowdsec installieren und HUBs auswählen

sudo apt install crowdsec
sudo /usr/share/crowdsec/wizard.sh -c

Der Befehlt /usr/share/crowdsec/wizard.sh -c führt den Wizard aus, wo bestimmte Einstellungen konfiguriert werden können.

4. Firewall IPTables Bouncer hinzufügen
Der Bouncer ist dafür verantwortlich das die Listen für die IPTables aktuell gehalten werden.
sudo apt install crowdsec-firewall-bouncer-iptables

Kleine Änderung in der Konfiguration für die SQLite Datenbank
Füge in dem Bereich “db_config” das “use_wal: true” hinzu.
nano /etc/crowdsec/config.yaml

db_config:
log_level: info
type: sqlite
db_path: /var/lib/crowdsec/data/crowdsec.db
use_wal: true

5. Auf dem „Client“

sudo cscli lapi register -u http://IPderOPNsense:8080
sudo cp /lib/systemd/system/crowdsec.service /etc/systemd/system/crowdsec.service
sudo nano /etc/systemd/system/crowdsec.service

-no-api in der Zeile ExecStart ans Ende setzen.
sudo systemctl daemon-reload && sudo systemctl restart crowdsec

6. Auf der Sense
sudo cscli machines list
Dort den Namen kopieren und mit sudo cscli machines validate NAME validieren.
Dann sudo cscli bouncers add CLIENTNAME
Den API Key kopieren und in der Datei /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml anpassen. Gleiches gilt auch für die IP des API Servers.

Zum Schluss noch sudo systemctl restart crowdsec-firewall-bouncer

Hallo @haruzept,

kleine Frage zu Deiner Anleitung. Muss man jetzt eigentlich noch Punkt 2, 3 sowie den ersten Absatz von Punkt 4 auf der OPNsense machen? Das kann man doch jetzt alles über die GUI installieren, oder?!

Viele Grüße
svenson-man

Punkt 2, 3 und 4 brauchst du auf der OPNsense nicht machen, die Installation wird ja durch das plugin erledigt. Das einzige sind diverse anpassungen in der config die individuell gemacht werden können.

1 „Gefällt mir“

Danke für die Info.
CrowdSec läuft jetzt auf meiner OPNsense wunderbar und hat sogar schon die ersten Blocks. Jetzt habe ich aber gleich die nächste Frage / das nächste Problem und hoffe, dass jemand aus dem Community einen Tip hat.

Ich habe mich heute mit dem LAPI Thema befasst, da natürlich alles schon direkt an der Sense geblocked werden soll. Wie ich in dem anderen Post gelesen habe, hast Du @Andrew_XNET bereits auch OPNsense als LAPI laufen und mehrere Maschinen sind verbunden. Vielleicht mache ich gerade einen Gedankenfehler aber ich habe die Anleitung von @haruzept befolgt nur leider kann ich die LAPI-Registrierung nicht machen (1. Zeilen von Punkt 5). Ich bekomme immer einen Timeout nach ca. 10 Sekunden. Vielleicht blöde Frage, aber ich gebe doch die lokale IP der Sense in der GUI als „LAPI listen address“ ein, korrekt?! Ich habe es mit der lokalen IP der Sense als auch der Interface IP (Gateway in dem Netz wo der Client steht) der Sense versucht. Ich scheine an die Sense ergo CS LAPI via Port 8080 komischerweise nicht ranzukommen. Habe es sogar mit ANY/ANY Regeln versucht, da der Client für die LAPI Verbindung wie gesagt in einem anderen Netz steht (vielleicht relevant: die Sense ist in der Hetzner Cloud - Routing Thematik). Kann da ggf. noch was anderes reinspielen, wo ich irgendwie gerade nicht dran denke? Mir fällt gerade noch ein, dass ich ggf. mal testen kann den Port zu wechseln über die GUI. Das teste ich die Tage nochmal.

bildliches Beispiel, die IP 192.168.178.90 ist die LAN IP der OPNsense

OPNsense


config.yaml
image
local_api_credentials.yaml
image
crowdsec-firewall-bouncer.yaml
image

auf dem Client
local_api_credentials.yaml
image
crowdsec-firewall-bouncer.yaml
image

das zum bildlichen,
wen auf dem Client Crowdsec + Bouncer installiert ist, wird als erstes dieser Befehl gemacht
cscli lapi register -u http://192.168.178.90:6580/

auf der OPNsense
cscli machines validate 123namedermaschine321
cscli bouncers add namedesbouncer (Ausgabe ist der key für den Client Bouncer)

in der config.yaml auf der OPNsense habe ich unter trusted_ips die Client IP angegeben damit die auch immer kommunizieren können

wen die Kommunikation zur OPNsense mit der Client Maschine und Bouncer hergestellt ist, können auf dem Client Maschine und Bouncer entfernt werden

cscli bouncers delete MyBouncerName
cscli machines delete MyTestMachine

nach dem ganzen hinzufügen/entfernen und einstellen, nicht das neustarten vergessen von Crowdsec+Bouncer auf OPNsense und Client

in der GUI von der OPNsense kannst du die Maschinen und Bouncer Kommunikation prüfen, wen da eine Maschine oder Bouncer mehr als 2 Minuten als „Last Update/Last API Pull“ steht, passt irgendwas nicht.

@haruzept
die Anleitung sollte nochmal etwas bearbeitet werden, es muss auf der OPNsense kein Repository hinzugefügt werden, es sei den man will es ohne Plugin installieren wodurch man die GUI Funktion verliert, auch das installieren von Bouncer ist nicht nötig, das ist alles im Plugin, man installiert nicht mit apt auf FreeBSD und es gibt auch Standard kein Nano, es gibt auch kein systemctl auf der OPNsense zum neustarten von diensten.

2 „Gefällt mir“

Hallo @Andrew_XNET,
oh super, danke für die bebilderte Erklärung. Bilder sagen manchmal mehr als 1000 Worte. :wink: :rofl:
Das werde ich die Tage mal auf meine Umgebung umsetzen. Info folgt dann. Nochmal danke!

Da ich den ersten Beitrag nicht mehr bearbeiten kann, hier die nachgebesserte und hoffentlich etwas besser zu verstehende Anleitung.

hier einmal kurz Zusammengefasst, wie ihr die OPNsense als LAPI einrichtet und eure Heimserver ihre Meldungen an die OPNsense übermitteln. Diese Anleitung basiert auf der Anleitung von Dennis Schröder und Linux Journal . Die Anleitung von Linux Journal lässt sich mit aktuelleren Versionen von Crowdsec nicht mehr umsetzen. Daher habe ich die Änderungen in dieser Anleitung zusammengefasst.

1. Crowdsec auf der OPNsense vorbereiten
Unter Services → CrowdSec → Settings → Reiter Settings müssen die Haken bei " Enable LAPI" und " Manual LAPI configuration" gesetzt sein. Dann muss die gewünschte IP-Adresse und der Port in " LAPI listen address" und " LAPI listen port" eingetragen werden.

2. Crowdsec Repository (Client)
Als erstes muss das Crowdsec Repository hinzugefügt werden.

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

3. Crowdsec installieren und HUBs auswählen

sudo apt install crowdsec
sudo /usr/share/crowdsec/wizard.sh -c

Dieser Befehl führt den Wizard aus, wo bestimmte Einstellungen konfiguriert werden können. /usr/share/crowdsec/wizard.sh -c

4. Firewall IPTables Bouncer hinzufügen (Client)
Der Bouncer ist dafür verantwortlich das die Listen für die IPTables aktuell gehalten werden.
sudo apt install crowdsec-firewall-bouncer-iptables

Kleine Änderung in der Konfiguration für die SQLite Datenbank
Füge in dem Bereich “db_config” das “use_wal: true” hinzu.
sudo nano /etc/crowdsec/config.yaml

db_config:
log_level: info
type: sqlite
db_path: /var/lib/crowdsec/data/crowdsec.db
use_wal: true

5. Lapi regestrieren (Client)

sudo cscli lapi register -u http://IPderOPNsense:8080
sudo cp /lib/systemd/system/crowdsec.service /etc/systemd/system/crowdsec.service
sudo nano /etc/systemd/system/crowdsec.service

-no-api in der Zeile ExecStart ans Ende setzen.
Beispiel: ExecStart=/usr/bin/crowdsec -c /etc/crowdsec/config.yaml -no-api

Dann alles einmal neustarten
sudo systemctl daemon-reload && sudo systemctl restart crowdsec

6. Machine und Bouncer hinzufügen (OPNsense)
cscli machines list ausführen und dort den Namen aus „Name“ kopieren und mit cscli machines validate NAME validieren.

Danach cscli bouncers add NAME auf der OPNsense ausführen.
Den API Key kopieren und in der Datei /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml auf dem Client anpassen. Gleiches gilt auch für die IP des API Servers.
Beispiel:

api_url: http://192.168.100.1:8080/
api_key: EVRT34ovohfw04545

Zum Schluss noch sudo systemctl restart crowdsec-firewall-bouncer auf dem Client ausführen.

3 „Gefällt mir“

Hallo @Andrew_XNET und @haruzept,

erst einmal DANKE für Eure Anleitungen. Bin leider erst jetzt wieder dazu gekommen das umzusetzen. Das hat bei mir jetzt wunderbar geklappt. Ich musste aber, nach den Änderungen der Settings in der GUI der OPNsense und dem Klick auf „Anwenden“ einmal den kompletten Dienst über das Dashboard neu starten. Erst danach war die LAPI Registrierung möglich.

Eine Frage habe ich noch (vielleicht habe ich auch einen Gedankenfehler):
Die Collections (ergo Scenarios und Parsers), welche auf dem Client sind, müssen diese jetzt auch auf der OPNsense installiert werden? Finde dazu irgendwie nichts in der Doc von CrowdSec (oder ich habe schon wieder Tomaten auf den Augen). Oder ist es tatsächlich so, dass die Erkennung auf der Maschine bleibt aber nur der Bouncer dann auf der OPNsense geschieht?

Danke nochmal für Eure Hilfe.

Moin,

erstmal schön das es bei dir nun auch geklappt hat. Den Dienst musste ich nicht neu starten. Komisch…

Soweit ich es richtig verstanden habe erkennt die Maschine sprich z.B. dein Webserver den Angriff und meldet ihn an die OPNsense. Diese sperrt dann die IP Adresse des Angreifers und schützt somit deinen Webserver und alle anderen Geräte in den Netzen hinter der OPNsense.

Moin @haruzept,

so habe ich es auch verstanden. Dann gehe ich richtig in der Annahme, dass Du auch nur die Standard OPNsense Collections auf Deiner OPNsense hast, richtig?!

Ich habe jetzt nochmal etwas gegoogelt und folgende Seite in der Doku gefunden (About multi-server setup | CrowdSec). Hier steht meiner Meinung nach ganz unter die Lösung der Frage:

  • Parsers and Scenarios must be present on the agents. It’s not useful to deploy them on LAPI
  • Decisions are made by LAPI. This is where you want to setup eventual custom profiles, and this is where you bouncers should point

Ah ok. Wenn ich mich nicht irre, machen wir ja auch nur das. Wir geben der LAPI auf der OPNsense bescheid und diese sperrt dann die IP. So habe ich das ganze Prozedere zumindest verstanden.

genau, die Collections und Parser für die dienste müssen auf dem Client sein, die Erkennungen durch den Client Agent werden an den LAPI gemeldet und dort gesperrt, die Collections auf der OPNsense sind auch nur für die Erkennung auf der OPNsense.

1 „Gefällt mir“