Sécuriser Node-RED avec Nginx et OpenSSL sur Ubuntu 16.04

Nginx est un serveur Web très populaire et très légers. Dans ce tutoriel, nous allons utiliser Nginx pour mettre en place un proxy sécurisé à l’aide d’un certificat auto-signé OpenSSL. Ce tutoriel a été mis au point sur Ubuntu 16.04 LTS mais la méthode reste similaire pour d’autres distributions. Pour installer Node-RED sur une distribution Ubuntu, suivez ce précédent tutoriel.

Installation de Nginx

Nginx s’installe très simplement à l’aide d’une simple commande apt-get.

Acceptez l’installation de toutes les dépendances qui sont demandées durant l’installation.

Créer un certificat SSL avec openSSL

Commençons par créer un répertoire dans lequel sera stocké le certificat SLL

Maintenant que nous avons un emplacement de destination, nous pouvons créer la clé et le certificat SSL

Quelques explications :

  • openssl : la commande qui permet de créer et gérer les certificats, clés et autres fichiers
  • req : le type de certificat souhaité. dans ce cas X.509
  • -days 365 : durée durant laquelle le certificat est considéré comme valide

Répondez aux questions posées

  • Country Name (2 letter code) [AU]: code pays, par exemple FR
  • State or Province Name (full name) [Some-State]: département
  • Locality Name (eg, city) []: Ville
  • Organization Name (eg, company) [Internet Widgits Pty Ltd]: Nom de la société
  • Organizational Unit Name (eg, section) []: service
  • Common Name (e.g. server FQDN or YOUR name) []: nom de votre site, par exemple domaine.com
  • Email Address []: adresse email de contact

La commande openssl génère 2 fichiers à partir de ces informations, nginx.crt et nginx.key

Configurer Nginx pour utiliser une connexion SSL

Maintenant que nous possédons une clé et un certificat, nous allons créer un fichier de configuration. Nous pourrons l’appeler node-red.securise.com.

Ouvrez un nouveau fichier de configuration avec nano

Adaptez l’exemple ci-dessous en fonction de vos besoins et collez le dans le fichier puis enregistrez avec CTRL+X puis O.

Quelques explications (rapides)

  • La clé server_name permet de définir le nom du site internet par lequel on obtiendra une connexion sécurisée via Nginx.
  • Les clés ssl_certificate et ssl_certificate_key permettent de définir le dossier dans lequel se trouvent le certificat et la clé créée précédemment.
  • Le bloc “if ($scheme = http) { return 301 https://$server_name$request_uri; }" permet de renvoyer toutes les connexions http non sécurisées vers une liaison HTTPS
  • "proxy_pass http://localhost:1880;" permet de pointer vers la page de Node-RED

Il reste à créer un lien symbolique vers le dossier sites-enabled pour rendre actif la configuration.

Configuration du fichier hosts

Pour que l’URL soit accessible depuis un navigateur, il faut modifier le fichier hosts. Récupérez l’adresse IP de votre PC avec la commande ifconfig puis modifiez le fichier /etc/hosts

et ajoutez par exemple

Enregistrez avec CTRL+X puis O.

Configuration du Firewall

Nous allons maintenant configurer le pare-feu afin d’empêcher la connexion via le port 1880. Commençons par ajouter une règle pour autoriser les connexion HTTP et HTTPS depuis Nginx.

Vérifions tout d’abord les applications disponibles :

Trois profiles Nginx sont disponibles :

  • Nginx Full : ce profile ouvre les ports 80 (trafic non crypté) et 443 (trafic crypté TLS/SSL)
  • Nginx HTTP : ouvre uniquement le port 80 (non crypté)
  • Nginx HTTPS : ouvre uniquement le port 443 crypté

On active le profil “Nginx Full” comme ceci

Pour savoir si le pare-feu est démarré, faites

Si le pare-feu n’est pas encore démarré, exécutez

Maintenant vérifions la configuration du pare-feu

A ce stade, Node-RED est encore accessible à l’adresse http://localhost:1880. Nous allons ajouter une règle pour interdire toute connexion depuis le port 1880.

Vérifions de nouveau la configuration du pare-feu

Modification du fichier settings.js de Node-RED

Il ne nous reste plus qu’à ajouter une authentification par mot de passe à Node-RED. Pour cela, commençons par ajouter le module node-red-admin (sauf s’il est déjà installé).

Générons maintenant une empreinte (hash) de votre mot de passe. Exécutez la commande  suivante. Saisissez le mot de passe et validez. En retour, vous obtiendrez l’empreinte de votre mot de passe. Sélectionnez la et faites un clic droit puis copier.

Ouvrez le fichier de configuration

Recherchez la section adminAuth et dé-commentez tout le bloc

Ne modifiez pas les permissions. Changez le nom de l’utilisateur si vous voulez et collez l’empreinte générée précédemment. Pour la coller, placez le curseur avec les flèches puis clic droit et coller entre les guillemets.

Si vous ne voulez pas que Node-RED soit accessible depuis un autre ordinateur du réseau, dé-commentez la ligne uihost

Mise en service

Tout est prêt. Commençons par redémarrer Nginx

Puis, on redémarre Node-RED

Il ne vous reste plus qu’à nous connecteur avec la nouvelle adresse http://node-red.securise.com.

A la première connexion, le navigateur (Firefox en l’occurrence) va refuser la connexion et vous signaler que le certificat n’est pas valide. Comme nous avons créé un certificat auto-signé à l’aide d’OpenSSL c’est parfaitement normal.

node-red nginx securise ss

Il suffit simplement d’ajouter une règle d’exception avant de continuer.

node-red nginx securise ssl ajout exception

Saisissez votre identifiant et mot de passe

node-red nginx securise ssl page connexion

Et voilà, vous êtes maintenant connecté à Node-RED de manière plus sécurisée.

 node-red nginx securise ssl page flows

 

Liens utiles

Inscrivez-vous à la newsletter hebdomadaire

Aucun spam et aucun autre usage ne sera fait de votre email. Vous pouvez vous désinscrire à tout moment.

Tags: