Description des services Cyberwatch

La suite logicielle Cyberwatch repose sur l’utilisation d’images Docker. Il est possible d’utiliser Docker swarm ou Kubernetes comme orchestrateur. Les conteneurs proposent un ensemble de services communiquant ensemble et constituant les briques de la suite logicielle.

Cette documentation liste et décrit l’ensemble des services nécessaires au fonctionnement de la suite logicielle Cyberwatch, ainsi que leur état de présence/absence sur les serveurs Cyberwatch en fonction du type d’architecture choisie.

L’état de ces services peut être consulté depuis le serveur Cyberwatch à l’aide de la commande suivante :

sudo cyberwatch status

Dans le cas où tous les services ne sont pas en cours d’exécution, consulter les logs du service.

Description de chaque service

db
Base de données MariaDB dans laquelle sont stockées les données de l’application.
nginx
Serveur web responsable de l’interface entre l’application et l’extérieur. Par défaut, le conteneur expose les ports 80 et 443 sur l’extérieur. Le service redirige les requêtes vers le conteneur approprié (web, kibana, third_parties).
web
Conteneur Olympe responsable du traitement des requêtes web.
sidekiq_master
Conteneur Olympe responsable de l’exécution des jobs en mode asynchrone. Le service traite les tâches qui nécessitent d’être exécutées sur le nœud master. Le service a été ajouté avec le socle en version 5.21.
sidekiq
Similaire à sidekiq_master, à la différence que le service est disponible sur tous les types de nœud. Le service traite les tâches qui ne nécessitent pas d’être exécutées sur un scanner en particulier.
sidekiq_node
Similaire à sidekiq mais utilisé pour exécuter les tâches sur un scanner en particulier. Responsable notamment de la connexion aux machines supervisées en connexion sans-agent.
cron
Planificateur des tâches de l’application. Supprimé sur les socles en version supérieure ou égale à 5.21.
redis
Base de données en RAM utilisée pour la pile des tâches.
cache
Base de données en RAM utilisée pour le cache de l’application.
elasticsearch
Conteneur responsable des indexes Elasticsearch.
kibana
Outil de visualisation permettant la création de dashboards personnalisés.
web-scanner
Navigateur web pour les scans de cible réseau et site web. Il génère aussi les rapports PDF.
container-scanner
Moteur des scans des images Docker.
third_parties
Conteneur contenant le cab file Windows.

Services attendus sur chaque nœud

ServiceNœud maîtreNœud satellite indépendant
db✓(3) 
nginx✓✓
web✓✓
sidekiq_master✓ 
sidekiq✓✓
sidekiq_node✓✓
cron✓(1) 
redis✓(3) 
cache✓✓
elasticsearch✓(4) 
kibana✓(4) 
web-scanner✓✓
container-scanner✓✓
third_parties✓(2)✓(2)

(1) Uniquement sur les versions du socle inférieures ou égales à 5.20.
(2) Uniquement sur les nœuds hors-ligne.
(3) Absent en cas d’utilisation d’une base de données ou d’un serveur redis externe.
(4) Absent lorsque la variable CBW_DISABLE_ELK est activée.

Dans un cluster de nœuds indépendants, les services propres au nœud maître (base de données, pile des tâches, Elastic Stack) sont utilisés par les nœuds satellites :

flowchart TB
  U["Navigateur / API"] -- "80 / 443" --> NG
  subgraph MASTER["Nœud maître"]
    NG["nginx"] --> WEB["web-application"]
    NG --> KIB["kibana"]
    NG -. "hors ligne" .-> TP["third_parties"]
    WEB --> DB[("db")]
    SKM["sidekiq_master"] --> REDIS[("redis")]
    KIB --> ES[("elasticsearch")]
  end
  subgraph SAT["Nœud satellite indépendant"]
    direction LR
    NG2["nginx"] --> WEB2["web-application"]
    WRK["sidekiq, sidekiq_node, cache,<br/>web-scanner, container-scanner"]
  end
  SAT -- "TCP 3306" --> DB
  SAT -- "TCP 6379" --> REDIS