Dans ce nouveau billet, nous allons voir comment centraliser les logs avec Rsyslog afin de les faire parser par un seul agent Crowdsec. Seul les bouncers tourneront sur les machines à protéger. Nous verrons aussi comment configurer Crowdsec afin de lui passer les chemins personnalisés vers les fichiers de logs.
Serveur Crowdsec Local API :
Serveur Nginx :
Serveur Syslog :
Vm malveillante (en charge de simuler des attaques) : Serveur Nginx :
Déclaration des hôtes dans /etc/hosts
vim /etc/hosts
127.0.0.1 localhost
127.0.1.1 srv-rsyslog.lab.lan srv-rsyslog
192.168.1.202 srv-cs-lapi.lab.lan
192.168.1.203 srv-nginx-01.lab.lan
Créez le fichier /etc/rsyslog.d/from_remote_tcp.conf
, puis mettez-y ceci :
# MODULE TCP
module(load="imtcp")
# TEMPLATE
template(name="DynFile" type="string" string="/var/log/remote/%FROMHOST%/%PROGRAMNAME%.log")
# REGLE
ruleset(name="RemoteMachineTcp"){
action(type="omfile" dynaFile="DynFile")
}
# CONFIGURATION DU PORT ET DE LA REGLE
input(type="imtcp" port="514" ruleset="RemoteMachineTcp")
Relancez le service rsyslog.
Modifiez le fichier /etc/hosts afin d'y déclarer le serveur Rsyslog :
root@srv-nginx-01:~# vim /etc/hosts
127.0.0.1 localhost
127.0.1.1 srv-nginx-01.lab.lan srv-nginx-01
192.168.1.202 srv-cs-lapi.lab.lan
192.168.1.205 rsyslog.lab.lan
Editez le fichier /etc/rsyslog.conf
et placez à la fin de la section MODULES, la ligne suivante : module(load="imfile" PollingInterval="10")
Créez le fichier /etc/rsyslog.d/nginx-default-vhost.conf
, puis mettez-y ceci :
## log access
input(type="imfile"
file="/var/log/nginx/access.log"
tag="default-vhost-access")
if $syslogtag == 'default-vhost-access' then {
action(type="omfwd" Target="rsyslog.lab.lan" Port="514" Protocol="tcp")
stop
}
## log error
input(type="imfile"
file="/var/log/nginx/error.log"
tag="default-vhost-error")
if $syslogtag == 'default-vhost-error' then {
action(type="omfwd" Target="rsyslog.lab.lan" Port="514" Protocol="tcp")
stop
}
Relancez le service rsyslog suivi du service Nginx puis depuis le serveur Nginx : curl http://192.168.1.203
Sur le serveur Rsyslog :
root@srv-rsyslog:~# tree /var/log/remote/srv-nginx-01.lab.lan/
/var/log/remote/srv-nginx-01.lab.lan/
├── default-vhost-access.log
└── default-vhost-error.log
N'ayant pas eu d'erreur sur Nginx, j'ai créé manuellement le fichier "default-vhost-error.log".
Faites de requêtes sur le serveur web et vérifier les logs sur le serveur Rsyslog.
Depuis le serveur CS LAPI, on exporte le certificat de notre autorité de certification :
scp /root/pki/CA/ca.crt root@192.168.1.205:/usr/local/share/ca-certificates/
Sur le serveur Rsyslog :
# Mise à jour des autorités de certifications
update-ca-certificates
# Installation de crowdsec
apt install -y gnupg lsb-release apt-transport-https curl
curl -L https://packagecloud.io/crowdsec/crowdsec/gpgkey | apt-key add -
echo "deb https://packagecloud.io/crowdsec/crowdsec/debian/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/crowdsec.list > /dev/null
apt update
apt-get install crowdsec
systemctl enable crowdsec
# On enregistre notre machine auprès du serveur CS LAPI :
cscli lapi register -u https://srv-cs-lapi.lab.lan:8080
# On désactive l'API Locale
vim /lib/systemd/system/crowdsec.service :
# Remplacer la ligne
ExecStart=/usr/bin/crowdsec -c /etc/crowdsec/config.yaml
# par la ligne suivante :
ExecStart=/usr/bin/crowdsec -c /etc/crowdsec/config.yaml -no-api
# On notifie à Systemd la mise à jour du fichier unité
systemctl daemon-reload
Ne redémarrez pas de suite le service.
Sur le serveur CS LAPI, validez la machine :
root@srv-cs-lapi:~# cscli machines list
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NAME IP ADDRESS LAST UPDATE STATUS VERSION
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4f02c64d68fc456c8846281b0418c580bRfsqacxgzv9adtp 127.0.0.1 2021-07-15T12:07:57+02:00 ✔️ v1.1.1-debian-pragmatic-linux-73e0bbaf93070f4a640eb5a22212b5dcf26699de
530ec09a5c4544abaf9425d2fc657f32lfjaejYSbi45K3cO 192.168.1.203 2021-07-15T12:08:01+02:00 ✔️ v1.1.1-debian-pragmatic-linux-73e0bbaf93070f4a640eb5a22212b5dcf26699de
425c2992f9664dcd8c54d9de30b12b4eUEqsCN10fSUrKPpg 192.168.1.205 2021-07-15T13:20:28+02:00 🚫
root@srv-cs-lapi:~# cscli machines validate 425c2992f9664dcd8c54d9de30b12b4eUEqsCN10fSUrKPpg
root@srv-cs-lapi:~# cscli machines list
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NAME IP ADDRESS LAST UPDATE STATUS VERSION
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4f02c64d68fc456c8846281b0418c580bRfsqacxgzv9adtp 127.0.0.1 2021-07-15T12:07:57+02:00 ✔️ v1.1.1-debian-pragmatic-linux-73e0bbaf93070f4a640eb5a22212b5dcf26699de
530ec09a5c4544abaf9425d2fc657f32lfjaejYSbi45K3cO 192.168.1.203 2021-07-15T12:08:01+02:00 ✔️ v1.1.1-debian-pragmatic-linux-73e0bbaf93070f4a640eb5a22212b5dcf26699de
425c2992f9664dcd8c54d9de30b12b4eUEqsCN10fSUrKPpg 192.168.1.205 2021-07-15T13:20:28+02:00 ✔️
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Sur le serveur Rsyslog, relancez Crowdsec : systemctl restart crowdsec.service
Afin de parser les logs reçus depuis Nginx, nous allons installer la collection Nginx et configurer le chemin vers les logs.
Sur le serveur Rsyslog :
# Installation de la collection Nginx :
cscli collections install crowdsecurity/nginx
# Configuration pour l'acquisition des logs par Crowdsec :
vim /etc/crowdsec/acquis.yaml :
#Generated acquisition file - wizard.sh (service: sshd) / files : /var/log/auth.log
filenames:
- /var/log/auth.log
labels:
type: syslog
---
#Generated acquisition file - wizard.sh (service: linux) / files : /var/log/installer/syslog /var/log/syslog /var/log/kern.log /var/log/messages
filenames:
- /var/log/installer/syslog
- /var/log/syslog
- /var/log/kern.log
- /var/log/messages
labels:
type: syslog
---
# Ajout manuel
filenames:
- /var/log/remote/srv-nginx-01.lab.lan/default-vhost-access.log
- /var/log/remote/srv-nginx-01.lab.lan/default-vhost-error.log
labels:
type: nginx
---
Sur le serveur Nginx : afin de valider la démonstration, nous allons désinstaller Crowdsec agent sur ce serveur.
systemctl stop crowdsec
apt remove crowdsec
Sur le serveur CS LAPI : on supprime la machine Nginx.
root@srv-cs-lapi:~# cscli machines list
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NAME IP ADDRESS LAST UPDATE STATUS VERSION
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4f02c64d68fc456c8846281b0418c580bRfsqacxgzv9adtp 127.0.0.1 2021-07-15T12:07:57+02:00 ✔️ v1.1.1-debian-pragmatic-linux-73e0bbaf93070f4a640eb5a22212b5dcf26699de
530ec09a5c4544abaf9425d2fc657f32lfjaejYSbi45K3cO 192.168.1.203 2021-07-15T12:08:01+02:00 ✔️ v1.1.1-debian-pragmatic-linux-73e0bbaf93070f4a640eb5a22212b5dcf26699de
425c2992f9664dcd8c54d9de30b12b4eUEqsCN10fSUrKPpg 192.168.1.205 2021-07-15T13:20:28+02:00 ✔️ v1.1.1-debian-pragmatic-linux-73e0bbaf93070f4a640eb5a22212b5dcf26699de
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
root@srv-cs-lapi:~# cscli machines delete 530ec09a5c4544abaf9425d2fc657f32lfjaejYSbi45K3cO
INFO[15-07-2021 02:57:34 PM] machine '530ec09a5c4544abaf9425d2fc657f32lfjaejYSbi45K3cO' deleted successfully
root@srv-cs-lapi:~# cscli machines list
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NAME IP ADDRESS LAST UPDATE STATUS VERSION
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4f02c64d68fc456c8846281b0418c580bRfsqacxgzv9adtp 127.0.0.1 2021-07-15T12:07:57+02:00 ✔️ v1.1.1-debian-pragmatic-linux-73e0bbaf93070f4a640eb5a22212b5dcf26699de
425c2992f9664dcd8c54d9de30b12b4eUEqsCN10fSUrKPpg 192.168.1.205 2021-07-15T13:20:28+02:00 ✔️ v1.1.1-debian-pragmatic-linux-73e0bbaf93070f4a640eb5a22212b5dcf26699de
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
À partir de maintenant, seuls les logs issues de notre serveur Rsyslog seront analysés.
Sur le serveur Rsyslog, pensez à "whitelister" les IP des serveurs et commenter la plage "192.168.0.0/16" (rappel : https://blog.raspot.in/fr/blog/crowdsec-ajout-et-configuration-dun-bouncer#configuration-de-la-whitelist)
Depuis la VM attaquante : nikto -host 192.168.1.203
Ce qui donne :