Crowdsec

De Le Wiki du Forum-Debian.fr
Révision datée du 12 septembre 2021 à 12:40 par Lol (discussion | contributions) (Page créée avec « Bonjour, Je vais vous présenter [https://github.com/crowdsecurity/crowdsec Crowdsec] nouvel outil de sécurité conçu pour protéger les serveurs CrowdSec est un moteur… »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Bonjour, Je vais vous présenter Crowdsec nouvel outil de sécurité conçu pour protéger les serveurs

CrowdSec est un moteur de détection de comportement Open source, moderne et collaboratif (couplé à un réseau mondial de réputation IP)

Il s'appuie sur la philosophie de fail2ban mais est compatible IPV6 et il est au moins 60 fois plus rapide Il est est conçu pour les infrastructures modernes basées sur le Cloud/Conteneurs/VM mais fonctionne très bien en mode autonome (standalone)

Uns fois détectées, les IP jugées avoir des comportement dangereux ou suspicieux sont bloquées par divers moyens: Bloc de pare-feu (iptables/nftables), nginx http 403, Captchas, etc

Les adresses IP agressive peut être envoyée à CrowdSec pour être partagée entre tous les utilisateurs afin d'améliorer encore la sécurité de chacun. C'est le côté collaboratif.

Le principe est simple:

Un processus (appelons le "le physionomiste") va éplucher vos logs à la recherche de comportement suspicieux. Les IP trouvés seront transmise par le physionomiste au videur qui va prendre les actions nécessaire pour bloquer le malfaisant.

Je l'ai installé sur quatre serveurs et je ne le regrette pas...

# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 11 (bullseye)
Release:        11
Codename:       bullseye
# apt update && apt upgrade
# apt install bash gettext whiptail curl wget apt-transport-https
# curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash
...
The repository is setup! You can now install packages.
# cat /etc/apt/sources.list.d/crowdsec_crowdsec.list
# this file was generated by packagecloud.io for
# the repository at https://packagecloud.io/crowdsec/crowdsec

deb https://packagecloud.io/crowdsec/crowdsec/debian/ bullseye main
deb-src https://packagecloud.io/crowdsec/crowdsec/debian/ bullseye main
root@bullseye:~# apt-cache policy crowdsec
crowdsec:
  Installé : 1.1.1
  Candidat : 1.1.1
 Table de version :
 *** 1.1.1 500
        500 https://packagecloud.io/crowdsec/crowdsec/debian bullseye/main amd64 Packages
        100 /var/lib/dpkg/status
     1.1.0 500
        500 https://packagecloud.io/crowdsec/crowdsec/debian bullseye/main amd64 Packages
     1.0.9-2+b4 500
        500 http://deb.debian.org/debian bullseye/main amd64 Packages
apt install -y crowdsec
...
Creating crowdsec configuration in /etc/crowdsec
Creating /etc/crowdsec/acquis.yaml
INFO[10/09/2021:08:59:00] crowdsec_wizard: service 'sshd': /var/log/auth.log
INFO[10/09/2021:08:59:00] crowdsec_wizard: service 'linux': /var/log/syslog /var/log/kern.log /var/log/messages
WARN[10-09-2021 08:59:00 AM] can't load CAPI credentials from '/etc/crowdsec/online_api_credentials.yaml' (missing field)
INFO[10-09-2021 08:59:00 AM] push and pull to crowdsec API disabled
INFO[10-09-2021 08:59:00 AM] Machine 'a11b6e438546403ca3f0718f32e97a05XrlWffcAKHCWdpSD' successfully added to the local API
INFO[10-09-2021 08:59:00 AM] API credentials dumped to '/etc/crowdsec/local_api_credentials.yaml'
WARN[10-09-2021 08:59:01 AM] can't load CAPI credentials from '/etc/crowdsec/online_api_credentials.yaml' (missing field)
INFO[10-09-2021 08:59:01 AM] push and pull to crowdsec API disabled
INFO[10-09-2021 08:59:04 AM] Successfully registered to Central API (CAPI)
INFO[10-09-2021 08:59:04 AM] Central API credentials dumped to '/etc/crowdsec/online_api_credentials.yaml'
WARN[10-09-2021 08:59:04 AM] Run 'sudo systemctl reload crowdsec' for the new configuration to be effective.
Updating hub
INFO[10-09-2021 08:59:06 AM] Wrote new 131926 bytes index to /etc/crowdsec/hub/.index.json
INFO[10/09/2021:08:59:06] crowdsec_wizard: Installing collection 'crowdsecurity/sshd'
INFO[10/09/2021:08:59:09] crowdsec_wizard: Installing collection 'crowdsecurity/linux'
Created symlink /etc/systemd/system/multi-user.target.wants/crowdsec.service → /lib/systemd/system/crowdsec.service.
You always can run the configuration again interactively using '/usr/share/crowdsec/wizard.sh -c

Comme vous pouvez le vois, l'installeur à automatiquement activé les services qu'il a détecté:

INFO[10/09/2021:08:59:00] crowdsec_wizard: service 'sshd': /var/log/auth.log
INFO[10/09/2021:08:59:00] crowdsec_wizard: service 'linux': /var/log/syslog /var/log/kern.log /var/log/messages

Vous pouvez à tout moment relancer l'assistant pour choisir les services à surveiller/protéger:

# /usr/share/crowdsec/wizard.sh -c

[attachment=0]Crowdsec-wizard9.JPG[/attachment]

Vous pouvez à tout moment lister vos filtres:

$ cscli collections list

------------------------------------------------------------------------------------------------------------
 NAME                               📦 STATUS   VERSION  LOCAL PATH
------------------------------------------------------------------------------------------------------------
 crowdsecurity/wordpress            ✔️  enabled  0.2      /etc/crowdsec/collections/wordpress.yaml
 crowdsecurity/linux                ✔️  enabled  0.2      /etc/crowdsec/collections/linux.yaml
 crowdsecurity/sshd                 ✔️  enabled  0.1      /etc/crowdsec/collections/sshd.yaml
 crowdsecurity/postfix              ✔️  enabled  0.2      /etc/crowdsec/collections/postfix.yaml
 crowdsecurity/base-http-scenarios  ✔️  enabled  0.4      /etc/crowdsec/collections/base-http-scenarios.yaml
 crowdsecurity/iptables             ✔️  enabled  0.1      /etc/crowdsec/collections/iptables.yaml
 crowdsecurity/mysql                ✔️  enabled  0.1      /etc/crowdsec/collections/mysql.yaml
 crowdsecurity/apache2              ✔️  enabled  0.1      /etc/crowdsec/collections/apache2.yaml
 crowdsecurity/dovecot              ✔️  enabled  0.1      /etc/crowdsec/collections/dovecot.yaml
------------------------------------------------------------------------------------------------------------

A ce niveau vous avez une liste d'IP à bloquer, mais [b]ELLES NE SONT PAS BLOQUÉES![/b] Nous sommes seulement à la première étape: La détection.

Vous pouvez d'ailleurs simplement lister les IPs à bloquer.

root@bullseye:~# cscli decisions list --all
+-----+--------+-----------------------+----------------------+--------+---------+----+--------+---------------------+----------+
| ID  | SOURCE |      SCOPE:VALUE      |        REASON        | ACTION | COUNTRY | AS | EVENTS |     EXPIRATION      | ALERT ID |
+-----+--------+-----------------------+----------------------+--------+---------+----+--------+---------------------+----------+
|   1 | CAPI   | Ip:49.88.112.75/32    | crowdsecurity/ssh-bf | ban    |         |    |      0 | 23h15m26.663373073s |        1 |
...
| 100 | CAPI   | Ip:123.207.185.54/32  | crowdsecurity/ssh-bf | ban    |         |    |      0 | 23h15m27.059075788s |        1 |
+-----+--------+-----------------------+----------------------+--------+---------+----+--------+---------------------+----------+


Pour bloquer les malfaisants, il faut installer votre/vos "Bouncers" (Bouncers = Videur de boite de nuit...). Vous trouverez [url=https://hub.crowdsec.net/browse/#bouncers]ICI la listes des bouncers disponibles[/url] .

Il y en a pas mal... Le plus intéressant pour un serveur est [url=https://hub.crowdsec.net/author/crowdsecurity/bouncers/cs-firewall-bouncer]celui utilisant iptables/nftables[/url].

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

Le fichier de config se trouve ici:

nano /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
  • mode: cpeut être iptables, nftables , ipset ou pf
  • update_frequency: contrôle la fréquence à laquelle le bouncer va interroger l’API locale
  • api_url & api_key: contrôler les paramètres de l’API locale.
  • iptables_chains: Permet (en mode iptables) de contrôler dans quelle chaîne les règles vont être insérées. (s’il est vide, le videur ne conservera que les listes d’ipset)
  • disable_ipv6: Définir sur true pour désactiver ipv6
  • deny_action: Définir quelle action utiliser pour refuser, DROP ou REJECT
  • deny_log: Définir sur true pour ajouter une instruction de journal à la règle de pare-feu
  • deny_log_prefix: si la journalisation est activée, permet de définir le préfixe du journal, par défaut "crowdsec
mode: nftables
pid_dir: /var/run/
update_frequency: 10s
daemonize: true
log_mode: file
log_dir: /var/log/
log_level: info
api_url: http://localhost:8080/
api_key: 7c862f327f0205c2382e872dba60cfd4
disable_ipv6: false
deny_action: DROP
deny_log: true
#to change log prefix
deny_log_prefix: "crowdsec: "
#if present, insert rule in those chains
iptables_chains:
  - INPUT
#  - FORWARD
#  - DOCKER-USER
# systemctl start crowdsec-firewall-bouncer
# systemctl status crowdsec-firewall-bouncer
# systemctl enable crowdsec-firewall-bouncer

Et voilou ... Vous êtes protégé!

On va faire un test pour être sur!

root@bullseye:~# cscli decisions list No active decisions

A partir d'une autre machine on va faire le vilain... Pour des raisons de test j'ai enlevé la plage d'IP privée du la liste blanche

# nano /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"
  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"
# systemctl restart crowdsec

Et ça ne loupe pas évidemment...

Sep 10 10:11:12 bullseye sshd[4584]: Failed password for root from 10.150.16.21 port 32820 ssh2
Sep 10 10:11:13 bullseye sshd[4584]: Failed password for root from 10.150.16.21 port 32820 ssh2
root@bullseye:~# cscli decisions list
+-----+----------+-----------------+----------------------+--------+---------+----+--------+--------------------+----------+
| ID  |  SOURCE  |   SCOPE:VALUE   |        REASON        | ACTION | COUNTRY | AS | EVENTS |     EXPIRATION     | ALERT ID |
+-----+----------+-----------------+----------------------+--------+---------+----+--------+--------------------+----------+
| 201 | crowdsec | Ip:10.150.16.21 | crowdsecurity/ssh-bf | ban    |         |    |      6 | 3h59m38.770890584s |        3 |
+-----+----------+-----------------+----------------------+--------+---------+----+--------+--------------------+----------+

Nous allons nous débloquer...

root@bullseye:~# cscli decisions delete -i 10.150.16.21
INFO[10-09-2021 10:12:56 AM] 1 decision(s) deleted

Voilà, simple et efficace. IPv6/IPv4 nftables, rapide et fiable ... et Français! :banana_rock:

A placer entre toutes les mains! :good: