Graylog (Gestion des journaux)
Environnement
- Conteneur LXC Proxmox
- Ubuntu 22.04
Installation
Mettre à jour le système et installer les dépendances :
sudo apt update
sudo apt dist-upgrade -y
sudo apt install apt-transport-https gnupg2 uuid-runtime pwgen -y
Installer Java :
sudo apt install openjdk-18-jre-headless -y
Installer ElasticSearch 7 OSS :
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/oss-7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
sudo apt update
sudo apt install elasticsearch-oss -y
Éditer le fichier /etc/elasticsearch/elasticsearch.yml et ajouter les lignes suivantes à la fin :
sudo nano /etc/elasticsearch/elasticsearch.yml
cluster.name: graylog
action.auto_create_index: false
Activer et démarrrer le service ElasticSearch :
sudo systemctl daemon-reload
sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch
Vérifier que le serveur ElasticSearch fonctionne :
sudo systemctl --type=service --state=active | grep elasticsearch
elasticsearch.service loaded active running Elasticsearch
Installer MongoDB :
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
sudo apt update
sudo apt install -y mongodb-org -y
Activer et démarrrer le service MongoDB :
sudo systemctl daemon-reload
sudo systemctl enable mongod.service
sudo systemctl start mongod.service
Vérifier que le serveur MongoDB fonctionne :
sudo systemctl --type=service --state=active | grep mongod
mongod.service loaded active running MongoDB Database Server
Installer Graylog :
wget https://packages.graylog2.org/repo/packages/graylog-4.2-repository_latest.deb
sudo dpkg -i graylog-4.2-repository_latest.deb
sudo apt update
sudo apt install graylog-server graylog-enterprise-plugins graylog-integrations-plugins graylog-enterprise-integrations-plugins
rm graylog-4.2-repository_latest.deb
Générer un mot de passe :
pwgen -N 1 -s 96
WI3NgHbbTeEfVD24KisYt4HIGPUTglvf8L9ZhLsHAq2zn319NIkbDXkBnGEbpBQ7K6MFZFmHwKDXhvyP51zbVQ2Cjl4qlRRo
Choisir un mot de passe pour l'utilisateur root de Graylog et générer son condensat SHA2 :
echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
Enter Password: root_password
39791b7e712ac508d200e8212e9311f8ddf94da33706c75a71a8f907717b1f97
Éditer le fichier /etc/graylog/server/server.conf et compléter les directives password_secret, root_password_sha2, root_email, root_timezone et http_bind_address :
sudo nano /etc/graylog/server/server.conf
password_secret = WI3NgHbbTeEfVD24KisYt4HIGPUTglvf8L9ZhLsHAq2zn319NIkbDXkBnGEbpBQ7K6MFZFmHwKDXhvyP51zbVQ2Cjl4qlRRo
root_password_sha2 = 39791b7e712ac508d200e8212e9311f8ddf94da33706c75a71a8f907717b1f97
root_email =
root_timezone = Europe/Paris
Activer et démarrer le service Graylog :
sudo systemctl daemon-reload
sudo systemctl enable graylog-server.service
sudo systemctl start graylog-server.service
Vérifier que le serveur Graylog fonctionne :
sudo systemctl --type=service --state=active | grep graylog
graylog-server.service loaded active running Graylog server
L'interface Web du serveur Graylog est accessible à l'adresse : http://ip_serveur_graylog:9000
Configuration
Ajustement de la mémoire utilisée par les processus Java
Par défaut, les processus Java de ElasticSearch et Graylog sont lancés avec 1 Gio de mémoire initiale (xms) et 1 Gio maximum (xmx).
En fonction de la charge du serveur, il sera nécessaire d'augmenter la taille de la mémoire utilisée.
ElasticSearch
La quantité de mémoire utilisée peut être contrôlée à l'aide la commande :
curl -sS -XGET "ip_serveur_graylog:9200/_cat/nodes?h=heap*&v"
heap.current heap.percent heap.max
366.9mb 35 1gb
Pour visualiser les valeurs dans le temps :
watch -n 1 curl -sS -XGET "ip_serveur_graylog:9200/_cat/nodes?h=heap*&v"
Editer le fichier /etc/elasticsearch/jvm.options et modifier les valeurs Xms1g et Xmx1g :
sudo nano /etc/elasticsearch/jvm.options
-Xms1g
-Xmx1g
Relancer le service :
sudo systemctl restart elasticsearch
Graylog
La quantité de mémoire utilisée peut être contrôlée à l'adresse : http://ip_serveur_graylog:9000/system/nodes
Editer le fichier /etc/default/graylog-server et modifier les valeurs Xms1g et Xmx1g :
sudo nano /etc/default/graylog-server
# Default Java options for heap and garbage collection.
GRAYLOG_SERVER_JAVA_OPTS="-Xms1g -Xmx1g -XX:NewRatio=1 -server -XX:+ResizeTLAB -XX:-OmitStackTraceInFastThrow"
Relancer le service :
sudo systemctl restart graylog-server.service
Configuration d'une entrée Syslog (PfSense)
Sur le serveur Graylog, se connecter à l'interface Web et aller dans le menu System -> Inputs
Dans la liste déroulante, sélectionner Syslog UDP et cliquer sur Launch new input
Remplir le formulaire :
- Global : à cocher pour démarrer l'entrée sur tous les noeuds de la grappe
- Node : choisir le noeud où l'entrée démarrera
- Title : nommer l'entrée
- Bind address :
- 127.0.0.1 pour écouter uniquement sur le serveur Graylog
- 0.0.0.0 pour écouter sur tout le réseau
- Port : port d'écoute. Par défaut à 514, Graylog doit être démarré en root pour pouvoir écouter sur ce port, ce qui n'est pas sécurisé. Il est recommandé d'utiliser le port 1514 à la place et d'indiquer ce port aux machines qui vont envoyés leurs logs.
- Receive Buffer Size : taille du tampon de réception de l'entrée (à augmenter en cas de problème de performance)
- No. of worker threads : nombre de processus traitant les connexions réseau de l'entrée (à augmenter en cas de problème de performance)
- Allow overriding date? : à cocher
La nouvelle entrée est créée et attend les données :
Sur le serveur PfSense, aller dans le menu Status -> System Logs -> Settings et choisir le format syslog :
En bas de la page, configurer l'adresse du serveur Graylog ainsi que les journaux à exporter :
Sur le serveur Graylog, les données arrivent immédiatement :
Configuration d'une entrée GELF (Windows)
Sur le serveur Graylog, se connecter à l'interface Web et aller dans le menu System -> Inputs
Dans la liste déroulante, sélectionner GELF UDP et cliquer sur Launch new input
Remplir le formulaire :
Sur le serveur Windows, télécharger et installer NXlog Community Edition (https://nxlog.co/system/files/products/files/348/nxlog-ce-3.0.2272.msi)
Configurer le fichier C:\Program Files\nxlog\conf\nxlog.conf
Panic Soft
#NoFreeOnExit TRUE
define ROOT C:\Program Files\nxlog
define CERTDIR %ROOT%\cert
define CONFDIR %ROOT%\conf\nxlog.d
define LOGDIR %ROOT%\data
define LOGFILE %LOGDIR%\nxlog.log
LogFile %LOGFILE%
Moduledir %ROOT%\modules
CacheDir %ROOT%\data
Pidfile %ROOT%\data\nxlog.pid
SpoolDir %ROOT%\data
<Extension _syslog>
Module xm_syslog
</Extension>
<Extension _charconv>
Module xm_charconv
AutodetectCharsets iso8859-2, utf-8, utf-16, utf-32
</Extension>
<Extension _exec>
Module xm_exec
</Extension>
<Extension _fileop>
Module xm_fileop
# Check the size of our log file hourly, rotate if larger than 5MB
<Schedule>
Every 1 hour
Exec if (file_exists('%LOGFILE%') and \
(file_size('%LOGFILE%') >= 5M)) \
file_cycle('%LOGFILE%', 8);
</Schedule>
# Rotate our log file every week on Sunday at midnight
<Schedule>
When @weekly
Exec if file_exists('%LOGFILE%') file_cycle('%LOGFILE%', 8);
</Schedule>
</Extension>
# Snare compatible example configuration
# Collecting event log
# <Input in>
# Module im_msvistalog
# </Input>
#
# Converting events to Snare format and sending them out over TCP syslog
# <Output out>
# Module om_tcp
# Host 192.168.1.1
# Port 514
# Exec to_syslog_snare();
# </Output>
#
# Connect input 'in' to output 'out'
# <Route 1>
# Path in => out
# </Route>
<Extension gelf>
Module xm_gelf
</Extension>
<Input eventlog>
Module im_msvistalog
<QueryXML>
<QueryList>
<Query Id='0'>
<Select Path='Application'>*</Select>
<Select Path='Security'>*</Select>
<Select Path='System'>*</Select>
<Select Path="Windows PowerShell">*</Select>
</Query>
</QueryList>
</QueryXML>
</Input>
<Output out_udp>
Module om_udp
Host 10.18.172.101
Port 12201
OutputType GELF_UDP
</Output>
<Route eventlog_to_out_udp>
Path eventlog => out_udp
</Route>
Démarrer le service NxLog
Création des index
Les index sont les
Sources
https://docs.graylog.org/v1/docs/ubuntu
https://www.howtoforge.com/install-and-configure-graylog-monitoring-server-ubuntu-2004/#install-and-configure-elasticsearch
https://www.cyberithub.com/how-to-install-graylog-on-ubuntu-20-04-lts-easy-steps/#Step_4_Install_Elasticsearch
https://linoxide.com/how-to-install-graylog-server-on-ubuntu-20-04/
https://conf-ng.jres.org/2015/document_revision_2323.html?download
https://www.graylog.org/videos/java-heap
https://tmsecurity.fr/viewpost.php?X-n0=27