Archives mensuelles : juillet 2015

Sécurisé un poil votre cluster Elasticsearch (round 2 : iptables)

Elasticsearch ça roxe. Ave un défaut, la sécurité c’est pas son truc.
A vous de la faire.

Mon problème est le suivant :

  1. 1 cluster Elasticsearch composé de 3 noeuds
  2. Tous dans le même réseau
  3. Avec d’autres machines
  4. Comment sécuriser à minima le cluster ES ?

ElasticSearchSecured

Pour l’accès au plugin head, j’ai opté pour la solution nginx décrite ici.

Par contre pour m’assurer que seul les noeuds elasticsearch discutent entre eux, et qu’ils ne sont accessibles que par le serveur Nginx, je fais appel iptables (!!)

apt-get install iptables iptables-persistent
vim /etc/iptables/rules.v4 
# Generated by iptables-save v1.4.21 on Wed Jul 29 23:22:59 2015
*filter
# par defaut je DROP ce qui arrive
:INPUT DROP [0:0]
# je route pas !!
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [45:6396]
-A INPUT -i lo -j ACCEPT
# je me coupe pas les pattes
-A INPUT -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
# les noeuds se parlent sur le port 9300
-A INPUT -s 192.168.0.11 -p tcp -m tcp --dport 9300 -j ACCEPT
-A INPUT -s 192.168.0.12 -p tcp -m tcp --dport 9300 -j ACCEPT
-A INPUT -s 192.168.0.13 -p tcp -m tcp --dport 9300 -j ACCEPT
# c'est bidirectionnelle
-A INPUT -s 192.168.0.11 -p tcp -m tcp --sport 9300 -j ACCEPT
-A INPUT -s 192.168.0.12 -p tcp -m tcp --sport 9300 -j ACCEPT
-A INPUT -s 192.168.0.13 -p tcp -m tcp --sport 9300 -j ACCEPT
# le discover en multicast
-A INPUT -s 192.168.0.11 -p udp -m pkttype --pkt-type multicast --sport 54328 --dport 54328 -j ACCEPT
-A INPUT -s 192.168.0.12 -p udp -m pkttype --pkt-type multicast --sport 54328 --dport 54328 -j ACCEPT
-A INPUT -s 192.168.0.13 -p udp -m pkttype --pkt-type multicast --sport 54328 --dport 54328 -j ACCEPT
# nginx lui peut causer sur le port 9200
-A INPUT -s 192.168.0.10 -p tcp -m tcp --dport 9200 -j ACCEPT
# dns dés fois que ....
-A INPUT -s 192.168.0.1 -p udp -m udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.0.2 -p udp -m udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
# a la fin je log et je drop
-A INPUT -j LOG --log-prefix "MYLOG:" --log-level 7
-A INPUT -j DROP
COMMIT
# Completed on Wed Jul 29 23:22:59 2015

Sécurisé un poil votre cluster Elasticsearch (round 1 : Nginx)

Mettre un cluster elasticsearch en public, c’est mal.
Et la sécurité c’est pas son truc à ES.

Heureusement nginx est là (pour le reste il y a <a href="http://hugues.lepesant vente viagra suisse.com/2015/07/30/securiser-elasticsearch-avec-iptables/ »>iptables

apt-get install nginx apache2-utils

Par contre pour accéder au plugin head de votre cluster ES, c’est une page blanche.
Heureusement nginx est là.
Voici par exemple un bout de conf à coller dans un des sites nginx (dans /etc/nginx/site-enabled/).

upstream elasticnodes {
    server 192.168.0.11:9200;
    server 192.168.0.12:9200;
    server 192.168.0.13:9200;

    keepalive 15;
}

server {
    listen 443;
    server_name logs.secure.net;

    ssl on;
    ssl_certificate /etc/ssl/secure.net/logs.secure.net.pem;
    ssl_certificate_key /etc/ssl/secure.net/logs.secure.net.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5;

    error_log   /var/log/nginx/elasticsearch-errors.log;
    access_log  /var/log/nginx/elasticsearch.log;

    location /_plugin/head/dist {
        root /usr/share/nginx/html;
    }

    location / {

        rewrite ^/(.*) /$1 break;

        proxy_ignore_client_abort on; 
        proxy_pass http://elasticnodes;
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header X-Real-IP   $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_pass_header Access-Control-Allow-Origin;
        proxy_pass_header Access-Control-Allow-Methods;
        proxy_hide_header Access-Control-Allow-Headers;
        add_header Access-Control-Allow-Headers 'X-Requested-With, Content-Type';
        add_header Access-Control-Allow-Credentials true;

        auth_basic  "Patte Blanche ?";
        auth_basic_user_file /etc/nginx/conf.d/search.htpasswd;
    }
}

server {
    listen 80;
    server_name logs.secure.net;
    return 301 https://$host$request_uri;
}

Ensuite il nous reste à installer le plugin head d’Elasticsearch sur tous les noeuds.

Pour la création du fichier de password :

htpasswd -c /etc/nginx/conf.d/search.htpasswd monuser

Installation des VMware Tools pour FreeBSD 10.x sous ESXi 5.1 et 5.5

Installer quelques paquets


pkg install perl5
pkg install wget
pkg install compat6x-amd64

Monter le CROM des VMware Tools


mount -t cd9660 /dev/cd0 /mnt/cd /home/infra/
tar xvfz /mnt/vmware-freebsd-tools.tar.gz
sync
umount /mnt/
cd vmware-tools-distrib/

Récupérer des patchs


cd /tmp
wget http://ogris.de/vmware/vmware-tools-distrib.diff
wget http://ogris.de/vmware/vmblock-only.diff
wget http://ogris.de/vmware/vmmemctl-only.diff

Appliquer les patch


cd /home/hugues/vmware-tools-distrib
patch -p 1 < /tmp/vmware-tools-distrib.diff

vmblock


cd lib/modules/source/vmblock
tar xvfz vmblock.tar
cd vmblock-only/patch -p 1 < /tmp/vmblock-only.diff make make install

vmmemctl


tar xvfz vmmemctl.tar
cd ../vmmemctl-only/patch -p 1 < /tmp/vmmemctl-only.diff make make install

Modification du path de perl

Au profit de /usr/local/bin/perl.


cd ../../../..
vim vmware-install.pl
vim /usr/local/bin/vmware-config-tools.pl

Installation des VMwareTools


./vmware-install.pl

Références

http://ogris.de/vmware/freebsd10.html
Aarchives des patchs : http://hugues.lepesant.com/stuff/freebsd/esxi5x/