NOPE LinkedIn

Catégories:
wireguard

Comment surveiller qui est connecté à votre VPN WireGuard

Comment surveiller qui est connecté à votre VPN WireGuard image

Rubrique: wireguard Tag: ssh Tag: surveillance vpn Tag: logging réseau Tag: traçage auditif

Important

Traduction d’un article du site Pro Custodibus

Le contenu de cette page est la traduction Française de l’article How to Monitor Who’s Connected to Your WireGuard VPN de Justin Ludwig

Comment surveiller qui est connecté à votre VPN WireGuard

Un VPN WireGuard (Réseau privé virtuel) est vraiment facile à mettre en place, grâce aux bonnes choix cryptographiques par défaut de WireGuard et sa simplicité globale et son design élégant. Cette simplicité rend cependant la surveillance très difficile — il n’y a pas de fichier de journal que vous pouvez suivre pour voir qui se connecte à votre VPN, et il n’y a pas de traçage auditif que vous pouvez vérifier pour voir où et quand des changements critiques ont été apportés.

Heureusement, il existe quelques outils qui peuvent vous aider à garder une œil sur qui accède à votre VPN WireGuard et à vous alerter d’activités suspectes. Voici un aperçu de vos options :

  1. SSH
  2. Exécuter un serveur Web
  3. Construire vos propres analyses
  4. Pro Custodibus

SSH

La chose la plus simple que vous pouvez faire est de simplement vous connecter à chaque hôte WireGuard sur votre réseau et d’utiliser l’affichage intégré de l’état de WireGuard pour vérifier l’état actuel de chaque interface et de pair. Cela pourrait être réalisable si vous avez simplement quelques serveurs VPN principaux par lesquels vos points de terminaison se connectent (au lieu d’un réseau à maillons où les points de terminaison sont connectés point-à-point).

Si vous vous connectez à un hôte exécutant WireGuard, vous pouvez obtenir une belle affichage en ligne de commande de chaque interface WireGuard active sur l’hôte, ainsi qu’une liste de chaque pair configurée pour l’interface via la commande wg :

$ sudo wg show
interface: wg1
  public key: /TOE4TKtAqVsePRVR+5AA43HkAK5DSntkOCO7nYq5xU=
  private key: (hidden)
  listening port: 51821

peer: fE/wdxzl0klVp/IR8UcaoGUMjqaWi3jAd7KzHKFS6Ds=
  endpoint: 172.19.0.8:51822
  allowed ips: 10.0.0.2/32
  latest handshake: 1 minute, 22 seconds ago
  transfer: 3.48 MiB received, 33.46 MiB sent

peer: jUd41n3XYa3yXBzyBvWqlLhYgRef5RiBD7jwo70U+Rw=
  endpoint: 172.19.0.7:51823
  allowed ips: 10.0.0.3/32
  latest handshake: 2 hours, 3 minutes, 34 seconds ago
  transfer: 1.40 MiB received, 19.46 MiB sent

Notez que wg, wg show, et wg show all produisent le même résultat. Vous pouvez également obtenir une version à jour automatique de cela en l’exécutant avec la commande watch, comme suit (mise à jour toutes les 2 secondes par défaut) :

$ sudo watch wg show
interface: wg1
  public key: /TOE4TKtAqVsePRVR+5AA43HkAK5DSntkOCO7nYq5xU=
  ...

Chaque pair listée comprend la clé publique utilisée par la pair, ainsi que quatre autres champs :

endpoint
Adresse IP publique actuelle (et le port UDP) utilisée par la pair. Cela est mis à jour de la valeur initialement configurée de la pair chaque fois que l’interface locale reçoit un nouveau paquet provenant de la pair avec une adresse source différente (ou un port).
allowed IPs
Adresses IP auxquelles l’interface locale WireGuard routera les paquets pour la pair.
latest handshake
Si l’interface locale a réussi à se connecter au pair distant depuis le démarrage de l’interface, cela indique la dernière fois que la connexion a été renouvelée. L’échange de clés “handshake” se produit toutes les 2-3 minutes lorsque la connexion est activement utilisée (et seulement lorsqu’elle est utilisée), ce qui vous donne une bonne approximation de la dernière fois que la connexion était active. Ce champ sera omis si l’interface n’a pas réussi à se connecter au pair depuis le démarrage de l’interface.
transfer
Si l’interface locale a tenté de se connecter au pair distant depuis le démarrage de l’interface, cela indique

e la quantité de données reçues et envoyées au pair. Ce champ sera omis si l’interface n’a pas tenté de se connecter au pair depuis le démarrage de l’interface.

Inconvénients évidents de l’utilisation de ce logiciel comme seul outil de surveillance sont que vous devez maintenir une session SSH ouverte sur chaque hôte que vous souhaitez surveiller, et que vous pouvez voir ce qui se passe actuellement (ou la dernière fois où chaque pair était active) — et pas ce qui s’est passé à des moments spécifiques que vous pourriez vouloir investiguer ou analyser.

Avantages

  • Gratuit
  • Peut-être que tout ce dont vous avez besoin est déjà installé

Inconvénients

  • Pas d’historique
  • Pas de traçabilité
  • Non échelonnable sur de nombreux hôtes
  • Besoin d’une paire d’yeux dessus en permanence
  • L’accès fréquent à vos serveurs VPN est une mauvaise pratique de sécurité

Exécuter un Serveur Web

Une autre option (en particulier si vous n’avez que quelques hôtes à surveiller) est d’exécuter une application web sur chaque hôte WireGuard que vous souhaitez surveiller. Il existe plusieurs applications open source que vous pouvez télécharger et exécuter qui fourniront une interface graphique utilisateur amie (Graphical User Interface) pour afficher l’état de WireGuard sur le hôte sur lequel il s’exécute, vous donnant un analogue basé sur le web du outil de ligne de commande wg.

Bien que plusieurs interfaces graphiques précédemment populaires, comme wg-dashboard, ne soient plus actuellement maintenues, un projet nifty qui reste actif est Wg Gen Web. En outre de vous permettre de configurer une interface WireGuard et ses pairs via une interface web UI, Wg Gen Web fournit également une page d’état montrant l’état actuel des connexions VPN à cette interface :

Capture d’écran de Wg Gen Web

Figure 1. Page d’état de Wg Gen Web

Wg Gen Web est implémenté avec un serveur HTTP Go comme son “backend”, et une interface utilisateur web Vue.js pour son “frontend”; les deux parties sont servies par le “backend” HTTP server. Il dépend également d’un deuxième serveur HTTP Go (du projet WG-API) pour exposer des données d’état à partir de l’hôte.

La méthode la plus simple pour utiliser cela serait de lancer quelques conteneurs Docker sur chaque hôte WireGuard que vous souhaitez surveiller (un conteneur Docker pour le serveur HTTP principal et un autre pour le serveur d’état). Le projet Wg Gen Web inclut un exemple de fichier docker-compose.yml pour démontrer comment procéder :

version: '2.0'
services:
  wg-gen-web:
    image: vx3r/wg-gen-web:latest
    container_name: wg-gen-web
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      - WG_CONF_DIR=/data
      - WG_INTERFACE_NAME=wg0.conf
      - SMTP_HOST=smtp.gmail.com
      - SMTP_PORT=587
      - SMTP_USERNAME=example@gmail.com
      - SMTP_PASSWORD=****************
      - SMTP_FROM=Example <example@gmail.com>
      - OAUTH2_PROVIDER_NAME=github
      - OAUTH2_PROVIDER=https://github.com
      - OAUTH2_CLIENT_ID=******************
      - OAUTH2_CLIENT_SECRET=******************
      - OAUTH2_REDIRECT_URL=https://wg-gen-web.example.com
      - WG_STATS_API=$BRIDGE_GATEWAY_ADDRESS:8182
    volumes:
      - /etc/wireguard:/data
  wg-api:
    image: james/wg-api:latest
    container_name: wg-json-api
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
    network_mode: "host"
    command: wg-api --device=wg0 --listen=$BRIDGE_GATEWAY_ADDRESS:8182

Avec ces conteneurs Docker en cours d’exécution, vous pourriez alors ouvrir un navigateur web et accéder à la page d’état de Wg Gen Web à http://10.0.0.1:8080/status (si l’adresse IP de l’hôte est 10.0.0.1).

Bien sûr, vous voudriez sécuriser cette page d’état de manière très rigoureuse. Et pour beaucoup de personnes, exécuter un couple de serveurs HTTP Go sur chaque hôte peut être une mauvaise pratique de sécurité. Il est préférable d’utiliser un reverse proxy comme Nginx ou Apache pour gérer les requêtes et sécuriser l’accès à la page d’état.

rveurs web supplémentaires sur un pair VPN serait deux serveurs trop nombreux.

De plus, comme avec l’utilisation du outil de ligne de commande wg, cette affichage d’état ne comprend que l’état actuel d’un seul hôte, sans aucune information à partir des activités passées (et sans aucune information sur les pairs non connectés à ce hôte particulier).

Avantages

  • Gratuit
  • Interface utilisateur amicale

Inconvénients

  • Aucun historique
  • Pas de journalisation des activités
  • Non échelonnable pour beaucoup d’hôtes
  • Besoin d’une surveillance constante
  • Lancer un serveur web sur vos serveurs VPN est une mauvaise pratique en matière de sécurité

Construire Vos Propres Analyses

Une approche plus sophistiquée, et plus utile si votre VPN comprend plusieurs pairs, serait de construire un outil qui vérifie périodiquement l’état de chaque pair WireGuard et l’envoie à un emplacement centralisé. À cet emplacement centralisé, qui devrait idéalement être votre système existant de journalisation, d’analyse ou de SIEM (Gestion des informations et événements de sécurité), vous traiteriez ces informations d’état en chaîne de journaux d’audit, des tableaux montrant les tendances et les événements importants, et des alertes pour les problèmes nécessitant une attention de la part de vos analystes.

Pour commencer, vous aurez besoin d’écrire un programme client à exécuter sur chaque hôte que vous souhaitez surveiller, vérifiant périodiquement l’état des interface(s) WireGuard sur ce hôte. La commande wg show all dump fournit une façon simple de récupérer les mêmes informations d’état fournies par la commande régulière wg, mais au format tabulaire :

$ sudo wg show all dump
wg1	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE=	/TOE4TKtAqVsePRVR+5AA43HkAK5DSntkOCO7nYq5xU=	51821	off
wg1	fE/wdxzl0klVp/IR8UcaoGUMjqaWi3jAd7KzHKFS6Ds=	(none)	172.19.0.8:51822	10.0.0.2/32	1617235493	3481633	33460136	off
wg1	jUd41n3XYa3yXBzyBvWqlLhYgRef5RiBD7jwo70U+Rw=	(none)	172.19.0.7:51823	10.0.0.3/32	1609974495	1403752	19462368	off

Il existe également un script wg-json dans le dépôt wireguard-tools qui convertira la sortie de cette commande en JSON (Notation d’objet JavaScript) :

$ sudo wireguard-tools/contrib/json/wg-json
{
   "wg1": {
      "privateKey": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE=",
      "publicKey": "/TOE4TKtAqVsePRVR+5AA43HkAK5DSntkOCO7nYq5xU=",
      "listenPort": 51821,
      "peers": {
         "fE/wdxzl0klVp/IR8UcaoGUMjqaWi3jAd7KzHKFS6Ds=": {
            "endpoint": "172.19.0.8:51822",
            "latestHandshake": 1617235493,
            "transferRx": 3481633,
            "transferTx": 33460136,
            "allowedIps": [
               "10.0.0.2/32"
            ]
         },
         "jUd41n3XYa3yXBzyBvWqlLhYgRef5RiBD7jwo70U+Rw=": {
            "endpoint": "172.19.0.7:51823",
            "latestHandshake": 1609974495,
            "transferRx": 1403752,
            "transferTx": 19462368,
            "allowedIps": [
               "10.0.0.3/32"
            ]
         }
      }
   }
}

Les systèmes de journalisation, d’analyse et de SIEM sont généralement assez bons pour ingérer des valeurs séparées par tabulation ou du JSON, donc vous devriez probablement faire en sorte que votre programme client envoie la sortie d’un des commandes ci-dessus à votre système à intervalles réguliers (aligner les re-keyings “handshakes” du protocole WireGuard tous les deux minutes est très convenable). Vous configurerez un pipeline dans votre système de journalisation, d’analyse et de SIEM pour marshaler cette sortie en enregistrements structurés suivis par le système. Une fois que ces enregistrements commencent à arriver, vous utiliserez les outils de votre système de journalisation, d’analyse et de SIEM pour commencer la création de rapports, de tableaux de bord et d’alertes basés sur ces données.

Cela serait le début d’une solution plus robuste et complète pour surveiller l’état des pairs WireGuard dans un environnement VPN.

Une solution puissante, mais cela prendrait beaucoup de ressources, de connaissances en domaine et de coordination pour l’implémenter.

Avantages

  • Peut capturer l’historique
  • Peut construire une traçabilité
  • Peut déployer sur plusieurs serveurs et points de terminaison
  • Complètement automatisé
  • Intégré à vos systèmes d’analyse existants ou de SIEM

Inconvénients

  • Très coûteux à construire (temps du développeur, gestion de projet, tests, etc.)
  • Besoin de connaissances en domaine WireGuard
  • Coûts de maintenance en cours
  • Coûts en transit et de stockage des données en cours

Heureusement, il existe une méthode simple pour le faire. Pro Custodibus offre un service qui est facile à configurer (aussi simple que de se connecter à un hôte via SSH et d’exécuter quelques commandes), vous fournit de nombreux dashboards beaux (avec des graphiques, des diagrammes et une recherche intégrée dans l’histoire complète de tous vos pairs WireGuard), tout en offrant toutes les fonctionnalités et la scalabilité d’une solution d’analyse personnalisée.

Avec Pro Custodibus, vous n’avez qu’à exécuter quelques commandes simples sur un hôte pour installer un agent (ou que votre outil de gestion de configuration le fasse automatiquement), et l’agent enverra périodiquement des pings aux serveurs Pro Custodibus avec les données d’état de l’hôte. L’agent ne démarre jamais de connexions entrantes, donc vous n’avez jamais à vous soucier de sécuriser tout accès supplémentaire entrant à vos serveurs ou points de terminaison.

Vous pouvez afficher le fil complet des audits de toutes les activités et modifications de configuration WireGuard sur tous vos hôtes, à la demande, via l’application web Pro Custodibus (hébergée dans les centres de données sécurisés du cloud Pro Custodibus) :

Capture d&rsquo;écran du point de terminaison

Figure 2. L’histoire complète d’un exemple de point de terminaison WireGuard

Plus vous obtenez beaucoup d’autres dashboards et alertes, ajustés pour vous montrer des informations critiques sur votre réseau, comme quels hôtes et pairs ont été actifs, et depuis où :

Capture d&rsquo;écran du tableau de bord

Figure 3. L’histoire globale des activités sur un exemple de VPN WireGuard

Ces données de surveillance riches vous permettent enfin de répondre à des questions importantes sur la façon dont votre VPN est utilisé, comme :

  • Quand a-t-on la dernière fois que Alice accédait à notre cluster de base de données ? (vérifiez les horodatages dans le journal d’activité de sa page de pair)
  • Qui a téléchargé une série de fichiers depuis notre partage de fichiers sécurisé au week-end ? (vérifiez les graphiques sur la page du pair du partage de fichiers pour voir quels pairs se sont connectés à lui et ont reçu beaucoup de données au week-end)
  • Les identifiants VPN sur le portable de Bob ont-ils été volés et utilisés illégalement ? (vérifiez l’historique des modifications sur sa page de pair pour les adresses IP autres que son domicile ou son bureau d’entreprise)

Avantages

  • Historique complet
  • Traçabilité complète
  • Facile à installer sur les serveurs et les points de terminaison
  • Automatisé complètement
  • Interface utilisateur amicale
  • Peut s’intégrer à vos systèmes d’analyse existants ou SIEM
  • Alertes intelligentes intégrées
  • Conçu avec l’expertise en WireGuard, optimisé pour les meilleures pratiques de WireGuard

Inconvénients

1/7/2021

par Justin Ludwig