Crowdsec digne remplaçant de fail2ban!

Partagez ici vos Trucs et vos Astuces.
Répondre
Avatar du membre
lol
Site Admin
Site Admin
Messages : 3479
Enregistré le : 04 avr. 2016, 12:11
Localisation : Madagascar
Contact :
Status : Hors ligne

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

Code : Tout sélectionner

# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 11 (bullseye)
Release:        11
Codename:       bullseye

Code : Tout sélectionner

# apt update && apt upgrade

Code : Tout sélectionner

# 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.

Code : Tout sélectionner

# 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

Code : Tout sélectionner

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

Code : Tout sélectionner

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:

Code : Tout sélectionner

# /usr/share/crowdsec/wizard.sh -c
Crowdsec-wizard9.JPG
Vous pouvez à tout moment lister vos filtres:

Code : Tout sélectionner

$ 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 ELLES NE SONT PAS BLOQUÉES!
Nous sommes seulement à la première étape: La détection.

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

Code : Tout sélectionner

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 ICI la listes des bouncers disponibles .

Il y en a pas mal...
Le plus intéressant pour un serveur est celui utilisant iptables/nftables.

Code : Tout sélectionner

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:

Code : Tout sélectionner

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

Code : Tout sélectionner

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

Code : Tout sélectionner

# 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

Code : Tout sélectionner

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

Code : Tout sélectionner

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"

Code : Tout sélectionner

# systemctl restart crowdsec
Et ça ne loupe pas évidemment...

Code : Tout sélectionner

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

Code : Tout sélectionner

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

Code : Tout sélectionner

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:
Debian stable. XFCE.
C'est curieux chez les marins ce besoin de faire des phrases (Les tontons flingueurs).
Avatar du membre
dezix
Modérateur
Modérateur
Messages : 1493
Enregistré le : 04 juin 2016, 14:50
Status : Hors ligne

ni Truc, ni Astuce => HS !

... je blague bien sûr :blush:

MERCI ! :good:

Un super tuto que je vais tester dès que possible. :wink:
Debian stable - XFCE
Avatar du membre
lol
Site Admin
Site Admin
Messages : 3479
Enregistré le : 04 avr. 2016, 12:11
Localisation : Madagascar
Contact :
Status : Hors ligne

dezix a écrit : 10 sept. 2021, 10:59 ni Truc, ni Astuce => HS !

... je blague bien sûr :blush:

MERCI ! :good:

Un super tuto que je vais tester dès que possible. :wink:

C'est pas faux...
Mais si on considère que c'est une astuce pour se passer de "fail2ban le lourdaud" on est bon! :rofl:
Debian stable. XFCE.
C'est curieux chez les marins ce besoin de faire des phrases (Les tontons flingueurs).
Avatar du membre
piratebab
Site Admin
Site Admin
Messages : 3756
Enregistré le : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors ligne

complètement dans le mauvais forum, mai dans le wiki 100% !
Avatar du membre
lol
Site Admin
Site Admin
Messages : 3479
Enregistré le : 04 avr. 2016, 12:11
Localisation : Madagascar
Contact :
Status : Hors ligne

piratebab a écrit : 11 sept. 2021, 21:56 complètement dans le mauvais forum, mai dans le wiki 100% !

Oui, je l'ai déjà fait pour moi en plus...
Ce sera pas trop long à faire.
Debian stable. XFCE.
C'est curieux chez les marins ce besoin de faire des phrases (Les tontons flingueurs).
Avatar du membre
lol
Site Admin
Site Admin
Messages : 3479
Enregistré le : 04 avr. 2016, 12:11
Localisation : Madagascar
Contact :
Status : Hors ligne

piratebab a écrit : 11 sept. 2021, 21:56 complètement dans le mauvais forum, mai dans le wiki 100% !

Crowdsec
Debian stable. XFCE.
C'est curieux chez les marins ce besoin de faire des phrases (Les tontons flingueurs).
Répondre