Bonjour,
Voici un petit tuto, pour ceux qui souhaiterai installer Crowdsec en Docker et le configurer sur votre instance SWAG.
Ceci est la suite du tutoriel : [Tuto] Installer SWAG en Docker ( Reverse Proxy )
CrowdSec, c'est quoi ?
A Venir
Disclamer :
Le but de ce tuto sera de rendre cette installation facile et accessible a tous, bien que loin d’être un expert de docker/docker compose, n’hésiter pas à répondre à ce sujet avec vos interrogations, .. Pour ceux qui sont plus a l'aise avec ce genre d'installation, n'hésiter pas a proposer des améliorations, ou des conseils, ...
Pour un support sur Crowdsec ne concernant pas une installation via ce tutoriel, merci de poster votre question dans Applications.
Pré-requis :
Avoir installer SWAG sur sa machine en suivant ce tutoriel : [Tuto] Installer SWAG en Docker ( Reverse Proxy )
Sommaire :
1/ Mise en place de Crowdsec
Aller go
1/ Mise en place de Crowdsec
a/ Installation de Crowdsec
Nous allons en 1er lieu, nous rendre dans notre dossier swag, si par exemple il se trouve dans /volume1/docker/swag, alors on tape :
Si vous avez suivi mon tuto, notre fichier docker-compose.yml de SWAG ce trouve dans ce dossier.
Nous allons créer les deux dossier nécessaire au fonctionnement de Crowdsec :
Nous allons créer notre fichier d'aquisition :
Dedans nous indiquons le template d'aquisions pour la collections nginx :
On sauvegarde le fichier, et on quitte l'éditeur !
Nous allons maintenant editer notre fichier docker-compose afin d'y rajouter notre conteneur Crowdsec :
Ici nous allons donc rajouter le service crowdsec a notre compose swag actuel.
Si vous êtes comme moi avec le fichier docker-compose.yml a la racine de votre dossier SWAG, vous n'avez pas besoin de le modifier le chemins vers le fichier et les 3 dossiers suivant :
Maintenant, vous pouvez enregistrer les modifications, et fermer l'éditeur.
Lancer la commande :
Attendez quelques minutes que le conteneurs démarre Puis passer au point suivant
b/ Configuration du Bouncer sur SWAG
Pour ajouter un "bouncers" a notre conteneur crowdsec, il faut executer cette commande :
Cela va vous donner une clé API à ajouter dans les paramètres d'environnement de SWAG. ( Gardez là , nous allons en avoir besoin juste après ).
Exemple :
Pour configurer le bouncers SWAG, nous allons editer notre fichier docker-compose.
* Suivant votre configuration, il n'est pas forcément strictement identique ce n'est pas grave.
Dans le champs "environnement:" nous allons devois rajouter 3 paramètres :
Attention,
Par exemple comme ceci :
Note: Dans le cas ou vous utilisez deja la variable DOCKER_MODS, par exemple car vous avez configurer le dashboard de SWAG, via :
Une fois les modifications effectuées, vous devez lancer la recréaction du conteneur avec la commande :
c/ Quelques commandes utiles
En Constrution ...
Voir la liste de "decisions" en cours :
Purger la liste de "decisions" en cours :
Supprimer les "decisions" pour une plage ip ( ici 1.2.3.0/24 ) :
Supprimer les "decisions" sur une ip ( ici 1.2.3.0 ) :
Supprimer les "decisions" d'un scenarios ( ici crowdsecurity/ssh-bfcscli ) :
d/ Rajout d'un Tableau de Bord - Dashboard
Je n'utilise plus le Dashboard, je le trouve tres consommateur de ressource pour au final, pas grand chose. Je préfere les stats via la liaison a l'app Crowdsec ( voir point e/ ). Cela signifie que ce point du tutoriel n'est plus maintenu. Cependant pour ceux qui souhaite, la méthode d'installation est consultable juste en dessus :
e/ Lier son instance à l'app Crowsed
Source, merci @axionman
-Aller sur le site https://app.crowdsec.net/ et créer un compte:
-On vous proposera ensuite d'enregistrer une instance à l'aide d'une commande:
En SSH, exécuter la commande suivante:
-Retourner ensuite le site de https://app.crowdsec.net/ et cliquer sur "accept" pour enregistrer l'instance.
-Redémarrer le container de Crowdsec, et voilà, vous pouvez désormais monitorer votre instance depuis le site web de Crowdsec:
2/ Notifications
Les commandes données, le sont toujours en partant du principe que vous êtes en SSH dans notre dossier d'installation de SWAG, avec dedans un dossier crowdsec comprenant les dossiers crowdsec-db et crowdsec-config.
a/ Être notifié via Gotify
Dans le dossier notifications de Crowdsec, nous allons créer un fichier gotify.yaml :
Dedans, nous placerons ce contenu :
Dans ce fichier gotify.yaml, vous allez devois personnaliser une ligne :
-
-
Enregistrer le fichier, et quitter ( Ctrl + X )
Maintenant, nous allons activer les notifications, pour cela on modifie le fichier profiles.yaml présent dans le dossier de configuration de CrowdSec.
Le fichier d'origine doit être similaire a cela :
Nous allons décommenter
On enregistre les modifications ( Ctrl + X ).
Puis on redémarre le conteneur CrowdSec pour que les modifications soit prisent en charge :
❤ Merci à bobcat, Sirius et Loz sur le Discord CrowdSec pour leur aide.
b/ Être notifié via Discord
Linuxserver à fait un tutoriel la dessus à cette adresse : https://www.linuxserver.io/blog/blocking-malicious-connections-with-crowdsec-and-swag.
Voici un petit tuto, pour ceux qui souhaiterai installer Crowdsec en Docker et le configurer sur votre instance SWAG.
Ceci est la suite du tutoriel : [Tuto] Installer SWAG en Docker ( Reverse Proxy )
CrowdSec, c'est quoi ?
A Venir
Disclamer :
Le but de ce tuto sera de rendre cette installation facile et accessible a tous, bien que loin d’être un expert de docker/docker compose, n’hésiter pas à répondre à ce sujet avec vos interrogations, .. Pour ceux qui sont plus a l'aise avec ce genre d'installation, n'hésiter pas a proposer des améliorations, ou des conseils, ...
Pour un support sur Crowdsec ne concernant pas une installation via ce tutoriel, merci de poster votre question dans Applications.
Pré-requis :
Avoir installer SWAG sur sa machine en suivant ce tutoriel : [Tuto] Installer SWAG en Docker ( Reverse Proxy )
Sommaire :
1/ Mise en place de Crowdsec
a/ Installation de Crowdsec
b/ Configuration du Bouncer sur SWAG
c/ Quelques commandes utiles
d/ Rajout d'un Tableau de Bord ( Optionnel )
e/ Lier son instance à l'app Crowsed ( Optionnel )
2/ Notificationsa/ Être notifié via Gotify
b/ Être notifié via Discord
Aller go
1/ Mise en place de Crowdsec
a/ Installation de Crowdsec
Nous allons en 1er lieu, nous rendre dans notre dossier swag, si par exemple il se trouve dans /volume1/docker/swag, alors on tape :
cd /volume1/docker/swag
Si vous avez suivi mon tuto, notre fichier docker-compose.yml de SWAG ce trouve dans ce dossier.
Nous allons créer les deux dossier nécessaire au fonctionnement de Crowdsec :
mkdir -p crowdsec/{crowdsec-db,crowdsec-config}
Nous allons créer notre fichier d'aquisition :
nano crowdsec/acquis.yaml
Dedans nous indiquons le template d'aquisions pour la collections nginx :
Code:
filenames:
- /var/log/nginx/*.log
labels:
type: nginx
On sauvegarde le fichier, et on quitte l'éditeur !
Nous allons maintenant editer notre fichier docker-compose afin d'y rajouter notre conteneur Crowdsec :
nano docker-compose.yml
Code:
version: "2.1"
services:
swag:
[...]
crowdsec:
container_name: crowdsec
image: crowdsecurity/crowdsec
restart: unless-stopped
environment:
- COLLECTIONS=crowdsecurity/nginx
- GID=1000
depends_on:
- swag
volumes:
- ./config/log/nginx:/var/log/nginx
- ./crowdsec/acquis.yaml:/etc/crowdsec/acquis.yaml
- ./crowdsec/crowdsec-db:/var/lib/crowdsec/data/
- ./crowdsec/crowdsec-config:/etc/crowdsec/
security_opt:
- no-new-privileges=true
Ici nous allons donc rajouter le service crowdsec a notre compose swag actuel.
GID
doit être égal au PGID de votre utilisateurs ( comme nous avons configuré le PGID dans SWAG )Si vous êtes comme moi avec le fichier docker-compose.yml a la racine de votre dossier SWAG, vous n'avez pas besoin de le modifier le chemins vers le fichier et les 3 dossiers suivant :
./crowdsec/acquis.yaml
doit correspondre au fichier créer avant../config/log/nginx
doit correspondre au dossier vers les logs nginx de SWAG. ./crowdsec/crowdsec-db
doit correspondre au dossier créer en début de paragraphe../crowdsec/crowdsec-config
doit correspondre au dossier créer en début de paragraphe.Maintenant, vous pouvez enregistrer les modifications, et fermer l'éditeur.
Lancer la commande :
docker compose up -d
pour mettre à jour la configuration, cela va lancer la création du conteneur crowdsec que nous avons rajouté !Attendez quelques minutes que le conteneurs démarre Puis passer au point suivant
b/ Configuration du Bouncer sur SWAG
Pour ajouter un "bouncers" a notre conteneur crowdsec, il faut executer cette commande :
docker exec -t crowdsec cscli bouncers add bouncer-swag
Cela va vous donner une clé API à ajouter dans les paramètres d'environnement de SWAG. ( Gardez là , nous allons en avoir besoin juste après ).
Exemple :
Pour configurer le bouncers SWAG, nous allons editer notre fichier docker-compose.
Code:
version: "2"
services:
swag:
image: linuxserver/swag
container_name: swag
cap_add:
- NET_ADMIN
# labels:
# - com.centurylinklabs.watchtower.enable=true
environment:
- PUID=9999
- PGID=111
- TZ=Europe/Paris
- URL=tutoevo.fr
- SUBDOMAINS=wildcard
- VALIDATION=dns
- DNSPLUGIN=ovh
- EMAIL=xxx@xxx.com
volumes:
- ./config:/config
ports:
- 443:443
- 80:80
restart: unless-stopped
* Suivant votre configuration, il n'est pas forcément strictement identique ce n'est pas grave.
Dans le champs "environnement:" nous allons devois rajouter 3 paramètres :
Code:
- DOCKER_MODS=linuxserver/mods:swag-crowdsec
- CROWDSEC_API_KEY=hg45a7235458c69c46f59574334sk11p
- CROWDSEC_LAPI_URL=http://crowdsec:8080
Attention,
hg45a7235458c69c46f59574334sk11p
de la variable CROWDSEC_API_KEY est a remplacer par l'apikey que vous a donner la commande au début de ce paraphaphe.Par exemple comme ceci :
Code:
version: "2"
services:
swag:
image: linuxserver/swag
container_name: swag
cap_add:
- NET_ADMIN
# labels:
# - com.centurylinklabs.watchtower.enable=true
environment:
- PUID=9999
- PGID=111
- TZ=Europe/Paris
- URL=tutoevo.fr
- SUBDOMAINS=wildcard
- VALIDATION=dns
- DNSPLUGIN=ovh
- EMAIL=xxx@xxx.com
- DOCKER_MODS=linuxserver/mods:swag-crowdsec
- CROWDSEC_API_KEY=hg45a7235458c69c46f59574334sk11p
- CROWDSEC_LAPI_URL=http://crowdsec:8080
volumes:
- ./config:/config
ports:
- 443:443
- 80:80
restart: unless-stopped
Note: Dans le cas ou vous utilisez deja la variable DOCKER_MODS, par exemple car vous avez configurer le dashboard de SWAG, via :
- DOCKER_MODS=linuxserver/mods:swag-dashboard
vous devez rajouter le mods crowdsec via le séparateur | de cette façon : - DOCKER_MODS=linuxserver/mods:swag-dashboard|linuxserver/mods:swag-crowdsec
Une fois les modifications effectuées, vous devez lancer la recréaction du conteneur avec la commande :
docker compose up -d
c/ Quelques commandes utiles
En Constrution ...
docker exec -t crowdsec cscli metrics
Voir la liste de "decisions" en cours :
docker exec -t crowdsec cscli decisions list
Purger la liste de "decisions" en cours :
docker exec -t crowdsec cscli decisions delete --all
Supprimer les "decisions" pour une plage ip ( ici 1.2.3.0/24 ) :
docker exec -t crowdsec cscli decisions delete -r 1.2.3.0/24
Supprimer les "decisions" sur une ip ( ici 1.2.3.0 ) :
docker exec -t crowdsec cscli decisions delete -i 1.2.3.4
Supprimer les "decisions" d'un scenarios ( ici crowdsecurity/ssh-bfcscli ) :
docker exec -t crowdsec cscli decisions delete -s crowdsecurity/ssh-bfcscli
d/ Rajout d'un Tableau de Bord - Dashboard
Je n'utilise plus le Dashboard, je le trouve tres consommateur de ressource pour au final, pas grand chose. Je préfere les stats via la liaison a l'app Crowdsec ( voir point e/ ). Cela signifie que ce point du tutoriel n'est plus maintenu. Cependant pour ceux qui souhaite, la méthode d'installation est consultable juste en dessus :
Nous sommes toujours dans notre dossier
On créer le dashboard avec la commande suivante :
Puis on récupère le Dockerfile qui va nous permettre de créer l'image de notre conteneur :
Nous allons maintenant éditer notre docker-compose.yml afin d'y rajouter notre conteneur "dashboard", vous allez rajouter le service "dashboard" à la fin de fichier, comme ceci :
Puis on valide avec Ctrl+X
Maintenant, on lance la création du conteneur :
Une fois fini, on se rend a l'adresse https://IP_LOCALE_NAS:3000 pour acceder a l'interface du tableau de bord !
Les identifiants par defaut sont :
swag
!On créer le dashboard avec la commande suivante :
mkdir -p crowdsec/dashboard
Puis on récupère le Dockerfile qui va nous permettre de créer l'image de notre conteneur :
wget -P crowdsec/dashboard https://github.com/crowdsecurity/example-docker-compose/blob/main/basic/crowdsec/dashboard/Dockerfile
Nous allons maintenant éditer notre docker-compose.yml afin d'y rajouter notre conteneur "dashboard", vous allez rajouter le service "dashboard" à la fin de fichier, comme ceci :
Code:
version: "2.1"
services:
swag:
[...]
crowdsec:
[...]
dashboard:
container_name: crowdsec-dashboard
build: ./crowdsec/dashboard
restart: unless-stopped
depends_on:
- crowdsec
ports:
- 3000:3000
environment:
- MB_DB_FILE=/data/metabase.db
- MGID=1000
volumes:
- ./crowdsec/crowdsec-db:/metabase-data/
Puis on valide avec Ctrl+X
Maintenant, on lance la création du conteneur :
docker compose up -d
Une fois fini, on se rend a l'adresse https://IP_LOCALE_NAS:3000 pour acceder a l'interface du tableau de bord !
Les identifiants par defaut sont :
crowdsec@crowdsec.net
and !!Cr0wdS3c_M3t4b4s3??
e/ Lier son instance à l'app Crowsed
Source, merci @axionman
-Aller sur le site https://app.crowdsec.net/ et créer un compte:
-On vous proposera ensuite d'enregistrer une instance à l'aide d'une commande:
En SSH, exécuter la commande suivante:
docker exec -t crowdsec cscli console enroll cl8rkusxxxxxxxxxxxxxxx
-Retourner ensuite le site de https://app.crowdsec.net/ et cliquer sur "accept" pour enregistrer l'instance.
-Redémarrer le container de Crowdsec, et voilà, vous pouvez désormais monitorer votre instance depuis le site web de Crowdsec:
2/ Notifications
Les commandes données, le sont toujours en partant du principe que vous êtes en SSH dans notre dossier d'installation de SWAG, avec dedans un dossier crowdsec comprenant les dossiers crowdsec-db et crowdsec-config.
a/ Être notifié via Gotify
Dans le dossier notifications de Crowdsec, nous allons créer un fichier gotify.yaml :
nano crowdsec/crowdsec-config/notifications/gotify.yaml
Dedans, nous placerons ce contenu :
YAML:
type: http # Don't change
name: gotify # Must match the registered plugin in the profile
# One of "trace", "debug", "info", "warn", "error", "off"
log_level: trace
# group_wait: # Time to wait collecting alerts before relaying a message to this plugin, eg "30s"
# group_threshold: # Amount of alerts that triggers a message before <group_wait> has expired, eg "10"
# max_retry: # Number of attempts to relay messages to plugins in case of error
# timeout: # Time to wait for response from the plugin before considering the attempt a failure, eg "10s"
#-------------------------
# plugin-specific options
# The following template receives a list of models.Alert objects
# The output goes in the http request body
format: |
{{ range . -}}
{{ $alert := . -}}
{
"extras": {
"client::display": {
"contentType": "text/markdown"
}
},
"priority": 3,
{{range .Decisions -}}
"title": "{{.Type }} {{ .Value }} for {{.Duration}}",
"message": "{{.Scenario}} \n\n[crowdsesc cti](https://app.crowdsec.net/cti/{{.Value -}}) \n\n[shodan](https://shodan.io/host/{{.Value -}})"
{{end -}}
}
{{ end -}}
# The plugin will make requests to this url, eg: https://www.example.com/
url: https://gotify.ndd/message?token=<MON_TOKEN>
# Any of the http verbs: "POST", "GET", "PUT"...
method: POST
headers:
Content-Type: application/json
# Authorization: token 0x64312313
# skip_tls_verification: # true or false. Default is false
Dans ce fichier gotify.yaml, vous allez devois personnaliser une ligne :
url: https://gotify.ndd/message?token=<MON_TOKEN>
-
https://gotify.ndd
est a remplacer par l'url de votre instance gotify-
<MON_TOKEN>
est a remplacer pour le token que vous aurez généré dans l'onglet APPS de GotifyEnregistrer le fichier, et quitter ( Ctrl + X )
Maintenant, nous allons activer les notifications, pour cela on modifie le fichier profiles.yaml présent dans le dossier de configuration de CrowdSec.
nano crowdsec/crowdsec-config/profiles.yaml
Le fichier d'origine doit être similaire a cela :
YAML:
name: default_ip_remediation
#debug: true
filters:
- Alert.Remediation == true && Alert.GetScope() == "Ip"
decisions:
- type: ban
duration: 4h
#notifications:
# - slack_default # Set the webhook in /etc/crowdsec/notifications/slack.yaml before enabling this.
# - splunk_default # Set the splunk url and token in /etc/crowdsec/notifications/splunk.yaml before enabling this.
# - http_default # Set the required http parameters in /etc/crowdsec/notifications/http.yaml before enabling this.
# - email_default # Set the required email parameters in /etc/crowdsec/notifications/email.yaml before enabling this.
on_success: break
Nous allons décommenter
notifications:
et rajouter - gotify
sur la ligne d'apres, comme cela :
YAML:
name: default_ip_remediation
#debug: true
filters:
- Alert.Remediation == true && Alert.GetScope() == "Ip"
decisions:
- type: ban
duration: 4h
notifications:
- gotify
# - slack_default # Set the webhook in /etc/crowdsec/notifications/slack.yaml before enabling this.
# - splunk_default # Set the splunk url and token in /etc/crowdsec/notifications/splunk.yaml before enabling this.
# - http_default # Set the required http parameters in /etc/crowdsec/notifications/http.yaml before enabling this.
# - email_default # Set the required email parameters in /etc/crowdsec/notifications/email.yaml before enabling this.
on_success: break
On enregistre les modifications ( Ctrl + X ).
Puis on redémarre le conteneur CrowdSec pour que les modifications soit prisent en charge :
docker restart crowdsec
❤ Merci à bobcat, Sirius et Loz sur le Discord CrowdSec pour leur aide.
b/ Être notifié via Discord
Linuxserver à fait un tutoriel la dessus à cette adresse : https://www.linuxserver.io/blog/blocking-malicious-connections-with-crowdsec-and-swag.
2024-11-28 - Mise en SPOILER du point d/ "Dashboard"
2024-02-01 - Mise à jour du chemin pour récupérer le Dockerfile du Dashboard
2023-03-26 - Rajout de précision
2022-09-29 - Rajout de la section "Notifications" avec l'explication pour mettre en place les notifications des bannissements sur Gotify
2022-06-26 - Rajout de la partie "Rajout d'un Tableau de Bord - Dashboard"
Dernière édition: