Visualiser une révision

[Tuto/HowTo] [Ubuntu/Debian] Chiffrer ses volumes Glusterfs

voxdemonix : révision n°6 (27 février 2019 13:00:03)

**/!\ suite à une erreur lors de la création de l'article, le titre n'est pas bon. Cet article traite du chiffrement des communications entre les machines. Pas du chiffrement sur les disques.**

Introduction
============


Par défaut les communications de glusterfs-server et de glusterfs-client ne sont pas chiffrées. Glusterfs peut néanmoins utiliser [TLS](https://fr.wikipedia.org/wiki/Transport_Layer_Security) (ex SLL) pour [chiffrer](https://fr.wikipedia.org/wiki/Chiffrement) les communications et casser ainsi toute tentative de [MITM](https://fr.wikipedia.org/wiki/MITM).
Ensemble, nous allons voir comment.

**Note :** Pour une raison inconnue (Ré-installation d'un des node? Bug après un reboot?), il peut arriver que les certificats TLS expirent. Vous vous retrouverez avec des "_State: Peer in Cluster (Disconnected)_" lorsque vous lancez la commande "_gluster peer status_". Dans _/var/log/glusterfs/etc-glusterfs-glusterd.vol.log_ vous trouverez des lignes du style "_SSL routines:ssl3_read_bytes:sslv3 alert certificate expired_". Reforger les certificats et les clés privées semble régler le problème.



Les fichiers dont à besoin glusterfs pour le chiffrement via TLS
================================================================


* _**/etc/ssl/glusterfs.pem**_ => Votre certificat. Ce fichier unique doit être sur chaque noeud et ne doit pas être partagé.
* _**/etc/ssl/glusterfs.key**_ => Votre clés privée. Elle doit être disponible sur chacun des Noeuds et clients.
* _**/etc/ssl/glusterfs.ca**_ => Ce fichier doit être à l'identique sur toutes les machines du cluster, autant client que serveur.
* _**/var/lib/glusterd/secure-access**_ => Fichier vide dont l'existence permet à glusterfs de savoir qu'il doit activer TLS. Doit être présent sur toutes les machines du cluster.


Mise en place
=============


Installer le module de chiffrement
----------------------------------


* **On se rend dans le dossier _/etc/ssl_**

```
cd /etc/ssl/
```

* **Création des clés**

```
sudo openssl genrsa -out glusterfs.key 2048
```

* **Création des certificats, remplacez hostnameNode par vos valeus - à répéter pour chaque node (server & client)**

```
sudo openssl req -new -x509 -key glusterfs.key -subj "/CN=hostnameNODE" -out glusterfs_hostnameNode.pem
```

* **Concaténation des certificats (client & server), pour les serveurs**

```
cat glusterfs_hostnameNode.pem glusterfs_hostnameNode.pem glusterfs_hostnameNode.pem glusterfs_hostnameNode.pem > glusterfs_server.ca
```

* **Concaténation des certificats (server), pour les clients**

```
cat glusterfs_hostnameNode.pem glusterfs_hostnameNode.pem glusterfs_hostnameNode.pem glusterfs_hostnameNode.pem > glusterfs_client.ca
```

  * **Note :** autant utiliser directement celle juste ci-haut

* **On prépare l'export**

```
mkdir /tmp/gluster
cp /etc/ssl/gluster* /tmp/gluster/
chmod 777 -R /tmp/gluster/
```

* **Envoyez sur chaque Noeuds sa clés privé (.key) et son certificat (.pem)**
  * Exemple en lançant la commande depuis un client

```
scp monUser@machineQuiAGenereLesCertif:/tmp/gluster/glusterfs_hostnameNode.pem /etc/ssl/
```

* **On exporte maintenant le certificat concaténé sur tout les serveurs**
  * Exemple en lançant la commande depuis un client

```
scp monUser@machineQuiAGenereLesCertif:/tmp/gluster/glusterfs_server.ca /etc/ssl/glusterfs_server.ca
```

* **On exporte maintenant le certificat concaténé sur tout les clients**
  * Exemple en lançant la commande depuis un client

```
scp monUser@machineQuiAGenereLesCertif:/tmp/gluster/glusterfs_client.ca /etc/ssl/glusterfs_client.ca
```

* **Activer le chiffrement côté serveur (à reproduire sur chaque serveur)**

```
sudo touch /var/lib/glusterd/secure-access
service glusterfs-server restart
```

* **Activer le chiffrement côté client (à reproduire sur chaque client)**

```
sudo touch /var/lib/glusterd/secure-access
```




Activer le chiffrement des communications d'un volume
-----------------------------------------------------


**Note :** il est conseillé de démonter (umount) les dossiers glusterfs déjà monté sur les clients. 


```
gluster volume stop VOLNAME
gluster volume set VOLNAME server.ssl on
gluster volume set VOLNAME client.ssl on
gluster volume start VOLNAME
```


Désactiver le chiffrement des communications d'un volume
--------------------------------------------------------

**Note :** il est conseillé de démonter (umount) les dossiers glusterfs déjà monté sur les clients. 

```
gluster volume stop VOLNAME
gluster volume set VOLNAME server.ssl off
gluster volume set VOLNAME client.ssl off
gluster volume start VOLNAME
```




Farm Link
=========

* [Gluster et TLS (SSL)](https://www.0rion.netlib.re/forum4/viewtopic.php?f=94&t=667) (tutoriel d'origine)
* [Attaque de l'homme du milieu](https://fr.wikipedia.org/wiki/MITM)
* [NixCraft - How to enable TLS/SSL encryption with Glusterfs storage cluster on Linux](https://www.cyberciti.biz/faq/how-to-enable-tlsssl-encryption-with-glusterfs-storage-cluster-on-linux/)
* [Gluster Doc - Setting up GlusterFS with SSL/TLS](https://gluster.readthedocs.io/en/latest/Administrator%20Guide/SSL/)