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
  • Podman - Netzwerke prunen

    Podman podman linux
    1
    0 Stimmen
    1 Beiträge
    111 Aufrufe
    Niemand hat geantwortet
  • Podman - Secrets

    Podman podman linux
    1
    0 Stimmen
    1 Beiträge
    162 Aufrufe
    Niemand hat geantwortet
  • Python - Interessante Packages

    Python3 python linux
    1
    0 Stimmen
    1 Beiträge
    133 Aufrufe
    Niemand hat geantwortet
  • FrOSCon 18 - Bericht

    Linux froscon linux
    2
    1
    0 Stimmen
    2 Beiträge
    615 Aufrufe
    FrankMF
    Und man soll ja auch was mitnehmen.... [image: 1691603320257-screenshot_20230809_194620.png] Das ist Semaphore, installiert in einer VM auf meinem Proxmox.
  • NanoPi R2S - Firewall mit VLan und DHCP-Server

    Verschoben NanoPi R2S nanopir2s linux
    2
    2
    0 Stimmen
    2 Beiträge
    840 Aufrufe
    FrankMF
    Nachdem ich die Tage feststellen musste, das irgendwas mit dem Gerät nicht stimmte, bekam keine DNS Auflösung über die Konsole, habe ich das heute mal eben neuinstalliert. Armbian ist ja immer was spezielles Hat sich bis heute nix dran geändert..... Ok, dann heute mal eben ein neues Image erstellt. Download Gewählt habe ich das Armbian Buster. Image auf die SD-Karte, eingeloggt. Alles wie oben erstellt und abgespeichert. Neustart, geht wieder alles. root@192.168.3.15's password: _ _ _ ____ ____ ____ | \ | | __ _ _ __ ___ _ __ (_) | _ \|___ \/ ___| | \| |/ _` | '_ \ / _ \| '_ \| | | |_) | __) \___ \ | |\ | (_| | | | | (_) | |_) | | | _ < / __/ ___) | |_| \_|\__,_|_| |_|\___/| .__/|_| |_| \_\_____|____/ |_| Welcome to Debian GNU/Linux 10 (buster) with Linux 5.9.11-rockchip64 System load: 2% Up time: 11 min Memory usage: 10% of 978M IP: 192.168.3.15 192.168.1.1 192.168.2.1 CPU temp: 61°C Usage of /: 5% of 29G Last login: Sun Dec 6 12:28:10 2020 from 192.168.3.213 Kernelversion root@nanopi-r2s:~# uname -a Linux nanopi-r2s 5.9.11-rockchip64 #20.11.1 SMP PREEMPT Fri Nov 27 21:59:08 CET 2020 aarch64 GNU/Linux ip a oot@nanopi-r2s:~# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether b2:b5:10:38:9e:76 brd ff:ff:ff:ff:ff:ff inet 192.168.3.15/24 brd 192.168.3.255 scope global dynamic eth0 valid_lft 6360sec preferred_lft 6360sec inet6 2a02:908:xxxxxx/64 scope global dynamic mngtmpaddr valid_lft 7196sec preferred_lft 596sec inet6 fe80::b0b5:10ff:fe38:9e76/64 scope link valid_lft forever preferred_lft forever 3: lan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether b2:b5:10:38:9e:96 brd ff:ff:ff:ff:ff:ff 4: lan0.100@lan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether b2:b5:10:38:9e:96 brd ff:ff:ff:ff:ff:ff inet 192.168.1.1/24 brd 192.168.1.255 scope global lan0.100 valid_lft forever preferred_lft forever inet6 fe80::b0b5:10ff:fe38:9e96/64 scope link valid_lft forever preferred_lft forever 5: lan0.200@lan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether b2:b5:10:38:9e:96 brd ff:ff:ff:ff:ff:ff inet 192.168.2.1/24 brd 192.168.2.255 scope global lan0.200 valid_lft forever preferred_lft forever inet6 fe80::b0b5:10ff:fe38:9e96/64 scope link valid_lft forever preferred_lft forever Vom Notebook aus funktioniert auch alles. So weit bin ich zufrieden. Jetzt mal langsam anfangen, der Kiste IPv6 beizubringen. Oje, nicht gerade mein Lieblingsthema... Bis der NanoPi R4S hier ankommt und ein vernünftiges Image hat, vergeht ja noch was Zeit...
  • ROCKPro64 - Zwei LAN Schnittstellen / VLAN einrichten

    ROCKPro64 linux vlan rockpro64
    4
    0 Stimmen
    4 Beiträge
    675 Aufrufe
    FrankMF
    Das Setup heute mal getestet um zu sehen, ob das auch so funktioniert. LAN an meine Fritzbox (DHCP) an eth1.100 mein Notebook an eth1.200 meine PS4 Und dann mal gemütlich eine Runde MW gezockt. Läuft alles einwandfrei
  • ACER und der UEFI-Booteintrag!

    Linux linux
    1
    0 Stimmen
    1 Beiträge
    238 Aufrufe
    Niemand hat geantwortet
  • pdo Abfrage funktioniert nicht

    Linux linux
    2
    0 Stimmen
    2 Beiträge
    582 Aufrufe
    FrankMF
    Wichtig ist natürlich auch, das folgendes php Paket installiert ist! sudo apt install php7.0-mysql Je nachdem welche PHP Version installiert ist, muss der Befehl angepasst werden. Mit php -v könnt ihr nachschauen welche Version installiert ist.