Redémarrer une passerelle VPN à distance

Redémarrer une passerelle VPN à distance

De nos jours, on a fréquemment besoin de se connecter à distance sur un réseau informatique pour surveiller une installation ou effectuer une maintenance. Mais, en raison des attaques informatiques auxquelles toute machine connectée à Internet doit faire face, on verrouille en général toutes les portes possibles, sauf une, qu'on estime être sûre. Par exemple, on ne garde qu'une passerelle VPN sécurisée. Mais si la passerelle tombe en panne, c'est la cata... Alors, comment éviter de se retrouver sans accès à son réseau, mais sans ouvrir de porte supplémentaire ?


La problématique est relativement simple:

  • On veut un mécanisme qui permette de remettre en état une passerelle VPN à distance.
  • On ne veut pas ouvrir pour cela une autre porte d'entrée sur le réseau protégé.


En général, il suffit de redémarrer la passerelle VPN (ou un autre équipement réseau) pour rétablir son bon fonctionnement. Il va donc falloir trouver une méthode pour pouvoir faire cela automatiquement, sans être sur place, et seulement lorsqu'on en a besoin. C'est là que des modules Yoctopuce vont pouvoir nous être utiles, et nous allons présenter deux solutions assez différentes pour résoudre le problème.

Première solution: le watchdog sur l'alimentation électrique


Un watchdog est un compte-à-rebours autonome capable de forcer un redémarrage matériel, en général en coupant l'alimentation. En temps normal, le compte-à-rebours est spontanément réinitialisé avant que le redémarrage ne se produise mais, en cas de panne réseau grave (ou sur commande), le watchdog est capable de désactiver l'alimentation 12V de la passerelle VPN pendant quelques secondes pour qu'elle redémarre proprement.

Voici le schéma de l'installation:

Un watchdog sur l'alimentation de la passerelle VPN
Un watchdog sur l'alimentation de la passerelle VPN


On a mis un Yocto-WatchdogDC sur le fil de l'alimentation de la passerelle VPN, piloté au travers d'un YoctoHub-Ethernet protégé par le firewall.

En temps normal, le YoctoHub-Ethernet va effectuer un callback HTTP (connection sortante) toutes les 15 minutes vers un serveur web, où un petit script PHP se contentera de réinitialiser le compte à rebours du watchdog:

include("yocto_api.php");
include("yocto_watchdog.php");

yRegisterHub("callback");
$watchdog = yFirstWatchdog();
if($watchdog) {
        $watchdog->reset();
}


Le watchdog, lui, est configuré avec un compte à rebours de 2h par exemple. Ainsi, si le réseau cesse de fonctionner pendant 2h, aucun callback HTTP ne s'exécutera pour réinitialiser le compte à rebours et la passerelle sera automatiquement redémarrée.

Il peut aussi arriver que le réseau sortant fonctionne, mais que seul l'accès au VPN tombe en panne. Dans ce cas, on peut aussi déclencher manuellement un redémarrage de la passerelle, via le script PHP exécuté lors du prochain callback dans les 15 minutes qui suivent. Le callback doit alors simplement demander au watchdog d'effectuer une impulsion de 10 secondes:

        $watchdog->delayedPulse(3000,10000);


Deuxième solution: redémarrage par la console série


Lorsque c'est possible, il vaut mieux éviter de redémarrer brutalement une passerelle en lui coupant le courant: dans la plupart des passerelles VPN, il y a un kernel avec un système de fichiers, qui risque à la longue de se faire corrompre.

Une manière plus élégante de la faire redémarrer (toujours en supposant que votre seul accès entrant est un VPN qui ne fonctionne plus) consiste à utiliser le port console RS232, dont la plupart de ces appareils sont dotés. Bien sûr, une console série est faite pour être utilisée localement, mais grâce au Yocto-RS232, vous pouvez à nouveau utiliser l'astuce du callback HTTP pour envoyer des commandes sur la console RS232:

Console série et callback HTTP
Console série et callback HTTP



Un callback HTTP ne permet pas une interaction complète avec la console, mais il permet par contre très facilement de lancer une tâche prédéfinie sur le Yocto-RS232:

function rebootVPN()
{
    $serialport = yFirstSerialPort();
    if($serialport) {
        $serialport->selectJob("rebootZywall.job");
    }
}



En définissant par exemple une tâche comme ceci:

Job défini sur le Yocto-RS232
Job défini sur le Yocto-RS232


on peut facilement déclencher un redémarrage "propre" de la passerelle VPN.

On notera au passage que cette solution est bien plus sûre que celle qui consisterait à ouvrir un accès à la console directement sur Internet: non seulement on évite des attaques en n'ouvrant aucun port, mais de plus, le mot de passe permettant l'accès à la console de la passerelle reste confiné à l'intérieur de l'espace sécurisé puisqu'il est stocké directement dans le fichier job, dans la mémoire flash du Yocto-Serial.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.