Graylog (Gestion des journaux)

Logo Graylog

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

config_02

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

config_02

La nouvelle entrée est créée et attend les données :

config_03

Sur le serveur PfSense, aller dans le menu Status -> System Logs -> Settings et choisir le format syslog :

config_04

En bas de la page, configurer l'adresse du serveur Graylog ainsi que les journaux à exporter :

config_05

Sur le serveur Graylog, les données arrivent immédiatement :

config_06

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

config_07

Remplir le formulaire :

config_08

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