Sécuriser ElasticSearch/Kibana

J'ai mis en place LogStash + ElasticSearch + Kibana au boulot pour une console de centralisation des logs.

Ça marche plutôt pas mal, par contre une fois le POC en place, il est nécessaire de le sécuriser, en effet, par défaut ES est accessible via HTTP et du coup n'importe qui peut "tout péter"...

Donc la première chose à faire, c'est de "proxifier" l'accès à ES afin de contrôler les verbes accessibles, ce que fait la conf Apache ci-dessous.

<VirtualHost *:9201>
    ProxyPassMatch / http://127.0.0.1:9200
    ProxyPassReverse / http://127.0.0.1:9200
    <LocationMatch "^(/.*)$">
        <Limit DELETE PUT>
            Order deny,allow
            Deny from all
        </Limit>
    </LocationMatch>
    <LocationMatch "^(/_aliases|.*/_search|.*/_mapping)$">
        <Limit DELETE PUT>
            Order deny,allow
            Deny from all
        </Limit>
    </LocationMatch>
    <LocationMatch "^(/_cluster.*|/_plugin.*|/_status.*|/_nodes)$">
        <Limit GET POST PUT DELETE CONNECT OPTIONS PATCH PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
            Order deny,allow
            Deny from all
        </Limit>
    </LocationMatch>
    <LocationMatch "^(/kibana-int/dashboard/|/kibana-int/temp).*$">
        <Limit DELETE PUT>
            Order deny,allow
            Deny from all
        </Limit>
    </LocationMatch>
</VirtualHost>

En parallèle j'ai aussi bloqué les ports ES (9200/9300) via le firewall linux (iptables) afin que ces derniers ne soient accessibles qu'a partir des machines autorisées (appartenant au cluster ES).

Ca n'est pas parfait mais c'est un début !

Next step : activer l'authentification via LDAP en HTTPS et du coup autoriser certains verbes en fonction des groupes LDAP de l'utilisateur.

MAJ 26/10/2016 : modif pour ne pas autoriser l'accès aux URI de fonctionnement interne.