Après ELK et Splunk, on va ici s’intéresser à Graylog qui permet aussi de centraliser les logs et de les analyser dans des graphiques puis des tableaux de bords. Gros point fort de Graylog, il permet de générer gratuitement des alertes et de gérer plusieurs utilisateurs (intégration Active Directory et LDAP ) contrairement à ELK et Splunk où il faut une licence.
Passons dès à présent à l’installation :
Installation des prérequis
On installe les dépendances pour que l’installation se déroule correctement.
Sur Debian :
apt-get install -y wget apt-transport-https curl unzip sudo uuid-runtime pwgen
Graylog nécessite Java pour fonctionner.
On rajoute les dépôts de Java puis on l’installe :
echo "deb http://http.debian.net/debian jessie-backports main" > /etc/apt/sources.list.d/jessie-backports.list sudo apt-get update sudo apt-get install -t jessie-backports openjdk-8-jre-headless
Sur CentOS :
Pour installer pwgen qui nous sera utile par la suite, il faut installer les dépôts EPEL (Extra Packages for Enterprise Linux) :
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
On peut maintenant installer pwgen avec la commande suivante :
sudo yum install pwgen
Puis on installe Java :
sudo yum install java-1.8.0-openjdk-headless.x86_64
Installation de MongoDB
MongoDB est la base de données de Graylog où seront stockées les configurations utilisateurs / tableaux de bords etc.
On l’installe avec la commande suivante :
Sur Debian :
Il suffit de taper la commande suivante car MongoDB est déjà dans les dépôts :
sudo apt install mongodb-server
Sur CentOS :
Il faut créer un fichier contenant les dépôts nécessaires :
vi /etc/yum.repos.d/mongodb-org-3.2.repo
Et y rajouter les dépôts suivants :
[mongodb-org-3.2] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc
On peut maintenant l’installer :
sudo yum install mongodb-org
Et tapez les commandes suivantes (toujours sur CentOS, cela n’est pas nécessaire sur Debian) pour démarrer MongoDB au démarrage et lancer son service :
sudo chkconfig --add mongod sudo systemctl daemon-reload sudo systemctl enable mongod.service sudo systemctl start mongod.service
Installation d’ElasticSearch
Graylog utilise également ElasticSearch pour le traitement des logs. On va donc l’installer avec les commandes suivantes :
Sur Debian :
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list sudo apt update && sudo apt install elasticsearch
Puis, on va modifier, le fichier d’elasticsearch pour indiquer le nom de notre cluster qui est dans notre cas « graylog ».
vi/etc/elasticsearch/elasticsearch.yml
On lance elasticsearch :
sudo systemctl daemon-reload sudo systemctl enable elasticsearch.service sudo systemctl restart elasticsearch.service
Vous pouvez tester son fonctionnement avec la commande suivante :
curl -X GET http://localhost:9200
Ce qui devrez vous retourner le résultat suivant (il se peut que vous ayez à attendre quelques minutes le temps que la configuration se fasse).
Sur CentOS :
On doit d’abord récupérer la clé GPG d’Elastic :
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Puis, on doit créer un fichier contenant les dépôts nécessaires :
vi /etc/yum.repos.d/elasticsearch.repo
Et on y rajoute les dépôts suivants :
[elasticsearch-5.x] name=Elasticsearch repository for 5.x packages baseurl=https://artifacts.elastic.co/packages/5.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
Enfin on installe elasticsearch avec la commande suivante :
sudo yum install elasticsearch
Comme pour Debian , il faut indiquer le nom du Cluster dans le fichier elasticsearch.yml et vous pouvez également tester le fonctionnement d’elasticsearch avec la commande curl.
Une fois ceci fait, on démarre ElasticSearch :
sudo chkconfig --add elasticsearch sudo systemctl daemon-reload sudo systemctl enable elasticsearch.service sudo systemctl restart elasticsearch.service
Installation de Graylog
Sur Debian :
On récupère la dernière version de Graylog et on l’installe :
wget https://packages.graylog2.org/repo/packages/graylog-2.4-repository_latest.deb sudo dpkg -i graylog-2.4-repository_latest.deb sudo apt update && sudo apt install graylog-server
Sur CentOS :
On doit installer les dépôts de Graylog :
sudo rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-2.4-repository_latest.rpm
Puis on installe Graylog :
sudo yum install graylog-server
Configuration de graylog
Il va falloir configurer un mot de passe pour l’administrateur de Graylog.
On va pour cela devoir modifier le champ password_secret
de la configuration de Graylog. Graylog utilise cette valeur pour sécuriser et stocker les mots de passes utilisateurs.
On va utiliser pwgen pour générer le mot de passe et la commande sed
pour directement l’injecter dans la configuration de Graylog
sudo -E sed -i -e "s/password_secret =.*/password_secret = $(pwgen -s 128 1)/" /etc/graylog/server/server.conf
Sur Debian :
On va maintenant créer le mot de passe pour l’utilisateur root avec la commande suivante : Remplacez bien-sûr « MOTDEPASSE » par votre mot de passe.
sudo sed -i -e "s/root_password_sha2 =.*/root_password_sha2 = $(echo -n MOTDEPASSE | shasum -a 256 | cut -d' ' -f1)/" /etc/graylog/server/server.conf
Sur CentOS :
Je n’ai pour ma part pas réussi à effectuer la commande sed pour le mot de passe root sur CentOS, on va donc crypter notre de mot de passe et le placer manuellement dans le fichier server.conf
echo -n MOTDEPASSE | sha256sum
Votre mot de passe chiffré apparaît, copiez le et placez le dans le fichier server.conf :
vi /etc/graylog/server/server.conf
Et à la ligne suivante collez le mot de passe crypté comme ci-dessous :
Puis, il va falloir faire quelques modifications (pour Debian et CentOS) dans le fichier server.conf :
vi /etc/graylog/server/server.conf
Dé-commentez les lignes suivantes et modifiez l’@IP locale 127.0.0.1 par l’@IP de votre serveur.
rest_listen_uri = http://127.0.0.1:9000/api/ web_listen_uri = http://127.0.0.1:9000/
Recherchez ensuite la ligne suivante.
#root_timezone = UTC
Et modifiez la pour synchroniser l’heure de notre serveur :
root_timezone = Europe/Paris
Par défaut, lorsque vous rechercherez des mots clés dans vos logs, ils ne s’afficheront pas en évidence. Il faut pour cela modifier la ligne suivante qui permet d’afficher les mots recherchés en surbrillance.
allow_highlighting = false Passez le paramètre à true allow_highlighting = true
Une fois que tout cela est fait, on enregistre et on active le service :
Sur Debian :
sudo systemctl daemon-reload sudo systemctl enable graylog-server.service sudo systemctl start graylog-server.service
Sur CentOS :
sudo chkconfig --add graylog-server sudo systemctl daemon-reload sudo systemctl enable graylog-server.service sudo systemctl start graylog-server.service
Après quelques minutes, vous avez accès à l’interface web de graylog sur http://@IP:9000
Connectez-vous avez l’identifiant admin et le mot de passe que vous avez indiqué précédemment.
Vous arriverez sur une page semblable à celle-ci, pour recevoir des données, nous devons configurer un Input qui écoutera sur le port 514 (port Syslog par défaut). Pour cela cliquez sur System, puis sur Inputs.
Note : Dans notre cas, nous voulons pour l’instant récupérer les Syslog des différents équipements réseaux (switch, routeurs, contrôleurs wifi…). Par défaut, le protocole Syslog écoute sur le port 514.
Or, Java n’a pas le droit d’écoute sur les ports entre 0 et 1023 pour des raisons de sécurités. On peut bien évidemment modifier le port Syslog mais tous les routeurs ne peuvent pas être configurés de cette manière.
On va donc taper la commande suivante qui permet de donner à Java le droit d’écouter sur les ports réservés au système.
Attention, cette commande sur CentOS à pour ma part empêché Java de fonctionner, ne l’effectuez que sous Debian.
setcap cap_net_bind_service=+epi /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
Sur CentOS :
Etant donné qu’on ne peut pas attribuer les droits à Java sur les ports inférieurs a 1024, on va devoir faire une règle Nat avec iptables afin que les requêtes reçues sur le port 514 soient redirigées vers un autre port, par exemple 1514.
iptables -t nat -A PREROUTING -p tcp --dport 514 -j REDIRECT --to 1514 iptables -t nat -A PREROUTING -p udp --dport 514 -j REDIRECT --to 1514
Retournons sur notre interface Graylog, puis sélectionnez dans la liste déroulante « Syslog UDP ». Cliquez ensuite sur Launch new input.
Donnez le titre de votre choix dans le champ Title, indiquez le port 514 puis cliquez sur Save. Si vous êtes sur CentOS, remplacez le port 514 par 1514. Vous pourrez tout de même envoyer vos syslogs vers le port 514 étant donné que nous avons fait une règle Nat précédemment.
Cliquez ensuite sur Start Input
Vous devriez alors voir ceci :
Attendez quelques minutes et rendez vous dans l’onglet Search de Graylog. Si vous avez bien paramétré vos équipements réseaux pour l’envoie de Syslog, vous devrez voir arriver vos logs :
C’est tout pour cet article, nous verrons par la suite comment configurer les alertes et l’envoi de mail puis comment configurer l’intégration Active Directory / LDAP.
Bonjour, je n’arrive pas à accéder à l’interface de Graylog. J’ai l’impression que le port 9000 ne soit pas accepté puisque quand je fais « https://@IP/ » je tombe bien sur la page d’Apache. Il faut aussi savoir que je n’ai aucune règles de filtrages qui pourrait bloquer le port 9000.
J’aimeJ’aime
Bonjour, quelle version de graylog avez vous installé ?
J’aimeJ’aime
La version 2.0
J’aimeJ’aime
Essayez d’installer la version 2.4, cela devrait résoudre le problème où la dernière version de graylog sur leur site officiel : https://www.graylog.org/downloads
J’aimeJ’aime
Toujours le même soucis avec la version 2.4.6
J’aimeJ’aime
J’ai eu le même problème. Il faut s’assurer que le port est bien ouvert sur le serveur et que iptables est désactivé :
/etc/sysconfig/selinux
SELINUX=disabled
SELINUXTYPE=targeted
J’avais la version 7 CENTOS pour ouvrir le port
firewall-cmd –zone=public –permanent –add-port=9000/tcp
firewall-cmd –reload
J’aimeJ’aime
Bonjour,
J’ai bien suivi l’installation de A a Z, si j’ai rien dans l’onglet Search cela peux venir de mon routeur?
Merci pour votre réponse,
J’aimeJ’aime
Bonjour,
Il faut en effet que votre routeur soit configuré afin d’envoyer ses logs sur l’IP du serveur Graylog
J’aimeJ’aime