Ich spiele ja die letzte Zeit ein wenig mit Ansible, Semaphore und hcloud herum. Dabei habe ich angefangen einen Server so einzurichten, wie ich das benötige. Eines der Standardtools ist fail2ban.
Beim Testen fiel mir dann auf, das der Service nicht startet. Alles findet auf einem Debian Bookworm 12 statt, das up to Date ist. Alle Pakete aktuell, neuer Kernel und durchgestartet.
× fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; preset: enabled)
Active: failed (Result: exit-code) since Sun 2023-08-27 11:31:16 UTC; 2min 7s ago
Duration: 360ms
Docs: man:fail2ban(1)
Process: 4830 ExecStart=/usr/bin/fail2ban-server -xf start (code=exited, status=255/EXCEPTION)
Main PID: 4830 (code=exited, status=255/EXCEPTION)
CPU: 174ms
Aug 27 11:31:16 test-server systemd[1]: Started fail2ban.service - Fail2Ban Service.
Aug 27 11:31:16 test-server fail2ban-server[4830]: 2023-08-27 11:31:16,796 fail2ban.configreader [4830]: WARNING 'allowipv6' not defined in 'Definition'. Using default one: 'auto'
Aug 27 11:31:16 test-server fail2ban-server[4830]: 2023-08-27 11:31:16,846 fail2ban [4830]: ERROR Failed during configuration: Have not found any log file for sshd jail
Aug 27 11:31:16 test-server fail2ban-server[4830]: 2023-08-27 11:31:16,855 fail2ban [4830]: ERROR Async configuration of server failed
Aug 27 11:31:16 test-server systemd[1]: fail2ban.service: Main process exited, code=exited, status=255/EXCEPTION
Aug 27 11:31:16 test-server systemd[1]: fail2ban.service: Failed with result 'exit-code'.
Ich hatte dann den Fehler versucht, mit Hilfe des Internets zu fixen. Keine Chance - nix vernünftiges gefunden. Interessanterweise funktionieren alle meinen Server, wo fail2ban drauf war. Naja, wofür kennt man Systemadministratoren Mal kurz nachgefragt, kommt CrowdSec als Antwort.
Und ich stand im Regen, weil es doch ein sehr mächtiges Tool ist, aber es geht - wenn man weiß wie.
Installation
For those that prefer hands-on approach, you can as well manually install crowdsec.
(docs.crowdsec.net)
Ok, ist in Debian drin
apt install crowdsec
Am Anfang getestet, aber es bannt nicht!? Doku lesen und dann verstehen, das man Firewall Bouncer installieren muss, damit das klappt.
apt install crowdsec-firewall-bouncer
Ok, danach bannt er auch. Sieht dann z.B. so aus
/etc/crowdsec# cscli decisions list
╭───────┬──────────┬───────────────────┬──────────────────────┬────────┬─────────┬────┬────────┬────────────────────┬──────────╮
│ ID │ Source │ Scope:Value │ Reason │ Action │ Country │ AS │ Events │ expiration │ Alert ID │
├───────┼──────────┼───────────────────┼──────────────────────┼────────┼─────────┼────┼────────┼────────────────────┼──────────┤
│ 15006 │ crowdsec │ Ip:185.186.129.12 │ crowdsecurity/ssh-bf │ ban │ │ │ 6 │ 3h55m46.005175855s │ 7 │
│ 15005 │ crowdsec │ Ip:154.93.3.90 │ crowdsecurity/ssh-bf │ ban │ │ │ 6 │ 3h32m15.506170007s │ 6 │
│ 15003 │ crowdsec │ Ip:156.224.22.119 │ crowdsecurity/ssh-bf │ ban │ │ │ 6 │ 3h3m52.255275177s │ 4 │
╰───────┴──────────┴───────────────────┴──────────────────────┴────────┴─────────┴────┴────────┴────────────────────┴──────────╯
Jetzt weiß man ja auch von fail2ban, das die Loggs dazu geparst werden und an Hand dieser Eintröge, die IPs gebannt werden. Ok, wie funktioniert das bei CrowdSec?
Nach der Installation auf meinem Vaultwarden-Server, sieht das so aus.
:/etc/crowdsec# ls collections/
apache2.yaml base-http-scenarios.yaml http-cve.yaml linux.yaml nginx.yaml sshd.yaml
Das sind die Dienste die überwacht werden. Ok, jetzt läuft da drauf aber ein Vaultwarden. Wie sichert man das jetzt ab? Man installiert folgendes
cscli scenarios install Dominic-Wagner/vaultwarden-bf
Das ist ein Scenario, das alleine bannt aber nicht. Dazu braucht man auch noch den Parser, der die Logs durchsucht.
cscli parsers install Dominic-Wagner/vaultwarden-logs
cscli ist dabei das Konsolen Tool womit man CrowdSec administriert.
:/etc/crowdsec# cscli -h
cscli is the main command to interact with your crowdsec service, scenarios & db.
It is meant to allow you to manage bans, parsers/scenarios/etc, api and generally manage you crowdsec setup.
Ok, danach bannt er auch bei Attacken auf Vaultwarden.
:/etc/crowdsec# cscli decisions list
╭───────┬──────────┬────────────────────────────────────────┬───────────────────────────────┬────────┬─────────┬────┬────────┬────────────────────┬──────────╮
│ ID │ Source │ Scope:Value │ Reason │ Action │ Country │ AS │ Events │ expiration │ Alert ID │
├───────┼──────────┼────────────────────────────────────────┼───────────────────────────────┼────────┼─────────┼────┼────────┼────────────────────┼──────────┤
│ 15004 │ crowdsec │ Ip:2a00:20:50:4d97:772c:223d:xxxx:xxxx │ Dominic-Wagner/vaultwarden-bf │ ban │ │ │ 6 │ 3h59m39.152802204s │ 5 │
│ 15003 │ crowdsec │ Ip:156.224.22.119 │ crowdsecurity/ssh-bf │ ban │ │ │ 6 │ 3h55m56.024683977s │ 4 │
╰───────┴──────────┴────────────────────────────────────────┴───────────────────────────────┴────────┴─────────┴────┴────────┴────────────────────┴──────────╯
Kurzer Hinweis. Ich habe ja für Vaultwarden das Logging umgeswitcht, damit das besser mit fail2ban zusammen arbeiten konnte. Das habe ich heute wieder auf die Standardeinstellungen zurückgestellt, damit der Parser auch was findet. Standardpfad ist jetzt wieder /var/log
Hier noch kurz der Befehl, wie man einen Ban wieder entfernen kann. Standard bleibt der Ban 4 Stunden erhalten.
cscli decisions delete --id 15004
CrowdSec kann noch viel mehr, da kann man noch ganz viel mit Spielen Auf diesem Bild sieht man das Konzept von CrowdSec.
Bildquelle: https://docs.crowdsec.net/docs/intro
Die Dokumentation von CrowdSec findet man hier
Viel Spaß!
Und wenn jemand Erfahrungen damit hat, würde ich mich über Kommentare freuen.