PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

genma : De la dépendance d'une instance Yunohost au serveur de Yunohost

jeudi 3 septembre 2020 à 09:00

Remarque : ce billet de blog vient en complément de mon billet Yunohost - Les mails d'administration système et mails automatiques.

Introduction

Spécificité : mon instance est associée à plusieurs domaines et sous-domaines
Le domaine principal (qui est ici représenté par moninstanceyunohost.fr) est un nom de domaine géré par GANDI (pour la location du nom de domaines et la résolution DNS).

YunoHost fournit un service de noms de domaine offerts et automatiquement configurés (cf Yunohost - Noms de domaines automatiques) et il peut arriver que de en temps, différents serveurs du projet Yunohost ne répondent plus.

Voici les erreurs rencontrées et les conséquences de l'absence de réponse de ces serveurs.

Pas de résolution DNS et mail reçu

Comme indiqué dans mon billet Yunohost - Les mails d'administration système et mails automatiques, Yunohost envoi des mails d'administration.

Durant le mois d'août 2020, pendant quelques heures, toutes les 2 minutes, j'ai reçu le mail suivant :

* Expéditeur : Cron Daemon root@moninstanceyunohost.fr
* Sujet : Cron yunohost dyndns update >> /dev/null
* Corps du mail :

Traceback (most recent call last):
File "/usr/bin/yunohost", line 218, in
timeout=opts.timeout,
File "/usr/lib/python2.7/dist-packages/moulinette/__init__.py", line 149, in cli
moulinette.run(args, output_as=output_as, password=password, timeout=timeout)
File "/usr/lib/python2.7/dist-packages/moulinette/interfaces/cli.py", line 469, in run
ret = self.actionsmap.process(args, timeout=timeout)
File "/usr/lib/python2.7/dist-packages/moulinette/actionsmap.py", line 588, in process
return func(**arguments)
File "/usr/lib/moulinette/yunohost/log.py", line 313, in func_wrapper
result = func(*args, **kwargs)
File "/usr/lib/moulinette/yunohost/dyndns.py", line 235, in dyndns_update
old_ipv4 = check_output("dig @%s +short %s" % (dyn_host, domain)).strip() or None
File "/usr/lib/python2.7/dist-packages/moulinette/utils/process.py", line 31, in check_output
return subprocess.check_output(args, stderr=stderr, shell=shell, **kwargs)
File "/usr/lib/python2.7/subprocess.py", line 219, in check_output
raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command 'dig @dyndns.yunohost.org +short moninstanceyunohost.ynh.fr' returned non-zero exit status 9

Ce mail est envoyé par une commande (yunohost dyndns update, commande qui fait donc appel à la moulinette interne) qui est lancée via une tâche cron toutes les 2 minutes

# more /etc/cron.d/yunohost-dyndns

*/2 * * * * root yunohost dyndns update >> /dev/null

Le mail et l'erreur indiquée précise la commande qui est derrière, à savoir

dig @dyndns.yunohost.org +short moninstanceyunohost.ynh.fr

Le serveur dyndns.yunohost.org et le serveur qui fait la résolution des domaines en ynh.fr pour avoir la correspondance sousdomaine.ynh.fr - IP de la machine. Si il ne répond pas, la commande tombe en erreur.

Conséquence : dans un navigateur, l'adresse moninstanceyunohost.ynh.fr n'est donc plus accessible.

Plus de mises à jour de Yunohost

Yunohost repose sur Debian (et donc les serveurs associés, du moins les miroirs) mais a également son propre serveur qui contient l'ensemble des paquets nécessaires au projet (c'est de ce serveur que sont téléchargées les mises à jours des programmes spécifiquement développés dans le cadre du projet Yunohost par exemple)

Dans le dossier de configuration des dépôts d'un serveur Yunohost, on a :

# cat /etc/apt/sources.list.d/yunohost.list
deb http://forge.yunohost.org/debian/ buster stable

Si le serveur derrière forge.yunohost.org ne répond pas, Debian (Yunohost reste une distribution Debian) indique que le serveur ne répond pas et qu'il ne peut pas faire la mise à jour pour les logiciels issus de ce serveur. Les autres dépôts (ceux de Debian) étant accessibles / fonctionnels, il est toutefois possible de mettre à jour son serveur (correctifs et mises à jour de sécurité) via la ligne de commande, depuis une connexion en SSH par exemple, pour tout ce qui concerne Debian au sens strict.

Pour aller plus loin dans ce principe de dépendance

Le bon fonctionnement d'une instance Yunohost repose donc en partie sur quelques serveurs de l'infrastructure du projet, eux-mêmes gérés par les contributeurs cœurs de Yunohost. Comme pour tout logiciel libre, l'usage d'un logiciel libre dépend aussi fortement de sa maintenance et son évolution dans le temps. Il y a la problématique de la pérennité de Yunohost dans le temps : Yunohost est développé par plusieurs développeurs, mais par peu de développeurs. Les mainteneurs des paquets d'applications Yunohost sont tous bénévoles (à ma connaissance) et sont également peu nombreux... Il faut bien avoir ça en tête... Un jour Yunohost peut s'arrêter et disparaître ; ces problèmes ponctuels sont là pour nous le rappeler...

Enfin, il est important de garder en tête qu'il n'y a pas d'association ou de structure derrière Yunohost, encore moins d'entreprise, juste un collectif. Mais il y a des frais (rien que la maintenance des serveurs). Alors, si vous aimez le projet et que vous souhaitez le soutenir financièrement : https://donate.yunohost.org/

Gravatar de genma
Original post of genma.Votez pour ce billet sur Planet Libre.

Journal du hacker : Liens intéressants Journal du hacker semaine #35

lundi 31 août 2020 à 00:01

Pour la 35ème semaine de l'année 2020, voici 10 liens intéressants que vous avez peut-être ratés, relayés par le Journal du hacker, votre source d’informations pour le Logiciel Libre francophone !

Pour ne plus rater aucun article de la communauté francophone, voici :

De plus le site web du Journal du hacker est « adaptatif (responsive) ». N’hésitez pas à le consulter depuis votre smartphone ou votre tablette !

Le Journal du hacker fonctionne de manière collaborative, grâce à la participation de ses membres. Rejoignez-nous pour proposer vos contenus à partager avec la communauté du Logiciel Libre francophone et faire connaître vos projets !

Et vous ? Qu’avez-vous pensé de ces articles ? N’hésitez pas à réagir directement dans les commentaires de l’article sur le Journal du hacker :)

Gravatar de Journal du hacker
Original post of Journal du hacker.Votez pour ce billet sur Planet Libre.

Articles similaires

Francois Aichelbaum : Let's walk in a minefield

jeudi 27 août 2020 à 11:24

If you manage an infrastructure, you probably always know the same problem: how to properly manage the blacklisting of malicious IPs. If you are on hybrid infrastructures, without adequate equipment for firewalling, this question often arises all the more. And if you want to be proactive, by securing the whole platform, as soon as a machine detects abnormal behavior, it becomes critical. Fortunately, an opensource tool, MineMeld, allows you to manage this situation, with a minimum of work.

Star Trek - Mind meld - Paramount Pictures
Star Trek - Mind meld - Paramount Pictures

Avant-Propos

(Image inspired by the iTWire article on MineMeld) Not all of us can have next-gen firewalls. On the other hand, we manage servers and can deploy more and more of them. We will therefore focus on this case.

Quick presentation of MineMeld from the official Wiki:

MineMeld is a community supported tool to manipulate list of indicators and transform/aggregate them for consumption by third party enforcement infrastructure. MineMeld has many use-cases and can easily be extended to fulfill many more. Check this page for a brief list of currently supported nodes/feeds.

With non-hype words, it’s a mean to centralize all your blacklist and scorifications in order to manage your threat prevention: it imports multiple feeds, analyze/dedup them, in order to output clean feed you’d be able to use.

MineMeld diagram
MineMeld diagram

The project is opensource and can be installed on a bunch of old Linux distros: the word “old” is quite important but we can deal with it. For the rest of it, I’ll provide some scripts via GitHub.

Suit up !

So we start with the installation of MineMeld. As said above, they officially support old distributions. Go figure! However, their doc explains a little bit the process for the installation on Ubuntu 18.04 for example. A little less old, I decide to start on it.

I won’t detail their installation which is done via an Ansible playbook. Rather readable, if you want to do something else, it should not be complicated.

The Hurt Locker - Kingsgate Films
The Hurt Locker - Kingsgate Films

Post installation, the service seems to start, but generates many errors in the logs, mainly concerning a ‘ujson’ python library. Nothing in the MineMeld documentation. However, my best friend, Google, quickly finds the answer: you have to replace the library provided by the package, by the library available in Ubuntu repositories.

sudo apt install python-ujson
sudo mv /opt/minemeld/engine/current/lib/python2.7/site-packages/ujson.so /opt/minemeld/engine/current/lib/python2.7/site-packages/ujson.so.bak
sudo ln -s /usr/lib/python2.7/dist-packages/ujson.x86_64-linux-gnu.so /opt/minemeld/engine/current/lib/python2.7/site-packages/ujson.so

After a restart of the MineMeld service, everything is running smoothly and you can finally authenticate. If you are looking for the default credentials: admin / minemeld .

Getting to know MineMeld can take a little time. I’ll give you the first few configuration items from our use case, then let you get familiar with it. Of course, I am always available if you need my assistance.

I want to blacklist

Now that the service is in place, it’s time to configure it, before you can take advantage of it on your different servers, but also to keep it up to date with your own IPs to blacklist.

Queen - I want to break free
Queen - I want to break free

All scripts I provide here are available on my GitHub account.

Prepare MineMeld

When you are logged in to MineMeld, you will see different menus:

Dashboard MineMeld
Dashboard MineMeld

So the first step is to go to the Admin, and to manage your users for a minimum:

Then, let’s go to the Config, to manage the prototypes we want to have. In my case, I usually use at least the following ones:

To which I add my own ‘localDB’ blacklist. You can simply view/add new nodes by clicking on the list button at the bottom of the table:

Config list
Config list

The default configuration of the various nodes should be suitable for the use we detail here. However, you have to add the IPs that you don’t want to see blacklisted. To do this, simply edit the wlWhiteListIPv4 Node.

Be careful, the name of this node is a fake friend: it does not generate a whitelist, but just makes sure that the IPs listed there do not appear in the aggregate that you will generate at the end.

Finally, the last point to consult is the URL of the output stream. It is a matter of looking at the URL announced in the configuration of the inboundfeedhc Node. For practical reasons, it will be necessary to add the query ‘?tr=1’ to have a CIDR writing of the IPs. For ex:

http:///feeds/inboundfeedhc?tr=1

Benefit from MineMeld on Linux servers

Now that the service is setup, let’s benefit from it. Easy way, is to rely on kernel’s ipset. So don’t forget to install ipset.

I found a bash script that can use blacklist feed and source them to ipset (and maintain the local list based on the feed age). As the script was doing part of MineMeld job, in a very long time, I had to amend it a bit. You’ll find my version here.

Don’t forget to edit it with two information:

You can also provision a (real) whitelist by adding IPs to /var/lib/blacklists/whitelist.txt . If you have specific IPs you want to blacklist only on that hosts, you can edit the blacklist.txt file at the same location.

On my end, I prefer to run this script at least once an hour, while keeping the possibility to run it on-demand.

On all my servers, I use fail2ban to parse my various logs and generate ban actions. Let’s update it with a new action: simply import the file fail2ban-minemeld.conf to /etc/fail2ban/action.d/minemeld.conf and then update your /etc/fail2ban/jail.localwith a new value for banaction: ‘minemeld’. Also, import the new ban/unban scripts and you’re done after a restart of fail2ban.

The later scripts are to be updated with the proper fqdn and credentials to access your MineMeld API.

That’s all folks

Now, you’re set with MineMeld as a centralized blacklist management for your non-next-gen firewallis. This can also be used as a feed for the NG-FW plugin from pfSense, for instance. Yet, it can still be improved, based on your needs, as via created a real output feed for your whitelists, or with different management of the blacklists.

Do you consider this useful ? How would you tackle such use case ? Feel free to ping me and share your thoughts.

Gravatar de Francois Aichelbaum
Original post of Francois Aichelbaum.Votez pour ce billet sur Planet Libre.

Littlewing : Music Scores As Code

lundi 24 août 2020 à 13:42

Derrière ce nom pompeux qui peut effrayer, je vais essayer d’expliquer dans cet article comment on peut versionner facilement ses partitions et les publier sur le web.

En cherchant comment mettre de la documentation technique avec des diagrammes PlantUml dans des repos GITLAB et générés avec des pipelines, je me suis mis dans la tête de faire la même chose avec des partitions 🙂

Depuis plusieurs années, j’utilise lilypond pour créer mes partitions. C’est un peu difficile de s’y mettre, mais une fois la syntaxe assimilée, la saisie d’une partition est beaucoup plus efficace. Le rendu des partitions est vraiment optimisé.
Si vous voulez plus de détails sur le pourquoi du comment je vous conseille cette page.

Vous trouverez des exemples sur le site.

J’ai donc eu l’idée de:

Stockage

Pourquoi stocker dans un référentiel de sources tel que Github ? Pour les non informaticiens : les partitions sont stockées au format texte.

\\version "2.12.1"

\\header {
  title="Try a little tenderness"
  composer="Harry Woods, Jimmy Campbell & Reg Connely"
  subtitle = "Commitments Version"
  %poet = "Poete"
  instrument = "Piano"
  editor = "L'éditeur"
  %meter=\\markup {\\bold {"Remarque sur le rhythme"}}
  style = "Soul"
  maintainer = "Alexandre Touret"
  maintainerEmail = "alexandre.touret@free.fr"
  maintainerWeb = "http://blog.touret.info"     
  lastupdated = ""
  source = "Music room"
  footer = "Footer"
  copyright =\\markup {\\fontsize #-1.5
 "Delivered by A TOURET"}
}
upper=
\\relative c'{
  \\clef treble
  \\time 4/4
  \\tempo 4=176
  \\key g \\major
  
  d'2 (b4 e
  d2 b4 a 
  g2 g2 
  2)  
  \\bar "||"

GIT et GITHUB permettent de versionner facilement et pouvoir faire facilement un retour arrière en cas d’erreur.
Aussi, GITHUB offre des fonctionnalités « sociales » et collaboratives qui facilitent la revue des modifications ( en cas de travail à plusieurs ).
Bref, ça offre la sécurité d’une sauvegarde et la possibilité d’un retour arrière en cas d’erreur.

Générer les partitions avec une github action

Les github actions sont des outils permettant:

GitHub Actions makes it easy to automate all your software workflows, now with world-class CI/CD. Build, test, and deploy your code right from GitHub. Make code reviews, branch management, and issue triaging work the way you want.

J’ai donc décidé de créer un workflow qui permet de générer les partitions au format lilypond.

J’ai mis à disposition le code sur github sous licence GNU GPLv3. Elle est utilisable telle quelle.

Pour créer l’action, il faut créer un fichier action.yml à la racine du repo. Voici le contenu

name: 'Lilypond Generator'
description: 'Run Lilypond tool with the given set of arguments to generate music sheets'
author: '@alexandre-touret'

inputs:
  args:
    description: 'Arguments for Lilyponid'
    required: true
    default: '-h'

runs:
    using: 'docker'
    image: 'Dockerfile'
    args:
      - ${{ inputs.args }}

branding:
  icon: 'underline'
  color: 'blue'

Vous aurez compris que ce fichier fait référence à une image Docker. Cette dernière n’est ni plus ni moins qu’une Debian avec lilypond d’installé.

Pour l’utiliser dans un repo github, on peut créer une action qui l’utilise. Voici un exemple:

jobs:
  build_sheets:
    runs-on: ubuntu-latest
    env:
        LILYPOND_FILES: "*.ly"
    steps:
      - name: Checkout Source 
        uses: actions/checkout@v1
      - name: Get changed files
        id: getfile
        run: |
          echo "::set-output name=files::$(find ${{github.workspace}} -name "${{ env.LILYPOND_FILES }}" -printf "%P\\n" | xargs)"
      - name: LILYPOND files considered echo output
        run: |
          echo ${{ steps.getfile.outputs.files }}
      - name: Generate PDF music sheets
        uses: alexandre-touret/lilypond-github-action@master
        with:
            args: -V -f --pdf ${{ steps.getfile.outputs.files }}

A la dernière ligne on peut passer les arguments nécessaires à lilypond.

Publication

La c’est l’étape la plus facile :). Il suffit d’activer les github pages et de commiter et pusher les partitions générées

 - name: Push Local Changes
        run: |
          git config --local user.email "${{ secrets.GIT_USERNAME }}"
          git config --local user.name "${{ secrets.GIT_EMAIL }}"
          git add .
          git commit -m "Add changes" -a
      - name: Push changes
        uses: ad-m/github-push-action@master
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}

Il suffit de créer une page index.md à la racine et d’ajouter des liens vers les partitions générées ( dans mon cas, ça se passe dans le répertoire /docs ).
Vous pouvez trouver un exemple ici.

Conclusion

Voila comment on peut générer un site avec des partitions crées avec Lilypond.
Vous trouverez les différents liens ci-dessous. Peut être que je publierai cette action sur le marketplace une fois que j’aurai publié une documentation digne de ce nom :).

Gravatar de Littlewing
Original post of Littlewing.Votez pour ce billet sur Planet Libre.

Simon Vieille : J'ai essayé de migrer de Firefox

lundi 24 août 2020 à 11:07

Mozilla Corporation, la société filiale de la fondation Mozilla ne se porte pas très bien. Il y a eu pas mal de licenciements et l’équipe de réponse aux incidents de sécurité a volé en éclats. C'est problématique car mon navigateur joue un rôle centrale dans mon informatique. J'ai alors commencé à réfléchir à une migration vers un nouveau navigateur.

Avant tout, cela fait un moment que j'ai intégré la gestion de mes mots de passes en dehors du navigateur en m'appuyant sur passwords. Mes marques pages sont duppliqués vers bookmarks. et mes lectures différées sont gérées avec wallabag. Tous ces outils possèdent des extensions compatibles avec les "autres" navigateurs.

Passons maintenant au "choix" du potentiel remplaçant. En dehors de Firefox, tous s'appuient sur chromium, le Internet Explorer du 21ème siècle. Je n'ai pas voulu faire le mec ultra borné donc j'ai fais un choix dans la maigre liste des navigateurs qui tiennent la route. Je me suis arrêté sur Vivaldi : il est possible de synchroniser son profil avec un compte Vivaldi et les données sont chiffrée. Les extensions que j'utilise tous les jours fonctionnent avec et Vivaldi ne semble pas collecter mes données. En terme de licence, le code de l'interface n'est pas accessible mais le moteur et les modifications le sont (source).

Donc j'ai installé Vivaldi, j'ai synchronisé mes marques pages, j'ai retrouvé mes mes mots de passe et mes extensions favorites sont paramétrées. Chouette.

Vivaldi

…mais en navigant à tout casser 3 minutes, je me suis posé cette question : où sont mes conteneurs comme chez Firefox ? Spoiler : ils n'existent pas et aucun navigateur ne le propose. Donc j'ai ravalé ma salive et je me suis demandé s'il y avait un Master Password pour sécuriser les mots de passe collectés ? Spoiler : il n'existe pas non plus…

Du coup, je suis revenu sur Firefox et j'ai fais un don à Mozilla, en espérant que d'autres feront comme moi et que Firefox survivra encore longtemps.

Gravatar de Simon Vieille
Original post of Simon Vieille.Votez pour ce billet sur Planet Libre.

Articles similaires