# [SOC] Graylog

## Introduction

Graylog est un SIEM qui permet de centraliser vos logs et de faire des queries pour faire des analyses de threat hunting notamment.

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/scaled-1680-/wd7image.png)](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/wd7image.png)

## Sources

- [https://www.it-connect.fr/tuto-graylog-sur-debian-centraliser-et-analyser-logs/](https://www.it-connect.fr/tuto-graylog-sur-debian-centraliser-et-analyser-logs/)
- [https://www.it-connect.fr/envoyer-les-logs-windows-vers-graylog-avec-nxlog/](https://www.it-connect.fr/envoyer-les-logs-windows-vers-graylog-avec-nxlog/)

## Installation

#### Serveur (Debian 12)

Tout d'abord, configurez correctement la timezone ou le serveur de temps :

```bash
timedatectl set-timezone Europe/Paris
```

Installez quelques outils de base dont nous auront besoin pour la suite :

```bash
apt update && apt install -y install curl lsb-release ca-certificates gnupg2 pwgen
```

##### MongoDB

```bash
curl -fsSL https://www.mongodb.org/static/pgp/server-6.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg --dearmor && echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg] http://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list && apt update && apt-get install -y mongodb-org
```

<p class="callout warning">Vous allez obtenir une <span style="text-decoration: underline;">erreur</span> par rapport à **libssl** à ce stade et c'est normal, passez à la suite.</p>

Rendez-vous sur le site suivant pour trouver la version la plus récente de libssl et copiez le lien :

- [http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/](http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/)

<p class="callout info">Faite CTRL+F et cherchez "**libssl1.1\_1.1.1f-1ubuntu**2." puis sélectionnez la version deb amd64.</p>

Une fois l'URL récupérée, vous devriez faire quelque chose comme ça :

```bash
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.23_amd64.deb && dpkg -i libssl1.1_1.1.1f-1ubuntu2.23_amd64.deb
```

Puis réinstallez le paquet **mongodb-org** :

```bash
apt install -y mongodb-org
```

Et lancez le service :

```bash
sudo systemctl daemon-reload && sudo systemctl enable --now mongod.service
```

<p class="callout danger">Si l'installation de MongoDB s'est mal passée c'est que vous n'avez pas téléchargé le bon paquet sur le site d'Ubuntu.</p>

<p class="callout danger">Si l'installation de MongoDB s'est bien passée mais que le service ne démarre pas, assurez-vous de passer le CPU en mode <span style="text-decoration: underline;">host</span> s'il s'agit d'une VM.</p>

##### Opensearch

```bash
curl -o- https://artifacts.opensearch.org/publickeys/opensearch.pgp | sudo gpg --dearmor --batch --yes -o /usr/share/keyrings/opensearch-keyring && echo "deb [signed-by=/usr/share/keyrings/opensearch-keyring] https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable main" | sudo tee /etc/apt/sources.list.d/opensearch-2.x.list && apt update
```

```bash
env OPENSEARCH_INITIAL_ADMIN_PASSWORD=<PASSWORD> apt-get install opensearch
```

<p class="callout info">Choisissez un mot de passe d'au moins 8 caractères avec minuscule, majuscule, chiffre et caractère spécial sinon l'installation d'opensearch échouera.</p>

Maintenant ouvrez le fichier de configuration **/etc/opensearch/opensearch.yml** et ajustez la configuration avec les éléments suivants :

```
cluster.name: graylog
node.name: ${HOSTNAME}
path.data: /var/lib/opensearch
path.logs: /var/log/opensearch
discovery.type: single-node
network.host: 127.0.0.1
action.auto_create_index: false
plugins.security.disabled: true
```

##### Java

Éditez le fichier de configuration **/etc/opensearch/jvm.options** pour définir la ram utilisée par Java (minimum 4G) :

```
-Xms4g
-Xmx4g
```

Vérifiez que le max\_map\_count est définit à **262144** :

```bash
cat /proc/sys/vm/max_map_count
```

Si ce n'est pas le cas (uniquement) :

```
sysctl -w vm.max_map_count=262144
```

Une fois que java est configuré, lancez et activez le service opensearch :

```
systemctl daemon-reload && systemctl enable --now opensearch
```

##### Graylog

```bash
wget https://packages.graylog2.org/repo/packages/graylog-6.1-repository_latest.deb && dpkg -i graylog-6.1-repository_latest.deb && apt update && apt install -y graylog-server
```

Avant de lancez Graylog il faut configurer le **password\_secret** que vous pouvez générer avec la commande suivante :

```bash
pwgen -N 1 -s 96
```

Renseignez le à l'endroit adéquat dans le fichier **/etc/graylog/server/server.conf** .

Ensuite il faut configurer le mot de passe admin de Graylog. Pour cela on doit calculer son hash :

```bash
echo -n "<PASSWORD>" | shasum -a 256
```

Et renseignez le dans le fichier **/etc/graylog/server/server.conf** au niveau du champ **root\_password\_sha2** .

Toujours dans le fichier de configuration, définissez les paramètres suivants :

```
http_bind_address = 0.0.0.0:9000
elasticsearch_hosts = http://127.0.0.1:9200
```

Et enfin, activez et démarrez Graylog :

```bash
systemctl enable --now graylog-server
```

<p class="callout success">Graylog est désormais accessible via **http://&lt;IP&gt;:9000** .</p>

#### Agent Windows

Tout d'abord il faut configurer Graylog pour recevoir les logs.

Pour cela rendez-vous dans **System &gt; Inputs** et sélectionnez **GELF UDP** comme ci et cliquez sur **Launch new input** :

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/scaled-1680-/5tXimage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/5tXimage.png)

Configurez de la sorte (sauf pour le titre, mettez ce que vous souhaitez) :

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/scaled-1680-/8bEimage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/8bEimage.png)

Vous devriez voir quelque chose comme ça :

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/scaled-1680-/u5aimage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/u5aimage.png)

Maintenant téléchargez l'agent **NXLog** sur la machine qui va envoyer les logs :

- [https://nxlog.co/downloads/nxlog-ce#nxlog-community-edition](https://nxlog.co/downloads/nxlog-ce#nxlog-community-edition)

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/scaled-1680-/E3Jimage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/E3Jimage.png)

Saisissez la configuration suivante dans le fichier **C:\\Program Files\\nxlog\\conf\\nxlog.conf** :

```
# Récupérer les journaux de l'observateur d'événements
<Input in>
    Module      im_msvistalog
</Input>

# Déclarer le serveur Graylog (selon input)
<Extension gelf>
    Module        xm_gelf
</Extension>

<Output graylog_udp>
    Module        om_udp
    Host          192.168.10.220
    Port	  12201
    OutputType    GELF_UDP
</Output>

# Routage des flux in vers out
 <Route 1>
     Path        in => graylog_udp
 </Route>
```

<p class="callout info">Celle-ci enverra tous les logs de la machine sur Graylog, ce qui n'est pas forcément nécessaire, on pourrait envoyer seulement les logs **Security** et appliquer la configuration suivante :</p>

```
# Récupérer les journaux Security de l'observateur d'événements
<Input in>
    Module      im_msvistalog
    <QueryXML>
        <QueryList>
            <Query Id='1'>
                <Select Path='Security'>*</Select>
            </Query>
        </QueryList>
    </QueryXML>
</Input>

# Déclarer le serveur Graylog (selon input)
<Extension gelf>
    Module        xm_gelf
</Extension>

<Output graylog_udp>
    Module        om_udp
    Host          192.168.10.220
    Port	  12201
    OutputType    GELF_UDP
</Output>

# Routage des flux in vers out
 <Route 1>
     Path        in => graylog_udp
 </Route>
```

Désormais relancez le service NXlog pour appliquer la configuration :

```
Restart-Service nxlog
```

<p class="callout info">Le fichier de log de NXlog est le fichier **C:\\Program Files\\nxlog\\data\\nxlog.log** si vous devez debugger.</p>