Centraliser vos logs avec Graylog2 sous Debian 9

Présentation de Graylog2

Aujourd’hui on va installer le génialisime Graylog !!! Tout bon administrateur système comprend la nécessité d’avoir des logs faciles à lire et à stocker.
Le log a plusieurs inconvénient :

  • Le Log peux prendre beaucoup de place sur un serveur de production et remplir une partition.
  • Le Log peut être perdu suite à un crash d’une machine, on est alors aveugle sur le pourquoi du crash
  • Le Log peut aussi bien être corrompu par un attaquant pour masquer son attaque.

Graylog va donc centraliser les logs de vos serveurs et application et grâce à son interface très intuitive de pouvoir facilement comparer les logs et les analyser. Un gain de temps phénoménal. Mais ce n’est pas tout.
Graylog peut aussi faire des analyses automatiques qui vous alerteront en automatique via email. Tout bonnement génial. Avant j’utilisais octopussy , maintenant sans hésitez graylog !!!

Objectif de ce tutorial sur Graylog2

Comme toujours nous allons partir sur une Debian vierge, mais pour la première fois une Debian 9 stretch. Après tout elle sort officiellement dans 10 jours.
Quelques conseils pour votre infrastructure :

  • Que vous soyez dans un vswitch ou sur un LAN je vous invite fortement à avoir un VLAN réservé à votre administration (sonde de monitoring et log) et cela bien sur dans la mesure du possible sur une autre carte Réseaux.
    Pourquoi me direz vous? Tout simplement pour séparer les Flux applicatifs des flux administrations.
  • N’oubliez pas que les Logs sont soumis à la réglementation et qu’ils doivent être conservé, l’espace disque peut donc devenir conséquent et suivant le parc machine les accès en écriture et lecture tout autant, dimensionnez bien votre infrastructure. Personnellement je monte une partition sur un nas pour les données.
  • Les logs ne doivent jamais circulé en clair, il y a bien souvent trop d’informations importantes.

Graylog s’appuie sur deux dépendances :

  • Elasticsearch
  • MongoDb

Nous verrons donc comment installer ses dépendances mais aussi un peu les sécuriser. Puis nous installerons Graylog et le configurerons.

Pour tout ce qui sera certificat SSL je me baserai sur le tutorial Letsencrypt que j’ai écrit précédemment.

Installation de Graylog

Infrastructure

On commence par monter une infrastructure de test. Pour des raisons pratiques je ferai tout cela dans mon esxi.
Cette infrastructure  comprendra :

  1. Un vm de test sous debian jessie avec un apache et un mysql
  2. Une vm de test sous windows 2012 Server R2
  3. Une Vm equivalent à un nas
  4. La Vm pour Graylog en mode standalone

Toutes les Vms à part bien sur le nas auront une interface public. ( Traduction chez ovh une ipfailover )
Toutes les Vms auront une interface privé en Lan réservé au log sur un viswitch dédié.
La vm faisant office de nas servira a stocker les logs et les données. Le point de montage sera /mnt/data

Attention à bien faire ce point de montage car je le met en dur dans la configuration.

Génération des certificats

Installation

Comme je le disais précédemment nous allons encrypter les flux de données. Grace à Letsencrypt rien de bien compliquer. Il vous faut juste un nom de domaine pointant vers votre serveur et le package certbot

apt-get install certbot

Configuration

Imaginons que vous decidiez d avoir comme nom de domaine pour votre graylog : log.mon-domaine.com
Pour générez le certificat il vous faut faire :

certbot certonly --standalone -d log.mon-domaine.com

Le certificat ainsi généré sera disponible dans le dossier : /etc/letsencrypt/live/log.mon-domaine.com

Elasticsearch

Installation

Nous allons maintenant installé elasticsearch en passant par le dépôt officiel mais attention !!! la plupart des tutoriaaux remonte l’information que Graylog2 requière au minimum elasticsearch 2.x, mais ne stipule pas que Graylog2 n’est pas compatible avec les versions supérieurs à 5.x !!!!! On va donc prendre la version 2.4 et non la 6 ou 5. Oui elasticsearch est passé de la version 2.4 à 5 sans passer par le 3 ou 4

Perso pour information, j ai essayé avec la 6 ou cas ou, je confirme que graylog ne fonctionne pas du tout.


apt-get install apt-transport-https openjdk-8-jdk
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
apt-get update && apt-get install elasticsearch

On crée nos répertoires sur le nas pour les logs et les data d elasticsearch

mkdir /mnt/nas/elasticsearch && chown -R elasticsearch:elasticsearch /mnt/nas/elasticsearch

Configuration

Nous allons configurer elasticsearch, le sécuriser et aussi s occuper de systemd pour automatiser son démarrage.

sed -i -r 's/^# cluster.name:.*/cluster.name: graylog/' /etc/elasticsearch/elasticsearch.yml
sed -i -r 's/^# node.name:.*/node.name: graylog-server/' /etc/elasticsearch/elasticsearch.yml
sed -i 's/# node.max_local_storage_nodes: 1/node.max_local_storage_nodes: 1/' /etc/elasticsearch/elasticsearch.yml
sed -i -r 's/^# network.host:.*/network.host: 127.0.0.1/' /etc/elasticsearch/elasticsearch.yml
sed -i -r 's/^# path.data:.*/path.data: \/mnt\/nas\/elasticsearch\/data /' /etc/elasticsearch/elasticsearch.yml
sed -i -r 's/^# path.logs:.*/path.logs: \/mnt\/nas\/elasticsearch\/logs /' /etc/elasticsearch/elasticsearch.yml

Pour comprendre, je demande en premier de changer le nom du cluster et celui du node. Je force à ce qu’il y ait qu’un seul node.
Puis pour sécuriser je bloque l’écoute de l elasticsearch qu’en local.
Enfin je déplace les données et les logs directement sur le nas.

Enfin j active le redemarrage automatique et je lance elasticsearch
systemctl start elasticsearch
systemctl enable elasticsearch

Pour verifier que tout fonctionne :
journalctl | tail

et

netstat -anp | grep 9200

Mongodb

Maintenant nous passons à Mongodb qui malheureusement ne possède pas à ce jour de dépôt propre sur le site de mongodb.
On va donc installer la version de base qui par chance est la version 3.2 parfaitement compatible avec graylog

Installation

apt-get install mongodb-server

Configuration

Nous allons donc sécuriser votre serveur.

sed -i -r 's/^#nohttpinterface/nohttpinterface/' /etc/mongodb.conf
Enfin vérifiez bien que votre bind_ip est bien sur 127.0.0.1

Installation de Graylog 2.2

Installation

apt-get install uuid-runtime pwgen
wget https://packages.graylog2.org/repo/packages/graylog-2.2-repository_latest.deb
dpkg -i graylog-2.2-repository_latest.deb
apt-get update
apt-get install -y graylog-server

Comme indiquer, à la fin de l’installation, il vous reste à automatiser le démarrage de Graylog


systemctl enable graylog-server.service
systemctl daemon-reload
systemctl start graylog-server.service

Configuration


# generation d un salt unique pour hash mot de passe
mdprand=$(openssl rand -base64 32)
sed -i 's#password_secret =.*#password_secret = '"$mdprand"'#' /etc/graylog/server/server.conf
# Mot de passe de l administrateur , changez MOT_DE_PASSE_ROOT par votre mot de passe
mdp_root=$(echo -n "MOT_DE_PASSE_ROOT" | shasum -a 256 | awk '{print $1}')
sed -i 's#root_password_sha2 =.*#root_password_sha2 = '"$mdp_root"'#' /etc/graylog/server/server.conf
# email contact
sed -i 's/#root_email = ""/root_email = "ROOT_EMAIL"/' /etc/graylog/server/server.conf
#Timezone Paris
sed -i 's/#root_timezone = UTC/root_timezone = CET/' /etc/graylog/server/server.conf
#config elasticsearch
sed -i 's/elasticsearch_shards = 4/elasticsearch_shards = 1/' /etc/graylog/server/server.conf
sed -i 's/#elasticsearch_discovery_zen_ping_multicast_enabled = false/elasticsearch_discovery_zen_ping_multicast_enabled = false/' /etc/graylog/server/server.conf
sed -i 's/#elasticsearch_discovery_zen_ping_unicast_hosts = 127.0.0.1:9300/elasticsearch_discovery_zen_ping_unicast_hosts = 127.0.0.1:9300/' /etc/graylog/server/server.conf
# On ouvre l interface web en 127.0.0.1 et on fera apres un proxy avec apache pour avoir du https
sed -i 's/#web_listen_uri = .*/web_listen_uri = http:\/\/127.0.0.1:9000/' /etc/graylog/server/server.conf

On redemarre graylog


systemctl restart graylog-server.service

Accès à l’interface web

On installe apache :

apt-get install apache2 cronolog

On active les mods apache dont on a besoin :

a2enmod ssl
a2enmod rewrite
a2enmod headers
a2enmod proxy
a2enmod proxy_http

Il ne reste plus qu’à mettre ne place un vhost qui force le https avec le certificat que l on a créé précédemment.

Je rappelle qu il faut remplacer dans ce qui suit log.mon-domaine.com par votre nom de domaine

On crée le virtualhost dans le fichier :

touch /etc/apache2/sites-available/log.mon-domaine.com.conf

Vous y coller la configuration suivante :

<VirtualHost *:80>
ServerName log.mon-domaine.com
Redirect permanent / https://log.mon-domaine.com/
</VirtualHost>

<VirtualHost *:443>
ServerName log.mon-domaine.com

ErrorLog « |/usr/bin/cronolog /var/log/apache2/log.mon-domaine.com/%Y/%m/error_log »
CustomLog « |/usr/bin/cronolog /var/log/apache2/log.mon-domaine.com/%Y/%m/access_log » combined
TransferLog « |/usr/bin/cronolog /var/log/apache2/log.mon-domaine.com/%Y/%m/transfer_log »

 

SSLEngine On
SSLCertificateKeyFile /etc/letsencrypt/live/log.mon-domaine.com/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/log.mon-domaine.com/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/log.mon-domaine.com/chain.pem

SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite « EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4 »
SSLHonorCipherOrder on
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire

# HSTS (mod_headers est requis, 15 768 000 secondes = 6 mois)
Header always set Strict-Transport-Security « max-age=15768000 »

RequestHeader set X-Graylog-Server-URL « https://log.mon-domaine.com/api/ »
ProxyPass / http://127.0.0.1:9000/
ProxyPassReverse / http://127.0.0.1:9000/

</VirtualHost>

Astuce pour bien ne rien oubliez passer par sed pour tout modifier :

sed -i 's#log.mon-domaine.com#www.mon-domaine.com#' /etc/apache2/sites-available/log.mon-domaine.com.conf

On active le site

a2ensite log.mon-domaine.com
apache2ctl graceful

On peut maintenant apprécié le résultat :

Conclusion

Nous venons donc d’installer notre centralisateur de log Graylog2 en version 2.2.3 sur une debian 9 Stretch tout en y apportant une petite couche de sécurité. Je vous invite à bien lire le fichier server.conf qui regorgent d informations sur les possibles configurations de Graylog2.

Il ne vous reste plus qu à configurer vos inputs, il existe de nombreux tutoriaux la dessus.
Note importante : Votre graylog bien évidemment ne tourne pas avec l utilisateur root, donc lorsque vous créez vos input il faut mettre un port supérieur à 1024 !!!

Liens annexes

D’excellents tutoriaux proposent de la documentation sur Graylog :

En francais :

En anglais :

Laisser un commentaire