ROAMSWITCH SENSOR ・ Dernière mise à jour : 2026-09-21

Manuel d'exploitation RoamSwitch Sensor

Le guide d'installation et d'exploitation de RoamSwitch Sensor — un capteur réseau qui, une fois placé sur votre LAN, détecte les nouveaux appareils et l'usurpation sur le même segment, et exécute des audits actifs de vulnérabilités sur tout terminal déjà équipé de RoamSwitch (Mac / Linux Client / Server Edition). Distribué via des paquets apt/dnf.

1. Présentation & positionnement

RoamSwitch (Mac / Linux Client / Server Edition) est, dans tous les cas, un agent résidant sur l'hôte. Cette forme comporte deux angles morts structurels.

RoamSwitch Sensor est un nœud dédié que vous placez sur le LAN pour combler ces deux angles morts. Ce qui est aujourd’hui implémenté et vérifié comprend : des audits actifs de vulnérabilités des terminaux équipés de RoamSwitch sur le même LAN ; un registre des appareils du LAN construit à partir d’un balayage ARP et de la surveillance de la table ARP, avec détection des nouveaux appareils et de l’usurpation ; et des informations de référence sur les comportements suspects (connexions vers des IP malveillantes, signes de participation à un botnet, tunneling DNS, etc.) issues d’une capture passive activée sur option (voir §6). Sensor se contente de détecter et de signaler ; il ne bloque jamais le trafic. Il est conçu comme un NDR léger (Network Detection & Response) associé à un scanner de vulnérabilités interne fondé sur la preuve, et non comme un EDR.

Politique de trafic sortant (aucune donnée d’appareil ni résultat d’audit envoyé par défaut)
RoamSwitch Sensor n’est pas « Zero Telemetry ». Son objectif est d’observer d’autres appareils et de rendre compte à leur sujet, et il établit les connexions suivantes. (1) Récupération des données de détection : il récupère chaque jour la carte des CVE et la base de données NSE de nmap auprès du service de mise à jour (updates.fetch_cve_map, true par défaut ; réglez-le sur false pour un fonctionnement entièrement hors ligne, en n’utilisant que les données intégrées). Ce trafic ne transporte aucune donnée d’appareil ni d’audit. (2) Notifications et agrégation vers les destinations que vous configurez : les webhooks, syslog et un collecteur central ne reçoivent des données que si vous les configurez, et uniquement vers vos propres destinations (rien n’est envoyé par défaut). L’appairage s’effectue localement ; aucun enregistrement cloud ni compte n’est nécessaire.

L'autodéfense n'est délibérément pas implémentée (un choix de conception assumé). Si vous devez protéger l'hôte du Sensor lui-même contre les attaques, nous recommandons d'installer séparément RoamSwitch for Linux Server Edition sur la même machine. Les deux s'exécutent en tant que processus totalement indépendants et coexistent sans conflit.

2. Environnement de vérification actuel

3. Installation & démarrage

Installez le paquet roamswitch-sensor depuis le dépôt officiel signé. Après l'installation, roamswitch-sensor.service (systemd) est automatiquement activé et démarré.

3.1 APT (Ubuntu / Debian)

# 1. Enregistrer la clé de signature du dépôt
curl -fsSL https://lafine.net/apt/roamswitch-archive-keyring.asc \
  | sudo gpg --dearmor -o /usr/share/keyrings/roamswitch-archive-keyring.gpg

# 2. Ajouter le dépôt
echo "deb [signed-by=/usr/share/keyrings/roamswitch-archive-keyring.gpg] https://lafine.net/apt stable main" \
  | sudo tee /etc/apt/sources.list.d/roamswitch.list

# 3. Installer
sudo apt update && sudo apt install roamswitch-sensor

3.2 DNF / RPM (Fedora / RHEL)

# 1. Importer la clé GPG
sudo rpm --import https://lafine.net/rpm/RPM-GPG-KEY-roamswitch

# 2. Ajouter le fichier de configuration du dépôt
sudo curl -fsSL -o /etc/yum.repos.d/roamswitch.repo https://lafine.net/rpm/fedora/roamswitch.repo

# 3. Installer
sudo dnf install roamswitch-sensor

3.3 Vérification du démarrage

systemctl status roamswitch-sensor.service
sudo roamswitch-sensor status

3.4 Exécution du CLI / TUI

Le CLI (roamswitch-sensor) et le TUI interactif (roamswitch-sensor-tui) peuvent être exécutés directement après l'installation.

sudo roamswitch-sensor status
sudo roamswitch-sensor-tui
Opt-in : extension de la visibilité LAN passive
Pour une utilisation avec un port miroir de commutateur (SPAN) ou un pont transparent en ligne, spécifiez le nom de l'interface cible dans la variable d'environnement ROAMSWITCH_SENSOR_PASSIVE_CAPTURE_IFACE (définie via systemctl edit roamswitch-sensor.service) pour observer les en-têtes Ethernet/IPv4 sur cette interface et détecter les nouveaux appareils ou le contact avec des IP malveillantes connues (voir §6.1). Désactivé par défaut.

4. Appairage (méthode par code)

À sa sortie d'usine, Sensor ne fait confiance à rien. L'appairage se fait à l'aide d'un code d'appairage à usage unique émis par l'opérateur du Sensor. La relation de confiance — « Sensor est autorisé à exécuter des audits actifs de vulnérabilités contre ce terminal » — s'établit simultanément dans les deux sens en une seule étape d'appairage (il n'existe pas d'état de confiance à sens unique).

Prérequis : faites fonctionner Sensor avec une adresse IP fixe (attribution statique, ou réservation côté serveur DHCP). Une fois l'appairage effectué, le terminal se connecte désormais toujours directement à l'adresse IP de Sensor constatée lors de l'appairage (il n'y a plus de découverte automatique, via mDNS ou autre) ; si l'IP de Sensor change par la suite, un nouvel appairage sera nécessaire. Le terminal peut, lui, conserver une IP dynamique.

4.1 Émettre un code d'appairage (côté Sensor)

# À exécuter côté Sensor (ou appuyer sur c dans le TUI)
sudo roamswitch-sensor issue-code

Un code à usage unique de 8 caractères est émis (lettres majuscules et chiffres ; les caractères facilement confondus 0/O/1/I/L sont exclus). Il expire au bout de 10 minutes et ne fonctionne qu’une fois : transmettez-le donc rapidement à l’opérateur du terminal par un canal hors bande (de vive voix, par chat). L’empreinte du certificat TLS (SHA-256) de Sensor est également affichée. Le terminal épingle cette valeur : transmettez-la donc avec le code (vous pouvez toujours la consulter avec roamswitch-sensor pairing show ou sur l’écran T de la TUI).

4.2 Appairage avec le code (côté terminal)

# Côté terminal (roamswitch-linux)
sudo roamswitch sensor pair --addr <SENSOR_IP> --code <CODE> --fingerprint <SHA256_FINGERPRINT>

Sur l’édition Mac, vous pouvez faire de même dans l’interface graphique depuis l’élément de la barre des menus « 🔍 RoamSwitch Sensor Pairing… », en saisissant l’adresse IP du Sensor, le code d’appairage et l’empreinte du certificat.

Une fois l’appairage effectué, chaque audit actif et chaque récupération de résultats ultérieurs sont authentifiés par des signatures Ed25519. Un terminal Linux ne dialogue en TLS 1.3 qu’avec un Sensor dont le certificat correspond à l’empreinte que vous avez saisie, et ne retombe jamais automatiquement en clair (§4.4). À ce stade, le terminal qui connaissait le code et le Sensor qui l’a émis se font mutuellement confiance.

Lorsqu'un code d'appairage a expiré
Un code d'appairage expire automatiquement 10 minutes après son émission et ne peut jamais être utilisé deux fois. Toute tentative d'appairage après expiration est rejetée. Dans ce cas, demandez à l'opérateur du Sensor d'en émettre un nouveau avec issue-code.

4.3 Appairage manuel (enregistrement direct d’une clé publique déjà connue)

Si l'opérateur du Sensor connaît déjà, par un autre canal, la clé publique et l'adresse d'un terminal, il peut aussi l'enregistrer directement côté Sensor sans échanger de code d'appairage (il est en principe préférable d'utiliser la méthode par code du §4.2 et de laisser le terminal s'appairer lui-même). Vous pouvez consulter votre propre clé publique et votre adresse avec les commandes suivantes.

# Vérifier sa propre clé publique/adresse côté terminal
sudo roamswitch sensor key

# Vérifier sa propre clé publique/adresse/adresse MAC côté Sensor
sudo roamswitch-sensor status
# Côté Sensor
sudo roamswitch-sensor pair <clé publique complète> --addr <adresse IP> --confirm

4.4 Sécurité de l’API de contrôle (TCP 50543) : TLS, empreinte, blocage

L’appairage, les demandes d’audit et la récupération des résultats passent par l’API de contrôle de Sensor (TCP 50543). Les protections suivantes sont intégrées.

sudo roamswitch-sensor pairing show                       # mode, fingerprint, warnings
sudo roamswitch-sensor tls rotate                         # regenerate the certificate
sudo roamswitch sensor repin <PUBLIC_KEY> --fingerprint <NEW_FINGERPRINT>   # on each endpoint
Passer control.tls à required
(1) Mettez à jour chaque terminal vers une version compatible TLS et effectuez l’appairage TLS (ou le réépinglage) sur chacun → (2) vérifiez que roamswitch-sensor status n’affiche plus d’avertissement de connexion en clair → (3) exécutez sudo roamswitch-sensor config set control.tls required → redémarrez le démon. off n’est normalement pas utilisé, car les terminaux Linux exigent TLS et ne pourraient plus se connecter.

5. Audit actif des vulnérabilités

Sensor exécute des diagnostics de vulnérabilité non destructifs et à preuve d'exploitation sur les terminaux appairés. Il n'effectue jamais d'opération destructive (écriture ou suppression de données, arrêt de services).

sudo roamswitch-sensor scan <clé publique ou son début>

L'audit se compose de quatre phases.

  1. Analyse complète des ports : détecte de façon exhaustive tous les ports TCP ouverts sur l'hôte cible.
  2. Diagnostic de signatures connues : vérifications non destructives et à preuve d'exploitation de schémas de vulnérabilité connus — exposition non authentifiée de Redis / dockerd / Memcached / MongoDB / Elasticsearch / CouchDB / Jenkins / VNC, diagnostic de relais ouvert SMTP (une méthode sûre qui n'envoie que MAIL FROM/RCPT TO, jamais DATA), et diagnostics de mauvaise configuration CORS, de traversée de répertoires et de redirection ouverte sur les serveurs de développement, entre autres.
  3. Récupération générique de bannière : pour les ports ouverts non couverts par les signatures ci-dessus, récupère la chaîne de bannière par simple connexion (aucune donnée n'est envoyée).
  4. Diagnostic complémentaire nmap NSE : diagnostic complémentaire à large couverture de protocoles via nmap --script safe. S'exécute automatiquement dès que nmap est installé sur l'hôte (sans effet dans le cas contraire).

Chaque exécution d'audit est enregistrée dans /var/lib/roamswitch-sensor/scan_history.json — que quelque chose ait été détecté ou non, car un résultat propre à ce moment-là a aussi une valeur d'archive — et peut être consultée via le CLI ou le TUI.

roamswitch-sensor history
sudo roamswitch-sensor report <clé publique ou son début> --out /tmp/report.md

5.1 Demande d’audit depuis le client (modèle pull)

Un terminal appairé peut aussi demander activement un audit à Sensor. Dans l’édition Mac, utilisez « Demander un audit au Sensor » dans la barre de menus ; sous Linux, utilisez la commande suivante.

sudo roamswitch sensor request-audit

Une fois l’audit exécuté par Sensor, le terminal interroge le résultat à partir de 5 minutes après la demande, puis toutes les 5 minutes, jusqu’à 5 tentatives (soit 25 minutes maximum au total). Tout résultat récupéré est également enregistré localement sur le terminal.

roamswitch sensor results

Dans l’édition Mac, les résultats apparaissent aussi dans la liste « Résultats d’audit » de la fenêtre de réglages, ou peuvent être lus via l’outil MCP get_sensor_audit_results, comme donnée d’entrée pour un agent IA élaborant un plan de remédiation. La récupération d’un résultat peut aussi être explicitement refusée, par exemple si l’appairage a été révoqué côté Sensor (voir §10 Q6).

6. Surveillance ARP passive & visibilité LAN

Sensor découvre les appareils du LAN de deux manières. (1) Surveillance de la table ARP : il lit sa propre table ARP (/proc/net/arp) environ toutes les 10 secondes et détecte « une nouvelle IP/MAC jamais vue » et « un changement d’adresse MAC pour une IP connue » (signe d’usurpation de la passerelle, etc.). (2) Un balayage ARP actif : nmap -sn -PR balaie le sous-réseau directement raccordé (jusqu’à un /22) et enregistre dans le registre des appareils l’IP, la MAC, le nom d’hôte, le constructeur, l’état en ligne, la première/dernière observation et l’historique des IP. Le balayage s’exécute toutes les heures, à la demande (refresh / touche r de la TUI) et au démarrage de la TUI ; sans nmap, seul le comportement passif (1) subsiste. Le constructeur et une classe d’appareil (IoT ou non, etc.) sont aussi déduits de l’OUI de la MAC.

roamswitch-sensor arp-events

Les événements détectés sont affichés par roamswitch-sensor arp-events et dans l’onglet « Événements ARP » de la TUI (Entrée pour les détails). Chaque événement comporte son horodatage, une gravité (de critique à info ; un changement de MAC de l’IP de la passerelle est « critique »), le raisonnement, l’identité des appareils concernés et des actions concrètes à mener.

6.1 Extension de la visibilité LAN passive (opt-in)

Alors que la surveillance ARP ci-dessus ne couvre que les appareils avec lesquels Sensor a lui-même communiqué, définir la variable d'environnement ROAMSWITCH_SENSOR_PASSIVE_CAPTURE_IFACE sur une interface cible permet d'observer les en-têtes Ethernet/IPv4 sur celle-ci (sans inspection de la charge utile) pour détecter ce qui suit.

sudo systemctl edit roamswitch-sensor.service
# [Service]
# Environment=ROAMSWITCH_SENSOR_PASSIVE_CAPTURE_IFACE=eth0

sudo systemctl restart roamswitch-sensor.service
roamswitch-sensor passive-events
Une carte réseau ordinaire vs un port miroir
Même une simple carte réseau ordinaire fonctionne pour détecter de nouveaux appareils dans le cadre du trafic ARP/broadcast/multicast (vérifié sur du matériel réel sur un LAN physique). Cependant, observer le trafic unicast général entre deux autres hôtes du LAN nécessite un port miroir de commutateur (SPAN), ou la configuration de Sensor en tant que pont transparent en ligne.

6.2 Registre des appareils et notes d’appareil

Consultez le registre avec roamswitch-sensor device-inventory (onglet « Réseau » de la TUI). Enregistrer une note (nom, usage, emplacement, etc.) avec device-note (touche n dans la TUI) marque l’appareil comme « identifié », tandis que les appareils sans note sont mis en évidence comme « à vérifier » (pour le rapprocher de votre inventaire des actifs).

sudo roamswitch-sensor refresh
roamswitch-sensor device-inventory
sudo roamswitch-sensor device-note aa:bb:cc:dd:ee:ff "3F copier"

6.3 Informations de référence sur les comportements suspects (détection uniquement)

Lorsque la capture passive (§6.1, activée sur option) est active, les informations de référence suivantes sont présentées. Il s’agit uniquement de détection et d’affichage ; Sensor ne bloque jamais le trafic.

7. Référence des commandes CLI

Commande Description
roamswitch-sensor status Affiche la clé publique, l’IP et l’adresse MAC propres de Sensor, le nombre de terminaux appairés, d’événements ARP et de demandes d’audit en attente, ainsi que l’état TLS de l’API de contrôle
roamswitch-sensor issue-code Émet un code d’appairage à usage unique (valable 10 minutes) ; affiche aussi l’empreinte du certificat de Sensor
roamswitch-sensor list Affiche la liste des terminaux appairés
roamswitch-sensor pair <public-key> [--addr <IP>] [--name <name>] --confirm Appaire manuellement un terminal en indiquant directement sa clé publique et son adresse (il est en principe plus simple d'utiliser issue-code et de laisser le terminal s'appairer lui-même)
roamswitch-sensor unpair <public-key> Supprime un appairage
roamswitch-sensor scan <public-key> Exécute un audit actif de vulnérabilités sur un terminal appairé
roamswitch-sensor history [public-key] Affiche l'historique d'audit (omettre la clé publique pour tous les terminaux)
roamswitch-sensor report <public-key> [--out <file>] Exporte le résultat d'audit le plus récent sous forme de rapport Markdown
roamswitch-sensor arp-events Affiche les événements ARP détectés (nouveaux appareils, suspicion d'usurpation)
roamswitch-sensor pairing show / tls show Affiche l’état TLS de l’API de contrôle (mode, empreinte, avertissement de connexion en clair, IP d’écoute, acceptation ou non des anciennes signatures v1) ; pairing show et tls show sont équivalents
roamswitch-sensor tls rotate Régénère le certificat TLS (tous les épinglages de l’ancienne empreinte deviennent invalides ; les terminaux doivent réépingler)
roamswitch-sensor refresh Relance immédiatement l’analyse du LAN (balayage ARP) et met à jour le registre des appareils
roamswitch-sensor device-inventory Affiche le registre des appareils (tous les appareils observés sur le LAN, leur état en ligne et leur note)
roamswitch-sensor device-note <MAC> [note] Enregistre une note pour un appareil (omettez la note pour la supprimer)
roamswitch-sensor passive-events / iot-events / network-threats / iot-advisories Affiche les événements issus de la capture passive (nouveaux appareils et connexions vers des IP malveillantes / comportement IoT / trafic suspect / avis de sécurité IoT)
roamswitch-sensor config [show | set <clé> <valeur>] Affiche ou modifie les réglages (audits planifiés, notifications, conservation, collecteur, API de contrôle, récupération des données de détection, langue). control.bind_addr et control.tls prennent effet au redémarrage du démon ; les autres n’exigent aucun redémarrage (§11.8)
roamswitch-sensor diff [clé publique] Afficher ce qui a changé depuis l'audit précédent (nouvelles détections, résolues, ports nouvellement ouverts, injoignable probable)
roamswitch-sensor export <scans|inventory|audit-log|unmanaged|all> … Écrire les preuves d'audit en CSV / JSON / HTML imprimable
roamswitch-sensor audit-log [verify] Afficher le journal des opérations et des approbations ; verify détecte toute altération de la chaîne de hachage
roamswitch-sensor notify-test Envoyer une notification de test aux destinations configurées (webhook / syslog) pour vérifier la connexion
roamswitch-sensor audit-unmanaged <IP|MAC> --confirm
roamswitch-sensor unmanaged-audits
Audit léger des appareils sans RoamSwitch (tests de connexion seulement). audit-unmanaged <IP ou MAC> --confirm en lance un à la main, unmanaged-audits [--detail] liste les résultats (§13)
roamswitch-sensor lockdown [status | on | off] Indique si le Sensor est verrouillé (status), le verrouille (on --reason TEXTE) ou le déverrouille (off). Verrouillé, il arrête l'appairage, les audits, les envois et les notifications (§14)
roamswitch-sensor decommission --confirm Efface les clés et les données de ce Sensor et le verrouille (irréversible). Le journal d'audit est conservé, et les terminaux qui lui étaient appairés sont listés avec la façon de les dissocier (§14)

Le CLI ne prend en charge que le japonais et l'anglais (il suit la variable d'environnement LANG).

8. Guide d'utilisation du TUI

La TUI interactive (roamswitch-sensor-tui) prend en charge 10 langues et permet d’utiliser chaque sous-commande de la CLI, chaque méthode IPC du démon, chaque clé de configuration et le collecteur (appuyez sur m pour le menu des fonctions). Six onglets principaux se changent avec la touche Tab (Maj+Tab pour revenir en arrière) : Appairés (le dernier état d’audit de chaque terminal) / Réseau (tous les appareils du LAN, avec leurs notes) / Événements ARP / Historique des analyses / Différences (changements depuis l’audit précédent ; nouvelles détections en rouge, résolues en vert, présumées inaccessibles en jaune) / Journal d’audit (qui a approuvé ou exécuté quoi, et quand ; le résultat de la vérification de la chaîne de hachage est affiché en haut). Les vues qui ne tiennent pas en 80 colonnes (surveillance passive, comportement IoT, trafic suspect, avis de sécurité IoT) s’ouvrent depuis le menu m.

Touche Action
TabChange d'onglet
↑↓ / j kSélectionne un élément
cÉmet un code d’appairage (valable 10 minutes). L’écran affiche la commande à exécuter sur le terminal, sudo roamswitch sensor pair --addr <this Sensor’s IP> --code <code> --fingerprint <fingerprint>, avec les valeurs réelles déjà renseignées
uSupprime un appairage
sExécute un audit actif de vulnérabilités sur le terminal sélectionné
a(Onglet Appareils réseau) Audit léger de l'appareil sélectionné, après un écran de confirmation (§13). Les résultats sont dans l'onglet « Appareils non gérés » du menu
KVerrouille ou déverrouille ce Sensor après un écran de confirmation ; un bandeau rouge reste en bas de chaque écran tant qu'il est verrouillé. La mise hors service est dans le menu (§14)
n(Onglet Appareils) Ajouter une note — nom, usage, emplacement — à l'appareil sélectionné ; un appareil avec note est considéré comme identifié
rRéanalyser le LAN maintenant (balayage ARP ; sinon exécuté automatiquement toutes les heures)
eExporte les preuves d’audit (CSV des résultats d’analyse, du registre des appareils et du journal d’audit ; rapport HTML ; JSON). Un formulaire permet de choisir le contenu, le format, le terminal, la date de début et la destination ; les fichiers sont produits dans la langue d’affichage (10 langues). La destination par défaut est ~/.local/state/roamswitch-sensor/ ; les fichiers sont créés neufs et lisibles uniquement par leur propriétaire (un fichier existant n’est jamais écrasé), et l’export lui-même est consigné dans le journal d’audit
pAppairage manuel (saisie de la clé publique et de l’adresse, puis écran de confirmation, puis exécution). Le formulaire affiche l’empreinte TLS de Sensor que le terminal épingle
TÉtat TLS et appairage (mode, empreinte, avertissement de connexion en clair, IP d’écoute, acceptation ou non des anciennes signatures v1). R régénère le certificat (avec un écran de confirmation qui en explique l’impact)
CÉditeur de configuration (affiche et modifie chaque clé de configuration ; les URL de webhook sont toujours masquées ; les clés nécessitant un redémarrage sont signalées)
NTest de notification (affiche le succès ou l’échec pour chaque destination ; les URL sont masquées)
mMenu des fonctions (surveillance passive, comportement IoT, trafic suspect, avis de sécurité IoT, état i, gestion du collecteur, etc.)
OGestion du collecteur (uniquement sur un hôte disposant du répertoire de données du collecteur) : enrôler, révoquer et lister les Sensors, jeton de lecture, et effacement d’une anomalie du journal d’audit
f / l / v(Onglet Historique des analyses) filtre par terminal. (Onglet Journal d’audit) l modifie le nombre de lignes affichées et v revérifie la chaîne de hachage
EnterAfficher le détail de la ligne sélectionnée (historique, changements, événements ARP, appareils, journal)
w(Dans une vue détaillée) écrit le rapport dans un fichier à la destination de votre choix (produit dans la langue d’affichage)
LChoisit la langue d’affichage (enregistrée dans le réglage language : elle s’applique donc aussi aux notifications et aux journaux produits par le démon)
qQuitte

9. Modèle de confiance & conception de sécurité

10. Dépannage & FAQ

Q1. La saisie d'un code d'appairage est rejetée.

Il y a quatre causes probables : (1) le code a expiré 10 minutes après son émission (demandez à l’opérateur de Sensor d’en émettre un nouveau avec issue-code), (2) une faute de frappe dans le code (les caractères facilement confondus 0/O/1/I/L sont exclus lors de l’émission, un code n’en contient donc jamais), (3) l’adresse IP donnée à --addr ne correspond pas à l’adresse IP fixe actuelle de Sensor, (4) --fingerprint ne correspond pas au certificat de Sensor (pin_mismatch / fingerprint_mismatch ; vérifiez la valeur avec roamswitch-sensor pairing show. Des erreurs répétées entraînent un blocage et renvoient rate_limited).

Q2. Le résultat du diagnostic complémentaire NSE est vide.

L'une de ces deux causes : (1) nmap n'est pas installé dans le conteneur ; (2) l'exécution a eu lieu, mais les scripts sûrs applicables aux ports cibles n'ont réellement produit aucune sortie. Le diagnostic complémentaire nmap NSE s'exécute automatiquement dès que nmap est installé sur l'hôte.

Q3. Combien de temps prend un audit complet ?

Une simple analyse complète des ports prend environ quelques dizaines de secondes, mais dès que nmap est installé sur l'hôte, le diagnostic complémentaire NSE s'y ajoute automatiquement et peut prendre jusqu'à environ 2 minutes selon le nombre de ports ouverts de la cible. Le TUI affiche en continu les secondes écoulées pendant l'exécution, vous pouvez donc suivre la progression en attendant.

Q4. J'ai appairé, mais je n'arrive toujours pas à lancer d'audit.

Causes probables : (1) sensor_pairing_enabled: true n’est pas défini sur le terminal (désactivé par défaut), (2) l’adresse IP fixe de Sensor a changé après l’appairage et le terminal ne peut plus joindre l’ancienne adresse qu’il conserve (réappairez), (3) l’appairage a été supprimé sur Sensor avec unpair, (4) Sensor a régénéré son certificat (tls rotate), de sorte que l’empreinte épinglée par le terminal est périmée (saisissez la nouvelle empreinte avec roamswitch sensor repin). Vérifiez avec roamswitch sensor list (terminal) et roamswitch-sensor list (Sensor) que chaque côté répertorie l’autre.

Q5. Sensor peut-il être utilisé en parallèle de RoamSwitch lui-même (Client/Server Edition) ?

Oui. Sensor étant conçu sans fonction d'autodéfense, nous recommandons d'installer également RoamSwitch for Linux Server Edition sur la même machine. Les deux fonctionnent avec des processus et des stockages de données totalement indépendants, sans conflit.

Q6. roamswitch sensor results indique que l’appairage a été révoqué.

L’appairage de ce terminal a été supprimé côté Sensor avec unpair. Demandez à l’opérateur du Sensor d’émettre un nouveau code d’appairage, puis réappairez avec roamswitch sensor pair --addr <ip> --code <code> --fingerprint <SHA-256>.

11. Fonctions d'audit à l'échelle d'une organisation (optionnelles)

Un ensemble de fonctions pour les équipes de sécurité des grandes organisations qui ont besoin de preuves d'audit et d'une vue claire de ce qui a changé. Toutes sont désactivées par défaut, et rien n'est jamais envoyé à Lafine ni à un tiers : chaque destination de notification ou d'agrégation est choisie par votre organisation. Les réglages se modifient avec sudo roamswitch-sensor config set <clé> <valeur> (sans redémarrer le démon ; chaque modification est consignée dans le journal des opérations) ; config show affiche les valeurs actuelles.

11.1 Audits planifiés et détection des changements

En mettant schedule.enabled à true, tous les points d'accès appairés sont audités automatiquement (toutes les 24 heures par défaut : schedule.interval_hours ; plage horaire locale dans laquelle un audit peut démarrer : schedule.window_start_hour / window_end_hour, éventuellement à cheval sur minuit ; parallélisme : schedule.max_parallel). Chaque audit est comparé au précédent, et roamswitch-sensor diff affiche les nouvelles détections (régressions), les détections résolues et les ports nouvellement ouverts. Si tous les ports auparavant ouverts deviennent soudain invisibles, cela est signalé comme injoignable probable et non comme « résolu » : un hôte éteint ne se distingue pas, de l'extérieur, d'un hôte ayant fermé tous ses ports.

Les audits sans surveillance ne remettent pas en cause la garantie que seuls les points d'accès consentants sont audités. L'IP d'un point d'accès peut être attribuée à un autre appareil par le DHCP ; le Sensor conserve donc l'adresse MAC qu'avait le point d'accès lors de sa dernière authentification (appairage ou demande d'audit signée) et vérifie, avant et après chaque audit planifié, par une véritable requête ARP de nmap, que la même MAC répond toujours à cette IP. Sinon, l'audit est ignoré (ou son résultat écarté) et une notification est émise. Un scan manuel est lui aussi refusé s'il existe des indices que l'adresse appartient désormais à un autre appareil. Cette vérification exige nmap ; les points d'accès appairés avant cette fonction ne sont planifiés qu'après un nouvel appairage ou l'envoi d'une demande d'audit signée ; seuls les points d'accès du même segment L2 sont couverts.

11.2 Notifications (webhook et syslog)

Régressions, nouveaux appareils, usurpation ARP, trafic suspect, etc. sont envoyés à notify.webhook_urls (webhooks entrants de Slack, Discord ou Teams, ou tout point de réception JSON générique) et à notify.syslog.host / port / protocol (RFC 5424 sur UDP ou TCP). On peut restreindre avec notify.min_severity (info / medium / high / critical) et notify.cooldown_minutes (délai minimal avant de renvoyer le même événement). roamswitch-sensor notify-test vérifie chaque destination.

11.3 Export des preuves d'audit

roamswitch-sensor export <scans|inventory|audit-log|all> --format csv|json|html [--out FILE] [--endpoint KEY-PREFIX] [--since DATE]. La sortie html est un fichier unique : ouvrez-le dans un navigateur et choisissez « Enregistrer au format PDF » pour obtenir un PDF à remettre. Le CSV est protégé contre l’injection de formules de tableur. Le registre des appareils (inventory) comporte une colonne indiquant si chaque appareil est géré par RoamSwitch (appairé). Les fichiers de sortie ne sont lisibles que par leur propriétaire (0600), et l’export lui-même est consigné dans le journal d’audit. La touche e de la TUI propose les mêmes choix dans un formulaire, et les rapports et exports sont produits dans la langue d’affichage (10 langues ; la CLI est en japonais et en anglais).

11.4 Journal des opérations et des approbations (infalsifiable)

Appairage, désappairage, début et fin des audits, modifications de configuration et accès refusés sont enregistrés avec leur auteur (UID / clé publique du point d'accès / IP source). Chaque ligne contient le SHA-256 de la précédente ; toute modification ou suppression est donc détectée par roamswitch-sensor audit-log verify (code de sortie 2 en cas de problème). La liste s'obtient avec roamswitch-sensor audit-log [--limit N]. Les URL de webhook contiennent souvent un jeton ; le journal des changements de configuration n'en conserve donc jamais la valeur. Une chaîne de hachage seule ne révèle pas que les entrées les plus récentes ont été coupées ; la tête de chaîne (numéro de séquence et hachage) est donc aussi envoyée au collecteur (§11.6).

11.5 Conservation

Renseignez retention.scan_history_days, retention.audit_log_days et retention.inventory_stale_days pour supprimer automatiquement l'ancien historique d'audit, les anciennes entrées du journal et les appareils non vus depuis longtemps (0 = aucune suppression par ancienneté, valeur par défaut). Les appareils ayant une note ne sont jamais retirés de l'inventaire.

11.6 Agréger plusieurs Sensors (collecteur central, optionnel)

Lorsque plusieurs Sensors fonctionnent sur plusieurs sites, exécutez roamswitch-sensor-collector (fourni dans le paquet, désactivé par défaut) sur un hôte distinct pour collecter les synthèses signées de chacun.

# On the collector host (a separate host from the Sensor is recommended)
sudo systemctl enable --now roamswitch-sensor-collector   # listens on 127.0.0.1:8443 by default
sudo roamswitch-sensor-collector token                     # read token for the dashboard
sudo roamswitch-sensor-collector enroll <Sensor public key> --name Tokyo --site Tokyo

# On each Sensor
sudo roamswitch-sensor config set collector.url https://collector.example.org:8443
sudo roamswitch-sensor config set collector.enabled true

11.7 Récupération des données de détection (updates.fetch_cve_map)

Sensor récupère chaque jour auprès du service de mise à jour la carte des CVE signée (les données de vulnérabilités connues utilisées par les vérifications actives) et la base de données NSE de nmap. Ce trafic ne transporte aucune donnée d’appareil ni d’audit. Pour fonctionner entièrement hors ligne, exécutez sudo roamswitch-sensor config set updates.fetch_cve_map false (le changement prend effet au cycle suivant sans redémarrage, et seules les données intégrées sont ensuite utilisées).

11.8 Référence des clés de configuration

Consultez les valeurs actuelles avec roamswitch-sensor config show et modifiez-les avec config set <key> <value> [<key> <value> …] (plusieurs clés sont enregistrées de façon atomique ; l’éditeur de configuration C de la TUI les modifie aussi). Seules les clés marquées « Oui » dans la colonne Redémarrage exigent un redémarrage du démon (sudo systemctl restart roamswitch-sensor).

Clé Type / valeurs Par défaut Redémarrage
sitestring(empty)Non
languageja | en | ko | zh-Hans | zh-Hant | de | fr | es | it | pt-PT(empty = system locale)Non
schedule.enabledboolfalseNon
schedule.interval_hoursint24Non
schedule.window_start_hourint 0–23(unset = always)Non
schedule.window_end_hourint 0–23(unset = always)Non
schedule.max_parallelint 1–81Non
notify.webhook_urlsURL list(empty)Non
notify.min_severityinfo | medium | high | criticalmediumNon
notify.cooldown_minutesint30Non
notify.syslog.hoststring(empty = off)Non
notify.syslog.portint514Non
notify.syslog.protocoludp | tcpudpNon
retention.scan_history_daysint (0 = never prune)0Non
retention.audit_log_daysint (0 = never prune)0Non
retention.inventory_stale_daysint (0 = never prune)0Non
collector.enabledboolfalseNon
collector.urlURL(empty)Non
collector.push_interval_minutesint15Non
collector.send_unmanaged_devicesbooltrueNon
collector.probe_control_portboolfalseNon
control.bind_addrIP address0.0.0.0Oui
control.tlsoff | optional | requiredoptionalOui
control.allow_legacy_signaturesbooltrueNon
updates.fetch_cve_mapbooltrueNon
control.listen_ipv6boolfalseOui
dhcp.active_probebooltrueNon
dhcp.allowed_serversMAC / IP list(empty = learn the first)Non
ipv6.enabledbooltrueNon
ipv6.active_probebooltrueNon
ipv6.allowed_routersMAC / IP list(empty = trust the IPv4 gateway)Non
unmanaged_audit.enabledbool (needs authorization + allowed_cidrs first)falseNon
unmanaged_audit.authorizationstring(empty)Non
unmanaged_audit.allowed_cidrsCIDR list (IPv4 ≤ /16 and IPv6 ≤ /48 refused)(empty)Non
unmanaged_audit.excludeIP / CIDR / MAC list(empty)Non
unmanaged_audit.interval_hoursint168Non
unmanaged_audit.max_parallelint 1–42Non
unmanaged_audit.product_checkbool (needs unmanaged_audit.enabled)falseNon
security.on_revokedlockdown | wipe | nonelockdownNon
security.lockdown_after_offline_daysint (0 = off)0Non

12. Détection DHCP et IPv6 pirates

Cela détecte un autre routeur, ou la machine d'un attaquant, introduit dans le réseau et se faisant passer pour le légitime afin de détourner le trafic des clients. Il se limite à détecter et à notifier ; le Sensor ne bloque jamais le trafic. C'est activé par défaut et ne demande aucune capture passive. Les résultats apparaissent dans roamswitch-sensor network-threats, l'onglet Menaces de la TUI (depuis m), les notifications (dhcp_rogue_server, ipv6_rogue_router, ndp_spoof, ipv6_unknown_device), le journal des opérations et les exports.

12.1 Serveurs DHCP pirates (IPv4 et DHCPv6)

Chaque heure (et à chaque roamswitch-sensor refresh), le Sensor envoie un seul paquet DHCP discover (un SOLICIT pour DHCPv6) depuis une adresse MAC aléatoire et compte chaque serveur qui répond. Il n'envoie aucun REQUEST : aucun bail n'est pris. Les réponses DHCP vues par la capture passive passent par le même jugement. Le premier serveur entendu est appris comme légitime, et tout serveur apparu ensuite est signalé. Un serveur qui distribue une passerelle ou un DNS que le légitime ne distribue pas décide où va le trafic des clients qui acceptent son bail : c'est le niveau le plus grave, critical. Si plusieurs serveurs répondent en même temps dès la toute première sonde, le Sensor ne peut pas savoir lequel est authentique : il n'en apprend aucun et les signale tous.

12.2 IPv6 (annonces de routeur pirates, usurpation NDP, appareils IPv6 seuls)

Annonces de routeur pirates : n'importe qui sur le LAN peut se dire routeur IPv6. Le Sensor recoupe la table des voisins et les routes par défaut du noyau, les annonces de routeur vues par la capture passive et les réponses à sa propre sollicitation de routeur, et signale tout ce qui, autre que la passerelle IPv4 par défaut, se comporte en routeur (ajoutez le vrai dans ipv6.allowed_routers pour le tenir pour légitime ; un réseau dont le routeur IPv6 est un autre appareil que sa passerelle IPv4 est un cas normal, ajoutez-le alors). Les annonces dont la limite de sauts n'est pas 255 sont falsifiées ou routées et sont ignorées. Usurpation NDP : il signale une adresse IPv6 dont le détenteur change de MAC (high s'il s'agit d'une adresse de routeur). Appareils IPv6 seuls : un appareil absent d'ARP mais présent dans la table des voisins n'est signalé qu'après qu'un balayage ARP a eu l'occasion de le trouver. L'inventaire des appareils (colonne CSV ipv6, ipv6_addrs en JSON) liste aussi les adresses IPv6.

12.3 Qui est légitime, et les réglages

Avec dhcp.allowed_servers et ipv6.allowed_routers (MAC ou IP), tout le reste qui répond est signalé ; laissées vides, le premier trouvé est appris. dhcp.active_probe et ipv6.active_probe (par défaut true) coupent les sondes actives, et ipv6.enabled coupe toute la surveillance IPv6. L'écoute de l'API de contrôle (50543) en IPv6 s'ajoute avec control.listen_ipv6 (par défaut false, effectif au redémarrage) ; une adresse IPv6 globale peut être joignable depuis Internet si le routeur n'a pas de pare-feu IPv6, elle n'est donc pas activée par défaut. Les limites de connexion et les verrouillages comptent l'IPv6 par /64. Un terminal connecté depuis une adresse lien-local n'est pas retenu comme cible d'audit, car il ne peut pas être rappelé sans identifiant de portée.

13. Audit léger des appareils sans RoamSwitch (optionnel)

L'audit de vulnérabilités actif du §5 ne concerne que les terminaux appairés qui ont accepté. Pour les imprimantes, caméras, NAS et autres appareils jamais appairés dont on veut tout de même connaître les services exposés, il existe un contrôle distinct et bien plus limité. Les diagnostics profonds de type OpenVAS, les tentatives de connexion, l'exploitation de vulnérabilités, nmap NSE et les balayages de tous les ports ne sont faits que sur les terminaux qui ont accepté.

13.1 Ce qui est fait

Il ne fait qu'un test de connexion TCP vers 54 ports fixes (Telnet, FTP, RDP, VNC, SMB, Redis, MongoDB, API Docker, MQTT, RTSP, etc.), lit la bannière qu'un service envoie de lui-même sur les ports ouverts (plus un HEAD / sur les ports web) et ajoute une note quand le fabricant a publié des vulnérabilités (table des avis IoT). Un résultat dit « ce service est joignable depuis le LAN », jamais « ceci est vulnérable » ; chaque constat précise que l'activation de l'authentification n'a pas été testée.

13.2 L'activer

Pour activer unmanaged_audit.enabled, définissez d'abord unmanaged_audit.authorization (qui l'a approuvé : un nom, un numéro de ticket ou une référence de politique) et unmanaged_audit.allowed_cidrs (les plages auditables ; les plages IPv4 plus larges que /16 et IPv6 plus larges que /48 sont refusées). Les exécutions planifiées ont lieu toutes les interval_hours (168 par défaut) dans la fenêtre de schedule. Une exécution manuelle demande --confirm comme seconde approbation.

sudo roamswitch-sensor config set unmanaged_audit.authorization "IT policy 2026-07, approved by A. Suzuki"
sudo roamswitch-sensor config set unmanaged_audit.allowed_cidrs 192.168.10.0/24
sudo roamswitch-sensor config set unmanaged_audit.exclude 192.168.10.1
sudo roamswitch-sensor config set unmanaged_audit.enabled true
sudo roamswitch-sensor audit-unmanaged 192.168.10.40 --confirm
roamswitch-sensor unmanaged-audits --detail

13.3 Garde-fous

Rien en dehors de allowed_cidrs, aucun appareil de unmanaged_audit.exclude (IP, plage ou MAC), aucun terminal appairé et pas le Sensor lui-même n'est jamais examiné. Avant et après une exécution, la MAC de l'appareil à cette adresse est confirmée par une requête en direct (ARP pour IPv4, ce qui demande nmap ; sollicitation de voisin pour IPv6) ; si elle a changé, l'exécution est interrompue ou le résultat écarté, avec notification. Le texte de authorization est inscrit au journal des opérations à chaque exécution et figure dans les exports (export unmanaged, JSON, rapport HTML), ce qui permet de montrer qui a approuvé l'audit.

13.4 Vérification du produit (a-t-il des vulnérabilités du KEV de la CISA ? Opt-in)

Activer unmanaged_audit.product_check (désactivé par défaut) fait lire par l'audit léger le nom du produit dans la page web qu'un appareil renvoie normalement, puis indique si ce produit a des vulnérabilités du catalogue KEV de la CISA. Seuls sont envoyés un GET / vers les ports web qui ont accepté la connexion (80, 8080, 8181, 443, 8443, 10443), les redirections que l'appareil indique lui-même vers la même adresse (au plus deux) et la lecture de l'émetteur et du sujet du certificat HTTPS. Aucune connexion, aucun essai de mot de passe, aucun chemin deviné et rien qui exploite une vulnérabilité n'est envoyé. La limite est de 12 requêtes par appareil, espacées de 150 ms. Les conditions de consentement (enabled, authorization, allowed_cidrs, exclude, exclusion des appareils appairés et revérification de l'adresse MAC) sont exactement celles des §13.2–13.3 ; si l'audit léger est désactivé, rien n'est envoyé même si product_check est activé.

Un produit n'est nommé que si tous ses repères à l'écran apparaissent dans la même réponse. Il est signalé comme concerné (high) seulement si la version affichée par l'appareil lui-même peut être lue et qu'une CVE a une plage NVD qui la contient. Si la version est illisible, il reste un avis (medium) : ce produit a des vulnérabilités listées dans le KEV, la version n'a pas pu être lue, donc le fait d'être concerné n'est pas confirmé. L'appareil n'est jamais déclaré vulnérable. Aujourd'hui, seul MikroTik RouterOS affiche sa version ; les autres produits reçoivent donc normalement l'avis « non confirmé ». Sont couverts Fortinet FortiGate, Ivanti Connect Secure, Citrix NetScaler, Cisco (le VPN SSL de l'ASA et l'interface web d'IOS XE), UniFi OS, GeoVision, TerraMaster, Check Point Security Gateway et MikroTik RouterOS ; les appareils Aruba n'ont pas d'entrée dans le KEV et ne sont pas couverts. Les repères reposent sur des signatures de détection publiques et n'ont pas été vérifiés sur de vrais appareils ; un repère qui ne correspond pas penche vers l'absence de détection. Une copie du KEV est fournie avec le produit et n'est mise à jour, uniquement si product_check et updates.fetch_cve_map sont tous deux activés, qu'en récupérant toutes les 24 heures un fichier de flux public de la CISA (rien sur votre LAN n'est envoyé).

14. En cas de perte, de vol ou de mise hors service

Un Sensor contient la liste des vulnérabilités trouvées sur chaque terminal, les adresses des terminaux appairés et sa clé de signature. Les terminaux appairés le traitent aussi comme un scanner autorisé ; un Sensor volé branché sur le même LAN pourrait donc se faire passer pour tel. Voici ce qui l'en empêche.

14.1 Révocation sur le collecteur et verrouillage

Après roamswitch-sensor-collector revoke <clé publique> --reason TEXTE, les envois de ce Sensor sont refusés avec 403 sensor_revoked (réponse donnée seulement aux requêtes à signature valide, donc seul le détenteur de la clé l'apprend). Un Sensor révoqué l'apprend à son prochain envoi et s'arrête de lui-même (verrouillage). Verrouillée, l'API de contrôle ne répond plus que sensor_locked_down, et l'appairage, les audits (planifiés et manuels), l'envoi au collecteur, les notifications et le sondage du réseau cessent. L'arrêt est consigné dans un fichier : il survit à un redémarrage, et si ce fichier est illisible, le Sensor reste verrouillé. Les données sont conservées ; roamswitch-sensor lockdown off (K dans la TUI) le déverrouille quand on est certain qu'il est revenu en de bonnes mains. S'il est encore révoqué sur le collecteur, il se reverrouille à son prochain envoi. revoke affiche aussi les terminaux qui lui étaient appairés et comment dissocier chacun.

14.2 Effacement, mise hors service et détection hors ligne

Avec security.on_revoked à wipe, un Sensor révoqué écrase de zéros puis supprime ses clés, sa clé TLS, ses réglages (URL de webhook comprises), la liste des terminaux appairés, les résultats d'audit et l'inventaire des appareils. Seul le journal des opérations est conservé, comme preuve. lockdown (par défaut) l'arrête et garde les données, none se limite à notifier. Pour mettre hors service un Sensor qu'on a en main, utilisez roamswitch-sensor decommission --confirm (verrouillage et effacement ; irréversible). Mettre security.lockdown_after_offline_days à un nombre de jours fait s'arrêter de lui-même un Sensor qui n'a pas joint le collecteur depuis ce temps, en protection d'un Sensor volé et utilisé sur un autre réseau ; cela ne joue que si l'envoi au collecteur est activé et a réussi au moins une fois, et la valeur par défaut est 0 (désactivé).

14.3 Ce que cela ne peut pas faire

Les terminaux qui étaient appairés au Sensor continuent de lui faire confiance tant que chacun n'a pas supprimé l'appairage. Un Sensor ne peut pas prévenir ses terminaux : sur chaque terminal de la liste qu'affichent revoke et decommission, exécutez roamswitch sensor unpair <clé publique de ce Sensor> sous Linux, ou Réglages > Sensor > Dissocier sous Mac. Un Sensor emporté éteint ou tenu hors du réseau ne reçoit jamais l'ordre de s'arrêter ; le chiffrement du disque (LUKS, etc.) est alors la vraie protection. L'écrasement ne garantit pas un effacement complet sur du stockage flash ou des systèmes de fichiers à copie sur écriture.

← Manuel d'exploitation Server Edition Vers la page d'installation de l'édition Linux →