Pourquoi un logiciel de gestion de logs ?
Un logiciel de gestion de logs doit permettre de rendre les logs "sympas" à exploiter.
-
Tu dois pouvoir rechercher rapidement un motif dans tes logs.
-
Tu dois pouvoir compter un certain nombre d'évènement.
-
Tu dois pouvoir avoir l'historique d'une valeur sur une période de temps.
-
Tu dois pouvoir corréler différents évènements venant de différentes sources.
-
etc
Le logiciel de gestion de logs sert à alerter en cas de problème, de dysfonctionnement, et à avoir des statistiques d'utilisation de son système.
Graylog, tout comme la suite Elastic (ELK) ou d'autres logiciels, remplit ces missions.
Précision sur l'installation présentée ici
Ce billet traite d'une installation simple : on installe tout sur la même machine.
Il ne traite quasiment pas de la sécurité (à part une ouverture de port et une activation d'interface https).
Documentation et système d'exploitation
Ce billet s'appuie sur la documentation officielle que tu trouveras ici: site officiel de Graylog.
Graylog sera installé sur une distribution GNU/Linux Centos 8 à partir des dépots RPMs.
Pré-requis: installation de java, mongodb et elasticsearch
Pour commencer, il faut une distribution GNU/Linux installée sur un serveur virtuel ou pas.
Ensuite, il faut installer trois logiciels avant d'installer Graylog : java, mongodb et elasticsearch.
Installation de Java
[root@Graylog ~]# yum install java-1.8.0-openjdk-headless.x86_64
Installation de la base de donnée mongodb
On installe d'abord le dépot.
[root@Graylog ~]# vi /etc/yum.repos.d/mongodb-org.repo
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
On lance ensuite la commande d'installation puis la commande pour activer le logiciel au démarrage.
[root@Graylog ~]# yum install mongodb-org
[root@Graylog ~]# systemctl enable mongod.service
[root@Graylog ~]# systemctl start mongod.service
[root@Graylog ~]# systemctl status mongod
Puis idem avec la base Elastisearch. On installe ici la version 7.
[root@Graylog ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
[root@Graylog ~]# vi /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/oss-7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
Installation, configuration du démarrage et test du service.
[root@Graylog ~]# yum install elasticsearch-oss
Installé:
elasticsearch-oss-7.10.2-1.x86_64
Terminé !
[root@Graylog ~]# systemctl daemon-reload
[root@Graylog ~]#
[root@Graylog ~]# systemctl enable elasticsearch.service
Synchronizing state of elasticsearch.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable elasticsearch
Created symlink /etc/systemd/system/multi-user.target.wants/elasticsearch.service → /usr/lib/systemd/system/elasticsearch.service.
[root@Graylog ~]# systemctl start elasticsearch.service
[root@Graylog ~]# systemctl --type=service --state=active | grep elasticsearch
elasticsearch.service loaded active running Elasticsearch
[root@Graylog ~]#
Pour la suite, il faudra générer un mot de passe. On peut utiliser le paquet pwgen pour celà. Voici les commandes pour installer le paquet.
[root@Graylog ~]# yum install epel-release
[root@Graylog ~]# yum install pwgen
Installation du logiciel graylog
Voici maintennat les commandes pour l'installation de Graylog-server.
On récupére le dépot.
[root@Graylog ~]# rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-4.0-repository_latest.rpm
Récupération de https://packages.graylog2.org/repo/packages/graylog-4.0-repository_latest.rpm
Verifying... ################################# [100%]
Préparation... ################################# [100%]
Mise à jour / installation...
1:graylog-4.0-repository-1-2 ################################# [100%]
Puis on installe le logiciel de logs.
[root@Graylog ~]# yum update && yum install graylog-server
graylog 6.0 kB/s | 7.9 kB 00:01
Configuration de Graylog
Il faut un mot de passe pour sécuriser l'installation et un mot de passe pour le compte root (admin par défaut).
Création d'un mot de passe pour sécuriser le chiffrement :
[root@Graylog ~]# pwgen -N 1 -s 96
hQ3qv49DUgZjl3tZimzvSb4et9oR78CAl4COZ9tLq6l4nL7gpBq8p1n5AVQ5Lq64IkOKbTgioSkSIAHNPR4JUitHczibXHB0
[root@Graylog ~]#
On crée aussi le mot de passe root.
[root@Graylog ~]# echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
Enter Password:
54db4d147b2de3ac44de8cae7bdca31c61a94e8d12de84974c171a2d1f09c53c
[root@Graylog ~]#
Puis les deux chaines de caractères vont être copiées dans le fichier /etc/graylog/server/server.conf.
Au passage, on en profite pour configurer l'adresse IP sur laquelle le serveur sera disponible.
[root@Graylog ~]# vi /etc/graylog/server/server.conf
password_secret = hQ3qv49DUgZjl3tZimzvSb4et9oR78CAl4COZ9tLq6l4nL7gpBq8p1n5AVQ5Lq64IkOKbTgioSkSIAHNPR4JUitHczibXHB0
root_password_sha2 = 54db4d147b2de3ac44de8cae7bdca31c61a94e8d12de84974c171a2d1f09c53c
http_bind_address = 192.168.1.116:9000
Démarrage de Graylog
On active Graylog au démarrage et on démarre le serveur.
[root@Graylog ~]# systemctl enable graylog-server.service
Synchronizing state of graylog-server.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable graylog-server
Created symlink /etc/systemd/system/multi-user.target.wants/graylog-server.service → /usr/lib/systemd/system/graylog-server.service.
[root@Graylog ~]# systemctl start graylog-server.service
[root@Graylog ~]# systemctl --type=service --state=active | grep graylog
graylog-server.service loaded active running Graylog server
[root@Graylog ~]#
Deux mots sur SELinux
Si SELinux est en mode enforcing, voici quelques commandes pour que Graylog fonctionne:
root@Graylog ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
[root@Graylog ~]# sudo setsebool -P httpd_can_network_connect 1
[root@Graylog ~]# sudo semanage port -a -t http_port_t -p tcp 9000
ValueError: Le port tcp/9000 est déjà défini
[root@Graylog ~]# sudo semanage port -a -t http_port_t -p tcp 443
ValueError: Le port tcp/443 est déjà défini
[root@Graylog ~]# sudo semanage port -a -t http_port_t -p tcp 9200
ValueError: Le port tcp/9200 est déjà défini
[root@Graylog ~]# sudo semanage port -a -t mongod_port_t -p tcp 27017
[root@Graylog ~]#
Configuration du firewall de Centos 8
Ouverture du port 9000 sur le firewall de base de Centos 8.
[root@Graylog ~]# firewall-cmd --zone=public --add-port=9000/tcp --permanent
success
[root@Graylog ~]#
[root@Graylog ~]# firewall-cmd --reload
[root@Graylog ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: cockpit dhcpv6-client https ssh
ports: 9000/tcp
protocols:
Test de l'Installation
A ce point, on teste l'installation en entrant l'adresse dans un navigateur web: http://192.168.1.116:9000
Si ça fonctionne, voici la page de connexion.
Activation de https
Pour activer la sécurisation des flux, il faut un certificat et sa clé privée. Le certificat et la clé sont ajoutés à la configuration du serveur.
[root@Graylog ~]# vi /etc/graylog/server/server.conf
http_enable_tls = true
# The X.509 certificate chain file in PEM format to use for securing the HTTP interface.
http_tls_cert_file = /etc/graylog/server/cert.pem
# The PKCS#8 private key file in PEM format to use for securing the HTTP interface.
http_tls_key_file = /etc/graylog/server/cert8.key
# The password to unlock the private key used for securing the HTTP interface.
http_tls_key_password = passworddelacleprive
Le serveur Graylog est redémarré.
[root@Graylog ~]# systemctl restart graylog-server
Et on teste avec le protocole https : https://192.168.1.116:9000.
Le nom d'utilisateur est admin et le mot de passe est celui qui a été entré dans la conf un peu plus haut.
Graylog fonctionne, on arrive à la page d'introduction. Il reste, pour terminer, à faire la configuration DNS pour ne plus avoir l'erreur de certificat.
Mise à jour de graylog
[root@Graylog ~]# yum update
Dernière vérification de l’expiration des métadonnées effectuée il y a 0:35:52 le sam. 30 janv. 2021 15:50:05 EST.
Dépendances résolues.
=============================================================================================================
Paquet Architecture Version Dépôt Taille
=============================================================================================================
Mise à jour:
graylog-server noarch 4.0.2-1 graylog 153 M
sudo x86_64 1.8.29-6.el8_3.1 baseos 924 k
tzdata noarch 2021a-1.el8 baseos 473 k
tzdata-java noarch 2021a-1.el8 appstream 192 k
Résumé de la transaction
=============================================================================================================
Mettre à niveau 4 Paquets
Taille totale des téléchargements : 155 M
Voulez-vous continuer ? [o/N] : o
Installed products updated.
Mis à niveau:
graylog-server-4.0.2-1.noarch sudo-1.8.29-6.el8_3.1.x86_64 tzdata-2021a-1.el8.noarch
tzdata-java-2021a-1.el8.noarch
Terminé !
[root@Graylog ~]#
Bonus: configuration d'un proxy
On va installer nginx en mode proxy pour Graylog.
[root@Graylog ~]# yum install nginx
[root@Graylog ~]# systemctl enable nginx
[root@Graylog ~]# systemctl start nginx
[root@Graylog ~]#
[root@Graylog ~]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2021-01-30 15:39:13 EST; 58min ago
Voici maintenant la configuration de nginx en mode proxy avec le protocole https.
[root@Graylog conf.d]# vi /etc/nginx/conf.d/graylog.conf
server
{
listen 443 ssl http2;
server_name graylog.example.org;
proxy_ssl_certificate /etc/nginx/cert.pem;
proxy_ssl_certificate_key /etc/nginx/cert.key;
location /
{
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Graylog-Server-URL https://$server_name/;
proxy_pass http://127.0.0.1:9000;
}
}
Puis on redémarre nginx.
[root@Graylog nginx]# systemctl restart nginx
[root@Graylog nginx]#
[root@Graylog nginx]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2021-01-30 16:50:57 EST; 7s ago
Vérifier la configuration dans le fichier server.conf de Graylog pour que le serveur écoute sur l'adresse 127.0.0.1:9000. Si ce n'est pas fait, ouvrir le port sur le firewall du serveur.
On peut maintenant se connecter sur l'adresse https://graylogserver