Aller au contenu

Installation de l'agent Linux

L'agent Linux sert, pour cyberelements.io / cyberelements Cleanroom, à limiter les accès réseaux possibles depuis les serveurs SSH accédés par les utilisateurs (définis dans les politiques / contrats d'accès).

Prérequis

Quelques prérequis sont nécessaires au bon fonctionnement de l'agent :

  • OS compatible : Red Hat 9 et Debian 12
  • Présence du pare-feu iptables
  • Connexion avec un compte différent de root

Information

L'agent Linux n'agit pas sur l'utilisateur root, car celui-ci possède constamment les droits suffisants pour se retirer les restrictions qui lui seraient appliquées.

De plus, certains services utilisant les droits root, l'ajout de restrictions réseaux pourrait rendre instable le fonctionnement de ces services.

Fonctionnement

L'agent Linux est décomposé en plusieurs parties :

  • Un service systemd nommé cleanroom-filter
  • Un module PAM nommé pam_clr_filter
  • Une politique SELinux pour Red Hat afin d'autoriser le serveur SSH à communiquer avec le service cleanroom-filter

Le fonctionnement général suit la séquence suivante :

sequenceDiagram
    autonumber
    participant MED as Mediation Controller
    participant GW_SSH as Edge Gateway<br/>Enregistreur SSH
    participant SSH as Cible SSH<br/>Serveur SSH
    participant PAM as Cible SSH<br/>Module PAM pam_clr_filter
    participant svc as Cible SSH<br/>Service cleanroom-filter

    MED->>GW_SSH: Demande d'ouverture d'une<br/>application SSH
    GW_SSH->>+MED: Récupération des informations<br/>de filtrage pour la session
    MED->>-GW_SSH: Envoi des informations de<br/>filtrage réseau
    GW_SSH->>+SSH: Connexion SSH
    SSH-->-PAM: Création d'une session SSH
    PAM->>+svc: Envoi du nom d'utilisateur
    Note right of svc: Création d'une chaîne <br/>iptables pour l'utilisateur ayant<br/> pour nom clr-LOGIN
    svc->>-PAM: Envoi d'un jeton unique
    Note over PAM: Ajout à la session de l'utilisateur<br/> la variable d'environnement CLR-ID<br/> contenant le jeton unique
    GW_SSH->>svc: Envoi de la liste des réseaux à autoriser
    Note over svc: Création d'une règle iptables OUTPUT<br/> pour rediriger le traffic de l'utilisateur dans<br/> la chaîne iptables créée précédemment
    Note over svc: Ajout des autorisations dans la chaîne<br/> iptables créée pour l'utilisateur
    break Fin de session SSH
        SSH->>+GW_SSH: Notification de fin de session
        SSH-->svc: Détection de la fin de session SSH
        Note over svc: Suppression de la règle iptables<br/> OUTPUT créée pour l'utilisateur 
        Note over svc: Suppression de la chaîne iptables<br/> créée pour l'utilisateur
        GW_SSH->>-MED: Notification de fin de session<br/> SSH pour l'utilisateur
    end
Hold "Ctrl" to enable pan & zoom
  1. Le serveur Mediation Controller envoie l'information à la Edge Gateway d'ouvrir une nouvelle session SSH.
  2. Le service d'enregistrement SSH demande au serveur Mediation Controller les informations de filtrage réseau à appliquer à la session SSH.
  3. Le Mediation Controller donne en réponse la liste des réseaux à autorisés.
  4. Le service d'enregistrement SSH établit ensuite la connexion vers le serveur SSH cible.
  5. La connexion au serveur SSH déclenche la séquence de création de session, et donc du passage par les modules PAM affectés à sshd.
  6. Le module PAM pam_clr_filter de l'agent Linux envoie le nom d'utilisateur au service cleanroom-filter qui créé ensuite une nouvelle chaîne iptables ayant pour nom clr-LOGIN où LOGIN est remplacé par le d'utilisateur reçu.
  7. Après création de la chaîne iptables, le service cleanroom-filter crée et envoie un jeton aléatoire au module PAM pam_clr_filter. Ce dernier va ajouter ce jeton dans la variable d'environnement CLR-ID de l'utilisateur.
  8. Le service d'enregistrement SSH envoie, par l'intermédiaire de l'exécutable /usr/local/ipdiva/bin/cleanroom-netfiltersession.py, la liste des réseaux à autoriser au service cleanroom-filter. Le service crée ensuite une règle iptables OUTPUT pour rediriger tout le trafic de l'utilisateur, identifié par son UID, dans la chaîne iptables créée au point 6. L'ensemble des flux à autoriser pour l'utilisateur sont ajoutés dans la chaîne iptables.
  9. Lorsque la fin de session SSH est déclenchée, l'information remonte au service d'enregistrement SSH de la Edge Gateway.
  10. Le service cleanroom-filter détecte la fin de session de l'utilisateur et procède au nettoyage des règles iptables ajoutées : suppression de la directive OUTPUT redirigeant le trafic de l'utilisateur dans une chaîne iptables et suppression de cette dernière.
  11. La Edge Gateway ayant reçu la fin de session SSH, elle retransmet cette information au Mediation Controller.

Installation

Droits root requis

Les droits root pour l'installation de l'agent est obligatoire.

Le paquet .deb ou .rpm est téléchargeable depuis la console d'administration :

  1. Accéder au plan de travail "Configurations" avec le bouton suivant situé en haut à gauche :
  2. Ouvrir la tuile "Toolbox"
  3. Récupérer le setup adapté à l'OS souhaité dans le premier onglet "Outils d'intégration"
  1. Accéder au plan de travail "Configurations" avec le bouton suivant situé en haut à gauche :
  2. Ouvrir la tuile "Toolbox"
  3. Récupérer le setup adapté à l'OS souhaité dans le premier onglet "Outils d'intégration"

Une fois le paquet récupéré, envoyez-le sur le serveur Linux dans le répertoire /tmp/. Suivez ensuite les instructions d'installation adaptées à l'OS :

Exécutez les commandes suivantes avec les droits root :

1
2
dpkg -i /tmp/cleanroom-netfilter_*_amd64.deb
sed -i "s/@include common-session/@include common-session\n\n\# Use the Cleanroom agent to limit network bounces\nsession    optional\tpam_clr_filter.so/g" /etc/pam.d/sshd

La seconde commande permet d'automatiser l'ajout de deux lignes dans le fichier /etc/pam.d/sshd, mais cette opération peut aussi être réalisée manuellement :

27
28
29
30
31
32
33
34
35
36
37
# Standard Un*x session setup and teardown.
@include common-session

# Use the Cleanroom agent to limit network bounces
session    optional     pam_clr_filter.so

# Print the message of the day upon successful login.
# This includes a dynamically generated part from /run/motd.dynamic
# and a static (admin-editable) part from /etc/motd.
session    optional     pam_motd.so  motd=/run/motd.dynamic
session    optional     pam_motd.so noupdate

Exécutez les commandes suivantes avec les droits root :

1
2
dnf install /tmp/CleanroomFilter-*-Linux.rpm
sed -i "s/revoke$/revoke\n# Use the Cleanroom agent to limit network bounces\nsession    optional\tpam_clr_filter.so/g" /etc/pam.d/sshd

La seconde commande permet d'automatiser l'ajout de deux lignes dans le fichier /etc/pam.d/sshd, mais cette opération peut aussi être réalisée manuellement :

11
12
13
14
15
16
17
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
# Use the Cleanroom agent to limit network bounces
session    optional     pam_clr_filter.so
session    optional     pam_motd.so