Installation

Lorsqu'on utilise Kibana dans un environnement de production avec plusieurs Elasticsearch qui tournent en cluster, il est nécessaire de distribuer les requêtes aux différents Elasticsearch, pour cela on va également installer un Elasticsearch dit “coordinateur” qui va seulement avoir pour fonction de répartir les requêtes de Kibana sur les autres Elasticsearch comme le ferait un répartiteur de charge.

Pour installer un serveur Kibana, il est nécessaire de rajouter les dépôts fournis par l'editeur:

wget -qO - https://artifacts.elastic.co/GPG-KEY-Elasticsearch | apt-key add -
apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-6.x.list
aptitude update
aptitude install vim openjdk-8-jdk openjdk-8-jre
aptitude install Elasticsearch kibana apache2-utils

Configuration

La configuration de Kibana se fait dans le fichier /etc/kibana/kibana.yml

/etc/kibana/kibana.yaml
  server.port: 5601
    server.host: "10.40.30.106"
      server.name: "CIS-ELK-Kibana01"
      Elasticsearch.url: "http://localhost:9200"

La configuration du Elasticsearch se fait dans le fichier /etc/Elasticsearch/Elasticsearch.yml

/etc/elasticsearch/elasticsearch.yaml
    node.master: false
    node.data: false
    node.ingest: false
    cluster.name: CIS-ELK-Cluster
    node.name: CIS-ELK-Kibana01
    path.data: /var/lib/Elasticsearch
    path.logs: /var/log/Elasticsearch
    network.host: localhost
    transport.host: 10.40.30.106
    transport.tcp.port: 9300-9400
    http.port: 9200
    discovery.zen.ping.unicast.hosts: ["10.40.30.103", "10.40.30.104", "10.40.30.105"]

On active Kibana au démarrage et on le redémarre afin de prendre en compte les nouveaux paramètres:

systemctl enable kibana.service
service kibana restart

Kibana est maintenant disponible via un navigateur web à l’adresse 10.40.30.106 :5601

Configuration additionnelle

SSL

Kibana tourne maintenant sur l'adresse 10.40.30.106 et sur le port 5601, le tout sur une connexion HTTP non sécurisée, ce qui n'est pas ouf lorsqu'on traite des données sensibles.

Afin d'éviter d'avoir des données transitant en clair, il est possible de configurer Kibana pour utiliser un canal chiffré avec TLS, la configuration se fait dans le fichier /etc/kibana/kibana.yml en y ajoutant les lignes suivantes:

/etc/kibana/kibana.yaml
server.ssl.enabled: True
server.ssl.certificate: /etc/kibana/cert/kibana.pem
server.ssl.key: /etc/kibana/cert/kibana_key.pem

Il faut ensuite générer les certificats à utiliser, pour cela on va utiliser l'outil en ligne de commande OpenSSL:

cd /etc/kibana/cert/
openssl genrsa -out ca.key 4096
openssl genrsa -out kibana_key.pem 4096
openssl req -new -x509 -key ca.key -out ca.crt
openssl req -new -key kibana_key.pem -out kibana.csr
openssl x509 -req -in kibana.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out kibana.pem

Ces quelques commandes vont générer les clés RSA ainsi que le certificat pour le HTTPS, il est nécessaire de remplir les informations demandées, surtout celle concernant le CN du serveur en question.

Ces fichiers doivent pouvoir être lus par Kibana, il faut donc lui mettre des droits appropriés:

chown kibana:kibana *

Il ne reste plus qu'a redémarrer Kibana pour que le passage en HTTPS se fasse.

systemctl restart kibana

Le navigateur affichera une erreur car l'autorité de certification n'est pas reconnue, mais cela n'empêchera pas la navigation et l'utilisation du site.

Nginx

Pour plus de confort dans la gestion du serveur web, on peut ajouter un Nginx en frontal qui peut s'occuper de l'authentification, de la compression, gestion des données mises en cache etc…

/etc/nginx/conf.d/kibana.conf
    server {
            listen 80 ;
            server_name 10.40.30.106;
            return 301 https://$server_name$request_uri;
    }
    server {
            listen 443 ssl;
            server_name 10.40.30.106;
            ssl on;
            ssl_certificate /etc/kibana/cert/kibana.pem;
            ssl_certificate_key /etc/kibana/cert/kibana_key.pem;
 
            location /
             {
                proxy_pass http://127.0.0.1:5601;
            }
    }

Modifier également le fichier /etc/kibana/kibana.yml pour modifier l'adresse d'écoute de Kibana:

sed -i "s/10.40.30.106/127.0.0.1/g" /etc/kibana/kibana.yml

Pour finir, redémarrer Nginx et Kibana pour utiliser la nouvelle configuration:

systemctl restart kibana
systemctl restart nginx

Authentification

Par défaut, si on n'utilise pas le service X-Pack fournit par l'éditeur d'Elasticsearch, on ne peut pas restreindre l'accès au Kibana à certains utilisateurs.

Heureusement, les systèmes Unix nous offrent un moyen alternatif pour pallier à ce problème, on va se servir du PAM intégré au système, des serveurs RADIUS présents ainsi que le module auth_pam de Nginx.

On peut faire fonctionner le PAM pour qu'il utilise soit les utilisateurs présents sur le système (dans le fichier /etc/shadow) soit un service externe, dans notre cas, un serveur RADIUS.

La configuration se fait en plusieurs étapes.

PAM

aptitude install libpam-radius-auth libnginx-mod-http-auth-pam

Ces commandes vont rajouter une librairie pour que le PAM puisse interroger un serveur RADIUS ainsi qu'un module Nginx.

Un fichier /etc/pam_radius_auth.conf se créer, il est nécessaire de rajouter dedans le serveur RADIUS à contacter ainsi que la clé partagée entre les deux:

10.40.30.131    shared_key              2
10.40.30.132    shared_key              3

Il faut également créer un fichier dans /etc/pam.d/ pour nginx avec les directives concernant le type d'authentification à utiliser:

auth required /lib/security/pam_radius_auth.so
account required /lib/security/pam_radius_auth.so

Nginx tournant avec un utilisateur ayant des moindres privilèges, il est nécessaire de faire en sorte qu'ils puisse lire le fichier de configuration /etc/pam_radius_auth.conf

chown root:www-data /etc/pam_radius_auth.conf

Nginx

Côté Nginx, deux simples directives sont à rajouter dans le fichier de configuration du Vhost, il s'agit de auth_pam et auth_pam_service_name, la 1ere définissant le message à afficher à l'utilisateur et la seconde définissant le fichier sur lequel il va pointer dans le répertoire /etc/pam.d/, ici, le fichier nginx qu'on a créer à l'étape précédente :

/etc/nginx/conf.d/kibana.conf
server {
        listen 80 ;
        server_name 10.40.30.106;
        return 301 https://$server_name$request_uri;
}
server {
        listen 443 ssl;
        server_name 10.40.30.106;
        ssl on;
        ssl_certificate /etc/kibana/cert/kibana.pem;
        ssl_certificate_key /etc/kibana/cert/kibana_key.pem;
 
        location /
         {
            auth_pam    "Authentification requise";
            auth_pam_service_name   "nginx";
            proxy_pass http://127.0.0.1:5601;
        }
}

Maintenant que la configuration est fait des deux côtés, il suffit simplement de redémarrer le serveur web:

service nginx restart

Lors de la prochaine visite de la page de Kibana, des identifiants seront demandés afin de pouvoir aller plus loin. Évidement, il faut que le compte en question soit présent sur le RADIUS.

En cas de problème lors de la configuration, le fichier /var/log/auth.log peut être d'une grande utilité pour voir où ça bloque.

wiki/ajouter.un.serveur.kibana.txt · Dernière modification: 2018/04/25 13:12 par root
CC0 1.0 Universal
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5