Rudder vous aide à durcir vos VM Linux
Suite à l’introduction de la semaine passée de rudder, un outil de gestion de configuration, je vous propose cette semaine de vous montrer comment l’utiliser pour faire du hardening de VM
Introduction
Il y a quelques semaines, je vous ai expliqué comment j’utilisais
openscap, un outil destiné aux
administrateurs systèmes et aux personnes en charge de la sécurité, pour
réaliser des audits de sécurité. L’objectif étant de renforcer la sécurité des
assets
. Pour cela, je me servais
d’OpenScap pendant le développement de
rôles Ansible pour contrôler si je respectais un certain nombre de règles de
sécurité. On va reprendre le même principe, mais cette fois, ce sera rudder
à la manœuvre. Vous allez voir que ce que rudder propose simplifie pas mal le
travail.
Rudder n’utilise pas pour le moment la commande openscap-ssh pour lancer des audits à distance. On est donc obligé d’installer OpenScap et le framework de test de compliance sur tous les nœuds.
Pour en simplifier l’installation, je vais utiliser, mon rôle ansible-rôle-openscap ↗ qui se charge de réaliser ces installations. Je vais en profiter pour vous montrer comment utiliser rudder comme source d’inventaire dynamique Ansible.
Utilisation de rudder comme source d’inventaire dynamique ansible
Avant toute chose, je vais modifier mon vagrantfile pour utiliser une règle de
nommage des nodes
. Cette règle de nommage simplifié var permettre de définir
l’environnement, le rôle et un numéro d’index. Cela va permettre de
simplifier la création des groupes rudder et donc ceux d’ansible.
Ma règle de nommage (simplifiée) :
- Première lettre pour l’environnement : P pour prod, D pour développement, R pour cette recette, Q pour qualification, …
- Deux lettres pour définir le rôle du serveur : Par exemple SW pour Serveur WEB, BD pour base de données, ou FC pour serveur de fichiers.
- Trois autres lettres pour définir le projet utilisant la ressource : MUT pour de la mutualisation par exemple.
- Deux lettres pour la localisation physique du serveur : LIL pour Lille, PAR pour Paris, LOC pour local.
- Trois lettres pour le provider : LOC pour local, AZU pour Azure, GCP pour GCP
- Deux chiffres comme index.
Ce qui donne par exemple : pswmutloc01 pour le premier serveur web de mutualisé de production.
Provisionnement des nouveaux nœuds
Si les nodes node1, node2 et node3 sont encore présents, il faut les détruire avant de modifier votre Vagrantfile !
Le nouveau Vagrantfile :
On peut lancer la création des nouveaux nœuds.
Il faudra effacer les nœuds et accepter les nouveaux dans l’interface de
rudder. N’oubliez pas aussi de remplacer dans votre fichier de config ssh
,
les nœuds par ceux retourner par la commande vagrant ssh-config
.
Je devrais chercher un plugin Vagrant se chargeant de cette tâche !
Création des groupes rudder
Nous allons créer des groupes, pour cela, nous allons utiliser des expressions régulières sur les noms de machines pour les répartir dans les groupes.
- Pour les serveurs WEB :
^[a-z]sw.*$
. - Pour les serveurs de BDD :
^[a-z]bd.*$
. - Pour les serveurs de Production :
^p.*$
. - Pour les serveurs de Développement :
^d.*$
.
Utilisation de rudder comme inventaire Ansible
Tout est documenté ici ↗.
Il faut récupérer deux fichiers : rudder.py
et rudder.ini
et modifier la configuration ansible.
Mon fichier rudder.ini
:
Il faut générer un token dans l’interface avec juste les droits de lecture. Pour cela il faut se rendre dans Administration/API Accounts :
Pour le fichier ansible.cfg, il faut juste définir à script
où l’ajouter à la
liste existante :
Pour vérifier que cela fonctionne, nous allons utiliser la commande suivante :
Nous retrouvons bien tous nos groupes. Testons un module Ansible :
Pour ceux qui ont des problèmes avec la connexion au serveur Rudder, j’ai proposé une correction ↗ utilisant une librairie Ansible à la place d’httplib2 pour se connecter au serveur.
Installation d’OpenScap sur tous les serveurs
Comme dit plus haut, je vais utiliser mon rôle personnel pour installer OpenScap
sur toutes les machines.
Mon playbook :
J’utilise les dernières versions des projets Openscap ↗ et ComplianceAsCode/content ↗.
Si vous êtes attentif, vous avez certainement remarqué que j’utilise le groupe
Ubuntu_22_04
comme cible. On peut lancer l’installation d’OpenScap.
On lance l’installation :
Tout est installé, passons à l’installation du plugin OpenScap sur rudder.
Installation du plugin Rudder OpenScap
Connectez-vous au serveur rudder :
Il faut passer root
:
Création des directives
Nous allons définir une directive permettant de lancer le scan OpenScap sur les
nœuds du groupe Ubuntu 22.04
.
Création de la directive
Pour cette directive, nous allons utiliser la technique Plugin OpenScap Policies
et lui définir
les deux variables profile
et scap_file
comme dans la capture d’écran suivante.
Nous allons l’ajouter aussi directement à la Rule Ubuntu 22.04 OpenScap
.
- profile :
xccdf_org.ssgproject.content_profile_cis_level2_server
. - scap_file :
/opt/openscap-content/ssg-ubuntu2204-ds.xml
.
Terminer par [Create]
Lancement du scan
Par défaut les scans sont lancés de nuit. Pour les forcer, sur un des nœuds avec le compte root, lancez la commande suivante :
Dans la section OpenScap
de la page du noeud dswmutloc01
, vous devriez voir
apparaître le rapport.
Nous voyons que nous avons pas mal de choses à corriger. Nous allons utiliser rudder.
Durcissement d’une VM avec Rudder
Nous allons nous intéresser à la partie SSH. Dans le rapport nous voyons ceci.
Création de la directive SSH
Nous allons donc créer une nouvelle directive que nous allons ajouter à notre
rule Ubuntu 22.04
. Dans la section directives, recherchez SSH dans les
techniques. Dans les paramètres, je mets :
- Allow password authentication à No
- Allow TCP forwarding à No
- Allow X11 forwarding à No
- Print motd à Yes
Je la rattache à la rule Ubuntu 22.04
.
On relance la génération du rapport OpenScap.
Conclusion
En quelques clics, on a renforcé la configuration SSH de nos trois nœuds, alors qu’il y a une semaine, je ne savais pas utiliser ce produit. Rudder montre tout son potentiel dans ce domaine. En vous aidant des explications du rapport OpenScap, on peut arriver à rapidement durcir la configuration d’une VM.
Plutôt que d’opposer des outils, Utilisons les tous à bon escient et on arrivera à configurer une infrastructure rapidement et de manière sécurisé.
On voit bien ici, que rudder peut aussi vous aider à construire un inventaire dynamique Ansible. En ajoutant des propiétées sur tous les nœuds, on peut l’enrichir encore plus.
Dans cet exemple, j’utilise vagrant
pour provisionner des VM,
mais on peut facilement transposer cet exemple pour provisionner des VM sur les
clouds AWS, GCP, Azure, … avec du Terraform
.
Plus loin
Rudder, est donc un très bon outil de gestion de configuration et d’audit de sécurité. Lors du cfgmgmtcamp 2023, j’ai pu échanger avec les développeurs de cet outil. Dans leur roadmap, il y a des choses très intéressantes à venir.
Rudder dispose aussi de toute une série de plugins permettant de faire bien d’autres choses. Donc, je vais continuer à l’explorer.