Vue lecture

« On a mangé la mer » : les révélations choc d'une BD sur ce qu'il se passe dans les océans

Les mers bordant les côtes françaises ont perdu 80 % de leur population marine. On a mangé la mer est une BD choc qui vient de sortir et traite de la surexploitation des océans par les humains. L’auteur et militant pour l’océan, Maxime de Lisle, a répondu aux questions de Futura.

  •  

🗑️ Supprimer les indésirables de Windows 11

J'utilise O&O Shutup pour supprimer les fonctionnalités, logiciels et autre bloatwares inutiles sur Windows 11/10. Et c'est dans cette même veine que l'outil WinScript fonctionne :

Il est open source et existe en version classique ou portable, et même directement en ligne.

⚠ N'activez pas des réglages que vous ne maitrisez pas, vous avez de grandes chances de casser des choses...

Merci à Florian d'IT-Connect pour la découverte!

Vous n'aimez pas le RSS : abonnez-vous par email 📥
Vous devriez me suivre sur Twitter : @xhark

Article original écrit par Mr Xhark publié sur Blogmotion le 02/04/2025 | Pas de commentaire |
Attention : l'intégralité de ce billet est protégée par la licence Creative Commons

Cet article 🗑️ Supprimer les indésirables de Windows 11 provient de : on Blogmotion.
  •  

Donnez moi un NixOS à ronger

NixOS

Petit aperçu de Nix : il y a plusieurs articles sympas ici, la récente revue de Seb95, à cause de laquelle je suis passé sur cette distribution il y a quelques jours (et sachant que visiblement lui n’y est pas resté!, peut-être qu’il me lit haha), ou cette revue plus ancienne, donc j’essaierai de mettre en avant d’autres aspects.

    Sommaire

    Mini histoire à zapper

    Dejà reprécisons - il faut remonter à 2003 pour que Eelco Dolstra développe le gestionnaire de paquets Nix, mais la distribution, elle, NixOS date de 2006. Il y a deux versions par an, nommée YY.MM, par ex. 13.05 pour version de mai 2013 - brillant.

    Pour la suite j’écrirai simplement Nix pour désigner la distribution.

    En 2010 un wiki démarre. En 2013, la distribution 13.05 passe de upstart à systemd et systemd-boot au démarrage (alors appelé gummiboot). La version 13.10 est la première version stable de NixOS.
    On peut noter chez la concurrence, en 2014 le lancement du projet Atomic de Red Hat.
    En 2016, le wiki Nix officiel est clos et un wiki non officiel démarre…
    Fedora Silverblue apparait 2018 comme projet de distinct de « Atomic ». En 2019 Open Suse démarre le projet Micro OS.
    Côté Nix, en 2020 ont été intégrés les Flakes (22.05). Un installateur graphique apparait en 2022, sur la 22.05.
    En 2024, le wiki Nix officiel redémarre (mais le nom officiel demeure…)

    Une distribution rétro-futuriste

    Dans Nix, il n’y a pas de répertoire /bin, de /sbin, de /lib ou de /usr. Tout est gardé dans un /nix/store.

    Enfin moi j’ai quand même un /usr/bin/env mais j’avoue ça fait peu, ou un /bin mais qui ne contient qu’un symlink pour bash. Mais bref

    Dans le /nix/store on va retrouver nos hiérarchies habituelles, rangées dans des « dérivations ». Prenons firefox : je ne l’aurai pas directement dans /usr/bin mais dans le store voici comment ça se présente

    $ ls -R /nix/store/lxgnpycfaac8w893wmka5hw3dad8w228-firefox-121.0
    /nix/store/lxgnpycfaac8w893wmka5hw3dad8w228-firefox-121.0:
    bin  lib  share
    
    /nix/store/lxgnpycfaac8w893wmka5hw3dad8w228-firefox-121.0/bin:
    firefox
    
    /nix/store/lxgnpycfaac8w893wmka5hw3dad8w228-firefox-121.0/lib:
    firefox  mozilla
    
    /nix/store/lxgnpycfaac8w893wmka5hw3dad8w228-firefox-121.0/lib/firefox:
    application.ini    defaults            firefox-bin   libgkcodecs.so        libmozavutil.so   libmozwayland.so   omni.ja        Throbber-small.gif
    browser            dependentlibs.list  fonts         libipcclientcerts.so  libmozgtk.so      libxul.so          pingsender     vaapitest
    crashreporter      distribution        glxtest       liblgpllibs.so        libmozsandbox.so  minidump-analyzer  platform.ini
    crashreporter.ini  firefox             gmp-clearkey  libmozavcodec.so      libmozsqlite3.so  mozilla.cfg        removed-files
    

    etc.
    Pour le reste c’est plus standard.

    $ ls /
    bin  boot  dev  etc  home  lib  lib64  lost+found  nix  proc  root  run  srv  sys  tmp  usr  var
    
    

    Déclaratif

    La configuration, utilisateurs réseaux paquets services saucisson fromage, tout est déclaré dans un fichier /etc/nixos/configuration.nix.
    Comme définir un point de montage pour un disque ou les règles du pare-feu, qui correspondraient à du /etc sur d’autres distributions, mais aussi par exemple créer un utilisateur - ce qui correspondrait plutôt à des commandes sur d’autres distributions, comme useradd.

    Quand vous « compilez » le fichier /etc/nixos/configuration.nix, Nix va s’occuper tout seul des /etc/fstab, iptables (*), /etc/group, et ainsi de suite ; en général on précise que l’on « switche » vers ce nouvel OS et Nix redémarre les services avec la nouvelle config (à vous de savoir si redémarrer des services est suffisant, ou si pour prendre en compte les changements vous préférez redémarrer la session voire reboot).

    (*nftables dispo)

    Exemple fstab, au lieu d’éditer fstab je mets ça dans /etc/nixos/configuration.nix

     # FSTAB
      fileSystems."/home" = {
        device = "/dev/disk/by-uuid/220260f3-a7b2-4387-9a0b-9d17c604aa18";
        fsType = "ext4";
       options = [ # If you don't have this options attribute, it'll default to "defaults" 
         # boot options for fstab. Search up fstab mount options you can use
         "users" # Allows any user to mount and unmount
         "nofail" # Prevent system from failing if this drive doesn't mount     
       ];
      };
    

    Ou encore ma fichue imprimante Samsung
    Sous Debian, j’aurai peut-être ajouté un dépôt dans /etc/apt, j’aurai rafraichi puis installé un paquet. Sous Nix j’édite le fichier.

      # Enable CUPS to print documents.
      services.printing.enable = true;
      services.printing.drivers = [ pkgs.samsung-unified-linux-driver ];
    

    On peut même se retrouver à configuration de manière abstraite… En effet, imaginons que je configure le pare-feu : quel pare-feu suis-je en train de configurer?

    networking.firewall.allowedTCPPorts = [ 80 443 ];
    

    La documentation vous apprendra que par défaut, Nix passe par iptables pour implémenter les règles que vous précisez. Avec la directive ci-dessous, les mêmes règles seraient implémentées en se basant sur nftables.

    networking.nftables.enable
    

    Immuable

    Est-ce que NixOS est immuable? On pourrait dire, comme Distro Watch, non, car on peut en réalité écrire sur la totalité du système de fichier. L’immuabilité est plutôt fonctionnelle - au sens où on ne lance pas de commande, on édite un fichier /etc/nixos/configuration.nix (que l’on peut scinder, au besoin), qui donnera toujours le même résultat. (spoil cf quand même plus bas : channel).

    Retour arrière

    Après construction du système, au démarrage, vous aurez le choix d’amorcer (booter) sur chaque version de l'OS que vous avez construite. On peut démarrer sur une ancienne version. Un peu comme démarrer sur une ancienne version du noyau mais appliqué à tout.

    Multi-utilisateurs

    Vous pouvez avoir plusieurs versions d’un paquet installées en même temps, en fonction des utilisateurs. Certainement très utile… et pas testé chez moi.

    En somme

    Cette page décrit bien les logiques différentes entre Nix et un système basé sur Debian pour quelques opérations courantes.

    Bon clairement si le besoin c’est installer firefox et qu’on doit éditer un fichier /etc puis rebuild le système, on ne ressent pas particulièrement d’avantage à utiliser Nix vs un autre système (mais en cas de souci, vous serez bien content d’avoir le rollback…)

    • À noter cela dit que l’installation de paquets n’est pas vraiment plus longue. Rebâtir le système n’est pas vraiment plus long qu’un apt-get ou équivalent. Ce qui m’étonne le plus c’est que par défaut il n’y a pas de commande pour chercher des paquets (… ??!!! …bon il y a le site officiel et on peut par exemple installer nix-search-cli) .
    • On peut bien sûr utiliser des Flatpak si on active cette option. Par défaut si on installe GNOME, cela vient d’ailleurs avec gnome-software qui n’inclut que les Flatpak. Au moins c’est un Gnome Software léger, ça change ahem ahem…
    • Pour les AppImage j’en parle plus bas

    Donc l’usage pour installer une application graphique ne changera pas vraiment la vie. À noter tout de même que le dépôt est particulièrement large.

    Mais quid de paquets un peu plus complexes? Quand j’ai voulu installer nginx avec le TLS, j’ai eu une bonne surprise. J’imaginais une tannée du fait de devoir « passer par Nix » pour gérer tout ce qui est configuration et certificats. En effet plus question de lancer des commandes pour acquérir ou renouveler des certificats. Comment faire? Pour le coup la doc me l’a indiqué rapidement.

          security.acme.acceptTerms = true;
          security.acme.defaults.email = "mon@email.example.com";
    
              services.nginx = {
                enable = true;
                  virtualHosts = {
                     "mon.domaine" = {
                         forceSSL = true;
                         enableACME = true;
                         root = "/var/www/mon.domaine";
                  };
    

    Et voilà! Nginx est installé, mon domaine pointe vers le bon dossier, le http redirige vers https, Nix acquiert les certificats (par défaut Let'sEncrypt mais se personnalise si on veut), et surtout Nix définit un systemd pour renouveler les certificats.

    Et là on voit que Nix c’est un peu l’opposé d’une ditribution minimaliste comme Arch… Les points forts de Arch sont les points faibles de Nix et réciproquement…

    À noter que /etc/nginx n’existe pas. Dans mon exemple ce sera nix/store/brxfza7n2hjy6n15ffdrb7wlr2fqygy8-nginx. conf…

    $ systemctl status nginx
    ● nginx.service - Nginx Web Server
         Loaded: loaded (/etc/systemd/system/nginx.service; enabled; preset: ignored)
         Active: active (running) since Sat 2025-03-29 09:45:55 CET; 1 day 10h ago
     Invocation: 84e49760dcee4e5ea0a6baa79dd6ceb2
        Process: 35568 ExecReload=/nix/store/alqjcv381xp2wawjc919h1qr6p4q8gvj-nginx-1.26.3/bin/nginx -c /nix/store/brxfza7n2hjy6n15ffdrb7wlr2fqygy8-nginx.conf -t>
        Process: 35569 ExecReload=/nix/store/9m68vvhnsq5cpkskphgw84ikl9m6wjwp-coreutils-9.5/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
    

    Oui tout est dans le nix store, bah oui logique.

    On voit aussi que cette distribution est aussi agréable qu’elle est

    • bien empaquetée
    • bien documentée (j’y reviens plus bas…)

    Je nixifie tu nixifies

    Définir des choses dans /etc/nixos en déclaratif plutôt que de taper des commandes ou éditer d’autres fichiers comme /etc/nginx, c’est ce qu’on appelle nixifier, qui vient du verbe galérer-de-ouf. Non je plaisante.

    Cela veut dire que pour tout ce que vous pouvez faire avec les services, le paquet Nix doit proposer des options pour le faire dans /etc/nixos… Un peu effrayant au premier abord? Par ex. si je veux utiliser une fonction plus exotique de Nginx, alors la config Nix doit inclure un moyen de le spécifier, et doit inclure chaque option Nginx ??

    En fait de nombreux services vont proposer d’ajouter des options « extra ». Par ex. si je veux utiliser la fonction Nginx « rate-limit » et que le paquet Nix n’a pas d’option pour ça… Eh bien je vais utiliser une directive « appendHttpConfig » qui va me permettre de directement écrire dans le nginx.conf. Comme cela je continue d’utiliser les avantages Nix, mais je peux profiter d’options non nixifiées.

         services.nginx = {
            enable = true;
        appendHttpConfig = " limit_req_zone $binary_remote_addr zone=mylimit:10m rate=5r/m; " ;
              virtualHosts = {
                 "mon.domaine" = {
                     forceSSL = true;
                     enableACME = true;
                     root = "/var/www/mon.domaine";
             extraConfig = "limit_req zone=mylimit;";
              };
    

    On peut même avoir le besoin de générer un fichier /etc. Pas de souci, exemple avec fail2ban, on peut générer un fichier /etc/fail2ban/filter.d

        # Defines a filter 
        "fail2ban/filter.d/nginx-py.local".text = pkgs.lib.mkDefault (pkgs.lib.mkAfter ''
          [Definition]
    failregex = ^.* \[error\] \d+#\d+: \*\d+ (\S+ )?\"\S+\" (failed|is not found) \(2\: No such file or directory\), client\: <HOST>, server\: \S*\, request: \"(GET|POST|HEAD) .*$
        '');
      };
    

    Interdit !

    Je ne vais pas rentrer dans le détail, car je suis encore débutant, mais on ne peut pas exécuter ce que l’on veut sous Nix.

    $ touch holalal.sh
    $ echo -e '#!/bin/sh \necho "toto"' >> holalal.sh
    $ chmod +x holalal.sh
    $ ./holalal.sh
    bash: ./holalal.sh: Permission denied
    $ bash holalal.sh 
    toto
    

    Appliqué aux AppImage, eh bien j’ai un peu galéré. Apparemment on lance $appimage-run . Pas de bol pour moi, ça ne passe pas. J’ai testé deux trois un million de trucs à l’aveuge pour le fun (extraire puis ajouter chmod+x, passer par exec, voire par du sudo oh la la pardonnez moi…) Comme Google n’était clairement pas mon ami, j’ai voulu tester d’empaqueter l’AppImage moi-même. C’était la bonne piste! Si j’étais familier avec Nix cela m’aurait pris 2s. Un petit fichier .nix de quelques lignes plus tard, je peux construire cette AppImage et cette fois la lancer.
    Dans de nombreux cas vous trouverez l’ppImage déjà empaquetée.

    Channel

    Vous souvenez vous, Nix propose une version tous les 6 mois. Mais dites-moi… Comment met-on à jour si on lance pas de commande dans Nix et qu’on n’utilise que vi /etc/nixos/configuration.nix ?
    Et là, voilà la vérité révélée : oui on utilise des commandes, et non Nix n’est pas que déclarative.
    (cf par exemple https://nlewo.github.io/nixos-manual-sphinx/installation/upgrading.xml.html )

    # nix-channel --add https://nixos.org/channels/*channel-name* nixos
    # nixos-rebuild switch --upgrade
    

    On peut également spécifier dans la config que l’on veut automatiquement passer sur les nouvelles versions. En attendant cela veut dire que deux fichiers /etc/nixos/configuration.nix ne correspondent pas forcément au même OS!

    Note sur les channels : similairement à Debian, il y a un channel unstable si on veut passer en mode rolling.

    Pour résoudre cette question des channels il y a les Flake. En gros l’idée est de préciser non seulement qu’un paquet est installé mais aussi quelle version.
    https://nixos-and-flakes.thiscute.world/nixos-with-flakes/introduction-to-flakes#nix-flakes-and-classic-nix
    Mais rien n’oblige à utiliser Flake.

    2 wikis et 2000 manuels

    • Deux wikis : un wiki officiel, qui a été suspendu, car il n’était pas super à jour, du coup un wiki non officiel est apparu, puis ils ont remis le wiki officiel :O !!! du coup on a plein de manuels (utilisateur, dev, celui du gestionnaire de paquets Nix…) et deux wikis et on se retrouve à jongler.
    • On a l’impression d’avoir atteint le point où toute tentative d’améliorer ne fait qu’empirer. Je propose « Tools that need a manual to find the manual » ! …
    • Mes premières recherches sur Internet sont simplement désastreuses, je tombe sur plein de versions différentes. Et souvenez-vous que Nix est à la fois un langage, un gestionnaire, un builder, une distribution…
    • Peut-être que des sites pour répertorier , comme https://nixos.org/learn/ peuvent un peu aider…

    xkcd

    Mais à l’heure qu’il est, si Nix a un défaut c’est bien la documentation chaotique.

    Et les autres bombes atomiques?

    Fedora Silverblue propose aussi le retour arrière. Toutes les applications graphiques sont des Flatpak, et les applis dév utilisent le module Toolbox. Cf la présentation par Renault, plutôt historique puis pratique.
    Silverblue semble avoir de larges défis à relever mais pourrait représenter l’avenir de Fedora.

    Côté Open Suse atomic, il y a eu Micro OS (2019), puis Aeon d’abord basé dessus puis devenu projet indépendant pour offir GNOME. (En parallèle le projet Kalpa se développe pour le bureau KDE.) Vous pouvez lire cette revue par LWN. Sur Aeon la méthode préférée d’installation de paquets est encore Flatpak, mais il y a aussi Distrobox.

    Voilà pour ce que je connais, cela mériterait bien plus!

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    •  

    ADSILLH : licence pro Administration et Développement de SI à base de Logiciels Libres et Hybrides

    Après une ouverture en septembre 2016 et neuf promotions, la licence professionnelle ADSILLH (Administrateur et Développeur de Systèmes Informatiques à base de Logiciels Libres et Hybrides) ouvre de nouveau ses portes à l’Université de Bordeaux à la rentrée 2025 !

    Cette licence professionnelle vise à former les étudiants à intégrer des logiciels libres en un ensemble cohérent répondant aux besoins des entreprises, un système d’information complet par exemple, en interopérant au besoin avec des logiciels propriétaires (hybridation). Il s’agit également de s’impliquer dans les communautés de développeurs de logiciels libres, pour remonter ou corriger les bogues, contribuer des fonctionnalités (c’est tout l’objet du projet tutoré).

    C’est une licence pro en un an (donc BAC + 3), elle est ouverte aux L2, DUT/BUT2, BTS, en formation initiale et en alternance, mais aussi en formation continue, reprise d’études et contrat professionnel (on peut faire une VAP — Validation des Acquis Professionnels — pour l’inscription). Des VAE (Validation des Acquis de l’Expérience) sont également possibles.

    Contenu

    • systèmes et réseaux :
      • programmation système,
      • programmation réseau,
      • installation et configuration des systèmes et réseaux ;
    • technologies logicielles :
      • bases de données,
      • développement Web,
      • logiciels de communication ;
    • progiciels CMS/ERP/BI ;
    • sûreté et sécurité ;
    • projet tutoré : contribution à un logiciel libre ;
    • droit et économie des logiciels libres ;
    • anglais ;
    • stage en entreprise.

    Prérequis

    Les prérequis sont l’utilisation d’Unix en général, la programmation de base en Python et en C et une touche d’algorithmie. Il est possible de s’auto‑former sur les éventuels quelques éléments manquants entre l’inscription et la rentrée. Le détail est disponible sur le site de la formation.

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    •  

    Ce fossile est si bien conservé qu’il raconte une scène de vie d’il y a 15 millions d’années

    C’est une découverte suffisamment rare pour qu’elle soit mentionnée : des paléontologues ont découvert des fossiles de poissons dans un état de préservation exceptionnel. Le niveau de détails est tel qu’il a permis de reconstruire une vue d’ensemble de tout un écosystème aquatique datant de 15...

    •  

    Sortie d’AgentJ en 2.1 - Une nouvelle version majeure depuis la 1.6

    AgentJ est une solution anti-spam utilisé pour filtrer et bloquer les messages indésirables (spams) en entrée et en sortie.
    Ce logiciel est une solution sous licence GNU Affero General Public License V3.

    Voici une description générale de ses fonctionnalités :

    • Filtrage du spam : Identifie les messages non sollicités ou suspects (spams) à l'aide d'algorithmes qui analysent le contenu, les adresses d'envoi, et d'autres facteurs.
    • Apprentissage automatique : Utilise des techniques d'apprentissage automatique pour s'adapter aux nouveaux types de spam et améliorer son efficacité au fil du temps.
    • Blocage des adresses : Peut bloquer ou mettre sur liste noire certaines adresses e-mail, domaines, ou adresses IP connues pour envoyer des spams.
    • Authentification humaine : La première fois qu'un nouvel expéditeur vous contacte, un mail de confirmation lui est envoyé pour vérification
    • Rapports et statistiques : Fournis des rapports pour suivre le nombre de spams bloqués, les tendances, et d'autres informations utiles pour les administrateurs.
    • Personnalisation : Permet de définir des règles spécifiques, de créer des listes blanches (whitelist) et noires (blacklist), et d'adapter le niveau de filtrage en fonction des besoins.
    • Gestion multi domaines mail distincts ou miroir.
    • Rapport quotidien pour les utilisateurs qui les informe des mails en attente de déblocage.

    Logo AgentJ
    Cette nouvelle version 2.1 amène son lot d’améliorations, mais elle est surtout marquée par une amélioration majeure : la gestion des mails envoyés / le filtrage de mail en sortie.

    Filtrage de mails en sortie

    Cela permet de gérer l’ensemble du flux de mails sortants.

    Apprentissage des mails sortants

    Cette fonctionnalité permet que, lors d’un envoi de mail par un utilisateur interne, les destinataires (to, cc et cci) soient automatiquement autorisés.
    Nous retrouverons les adresses autorisées comme les adresses actuelles avec comme précision « autorisée par envoi de mail ».

    Paramétrage du taux d’envoi de mail

    L’objectif est de permettre le paramétrage du nombre de mails par heure, par utilisateur. Le paramétrage pourra se faire soit pour le domaine mail, soit pour un groupe d’utilisateur, soit pour un utilisateur.
    Sur un compte utilisateur, il sera indiqué le taux en vigueur et l’usage actuel pour l’utilisateur.

    Alerte sur évènements indésirables

    Cette fonctionnalité permettra de paramétrer un envoi d’alerte à un ou des mails spécifiques.
    Les alertes pourront être envoyées lors des événements suivant :
    • Spam (le niveau considéré comme Spam sera réglable)
    • Virus
    • Dépassement du taux d’envoi

    Recherche de mail

    Nous avons ajouté une recherche de mail avancé pour l’administrateur.

    Recherche mail

    Libération depuis le rapport mail

    Maintenant, il n’est plus nécessaire de se loguer pour libérer un mail depuis le rapport quotidien envoyé par AgentJ un simple clique suffit.

    Amélioration du tableau de bord

    Nous avons amélioré le rendu du tableau de bord des statistiques

    Tableau de bord

    Prévisualisation sécurisée des emails

    Vous pouvez désormais prévisualiser vos emails bloqués avant de décider de les libérer (ou non).

    Prévisualisation mail

    Test de performance

    Nous avons effectué des tests de performance sur un VM avec 4 cœurs et 4 Go de RAM avec les paramétrages par défaut. AgentJ traite 10 000 mails en 11 min. Pour précision, les tests ont été effectués avec l’envoi de mail valides, car ils sont les plus longs en traitement comparé à des spams.

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    •  

    Comment monter son homelab (proxmox)

    Yves Rougy, que l'on ne présente plus, a lancé une nouvelle thématique de vidéos sur l'auto-hébergement / homelab.

    2 vidéos sont sorties dans lesquelles il parle des pré-requis et choix du matériel :

    Puis il enchaine sur proxmox et Incus (qui me fait bien envie!) :

    Des vidéos accessibles, y compris pour les débutants 👍

    Vous n'aimez pas le RSS : abonnez-vous par email 📥
    Vous devriez me suivre sur Twitter : @xhark

    Article original écrit par Mr Xhark publié sur Blogmotion le 14/03/2025 | Un commentaire |
    Attention : l'intégralité de ce billet est protégée par la licence Creative Commons

    Cet article Comment monter son homelab (proxmox) provient de : on Blogmotion.
    •  

    [Tomato] Réinjecter la configuration après un upgrade 🍅

    A chaque mise à jour de firmware de Tomato le process est le même, il est conseillé de ne pas repartir de sa configuration, mais de tout reparamétrer à la main...

    Je vous explique pourquoi et comment faire pour transposer votre configuration (nvram) après une mise à jour de firmware.

    Déjà parce qu'on est des feignants, mais aussi parce que cela n'a rien de passionnant. Et que c'est important de rester sur une version récente pour des questions de sécurité.

    Pourquoi est-ce déconseillé de ré-injecter votre config

    Chaque version de firmware tomato vient avec une liste de paramètres possible, le tout étant stocké en nvram.

    Cela peut poser plusieurs problèmes :

    • paramètre qui n'existe plus (suppression)
    • paramètre qui a changé de nom
    • paramètre qui a changé de valeur possible
    • introduction d'un nouveau paramètre

    Dans le pire des cas le routeur ne démarrera pas, plantera ou aura un fonctionnement difficilement compréhensible.

    Dans le meilleur des cas vous consommerez de l'espace précieux en nvram au fur et à mesure des versions de firmwares que vous installerez.

    Plus vous sautez de versions lors de l'upgrade, plus le risque est important. Et le changelog ne donne pas plus d'information sur les attributs qui changent (malheureusement).

    Rappel du processus de mise à jour

    Admettons que je suis sur la version Tomato 2022.1 et que je veux migrer vers la version 2025.1.

    Avant de faire une mise à jour du firmware de mon FreshTomato, je fais un backup :

    • du fichier de configuration .cfg (cf tutoriel)
    • du fichier de configuration nvram (format texte) nvram_v2021.1.txt

    Ensuite je lance une réinitialisation complète de nvram, puis le routeur reboot.

    Je définis une IP fixe sur ma machine (192.168.1.123/24) puis je me connecte sur http://192.168.1.1 avec l'identifiant "root" et le mot de passe "admin"

    Puis je fais à nouveau un backup du fichier de configuration texte nvram (cf tutoriel) que je nomme :

    nvram_v2022.1_vide.txt

    C'est maintenant le moment de faire la mise à jour firmware de Tomato en v2025.1 à partir du fichier TRX sans oublier de cocher la case :

    " Erase all data in NVRAM. Optional. This is performed between the firmware upload and the reboot."

    Après quelques minutes le routeur revient à la vie, je me connecte sur http://192.168.1.1 avec l'identifiant "root" et le mot de passe "admin".

    Puis je fais à nouveau un backup du fichier de configuration texte nvram (cf tutoriel) que je nomme nvram_v2025.1_vide.txt.

    Nous disposons maintenant de 2 fichiers de configuration usine, une pour chaque version de firmware :

    • nvram_v2021.1_vide.txt
    • nvram_v2025.1_vide.txt

    Comparer les versions

    Maintenant que nous disposons de 2 fichiers de configuration usine, nous allons pouvoir comparer ces 2 fichiers.

    Pour que ce soit plus pratique, je crée une version triée par ordre alphabétique en bash (ma préférence).

    En bash (depuis WSL par exemple, ou directement depuis votre routeur Tomato) :

    cat nvram_v2021.1_vide.txt | sort > nvram_v2021.1_vide_SORTED.txt
    cat nvram_v2025.1_vide.txt | sort > nvram_v2025.1_vide_SORTED.txt

    Aussi possible en PowerShell :

    gc nvram_v2021.1_vide.txt | Sort-Object | sc nvram_v2021.1_vide_SORTED.txt
    gc nvram_v2025.1_vide.txt | Sort-Object | sc nvram_v2025.1_vide_SORTED.txt

    Je compare ces 2 fichiers triés dans WinMerge.

    A noter que le tri est aussi possible directement dans WinMerge : Menu Plugins > appliquer un script > trier les lignes par ordre croissant (je conseille de travailler sur une copie pour garder les fichiers cd conf nvrame non triés).

    Dès que je vois un paramètre qui a été supprimé dans le firmware plus récent, je le répercute dans mon fichier nvram_v2021.1.txt. Même chose pour les nouveaux paramètres, je les ajoute à la main. Je travaille toujours sur le fichier non trié pour modifier, les 2 fichiers triés sont là pour que la comparaison visuelle dans WinMerge soit plus facile.

    Exemple ici avec la suppression du paramètre "log_ftp", que je supprime également dans ma configuration perso s'il était également présent.

    Je dispose maintenant d'un nouveau fichier nvram tout beau tout propre, prêt à être injecté dans le routeur : nvram_2025.1.txt.

    Script d'injection du nouveau fichier nvram

    Je copie mon nouveau fichier nvram_2025.1.txt dans le /tmp du routeur via FTP (activez-le avant) ou directement avec vi en copier/coller.

    Puis j'utilise ce code bash pour injecter la nouvelle configuration nvram :

    #!/bin/sh
    input="/tmp/nvram_injected.txt"
    while IFS= read -r line
    do
    nvram set "$line"
    done < "$input"

    Si tout s'est bien passé, on valide la nouvelle configuration :

    nvram commit && reboot

    Patientez plusieurs minutes jusqu'à ce que le routeur redémarre. Si ce n'est pas le cas c'est que vous avez flingué quelque chose.

    Commandes utiles

    Si vous avez quelques paramètres à retirer et ne souhaitez pas réinjecter toute la nvram, procédez ainsi :

    nvram unset nom_du_parametre1
    nvram unset nom_du_parametre2
    nvram unset nom_du_parametre3
    nvram commit && reboot
    

    C'est un peu le même principe que chez Cisco, la configuration est lue au boot.

    Conclusion

    Et voilà ! Merci à ceux qui attendaient cet article depuis 2022 et qui se reconnaitront 🙂

    De mon côté j'utilise un second routeur pour mes tests, cela me permet de voir s'il y a eu des changements importants d'une version de firmware à une autre, sans péter le vrai. Si vous suivez chaque version il y a peu de changement d'une version à une autre, mais ça vaut le coup de vérifier (regardez les changelog de FreshTomato).

    Enfin : gardez toujours la nvram configuration usine de votre version de firmware actuelle, cela vous évitera de faire un reset configuration avant l'upgrade...

    Vous n'aimez pas le RSS : abonnez-vous par email 📥
    Vous devriez me suivre sur Twitter : @xhark

    Article original écrit par Mr Xhark publié sur Blogmotion le 09/03/2025 | Un commentaire |
    Attention : l'intégralité de ce billet est protégée par la licence Creative Commons

    Cet article [Tomato] Réinjecter la configuration après un upgrade 🍅 provient de : on Blogmotion.
    •  

    Comment distribuer des connexions web 🍌 (load balancer)

    Et si tous les SysAdmins étaient tous des imposteurs ? C'est la question à laquelle tente de répondre Thomas...

    Plus sérieusement, il aborde l'architecture d'une application web, la répartition de charge et la scalabilité (horizontale et verticale) :

    La vidéo est plutôt très bien faite, j'adore les animations ! C'est souvent des concepts qu'on apprend sur le tas, alors merci Thomas d'avoir synthétisé tout ça aussi bien 👏

    Vous n'aimez pas le RSS : abonnez-vous par email 📥
    Vous devriez me suivre sur Twitter : @xhark

    Article original écrit par Mr Xhark publié sur Blogmotion le 13/02/2025 | Pas de commentaire |
    Attention : l'intégralité de ce billet est protégée par la licence Creative Commons

    Cet article Comment distribuer des connexions web 🍌 (load balancer) provient de : on Blogmotion.
    •  

    🌱 [Pierre-Henri Gouyon] Effondrement de la biodiversité : pourquoi on a tout faux ! - YouTube

    Pierre-Henri Gouyon est vraiment passionnant !

    Quand il dit qu'il est venu faire une conf il y a 20 ans, je me demande si ce n'est pas la première que j'avais vu de lui.

    Il avait fini par me convaincre de faire un master physique du vivant et de m'intéresser à la biologie. Et ce sans s'adresser à moi directement, un génie donc.

    Les sujets sont passionnants et c'est grand public.
    Permalink

    •  

    Sauvegarder une carte SD/clé USB en image compressée

    Je fais au moins une fois par an une sauvegarde complète de la carte microSD de mon Raspberry Pi avant un changement important : montée de version de Raspberry Pi OS ou de mon logiciel domotique (domoticz, HA étant sur un SSD).

    Ce clone parfait me permet de restaurer la carte exactement dans l'état ou elle était au moment de la sauvegarde.

    HDD Raw Copy Tool (gratuit)

    Étrangement Windows ne permet pas de faire cela facilement, donc je vous partage ce logiciel gratuit qui permet de faire une image compressée d'une clé USB ou d'une carte SD (peu importe son type).

    Vous utilisez peut-être RoadKil's DiskImage qui fonctionne bien mais ne permet pas d'obtenir un fichier compressé en sortie. Il faut alors utiliser 7zip ou équivalent.

    HDD Raw Copy Tool permet nativement de cloner un périphérique vers un autre ou vers un fichier image compressé *.imgc

    Développé par le site hddguru.com il est compatible avec toutes les versions de Windows, existe en version classique ou portable.

    Il est capable de communiquer avec les interfaces suivantes : SATA, IDE, SCSI, SAS, USB et Firewire.

    De mon côté il fonctionne parfaitement avec un lecteur de carte universel USB de marque LDLC.

     

     

    Vous n'aimez pas le RSS : abonnez-vous par email 📥
    Vous devriez me suivre sur Twitter : @xhark

    Article original écrit par Mr Xhark publié sur Blogmotion le 20/01/2025 | Pas de commentaire |
    Attention : l'intégralité de ce billet est protégée par la licence Creative Commons

    Cet article Sauvegarder une carte SD/clé USB en image compressée provient de : on Blogmotion.
    •  

    HWiNFO 8.22

    hwinfo

    HWiNFO 8.22 est un outil très utile capable de fournir de nombreuses informations concernant le PC sur lequel il est installé. I

    The post HWiNFO 8.22 first appeared on Bhmag.
    •  

    [Tomato] Bloquer des IP externes (Shodan, Censys) ⛔

    Depuis plusieurs années j'utilise un routeur Netgear R8000 avec le firmware FreshTomato, un fork du défunt TomatoUSB. Et j'ai eu envie de bloquer les scans de sites publiques comme Shodan ou Censys.

    Mais soyons clair : cela n'augmentera la sécurité et ne diminuera pas le risque de scans/attaques depuis l'extérieur (ce que pourrait faire un fail2ban).

    Cela évite quelques scripts kiddies en cas de grosses vulnérabilités, et puis c'était un petit challenge technique.

    Fonctionnement

    Nous allons injecter des règles dans iptables pour bloquer des listes d'IP v4 publiques correspondant à celles des scanners comme Shodan ou Censys.

    Pour rappel, iptables permet de configurer des règles côté utilisateur afin qu'elles soient injectées dans netfilter côté noyau Linux.

    Ce tutoriel fonctionne avec FreshTomato et potentiellement tous les forks qui s'en rapprochent.

    ipset est une extension d'iptables qui permet de gérer des ensembles d’adresses IP, contrairement aux chaînes iptables classiques. IPset facilite la création de listes d'adresses autorisées et/ou bloquées.

    L'idée est donc de stocker une liste d'adresses IP dans un fichier texte pour ensuite le parser et injecter ces IP pour les bloquer depuis internet (chaine INPUT) :

    # shodan:
    64.226.86.0/24
    64.227.90.0/24
    64.227.107.0/24
    # censys:
    162.142.125.0/24
    167.94.138.0/24
    # etc...
    

    La génération de ce fichier sera abordée dans un autre article afin de ne pas surcharger celui-ci.

    En attendant voici la liste contenant les IP/réseaux de shodan et censys ici :

    ➡télécharger le fichier blocklist shodan/censys

    Merci Arthur pour les listes 😉

    Pré-requis

    Vous aurez besoin d'un espace de stockage persistant : clé USB ou partition /jffs. Dans mon cas j'utilise une clé USB.

    Nous devons activer des modules de filtrage spécifiques dans le noyau, au démarrage du routeur.

    Depuis un terminal SSH, saisissez :

    modprobe -a ip_set xt_set ip_set_hash_ip ip_set_hash_net
    ipset create shodan hash:net

    La 1ʳᵉ ligne active les modules de filtrage par IP et par réseau (subnet) dans le noyau Linux du routeur FreshTomato.

    La 2ᵉ ligne créé un ipset nommé "shodan" que nous alimenterons ensuite par un script à partir de la blocklist fournie avant les pré-requis.

    Important : si vous perdez la connexion SSH c'est qu'un des modules est manquant (voir section "bugs possibles").

    Pour rendre ce paramétrage persistant, allez dans Administration > Scripts puis coller les 2 lignes que vous avez saisies manuellement :

    Comment manipuler un ipset ?

    Voici quelques commandes de base pour comprendre ce que fera le script et éventuellement le déboguer.

    Affiche le contenu de l'ipset "shodan" :

    ipset list shodan

    Vider le contenu de l'ipset "shodan" (sans le supprimer) :

    ipset flush shodan

    Supprimer l'ipset "shodan" (ne doit plus être utilisé par netfilter pour que cela fonctionne) :

    ipset destroy shodan

    Lier l'ipset à une chaine iptables (INPUT)

    Pour bloquer tout ce qui correspond à l'ipset "shodan" dans iptables (chaine INPUT) :

    iptables -I INPUT -m set --match-set shodan src -j DROP

    L'option "-I" permet d'insérer la règle en début de chaine en décalant les règles existantes vers le bas.

    Pourquoi? parce que iptables fonctionne dans cet ordre : la première règle évaluée et qui correspond s'applique au détriment de la suite. Au contraire si nous voulions ajouter la règle en fin de chaine c'est l'option "-A" que nous aurions du utiliser, comme "append".

    Ajout du script d'init

    Lorsque le service "firewall" démarre il va lire la configuration web, nous devons donc préciser l'utilisation de l'ipset "shodan" en blocage.

    Allez dans Administration > Scripts > Firewall puis coller :

    iptables -I INPUT -m set --match-set shodan src -j DROP

    Sauvegardez en cliquant sur le bouton "save".

    Pourquoi ne pas appeler ici le script inject_blocklist_to_iptables.sh ? On s'affranchit de potentielles problématiques de montage/corruption de la clé USB et on évite un souci un crash au démarrage du routeur. On appellera ce script dans la partie "Wan Up".

    Peupler l'ipset avec adresses IP et sous-réseaux

    Afin de comprendre ce que l'on fait, voici un exemple.

    Imaginons que nous voulons ajouter l'IP 12.34.56.78 et le réseau 137.184.13.0/24 dans l'ipset "shodan" pour les bloquer.

    Nous saisissons en SSH :

    ipset -! add shodan "12.34.56.78"
    ipset -! add shodan "137.184.13.0/24"

    La syntaxe "-!" correspond à l'option "-exist", ce qui évite d'avoir une erreur si l'adresse/réseau ajouté est déjà présent dans l'ipset concerné.

    Il est aussi possible de préciser une ip au format CIDR (ex: 12.34.56.78/32) :

    ipset -! add shodan "12.34.56.78/32"

    La prise en compte est immédiate.

    Maintenant que vous avez compris le principe nous allons utiliser le script que j'ai écrit, qui va lire les IP/réseaux à bloquer puis injecter le tout dans iptables.

    Le script

    ➡télécharger inject_blocklist_to_iptables.sh

    Lancez-le d'abord à la main (adaptez le chemin suivant l'emplacement sur la clé USB/JFFS) :

    /tmp/mnt/CLEUSB/scripts/iptables/block_shodan_censys/inject_blocklist_to_iptables.sh

    Le script va injecter la liste des IP à bloquer dans iptables, tout seul comme un grand. Si tout fonctionne nous allons pouvoir le rendre persistant :

    Allez dans Administration > Scripts > Firewall :

    Dans mon cas avec mon chemin cela donne :

    /bin/sh /tmp/mnt/CLEUSB/scripts/iptables/block_shodan_censys/inject_blocklist_to_iptables.sh

    Sauvegardez en cliquant sur le bouton "save".

    A chaque fois que votre routeur va (re)trouver l'accès à internet le script s'exécutera. Si ce n'est pas suffisant pour vous ajouter une exécution au moment de votre choix dans le planificateur via Administration > Scheduler.

    Toutes les 24h semble être une bonne idée, tout cela dépend si votre fichier de liste d'IP est régulièrement mis à jour ou non.

    Voir les règles iptables actives

    Pour afficher toutes les règles de la chaine INPUT :

    iptables -S INPUT

    Pour afficher toutes les règles avec le nombre de paquets qui ont matché sur chaque règle :

    iptables --list --numeric --verbose --line-numbers

    Ou la version courte :

    iptables -L -n -v --line-numbers

    Bugs possibles

    S'il vous manque un des modules noyau j'ai constaté que le routeur part en utilisation CPU proche de 100% et coupe la connexion SSH ouverte dans laquelle vous aurez saisi la commande pour créer l'ipset. C'est pourquoi je vous conseille d'activer les modules à la main en SSH avant de les rendre persistant par script dans l'interface web (pour éviter le plantage du routeur au démarrage...).

    Pour redémarrer le service firewall :

    service firewall restart

    ⚠ Attention : cette commande va recharger uniquement la configuration depuis votre interface web tomato ainsi que les scripts. Tout ce que vous aurez saisi en SSH devra être de nouveau saisi pour que ce soit actif.

    ℹ N'hésitez pas à jeter un œil côté logs (Status > Logs) car le script écrira ses erreurs et informations si vous avez besoin de vérifier des choses. Sous condition que vos logs ne tournent pas trop vite, ou bien que vous ayez activer la journalisation sur une clé USB.

    Conclusion

    Voilà un tutoriel qui pourra servir de base pour d'autres usages. Je n'ai pas parlé d'IPv6 mais c'est à tout à fait possible moyennant un peu d'adaptation.

    J'ai pris le temps d'expliquer comment tout ça fonctionne, en plus de la fourniture du script. N'hésitez pas à me faire un retour ou poser vos questions si vous en avez.

    J'ai regroupé shodan et censys dans le même ipset, parce que c'est plus simple ainsi. Mais vous pouvez faire autant d'ipset qu'il vous en plaira, pensez à dupliquer la dernière ligne du script avec votre fichier *.list

    Gardez en tête que si vous déclarez des subnet entiers dans un ipset de type "hash:ip" iptables va convertir les subnets en IP donc ça se remplira très vite. C'est la raison pour laquelle je suis parti sur les subnets.

    Enfin, par défaut la limite est fixée à 65536 lignes dans chaque ipset. Pour augmenter cette valeur il faudra spécifier l'option maxelem. Mais attention à ne pas surcharger votre routeur !

    Sources utiles :

     

    Vous n'aimez pas le RSS : abonnez-vous par email 📥
    Vous devriez me suivre sur Twitter : @xhark

    Article original écrit par Mr Xhark publié sur Blogmotion le 13/01/2025 | Un commentaire |
    Attention : l'intégralité de ce billet est protégée par la licence Creative Commons

    Cet article [Tomato] Bloquer des IP externes (Shodan, Censys) ⛔ provient de : on Blogmotion.
    •