IPSec net to host

On voit habituellement des liens IPSec net-net, reliant deux réseaux, ou host-net, c’est-à-dire un hôte établissant une liaison IPSec vers un réseau. Dans mon cas, j’ai besoin qu’un hôte de mon réseau interne puisse contacter un hôte spécifique traînant sur Internet, et cela à travers un canal sécurisé. Étonnamment cette configuration est assez rare pour que la documentation relative à sa mise en place soit inexistante pour le moins, mais pas impossible 🙂

On appelle souvent les connexions IPSec de type host to net roadwarrior. Le cas d’usage fréquent est celui du télétravail, où un usager a besoin d’accéder à des ressources se trouvant dans le réseau interne de sa boîte. On observe alors les différences suivantes par rapport à une connexion reliant deux sites :

  • l’initiateur est l’hôte
  • l’initiateur ne connait pas son adresse locale (IP non fixe)
  • le endpoint côté réseau interne accepte les connexions depuis toutes les IP

Dans cette situation, il est possible de spécifier une IP privée, qui va permettre au endpoint côté réseau (et donc de manière transitive à tous le réseau) de pouvoir contacter l’hôte. C’est en tirant parti de cette fonctionnalité et en utilisant une configuration de type net-net que je vais pouvoir parvenir à mes fins.

Ci-dessous la configuration que j’utilise (je n’ai mis que l’essentiel, en mettant en évidence les paramètres clés). J’utilise IKEv2 qui est simplement the way to go, ce protocole étant mieux que l’ancestral IKEv1 sur tous les plans. Je ne suis donc pas sur que cela puisse marcher en IKEv1.

Une fois les deux endpoints configurés :

  • le tunnel va pouvoir être établi d’un côté comme de l’autre
  • les hôtes du réseau interne vont pouvoir contacter le serveur standalone sur son IP privée 100.64.10.1
  • et bien entendu, le serveur standalone va pouvoir se connecter au réseau interne

Exorciser un dashboard Grafana

J’ai un dashboard Grafana planté, qu’est-ce que je fait ? maman, plus rien ne marche, je ne peux même pas revenir en arrière ?!

Concrètement, que s’est-il passé ? Lors de l’édition d’un dashboard, on a édité une requête quelconque puis enregistré le tout. Depuis, l’affichage de ce dashboard précisément fige l’interface web: on ne peut plus rien faire, tout est figé. Accessoirement on ne peut pas non plus revenir en arrière. Bloqué ? say no more.

Architecture de Grafana

Afin de bien comprendre la solution, il est nécessaire de revenir sur l’architecture de Grafana 2 minutes. C’est un site web qui se découpe en deux parties :

  • le frontend ou dit autrement la partie du site web qui s’exécute exclusivement sur le navigateur. Le frontend est responsable de l’affichage des pages web et particulièrement des graphiques, à partir des données brutes envoyées par le backend, et plus généralement de toute l’interface.
  • le backend, qui agit comme un simple proxy entre le navigateur et les différentes sources de données (ElasticSearch, Prometheus…). Son rôle est d’exécuter les requêtes contenu dans les dashboards auprès des sources de données puis de renvoyer le résultat au navigateur pour que ce dernier puisse rendre les différents graphique composant un dashboard

Les dashboards Grafana sont intégralement sérialisés et stockés sous forme JSON. Le point délicat est que la charge d’interpréter ce fichier pour reconstituer le dashboard n’est pas sous la responsabilité du backend mais du frontend. Son rôle est donc bien plus critique que le simple affichage de jolis dessins.

Malheureusement qui dit frontend dit aussi application écrite en JavaScript. Il suffira d’une minuscule coquille dans un des scripts JavaScript ou dans ce qu’il traite (hint: disons le dashboard sérialisé en JSON par exemple) pour que toute la machine se grippe. Certes le try/catch existe en JavaScript mais l’on ne peut pas dire que cela soit la fonctionnalité la plus utilisée, n’est-ce pas ?

Lorsque cela arrive, tout ce qui fait appel à un peu de code Javascript ne fonctionne plus. Vu que les dashboards sont une single web app, une anomalie JavaScript bloque toute interaction sur le dashboard, incluant édition, suppression, etc…

Persistence

Pour conserver les dashboards, Grafana repose sur une base de données dont le modèle est relativement simple. Par défaut il s’agit de SQLite mais Grafana supporte également MySQL (et ses dérivées) afin de le rendre Hautement Disponible.

Deux tables vont s’avérer particulièrement utiles :

Schéma des tables dashboard et dashboard_version
Extrait du modèle de données de Grafana avec DB Browser for SQLite

La table dashboard contient tous les dashboards existant. La définition du dashboard est enregistré dans la colonne data. Son contenu correspond à ce que l’on a lorsque l’on effectue un export via l’interface web.

La table dashboard_version contient la même chose historisé. Pour un dashboard donné, cette table contiendra toutes les modifications qui ont été effectuées dessus, permettant ainsi de revenir en arrière très simplement. En effet il suffira de prendre le data dans dashboard_version d’une version saine et le placer dans la table dashboard. Pouf, problème résolu !

API

Ce plongeon dans les entrailles était intéressant. La modification en live de la base est la méthode que j’avais employé pour réparer ce graphe parce qu’à ce moment là j’étais justement sur la sauvegarde de l’application mais il existe une solution beaucoup moins intrusive. Vu l’existence du frontend js, ce dernier communique avec le côté serveur à travers une API REST pas mal fichu. En récupérant l’id du dashboard malade, j’aurais simplement eu à faire un POST bien placé.

Unbrick Synology

Format Lien

J’ai trouvé un article décrivant comment il peut être possible d’installer un OS, en l’occurrence NetBSD, sur du matériel Synology. Je doute d’en arriver là, mais pour avoir déjà brické mon NAS deux fois, cela peut toujours être utile. En effet, la procédure détaille comment accéder à l’interface série et donc permettre d’avoir des informations lors du boot.

Le tuto est là : Synology Diskstation Installation

Et pour démonter son NAS, plusieurs tuto/vidéos existent. Pour upgrader mon DS412+ à 2Go de RAM, j’avais notamment regardé cette vidéo: Synology DS412+ RAM Upgrade – Disassembly Tuto

Format En passant

A chaque fois j’oublie le paramètre me permettant de cloner un dépôt git en ignorant les vérifications du certificat serveur, lorsqu’on se connecte en HTTP. Je mets donc ici la bonne commande, afin de pouvoir la retrouver facilement :p

 

Spam sur mon blog

Mon blog, que quasiment personne ne lit, est spammé à hauteur de 10 messages / mois, je n’ose même pas imaginer ce que ça doit être sur les blogs populaires, mais je salue l’existence d’outils performant tels qu’Akismet pour faire le tri entre les commentaires réels, et le reste.

Mais aujourd’hui en regardant les commentaires indésirables, je suis tombé sur ça :

Je n’ai rien changé, c’était tel quel. On arrive aisément à lire le modèle qui permet de générer un certain nombre de message plus ou moins identiques.

C’est à croire que les mecs ne sont même pas foutu de coder pour spammer correctement et tester avant d’envoyer la sauce. La qualité se perd, je vous le dis !

Incompétence ou payé au lance-pierre ? Je ne saurais dire, mais ça me rappelle que les choses sont similaires avec les codes malicieux : beaucoup semblent codés à l’arrache, sans tests, ce qui au passage le rend particulièrement visible (système instable, crash, lenteur, etc…).
Le spam par mail également semble alimenté par des crétins, qui arrosent (ou au moins essaie) mon système, et qui retentent encore sans comprendre que leur put*@§ de pourriels ne passera jamais.

On doit voir passer de drôle de choses sur les honeypots.

Sinon, au spammeurs, vous pouvez toujours tenter, ça ne marchera jamais sans cerveau ! Pas chez moi en tout cas.

GPU vs CPU

Ça fait un petit moment que je participe au programme BOINC. Pour résumer, ce programme permet de partager les ressources inutilisées de son PC pour divers projets scientifiques. Les scientifiques sont pauvres, c’est bien connu en France, et moi je n’éteins pas souvent mes PC (surtout les serveurs), alors autant qu’ils profitent de mes CPUs pour leurs besoins (pis c’est pas moi qui paye la facture EDF alors :-D).

Récemment, j’ai pu mettre BOINC sur un poste bénéficiant de CUDA, la technologie de GPGPU de nVidia. Ben ya pas à dire, les GPU sont clairement sous-utilisés en dehors des jeux !

Voici une capture d’écran montrant une note qualifiant la rapidité de calcul sur deux projets :

  • GPUGRID est un projet utilisant mon GPU, un nVidia 9800GT
  • Milkyway@home est un projet utilisant les deux cœurs de mon CPU, un Core 2 Duo E7300

boinc cpu vs gpu
Le GPU est plus que 10x plus rapide que les CPUs ! Reste plus qu’à ce que OpenCL se démocratise davantage, pour que tous puissent utiliser simplement la puissance GPU sans dépendre du matériel.

Protéger les e-mails de son site

Dans la même veine que OpenDNS, je vous présente cette fois SpamPoison.

Il s’agit d’une simple image-lien à mettre sur ce site. Le but recherché est d’y piéger les robots scanners dans ces pages. En effet si vous cliquez sur un de ces liens (un exemple est disponible sur le site web), vous allez tomber sur une page remplit d’adresses e-mail bien sûr complètement bidons. Cela ne va pas empêcher le robot de continuer son scan, mais du coup les e-mails véritables se trouvant sur vos sites sont noyés avec les faux e-mails générés par SpamPoison.

Ce n’est absolument pas infaillible, mais ça aide pas mal.

OpenDNS : le serveur qui vous suit

J’ai trouvé un truc il y a pas mal de temps maintenant et plutôt pratique je trouve, c’est OpenDNS.

Ce site propose deux serveurs DNS (un primaire et un secondaire qui sont respectivement 208.67.222.222 et 208.67.220.220) utilisable sans inscription, ce qui peut être plutôt pratique quand on bouge souvent.

J’ai fait quelques tests, et globalement OpenDNS est plus rapide que les serveurs de Free ou Club-Internet. Même mieux : après inscription, on peut restreindre l’accès à certaines pages de type « casino, loto », « porn », sectaire et autres sites complètement inutiles lorsqu’on surfe sur le net.

De même, on peut voir les domaines consultés et leurs fréquences, rajouter des urls…. je vous laisse découvrir le reste par vous-même.

Je dirais donc : que du bon, surtout que ça ne coûte pas un rond.

Use OpenDNS

Voir aussi