Skip to content

Crowdsec - Ein fail2ban Ersatz?

Linux
2 1 948
  • 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

    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.

    crowdsec_ecosystem.png
    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.

  • Ich kann jetzt hier von meiner ersten Erfahrung berichten und wie CrowdSec mich gebannt hat 🙂

    Was war passiert? Ich war gestern sehr intensiv mit der Konfiguration von Nextcloud <-> Collabora Online beschäftigt. Nachdem ich irgendwie nicht weiterkam habe ich mich der Erstellung eines Dokumentes gewidmet. Nach einiger Zeit war die Nextcloud nicht mehr erreichbar.

    Ok, hatte ich bei der Konfiguration auch schon mal, den Server einmal neugestartet und fertig. Doch jetzt kam es, Server neugestartet - hilft nicht. Gut, schauen wir mal nach, Der SSH Login ging auch nicht 😞

    Jetzt war guter Rat gefragt. Zu diesem Zeitpunkt ging ich noch davon aus, das auf diesem Server kein CrowdSec installiert war, sondern fail2ban. Und fail2ban hatte eine sehr kurze Bantime vom 10M.

    Also blieb wohl nur noch das Rescue System von Hetzner.

    488866bc-3dcf-4abc-9e98-6107d65aa4c7-grafik.png

    Da hatte ich ja so gut wie gar keine Erfahrung mit. Also mal kurz den Nico angetriggert und es kam folgender Link.

    Das Laufwerk war schnell bestimmt und schnell nach /tmp gemountet. Danach musste man sich noch mit chroot in diese Umgebung anmelden.

    chroot-prepare /mnt
    chroot /mnt
    

    Nachdem das klappte, habe ich eben fail2ban disabled.

    sysmctl disable fail2ban
    

    Danach das Rescue beendet. Der Server startete wieder und ich kam wieder per SSH drauf. Puuh.
    Bei meiner ersten Kontrolle fiel mir was auf

    root@:~# pstree
    systemd─┬─2*[agetty]
            ├─atd
            ├─cron
            ├─crowdsec─┬─journalctl
            │          └─8*[{crowdsec}]
            ├─crowdsec-firewa───9*[{crowdsec-firewa}]
    

    Wie? Da läuft CrowdSec? Da ich dabei bin die Server auf CrowdSec umzustellen, war das wohl hier schon gemacht, aber leider nicht vernünftig. fail2ban hätte mindestens disabled werden müssen und in meiner Dokumentation war das auch nicht enthalten. 6 setzen!

    CrowdSec besteht ja aus zwei Diensten, CrowdSec und dem Firewall-Bouncer. Der CrowdSec Dienst lief aber nicht, der war irgendwie failed. Ok, starten wir ihn und schauen was passiert. Nachdem er gestarte war mal die Banliste angeschaut.

    cscli decisions list
    

    ergab diesen Eintrag.

    2551501 │ crowdsec │ Ip:5.146.xxx.xxx   │ crowdsecurity/http-crawl-non_statics │ ban    │         │    │ 53     │ 1h5m55.391864693s  │ 1671
    

    Meine IP war gebannt. Dann wissen wir ja , woher die Probleme kamen.

    cscli decisions delete --id 2551501
    

    Nach Eingabe war der Ban entfernt. Na gut, aber da ich aktuell immer noch an der richtigen Konfiguration von NC <-> CODE bastel, könnte das ja wieder passieren. Was machen? Kurz gegoogelt. Es gibt eine Whitelist. Aha!

    /etc/crowdsec/parsers/s02-enrich/whitelists.yaml

    name: crowdsecurity/whitelists
    description: "Whitelist events from private ipv4 addresses"
    whitelist:
      reason: "private ipv4/ipv6 ip/ranges"
      ip: 
        - "127.0.0.1"
        - "::1"
        - "5.146.XXX.XXX"
      cidr:
        - "192.168.0.0/16"
        - "10.0.0.0/8"
        - "172.16.0.0/12"
      # expression:
      #   - "'foo.com' in evt.Meta.source_ip.reverse"
    

    Danach den Dienst neustarten. Jetzt hoffen wir mal, das es hilft.

    Zum Schluss noch was, was mir aufgefallen war und was mich auch sehr verwirrt hatte. CrowdSec hatte wegen einem crowdsecurity/http-crawl-non_statics gebannt. Dadurch konnte ich meine
    subdomain.<DOMAIN> nicht erreichen. Ok, logisch, wenn der Ban von da ausgeht. Ich konnte aber gleichzeitig eine andere subdomain mit derselben <DOMAIN> auch nicht erreichen. Komplett verwirrte es mich dann, als ich eine andere <DOMAIN> auf dem selben Server erreichen konnte. Und zum Schluss ging auch der SSH nicht.

    Also, wieder viel gelernt.. 🤓

  • FrankMF FrankM hat am auf dieses Thema verwiesen
  • NodeBB - 4.2.2

    NodeBB nodebb linux
    1
    0 Stimmen
    1 Beiträge
    53 Aufrufe
    Niemand hat geantwortet
  • Flask Projekt auf einem anderen Rechner installieren

    Python3 python flask linux
    1
    0 Stimmen
    1 Beiträge
    179 Aufrufe
    Niemand hat geantwortet
  • Debian 12 Bookworm released

    Linux debian linux
    5
    0 Stimmen
    5 Beiträge
    413 Aufrufe
    FrankMF
    Mein persönliches Fazit, alles läuft rund mit Debian Bookworm 12 Alle meine Hetzner VMs sind jetzt auf Bookworm Ok, was schwer und zeitaufwendig war, war die Nextcloud Installation bzw. der ganze PHP-Server. Das ist echt jedes mal eine Herausforderung, aber auch dabei werde ich die letzten Jahre sicherer. Hier die Story zum Nextcloud Server https://linux-nerds.org/topic/1437/nextcloud-upgrade-auf-bookworm-12 Richtig rund lief das Upgrade des NodeBB-Servers, war einfach und direkt auf Node18 hochgezogen. https://linux-nerds.org/topic/1444/nodebb-upgrade-auf-debian-bookworm-12 Damit ist jetzt alles hier auf Debian Bookworm 12 Haupt-PC VMs bei Hetzner VMs in der Proxmox Oh, da fällt mir gerade ein, der Proxmox ist noch fällig. Aber, dazu habe ich mir was einfallen lassen, da ist noch ein neues Mainboard unterwegs und dann gibt es dazu einen etwas größeren Beitrag. Danke Debian-Team, Debian Bookworm 12 ist eine runde Sache! Spannend wird jetzt, wie lange ich auf meinem Haupt-PC (Bookworm, KDE, Wayland) bleibe. Ich habe da so eine unangenehme Eigenschaft, wenn es um veraltete Pakete geht. Diesmal werde ich dann wahrscheinlich auf den Debian Unstable Zweig (sid) wechseln. Aber das dürfte noch was dauern, da ja aktuell erst mal alles passt.
  • Debian Installer Bookworm RC3 released

    Linux debian linux
    2
    0 Stimmen
    2 Beiträge
    159 Aufrufe
    FrankMF
    Und da sind wir schon bei RC4 https://lists.debian.org/debian-devel-announce/2023/05/msg00003.html
  • Samba Installation - Server & Client

    Linux samba linux
    1
    0 Stimmen
    1 Beiträge
    150 Aufrufe
    Niemand hat geantwortet
  • Linux Mint 20 & Scannen mit HP LaserJet Pro MFP M28a

    Linux linuxmint linux
    2
    1
    0 Stimmen
    2 Beiträge
    1k Aufrufe
    FrankMF
    Nachdem ich jetzt ja wieder auf Linux Mint Cinnamon in Version 20.2 unterwegs bin, hatte ich wieder das Problem das der Drucker ohne Probleme druckt aber nicht scannt. Ich habe dann mal dieses Tool installiert apt install hplip-gui [image: 1625908296630-0918fea1-0edf-43c1-aa29-9d79efda177c-grafik.png] Dann auf Scan geklickt, dann meckerte er über ein fehlendes Plugin. Ok, installiert, danach kamen Verbindungsfehler beim Scannen. Einmal den USB-Stecker entfernt, danach ging alles. Bitte nicht fragen warum, hplip hasse ich noch mehr als WLAN Ok, nicht mehr anfassen.... [image: 1625908444519-79d636b7-2b49-4152-b158-e65cebabf148-grafik.png] In der Linux Mint Hilfe findet man dazu folgendes -> Klick
  • ROCKPro64 - 0.9.16 mit Kernel 5.6 auf PCIe NVMe SSD

    ROCKPro64 linux rockpro64
    1
    0 Stimmen
    1 Beiträge
    400 Aufrufe
    Niemand hat geantwortet
  • NodeBB - spawn npm ENOENT

    NodeBB nodebb linux
    1
    0 Stimmen
    1 Beiträge
    443 Aufrufe
    Niemand hat geantwortet