[{"content":" Contexte Il y a un an et demi, j\u0026rsquo;ai récupéré trois PC Tiny Lenovo et un Raspberry Pi 3+ pour monter un lab personnel. L\u0026rsquo;objectif n\u0026rsquo;était pas d\u0026rsquo;avoir un serveur qui tourne, c\u0026rsquo;était d\u0026rsquo;avoir un environnement où je peux tester, casser et recommencer sans impact.\nLe matériel de départ n\u0026rsquo;était pas en état de marche. Flash BIOS sur le M710q (firmware daté de 2016), réparation des alimentations, remplacement de composants. Ça a commencé avant même d\u0026rsquo;installer le premier OS.\nMatériel Machine Modèle CPU RAM Rôle Node 1 Lenovo M715q AMD PRO 16 Go Nœud Proxmox VE Node 2 Lenovo M715q AMD PRO 16 Go Nœud Proxmox VE Services Lenovo M710q Intel 16 Go Services personnels (Docker) QDevice Raspberry Pi 3+ ARM 1 Go Quorum + VPN + Supervision Architecture Cluster Proxmox VE - Haute disponibilité à 2 nœuds Les deux M715q forment un cluster Proxmox VE. Le problème classique d\u0026rsquo;un cluster à deux nœuds : le split-brain. Si les deux nœuds perdent la communication entre eux, chacun se croit seul survivant et tente de prendre le contrôle, résultat : corruption de données ou arrêt complet.\nSolution retenue : le Raspberry Pi 3+ configuré en QDevice (Corosync Quorum Device). Il sert de tiers arbitre sans héberger de VMs, il ne fait que voter en cas de désaccord entre les deux nœuds. Ça permet d\u0026rsquo;avoir un quorum fonctionnel sans déployer un troisième serveur.\nCe setup est un PoC direct de ce qu\u0026rsquo;on retrouve dans les environnements de production pour les PCA/PRA, comprendre pourquoi le quorum existe et comment le configurer m\u0026rsquo;a plus appris beaucoup.\nPourquoi Proxmox et pas ESXi ?\nJ\u0026rsquo;avais commencé avec ESXi, qui reste plus user-friendly dans son interface, cependant deux raisons m\u0026rsquo;ont poussée à changer :\nLa version disponible était bloquée en 6.7 dû à une carte réseau non compatible avec des versions plus récentes. Le rachat de VMware par Broadcom a changé la donne sur le prix des licences ainsi que les exigences hardwares. ESXi ne sera probablement plus le seul standard de l\u0026rsquo;industrie à moyen terme, d\u0026rsquo;autres prendront le relais (Nutanix, Hyper-V, Proxmox,\u0026hellip;). Autant apprendre Proxmox maintenant. La migration a demandé plus de bidouillage côté carte réseau que je ne l\u0026rsquo;anticipais. Proxmox est moins tolérant qu\u0026rsquo;ESXi sur la configuration réseau de sous réseaux.\nServices personnels - M710q + Docker Le troisième Tiny tourne en standalone avec Docker. Les services actuellement déployés :\nVaultwarden: gestionnaire de mots de passe (compatible Bitwarden) Miniflux: lecteur RSS léger OpenProject: gestion de projets KitchenOwl: gestion des repas et courses Nextcloud: stockage et sync de fichiers (en cours de remise en route) Self-runner GitHub Anciennement déployés (tests) : n8n, WordPress, Ollama + Open WebUI.\nStratégie de backup\nLes points de montage Docker sont sauvegardés automatiquement chaque soir :\nSur un disque dur externe branché localement Sur un VPS Oracle (Always Free) pour avoir une copie hors site Règle 3-2-1 appliquée : 3 copies, 2 supports différents, 1 hors site. En cas de panne du M710q, les services sont redéployables rapidement depuis les sauvegardes.\nAccès distant - WireGuard Le Raspberry Pi héberge un serveur WireGuard. Tous les accès distants au lab passent par ce tunnel VPN. Aucun service n\u0026rsquo;est exposé directement sur internet.\nObservabilité - Stack Grafana La supervision centralisée tourne sur le Raspberry Pi :\nGrafana: dashboards et visualisation Loki: agrégation des logs Promtail: collecte et envoi des logs vers Loki VictoriaMetrics: stockage des métriques (alternative à Prometheus, moins gourmand en ressources sur le Pi) Ce n\u0026rsquo;est pas uniquement pour avoir des dashboards, c\u0026rsquo;est une base concrète pour comprendre l\u0026rsquo;analyse de logs et la corrélation d\u0026rsquo;événements, ce qui est le socle de tout travail SOC ou SIEM.\nInfrastructure as Code — Terraform + Ansible Le déploiement et la configuration du lab sont progressivement migrés vers du code :\nTerraform (provider bpg/proxmox): provisioning des VMs sur le cluster Ansible: configuration des services et gestion de l\u0026rsquo;état des machines Les playbooks et configurations sont versionnés sur GitHub : 👉 GitHub. 👉 Blog\nCe qui est en cours Segmentation réseau — Le switch L3 n\u0026rsquo;est pas encore configuré. L\u0026rsquo;objectif est de segmenter le réseau en VLANs stricts :\nVLAN Usage Management Accès administration Proxmox, SSH Services Services Docker exposés en interne Lab VMs de test isolées DMZ Services potentiellement exposés Le routage inter-VLAN sera assuré par VyOS. Ce chantier est le prérequis au déploiement du projet Wazuh SIEM sur une VM dédiée dans le VLAN Security.\nCe que ce projet m\u0026rsquo;a appris Au-delà de la technique, ce lab m\u0026rsquo;a forcée à prendre des décisions : choisir entre deux solutions qui ont chacune des compromis, gérer une panne sans backup propre la première fois, comprendre pourquoi un service refuse de démarrer plutôt que juste relancer le conteneur.\nC\u0026rsquo;est aussi un environnement qui évolue, il n\u0026rsquo;est jamais \u0026ldquo;terminé\u0026rdquo;, et c\u0026rsquo;est précisément ce qui le rend utile.\nDe plus, la segmentation entre services personnels et VMs de test m\u0026rsquo;évite de casser l\u0026rsquo;usage quotidien à chaque expérimentation, ce que j\u0026rsquo;aurais dû mettre en place bien plus tôt.\n","permalink":"https://blog.ldtr.ovh/projets/homelab/","summary":"Cluster Proxmox VE haute disponibilité, stack d\u0026rsquo;observabilité Grafana/Loki, services Docker et IaC sur matériel récupéré.","title":"HomeLab — Infrastructure"},{"content":"Je trouve un schéma animé plus lisible d\u0026rsquo;un PNG statique pour documenter une architecture, les flux, les relations entre composants, les directions de communication deviennent immédiatement plus clairs.\ndraw.io supporte les animations nativemet, mais l\u0026rsquo;export en GIF ne l\u0026rsquo;est pas. Sous Windows, un ScreenToGIF sufit. Sous Linux, ça demande un peu plus de bidouillage !\nÉtape 1 : Animer un schéma Draw.io Ouvrir le schéma .drawio Sélectionner le ou les éléments à animer Dans la barre latérale droite → onglet \u0026ldquo;Style\u0026rdquo; → activer \u0026ldquo;Animation\u0026rdquo; Dans \u0026ldquo;Properties\u0026rdquo;, configurer : Type d\u0026rsquo;animation (ex : Bounce In, Fade, Flow\u0026hellip;) Durée (ex : 1000ms) Étape 2 : Exporter en SVG Le GIF se génère à partir du SVG — c\u0026rsquo;est le format qui préserve les animations Draw.io.\nFichier → Exporter sous → SVG\nOptions recommandées :\nCocher \u0026ldquo;Inclure une copie du schéma\u0026rdquo; si vous souhaitez pouvoir rééditer Décocher \u0026ldquo;Intégrer les images\u0026rdquo; si le fichier devient trop lourd Étape 3 — Convertir le SVG animé en GIF Aller sur html5animationtogif.com/svg-to-gif et suivre les étapes du site.\nDéfaut connu : le logo du site est ajouté en filigrane en bas à droite du GIF.\nÉtape 4 — Supprimer le filigrane avec GIMP Ouvrir le GIF dans GIMP (Fichier → Ouvrir) GIMP importe chaque frame comme un calque séparé — visible dans Fenêtres → Calques Se rendre sur le calque \u0026ldquo;Arrière Plan\u0026rdquo;: : Sélectionner le calque Outil Rectangle de sélection → sélectionner la zone du logo Édition → Remplir avec la couleur d\u0026rsquo;arrière-plan (pipette sur le fond adjacent pour matcher la couleur) Une fois toutes les frames traitées : Fichier → Exporter sous → choisir .gif → cocher \u0026ldquo;En tant qu\u0026rsquo;animation\u0026rdquo; et \u0026ldquo;Boucle infinie\u0026rdquo; et mettre une durée de 50ms entre les frames → Exporter 💡 Si le fond est uniforme, l\u0026rsquo;outil Clone ou Correction par zones de GIMP donne un résultat plus propre que le remplissage couleur.\nLe GIF obtenu peut être intégré directement dans un README GitHub ou dans un article Hugo via la syntaxe standard :\n![Architecture homelab](schema_architecture_infra.gif)","permalink":"https://blog.ldtr.ovh/posts/draw.io_anim_to_gif/","summary":"Comment ajouter des animations à un schéma Draw.io et le convertir en GIF sous Linux, sans outil propriétaire.","title":"Animer un schéma Draw.io et l'exporter en GIF sous Linux"},{"content":"Sur les modèles MSI récents (gamme Prestige/Modern avec Intel 12th+ Gen), le trackpad peut se figer alétoirement. Ce problème est dû à une mauvaise gestion des interruptions matérielles par le pilote pinctrl_alderlake.\nCorrection des interruptions au boot (GRUB) Le processeur Alder Lake génère des interruptions conflictuelles qui saturent le bus I2C. On force le noyau à ignorer ces interruptions spécifiques.\nModifiez le fichier de configuration du chargeur de démarrage:\nsudo vim /etc/default/grubAjoutez le paramètres pinctrl_alderlake.ignore_interrupts=1 à la ligne des paramètres Linux :\nGRUB_CMDLINE_LINUX=\u0026#34;rhgb quiet pinctrl_alderlake.ignore_interrupts=1\u0026#34;Mettre à jour la configuration de GRUB:\n# Sur Fedora sudo grub2-mkconfig -o /boot/grub2/grub.cfg # Sur Ubuntu/Debian sudo update-grub Règle udev pour la gestion d\u0026rsquo;énergue PCI Certains contrôleurs tentent de passer en mode \u0026ldquo;autosuspend\u0026rdquo;, ce qui déconnecte le périphérique. On crée une règle udev pour forcer l\u0026rsquo;état on.\nCréez le fichier de règle :\nsudo nano /etc/udev/rules.d/99-msi-trackpad.rulesVérifier l\u0026rsquo;ID de votre périphérique :\nlspci -nnAjoutez la configuration suivante avec le bon ID :\nACTION==\u0026#34;add\u0026#34;, SUBSYSTEM==\u0026#34;pci\u0026#34;, ATTR{vendor}==\u0026#34;0x10de\u0026#34;, ATTR{device}==\u0026#34;0x25a9\u0026#34;, ATTR{power/control}=\u0026#34;on\u0026#34;Appliquez la règle sans redémarrer :\nsudo udevadm control --reload-rules sudo udevadm triggerAnalyse de la cause racine Le problème survient lors de la négociation entre le contrôleur d\u0026rsquo;interruptions du processeur et le firmware ACPI et le firmware ACPI du MSI. L\u0026rsquo;option ignore_interrupts permet d\u0026rsquo;utiliser le mode \u0026ldquo;polling\u0026rdquo; ou de rediriger l\u0026rsquo;interruption vers un canal stable.\nFlux de résolution A[Trackpad figé] --\u0026gt; B{Kernel Parameter} B --\u0026gt;|ignore_interrupts=1| C[Bus I2C stabilisé] C --\u0026gt; D{Udev Rule} D --\u0026gt;|power/control=on| E[Évite l\u0026#39;autosuspend PCI] E --\u0026gt; F[Trackpad opérationnel 100%]","permalink":"https://blog.ldtr.ovh/posts/trackpad-solution-msi/","summary":"Linux · MSI · ACPI · I2C - Correction des blocages aléatoires du trackpad via les paramètres du noyau et les règles \u003ccode\u003eudev\u003c/code\u003e sur Fedora/Ubuntu.","title":"Résoudre les freezes du trackpad sur MSI Prestige (Intel Alder Lake)"},{"content":" Un template Proxmox bien préparé est la base d\u0026rsquo;un déploiement IaC propre. Ce guide couvre les packages indispensables et le nettoyage nécessaire avant de convertir une VM en template.\nPackages indispensables QEMU Guest Agent Permet à Proxmox de remonter les IPs des VMs dans l\u0026rsquo;interface web et d\u0026rsquo;interagir avec le système invité (snapshot cohérents, shutdown propre).\napt install qemu-guest-agent systemctl enable --now qemu-guest-agentCloud-init Permet à la VM de lire la configuration envoyée depuis Terraform au premier démarrage (IP, hostname, clé SSH, utilisateur).\napt install cloud-initSSH Server Requis pour qu\u0026rsquo;Ansible puisse se connecter et configurer la VM.\napt install openssh-server systemctl enable --now sshdPython 3 Requis par Ansible pour exécuter ses modules.\napt install python3sudo Requis pour l\u0026rsquo;élévation de privilèges via Ansible.\napt install sudo Nettoyage avant conversion en template Ces étapes sont obligatoires — sans elles, toutes les VMs clonées depuis ce template auront le même machine-id et les mêmes clés SSH hôtes, ce qui causera des conflits réseau et SSH.\napt update \u0026amp;\u0026amp; apt install -y qemu-guest-agent cloud-init python3 sudo systemctl enable qemu-guest-agent # Supprimer l\u0026#39;utilisateur temporaire si créé pendant l\u0026#39;install deluser --remove-home tpl_adm # Reset du machine-id (doit être unique par VM) truncate -s 0 /etc/machine-id ln -sf /etc/machine-id /var/lib/dbus/machine-id # Supprimer les clés SSH hôtes (régénérées au premier démarrage) rm -f /etc/ssh/ssh_host_* # Reset cloud-init cloud-init clean --logs # Nettoyage apt clean history -c # Éteindre (ne pas redémarrer — convertir en template depuis Proxmox) poweroff ⚠️ Une fois la VM éteinte, convertis-la en template depuis l\u0026rsquo;interface Proxmox : clic droit sur la VM → Convert to Template. Ne la redémarre pas avant — cloud-init se réinitialiserait.\nDépôts Debian 13 (Trixie) Si les miroirs sont manquants ou incorrects :\ncat \u0026lt;\u0026lt; EOF \u0026gt; /etc/apt/sources.list # Miroirs officiels Debian 13 (Trixie) deb http://deb.debian.org/debian/ trixie main contrib non-free non-free-firmware deb-src http://deb.debian.org/debian/ trixie main contrib non-free non-free-firmware # Mises à jour de sécurité deb http://security.debian.org/debian-security trixie-security main contrib non-free non-free-firmware deb-src http://security.debian.org/debian-security trixie-security main contrib non-free non-free-firmware # Mises à jour \u0026#34;updates\u0026#34; deb http://deb.debian.org/debian/ trixie-updates main contrib non-free non-free-firmware deb-src http://deb.debian.org/debian/ trixie-updates main contrib non-free non-free-firmware EOFapt update","permalink":"https://blog.ldtr.ovh/posts/proxmox-template-linux-cloud-init/","summary":"Proxmox · Debian · cloud-init — Préparation d\u0026rsquo;un template VM avec QEMU Guest Agent, cloud-init et SSH pour un déploiement IaC via Terraform et Ansible.","title":"Créer un template Linux cloud-init pour Proxmox"},{"content":"🛡️ Procrastination Killer La procrastination sur Internet est un problème classique : on ouvre YouTube \u0026ldquo;juste deux minutes\u0026rdquo;… et une heure plus tard on est toujours devant l\u0026rsquo;écran.\nPour lutter contre ça, j\u0026rsquo;ai construit Procrastination Killer, une solution Infrastructure-as-Code qui redirige automatiquement les sites distractifs vers une page de rappel à l\u0026rsquo;ordre auto‑hébergée.\nL\u0026rsquo;idée est simple : lorsque vous essayez d\u0026rsquo;ouvrir un site comme YouTube ou Instagram, votre machine est trompée volontairement et vous envoie vers un serveur local qui affiche une page de \u0026ldquo;Reality Check\u0026rdquo;.\nLe tout fonctionne avec :\nDocker Nginx une PKI locale un peu de manipulation DNS 📁 Code source : github.com/cacti-lfs/procrastination-killer\nArchitecture Le système intercepte les requêtes DNS au niveau du système d\u0026rsquo;exploitation et renvoie l\u0026rsquo;adresse d\u0026rsquo;un conteneur Docker local au lieu du vrai site.\nNginx sert ensuite une page HTML de blocage via HTTPS, grâce à une autorité de certification locale.\ngraph LR User(Utilisateur) --\u003e|Tape youtube.com| OS(Fichier Hosts) OS --\u003e|Redirige vers 127.0.0.1| Docker(Conteneur Nginx) Docker --\u003e|Sert index.html| Screen(Page de Blocage) Docker -.-\u003e|Bloque| Real(Vrai YouTube) En pratique :\nVous tapez youtube.com Le fichier /etc/hosts redirige vers 127.0.0.1 Docker reçoit la requête Nginx sert une page locale de rappel à l\u0026rsquo;ordre Stack technique Le projet reste volontairement simple et reproductible.\n🐳 Conteneurisation : Docker \u0026amp; Docker Compose 🌐 Serveur web : Nginx (image Alpine Linux) 🛡️ Sécurité : OpenSSL pour générer une Root CA et des certificats 🌍 Réseau : redirection DNS via /etc/hosts 💻 Frontend : HTML / CSS pour la page de blocage Ce que ce projet démontre Compréhension du fonctionnement DNS et de la résolution de noms Génération et gestion d\u0026rsquo;une PKI locale (Root CA, certificats signés, chaîne de confiance) Déploiement d\u0026rsquo;un service HTTPS auto-signé sans erreur navigateur Utilisation de Docker Compose pour une infrastructure reproductible Approche Infrastructure-as-Code : tout est scriptable et versionné Prérequis Pour faire tourner le projet, il faut :\nLinux (Ubuntu/Debian recommandé) ou WSL2 git docker docker compose Installation :\nsudo apt update sudo apt install -y docker.io docker-compose-plugin git Installation rapide 1. Cloner le projet git clone https://github.com/cacti-lfs/procrastination-killer.git cd procrastination-killer2. Générer l\u0026rsquo;autorité de certification Pour éviter les erreurs HTTPS dans le navigateur, on génère une PKI locale.\nLe script setup.sh automatise toute la génération des certificats.\nchmod +x setup.sh ./setup.sh 3. Importer le certificat dans le navigateur Dernière étape manuelle importante :\nOuvrir Firefox ou Chrome Aller dans les paramètres de certificats Importer le fichier suivant dans les Autorités ./certs/rootCA.pem Cocher \u0026ldquo;Faire confiance pour identifier des sites web\u0026rdquo; 4. Lancer le système docker compose up -d Activation du piège Il faut maintenant rediriger certains domaines vers votre machine locale.\nOn modifie simplement le fichier /etc/hosts.\necho -e \u0026#34;\\n# PROCRASTINATION-KILLER\\n127.0.0.1 youtube.com\\n127.0.0.1 www.youtube.com\\n127.0.0.1 instagram.com\\n127.0.0.1 www.instagram.com\\n127.0.0.1 tiktok.com\u0026#34; | sudo tee -a /etc/hostsÀ partir de ce moment-là, ces sites pointeront vers votre serveur local.\nPersonnalisation Ajouter de nouveaux sites à bloquer Modifier setup.sh dans la section [alt_names] Relancer le script ./setup.sh Ajouter les domaines dans /etc/hosts Redémarrer les conteneurs docker compose restart Modifier la page de blocage La page affichée est un simple fichier HTML :\n./content/index.htmlGrâce au montage de volume Docker, les modifications sont immédiates. Il suffit de rafraîchir la page.\nDifficultés rencontrées Faire accepter le certificat auto-signé par les navigateurs modernes sans déclencher d\u0026rsquo;avertissement de sécurité \u0026ndash; résolu en générant une Root CA importée dans le store du navigateur plutôt qu\u0026rsquo;un certificat self-signed direct Certains sites (YouTube notamment) utilisent HSTS et des connexions persistantes \u0026ndash; la redirection /etc/hosts seule ne suffit pas toujours, il faut vider le cache DNS du navigateur Désactivation Pour désactiver temporairement le système :\nOption 1 : modifier /etc/hosts Commenter les lignes correspondantes :\n#127.0.0.1 youtube.comOption 2 : arrêter le conteneur docker compose stop Conclusion Ce projet est un petit exercice de self‑discipline technique :\nun peu de réseau un peu de sécurité un peu de Docker Mais surtout une manière efficace de reprendre le contrôle de son temps en ligne.\nSi l\u0026rsquo;idée vous plaît, n\u0026rsquo;hésitez pas à forker le projet et à l\u0026rsquo;adapter à votre propre environnement.\nLicence Projet distribué sous licence MIT.\n","permalink":"https://blog.ldtr.ovh/projets/procrastination-killer/","summary":"Docker · Nginx · PKI locale · OpenSSL \u0026ndash; Redirection DNS + HTTPS auto-signé pour bloquer YouTube, Instagram et TikTok.","title":"Procrastination Killer : bloquer les sites distractifs avec Docker, Nginx et une PKI locale"},{"content":" Installation de TrueNAS SCALE et configuration d\u0026rsquo;un partage NFS pour étendre le stockage d\u0026rsquo;un cluster Proxmox.\nInstallation ⚠️ TrueNAS SCALE ne supporte pas Ventoy — graver l\u0026rsquo;ISO directement sur la clef avec Rufus ou dd.\nBooter sur la clef USB Sélectionner Install/Upgrade Choisir le disque d\u0026rsquo;installation du système (dédié — pas un disque de données) Choisir le type d\u0026rsquo;administrateur (option 1 — utilisateur admin) Définir un mot de passe administrateur Choisir le boot EFI : Yes Laisser redémarrer Fixer l\u0026rsquo;adresse IP Depuis le menu d\u0026rsquo;administration local de TrueNAS (console), configure une IP statique sur la carte réseau de gestion.\nLa carte réseau de gestion doit être sur le même VLAN que tes hyperviseurs Proxmox pour que le montage NFS fonctionne.\nL\u0026rsquo;interface web est ensuite accessible sur http://IP_TRUENAS.\nConfiguration de TrueNAS SCALE Langue et localisation System Settings \u0026gt; General \u0026gt; Localization\nDNS System \u0026gt; Network \u0026gt; Global Configuration\nCréer le volume de stockage Storage \u0026gt; Create Pool\nExemple de configuration RAIDZ1 sur 4 disques :\nParamètre Valeur Nom V1 Layout RAIDZ1 Disques 4 × HDD Capacité utile ~75% de la capacité brute RAIDZ1 = équivalent RAID 5 — un disque de parité, bonne capacité utile, protège contre la perte d\u0026rsquo;un disque.\nCréer un dataset Datasets \u0026gt; V1 \u0026gt; Add Dataset\nNom : pve-nfs Type : Generic Configurer le partage NFS Shares \u0026gt; Unix (NFS) \u0026gt; Add\nParamètre Valeur Path /mnt/V1/pve-nfs Maproot User root Maproot Group wheel Authorized Hosts IP du réseau Proxmox (ex: 192.168.2.0/24) Connecter Proxmox au TrueNAS Depuis l\u0026rsquo;interface Proxmox :\nDatacenter \u0026gt; Storage \u0026gt; Add \u0026gt; NFS\nParamètre Valeur ID truenas-nfs Server IP de TrueNAS Export /mnt/V1/pve-nfs Content Disk image, ISO, Backup User pve-cluster Le stockage NFS apparaît ensuite dans tous les nodes du cluster Proxmox — c\u0026rsquo;est ce qui permet de migrer des VMs à chaud entre nodes (live migration).\n","permalink":"https://blog.ldtr.ovh/posts/truenas-scale-installation-proxmox-nfs/","summary":"TrueNAS SCALE · Proxmox · NFS \u0026ndash; Stockage NAS avec RAIDZ1, partage NFS et intégration comme datastore Proxmox pour les VMs et ISOs.","title":"TrueNAS SCALE : installation et connexion à Proxmox via NFS"},{"content":" Les rôles FSMO (Flexible Single Master Operations) sont des rôles uniques dans une forêt ou un domaine AD. Ce mémo couvre leur transfert via trois méthodes : interface graphique, ntdsutil.exe et PowerShell.\nLes 5 rôles FSMO Rôle Portée Rôle Contrôleur de schéma Forêt Gère les modifications du schéma AD Maître des noms de domaine Forêt Gère l\u0026rsquo;ajout/suppression de domaines PDC Emulator Domaine Synchronisation de l\u0026rsquo;heure, mots de passe, GPO Gestionnaire du pool RID Domaine Attribution des SID aux nouveaux objets Maître d\u0026rsquo;infrastructure Domaine Cohérence des références inter-domaines Vérifier la répartition actuelle netdom query FSMOExemple de sortie avec tous les rôles sur un seul DC :\nContrôleur de schéma SRV-AD-01.infra.lan Maître des noms de domaine SRV-AD-01.infra.lan Contrôleur domaine princip. SRV-AD-01.infra.lan Gestionnaire du pool RID SRV-AD-01.infra.lan Maître d\u0026#39;infrastructure SRV-AD-01.infra.lan L\u0026#39;opération s\u0026#39;est bien déroulée. Méthode 1 \u0026ndash; Interface graphique Ouvrir dsa.msc (Utilisateurs et ordinateurs Active Directory) Clic droit sur le domaine → Modifier le contrôleur de domaine Sélectionner le DC cible Clic droit sur le domaine → Maîtres d\u0026rsquo;opérations\u0026hellip; Cliquer sur Modifier puis confirmer le transfert Méthode 2 \u0026ndash; PowerShell Transférer un rôle spécifique :\nMove-ADDirectoryServerOperationMasterRole -Identity \u0026#34;SRV-AD-02\u0026#34; -OperationMasterRole PDCEmulatorTransférer plusieurs rôles en une commande :\nMove-ADDirectoryServerOperationMasterRole -Identity \u0026#34;SRV-AD-02\u0026#34; ` -OperationMasterRole PDCEmulator, RIDMaster, InfrastructureMasterValeurs possibles pour -OperationMasterRole :\nValeur Rôle SchemaMaster Contrôleur de schéma DomainNamingMaster Maître des noms de domaine PDCEmulator Émulateur PDC RIDMaster Gestionnaire du pool RID InfrastructureMaster Maître d\u0026rsquo;infrastructure Méthode 3 \u0026ndash; ntdsutil.exe ntdsutil.exe \u0026gt; roles \u0026gt; connections \u0026gt; connect to server SRV-AD-02 \u0026gt; quit \u0026gt; transfer PDC \u0026gt; quit \u0026gt; quit Vérification après transfert netdom query FSMOExemple après transfert partiel (PDC, RID et Infrastructure vers SRV-AD-02) :\nContrôleur de schéma SRV-AD-01.infra.lan Maître des noms de domaine SRV-AD-01.infra.lan Contrôleur domaine princip. SRV-AD-02.infra.lan Gestionnaire du pool RID SRV-AD-02.infra.lan Maître d\u0026#39;infrastructure SRV-AD-02.infra.lan L\u0026#39;opération s\u0026#39;est bien déroulée. ⚠️ Transfert vs Saisie (Seize) \u0026ndash; le transfert est une opération planifiée et coordonnée entre les deux DCs. La saisie (ntdsutil \u0026gt; seize) est une opération d\u0026rsquo;urgence quand le DC source est irrécupérable \u0026ndash; elle laisse l\u0026rsquo;ancien DC dans un état incohérent et ne doit pas être utilisée si le DC source est encore accessible.\n","permalink":"https://blog.ldtr.ovh/posts/active-directory-transfert-fsmo/","summary":"Windows Server · Active Directory \u0026ndash; Transfert des rôles FSMO en GUI, ntdsutil et PowerShell, avec vérification via netdom.","title":"Active Directory : transférer les rôles FSMO"},{"content":" Gérer Active Directory en CLI plutôt que via l\u0026rsquo;interface graphique permet d\u0026rsquo;automatiser et de scripter les opérations répétitives. Ce mémo couvre les outils historiques de Windows Server : csvde, dsadd, dsmod, dsget et ldifde.\nImport en masse avec csvde csvde permet d\u0026rsquo;importer des objets AD depuis un fichier CSV.\nFormat du fichier CSV :\ndn,objectClass,givenName,sn,sAMAccountName,userAccountControl \u0026#34;CN=Jean DUPONT,OU=Utilisateurs,DC=infra,DC=lan\u0026#34;,user,Jean,DUPONT,Jean.DUPONT,514 \u0026#34;CN=John DOE,OU=Utilisateurs,DC=infra,DC=lan\u0026#34;,user,John,DOE,John.DOE,514 \u0026#34;CN=Jane DOE,OU=Utilisateurs,DC=infra,DC=lan\u0026#34;,user,Jane,DOE,Jane.DOE,514 userAccountControl: 514 = compte désactivé. Utilise 512 pour un compte actif.\nImport :\ncsvde -i -f \u0026#34;C:\\temp\\import_users.csv\u0026#34; Création d\u0026rsquo;objets avec dsadd Créer un groupe dsadd group \u0026#34;CN=MonGroupe,OU=Utilisateurs,DC=infra,DC=lan\u0026#34; -samid MonGroupe -secgrp yes -scope g Paramètre Description -samid Nom SAM du groupe -secgrp yes Groupe de sécurité (sinon distribution) -scope g Étendue globale (g = global, l = local, u = universel) Créer un ordinateur dsadd computer \u0026#34;CN=DESKTOPXX,OU=Postes,DC=infra,DC=lan\u0026#34; Gestion des appartenances avec dsmod Ajouter un utilisateur à un groupe dsmod group \u0026#34;CN=MonGroupe,OU=Utilisateurs,DC=infra,DC=lan\u0026#34; -addmbr \u0026#34;CN=Jean DUPONT,OU=Utilisateurs,DC=infra,DC=lan\u0026#34;Retirer un utilisateur d\u0026rsquo;un groupe dsmod group \u0026#34;CN=MonGroupe,OU=Utilisateurs,DC=infra,DC=lan\u0026#34; -rmmbr \u0026#34;CN=Jean DUPONT,OU=Utilisateurs,DC=infra,DC=lan\u0026#34; Consultation des appartenances avec dsget Membres directs d\u0026rsquo;un groupe dsget group \u0026#34;CN=MonGroupe,OU=Utilisateurs,DC=infra,DC=lan\u0026#34; -membersMembres récursifs (groupes imbriqués inclus) dsget group \u0026#34;CN=MonGroupe,OU=Utilisateurs,DC=infra,DC=lan\u0026#34; -members -expandGroupes d\u0026rsquo;appartenance d\u0026rsquo;un utilisateur dsget user \u0026#34;CN=Jane DOE,OU=Utilisateurs,DC=infra,DC=lan\u0026#34; -memberofAppartenance complète récursive dsget user \u0026#34;CN=Jane DOE,OU=Utilisateurs,DC=infra,DC=lan\u0026#34; -memberof -expand Modification en lot avec ldifde ldifde permet des modifications complexes en une seule opération via un fichier .ldf.\nExemple \u0026ndash; ajouter deux membres et en supprimer un dans le même groupe :\ndn: CN=MonGroupe,OU=Utilisateurs,DC=infra,DC=lan changetype: modify add: member member: CN=John DOE,OU=Utilisateurs,DC=infra,DC=lan member: CN=Medhi TUNPEUX,OU=Utilisateurs,DC=infra,DC=lan - dn: CN=MonGroupe,OU=Utilisateurs,DC=infra,DC=lan changetype: modify delete: member member: CN=Jean DUPONT,OU=Utilisateurs,DC=infra,DC=lan - ⚠️ Le tiret - en fin de bloc et la ligne vide entre les blocs sont obligatoires, sans eux, ldifde retourne une erreur de parsing.\nImport du fichier :\nldifde -i -f \u0026#34;C:\\temp\\GroupModif.ldf\u0026#34; -vLe flag -v active le mode verbose \u0026ndash; utile pour déboguer.\nRécapitulatif des outils Outil Usage principal csvde Import/export d\u0026rsquo;objets AD depuis un CSV dsadd Création d\u0026rsquo;objets (groupes, utilisateurs, ordinateurs) dsmod Modification d\u0026rsquo;objets existants dsget Consultation des attributs et appartenances ldifde Import/export et modifications complexes au format LDIF 💡 Pour les environnements modernes, ces outils sont avantageusement remplacés par les cmdlets PowerShell du module ActiveDirectory (New-ADUser, Add-ADGroupMember, etc.) qui offrent plus de flexibilité et une meilleure gestion des erreurs.\n","permalink":"https://blog.ldtr.ovh/posts/active-directory-cli-csvde-dsadd-ldifde/","summary":"Windows Server · Active Directory \u0026ndash; Gestion des objets AD en ligne de commande : import CSV, création de groupes et utilisateurs, modification des appartenances avec ldifde.","title":"Active Directory en ligne de commande : csvde, dsadd, dsmod, dsget et ldifde"},{"content":" Installation et configuration d\u0026rsquo;un hyperviseur Proxmox VE sur serveur physique de l\u0026rsquo;installation à la sécurisation SSH en passant par la gestion des utilisateurs et la création d\u0026rsquo;une première VM.\nContexte Proxmox VE est un hyperviseur de type 1 basé sur Debian. Il gère des machines virtuelles (KVM), des conteneurs (LXC), du stockage réseau (Ceph, NFS, iSCSI) et supporte la haute disponibilité (HA) en cluster.\nÉtape 1 \u0026ndash; Installation Préparation du support Utilise Ventoy pour créer une clef USB bootable multi-ISO \u0026ndash; dépose simplement le fichier proxmox-ve.iso sur la clef.\nProcessus d\u0026rsquo;installation Démarre sur la clef USB (menu Boot, souvent F11) Lance l\u0026rsquo;installateur graphique Proxmox Paramètres à renseigner : Paramètre Valeur Disque cible Sélectionne le bon disque Pays / Clavier France / FR Interface réseau Interface physique (ex: eno1) IP de management IP statique de ton choix Gateway ip route show depuis un PC sur le même réseau DNS 1.1.1.1 (Cloudflare) ou 8.8.8.8 FQDN ex: proxmox.lab.local vmbr0 est le bridge Linux créé automatiquement par Proxmox. Il lie l\u0026rsquo;interface physique à l\u0026rsquo;interface virtuelle de l\u0026rsquo;hyperviseur \u0026ndash; c\u0026rsquo;est sur ce bridge que l\u0026rsquo;IP de management est configurée.\nÉtape 2 \u0026ndash; Configuration post-installation Mise à jour Proxmox étant basé sur Debian :\napt update \u0026amp;\u0026amp; apt upgrade -yCréation d\u0026rsquo;utilisateurs nominatifs Évite d\u0026rsquo;utiliser root au quotidien \u0026ndash; crée des comptes dédiés :\n# Création des comptes système adduser user # Ajout dans Proxmox (Realm PAM) pveum user add user@pam # Attribution du rôle Administrateur pveum acl modify / -user user@pam -role Administrator # Ajout au groupe sudo usermod -aG sudo userAccès à l\u0026rsquo;interface web https://\u0026lt;IP_PROXMOX\u0026gt;:8006 Étape 3 \u0026ndash; Sécurisation SSH Changer le port SSH vi /etc/ssh/sshd_config # Modifier : Port 2222systemctl restart sshdConnexion désormais via :\nssh user@IP_PROXMOX -p 2222Authentification par clé SSH uniquement # Génération de la paire de clés (sur ton PC local) ssh-keygen -t ed25519 # Copie de la clé publique sur Proxmox ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@IP_PROXMOX # Test de connexion ssh -A -p 2222 user@IP_PROXMOXUne fois la connexion par clé validée, désactive l\u0026rsquo;authentification par mot de passe :\nvi /etc/ssh/sshd_config# Désactiver l\u0026#39;auth par mot de passe PasswordAuthentication no ChallengeResponseAuthentication no # S\u0026#39;assurer que l\u0026#39;auth par clé est active PubkeyAuthentication yes # Désactiver le login root en SSH PermitRootLogin nosystemctl restart sshd Étape 4 \u0026ndash; Création d\u0026rsquo;une VM Upload de l\u0026rsquo;ISO Via l\u0026rsquo;interface web : Datacenter \u0026gt; proxmox \u0026gt; local \u0026gt; ISO Images \u0026gt; Upload\nParamètres de création VM Paramètre Valeur recommandée Nom Conventionner (ex: 01-WIN-SRV-2025) OS Sélectionne le bon type Machine Q35 (recommandé) Bus disque SATA ou VirtIO SCSI Réseau Bridge vmbr0, modèle VirtIO Snapshot vs Backup :\nSnapshot \u0026ndash; photo instantanée à un instant T, stockée sur le même stockage que la VM. Rapide, idéal avant une modification risquée. Backup \u0026ndash; sauvegarde complète et compressée, idéalement sur un stockage externe. Plus lent mais indépendant de la VM. Récapitulatif sécurité Action Commande Créer un utilisateur système adduser user Ajouter dans Proxmox pveum user add user@pam Donner les droits admin pveum acl modify / -user user@pam -role Administrator Ajouter au groupe sudo usermod -aG sudo user Changer le port SSH Port 2222 dans /etc/ssh/sshd_config Désactiver auth par mot de passe PasswordAuthentication no Désactiver login root SSH PermitRootLogin no ","permalink":"https://blog.ldtr.ovh/posts/proxmox-installation-configuration-securisation/","summary":"Proxmox VE · KVM · Debian \u0026ndash; Installation complète d\u0026rsquo;un hyperviseur de type 1, sécurisation SSH, gestion des utilisateurs PAM et création de VM Windows Server.","title":"Proxmox VE : installation, configuration et sécurisation"},{"content":"Caddy est un reverse proxy moderne qui gère automatiquement les certificats SSL via Let\u0026rsquo;s Encrypt. Ce guide couvre l\u0026rsquo;installation sur RHEL/Fedora via le dépôt COPR officiel.\nInstallation # Ajouter le dépôt officiel Caddy via COPR sudo dnf install \u0026#39;dnf-command(copr)\u0026#39; -y sudo dnf copr enable @caddy/caddy -y # Installer Caddy sudo dnf install caddy -y Configuration du reverse proxy Caddy lit sa configuration depuis /etc/caddy/Caddyfile.\nsudo nano /etc/caddy/CaddyfileExemple minimal pour exposer un service :\nmondomaine.fr { reverse_proxy X.X.X.X:80 } Remplace mondomaine.fr par ton domaine ou sous-domaine Remplace X.X.X.X:80 par l\u0026rsquo;IP et le port du service cible Caddy récupère automatiquement un certificat Let\u0026rsquo;s Encrypt dès que le domaine pointe vers ton serveur.\nPare-feu sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload Démarrage sudo systemctl enable caddy sudo systemctl start caddy sudo systemctl status caddy DNS Assure-toi que ton domaine pointe vers l\u0026rsquo;IP publique du serveur via un enregistrement A (ou CNAME). Caddy ne peut pas obtenir de certificat Let\u0026rsquo;s Encrypt sans résolution DNS fonctionnelle.\nOption : HTTP Basic Auth Protège un service par mot de passe directement dans Caddy.\nGénérer un hash de mot de passe caddy hash-passwordCaddy affiche un hash bcrypt à coller dans le Caddyfile.\nExemple avec Basic Auth mondomaine.fr { basic_auth { \u0026lt;login\u0026gt; $2a$14$IYHLgExjzJ2ovHKyheTWgeGq0/50okLmuojPD5XLw47n1dk65.mzO } reverse_proxy XX.XX.XX.XX:80 } ⚠️ Ne jamais versionner un Caddyfile contenant des hashes ou des secrets dans un repo public. Utilise des variables d\u0026rsquo;environnement ou un fichier séparé non commité.\nLogs et débogage # Logs d\u0026#39;erreur /var/log/caddy/ # Valider la configuration avant de recharger sudo caddy validate --config /etc/caddy/Caddyfile # Reformater le Caddyfile (indentation, alignement) sudo caddy fmt --overwrite /etc/caddy/Caddyfile # Recharger sans redémarrer le service sudo systemctl reload caddy","permalink":"https://blog.ldtr.ovh/posts/installation-caddy-rhel/","summary":"Caddy · RHEL/Fedora · COPR \u0026ndash; Reverse proxy avec HTTPS automatique via Let\u0026rsquo;s Encrypt, HTTP Basic Auth et firewalld.","title":"Installer Caddy sur RHEL/Fedora comme reverse proxy"},{"content":"OpenCVE est une plateforme open source de surveillance des CVE. Elle agrège les données du NVD et permet de s\u0026rsquo;abonner à des alertes par vendor ou produit. Pas d\u0026rsquo;agent, tout passe par API \u0026ndash; l\u0026rsquo;abonnement aux alertes est manuel par produit.\n📎 Repo GitHub : github.com/opencve/opencve 📎 Documentation officielle : docs.opencve.io\nLimites à connaître avant de déployer Pas d\u0026rsquo;agent de découverte \u0026ndash; OpenCVE ne détecte pas automatiquement les services installés sur tes serveurs Pas d\u0026rsquo;intégration ITSM native \u0026ndash; pas de lien automatique avec GLPI pour récupérer l\u0026rsquo;inventaire et souscrire aux bonnes alertes Les abonnements aux alertes CVE sont manuels \u0026ndash; tu souscrits par vendor/produit depuis l\u0026rsquo;interface Déploiement avec Docker Prérequis Docker et Docker Compose installés Accès internet pour télécharger les images Cloner le repo git clone https://github.com/opencve/opencve-docker.git cd opencve-dockerConfiguration cp ./conf/opencve.cfg.example ./conf/opencve.cfg nano ./conf/opencve.cfgParamètres à modifier :\nParamètre Description server_name Nom ou IP du serveur secret_key Clé secrète aléatoire (génère avec openssl rand -hex 32) smtp_server Serveur mail pour les alertes (optionnel) Build et démarrage # Construire les images docker compose build # Démarrer les services principaux docker compose up -d postgres redis webserver celery_workerInitialisation de la base de données docker exec -it webserver opencve upgrade-dbImport des données CVE docker exec -it webserver opencve import-data ⚠️ Cette étape importe l\u0026rsquo;ensemble des données NVD\nCréation du compte administrateur docker exec -it webserver opencve create-user login login@example.com --adminDémarrer le scheduler d\u0026rsquo;alertes docker compose up -d celery_beatAccès à l\u0026rsquo;interface http://XX.XX.XX.XX:8000 Abonnement aux alertes CVE Une fois connecté, va dans Vendors \u0026amp; Products (CPE) et recherche les vendors/produits que tu veux surveiller (ex: nginx, openssh, linux_kernel).\nOpenCVE t\u0026rsquo;enverra une alerte dès qu\u0026rsquo;une CVE est publiée ou mise à jour pour les produits auxquels tu es abonné.\n","permalink":"https://blog.ldtr.ovh/posts/opencve-veille-vulnerabilites/","summary":"OpenCVE · Docker · CVE \u0026ndash; Plateforme de veille sur les vulnérabilités déployée en conteneur, avec import des données NVD et alertes par produit.","title":"Veille proactive des vulnérabilités avec OpenCVE"},{"content":"Mise en place de la supervision d\u0026rsquo;un switch Cisco via SNMP, avec SNMP Exporter comme passerelle vers Prometheus.\nConfiguration SNMP sur le switch Cisco conf t snmp-server community public RO snmp-server community private RW snmp-server host 172.16.96.50 version 2c public exit ⚠️ Les communautés public et private sont des valeurs par défaut connues \u0026ndash; en production, utilise des noms de communauté personnalisés et restreins les accès SNMP à des hôtes spécifiques via une ACL.\nInstallation de SNMP Exporter wget https://github.com/prometheus/snmp_exporter/releases/download/v0.28.0/snmp_exporter-0.28.0.linux-amd64.tar.gz tar -xvzf snmp_exporter-0.28.0.linux-amd64.tar.gz cd snmp_exporter-0.28.0.linux-amd64 ./snmp_exporterVérification :\ncurl http://localhost:9116/metrics Configuration de SNMP Exporter pour Cisco Le fichier snmp.yml définit les OIDs à collecter. Sauvegarde l\u0026rsquo;original avant modification :\ncp snmp.yml snmp.bak sudo nano snmp.ymlcisco_ios: walk: - 1.3.6.1.2.1.2.2.1.10 # ifInOctets -- trafic entrant par interface - 1.3.6.1.2.1.2.2.1.16 # ifOutOctets -- trafic sortant par interface - 1.3.6.1.2.1.2.2.1.14 # ifInErrors -- erreurs entrantes - 1.3.6.1.2.1.2.2.1.20 # ifOutErrors -- erreurs sortantes - 1.3.6.1.4.1.9.2.1.56 # Cisco CPU Usage version: 2c auth: community: \u0026#34;public\u0026#34; target: \u0026#34;172.16.96.115\u0026#34; Configuration de Prometheus Dans prometheus.yml, ajoute le job de scrape pour SNMP Exporter :\nscrape_configs: - job_name: \u0026#39;snmp\u0026#39; static_configs: - targets: [\u0026#39;172.16.96.115\u0026#39;] # IP du switch Cisco metrics_path: /snmp params: module: [cisco_ios] relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instanceLe relabel_config permet à Prometheus de passer l\u0026rsquo;IP du switch comme paramètre target à SNMP Exporter plutôt que d\u0026rsquo;essayer de scraper le switch directement.\nFlux de données graph LR Cisco[Switch Cisco\\n172.16.96.115] --\u003e|SNMP v2c| Exporter[SNMP Exporter\\n:9116] Exporter --\u003e|métriques HTTP| Prometheus[Prometheus\\n:9090] Prometheus --\u003e Grafana[Grafana] ","permalink":"https://blog.ldtr.ovh/posts/cisco-snmp-prometheus/","summary":"Cisco · SNMP · Prometheus · SNMP Exporter \u0026ndash; Collecte de métriques réseau (interfaces, CPU, erreurs) depuis un switch Cisco vers Prometheus.","title":"Superviser un switch Cisco avec SNMP Exporter et Prometheus"},{"content":"Mémo de référence pour la configuration d\u0026rsquo;un switch HPE 5140 PoE sous Comware.\nModes de fonctionnement Mode Utilisateur Accès aux commandes de base \u0026ndash; visualisation et état des interfaces.\n\u0026lt;HPE\u0026gt; display current-configurationMode Privilégié Accès à la configuration complète du switch.\n\u0026lt;HPE\u0026gt; system-view [HPE]Raccourci :\n\u0026lt;HPE\u0026gt; sys Configuration de base Renommer le switch [HPE] sysname Nom_SwitchSauvegarder la configuration [Nom_Switch] save Gestion des VLANs Créer un VLAN [Nom_Switch] vlan 10 [Nom_Switch] name Gestion [Nom_Switch] description \u0026#34;Gestion des switchs\u0026#34; [Nom_Switch] quitAttribuer une IP à une interface VLAN [Nom_Switch] interface Vlan-interface 10 [Nom_Switch] ip address 192.168.2.2 255.255.255.0Configurer la passerelle par défaut [Nom_Switch] ip route-static 0.0.0.0 0.0.0.0 192.168.2.1 Paramètre Explication 0.0.0.0 0.0.0.0 Adresse et masque de destination (toutes destinations) 192.168.2.1 Adresse IP de la passerelle Assigner des ports à un VLAN Port Access (un seul VLAN, trames non taguées) :\n[Nom_Switch] interface G1/0/1 [Nom_Switch-GigabitEthernet1/0/1] port access vlan 10 [Nom_Switch-GigabitEthernet1/0/1] quitPort Trunk (plusieurs VLANs, trames taguées) :\n[Nom_Switch] interface G1/0/1 [Nom_Switch-GigabitEthernet1/0/1] port link-type trunk [Nom_Switch-GigabitEthernet1/0/1] port trunk permit vlan 10,20,30 [Nom_Switch-GigabitEthernet1/0/1] quit Caractéristique Trunk Access VLANs transportés Plusieurs Un seul Utilisation typique Lien switch-switch Connexion poste utilisateur Étiquetage Trames taguées Trames non taguées Configurer le PVID Le PVID (Port VLAN ID) marque les trames non taguées entrant sur un port trunk avec le VLAN spécifié. Utile en contexte ToIP : le VLAN Data n\u0026rsquo;est pas tagué, le VLAN voix l\u0026rsquo;est.\n[Nom_Switch] port trunk pvid vlan 30 Gestion des interfaces Éteindre une interface [Nom_Switch] interface G1/0/1 [Nom_Switch] shutdownSupprimer une configuration [Nom_Switch] undo ip address 192.168.2.2 255.255.255.0 [Nom_Switch] undo port trunk permit vlan 10 Diagnostic Configuration active [Nom_Switch] display current-configurationInterfaces actives [Nom_Switch] display interface briefSessions VTY ouvertes [Nom_Switch] display users SNMP Une communauté SNMP définit les droits d\u0026rsquo;accès aux informations du switch via SNMP.\n# Lecture seule [Nom_Switch] snmp-agent community read public # Lecture/écriture [Nom_Switch] snmp-agent community write private SSH [Nom_Switch] user-interface vty 0 4 [Nom_Switch] authentication-mode scheme [Nom_Switch] protocol inbound ssh [Nom_Switch] ssh user admin service-type all authentication-type password [Nom_Switch] public-key create rsa Commande Rôle user-interface vty 0 4 Sélectionne les 5 interfaces VTY authentication-mode scheme Active l\u0026rsquo;authentification centralisée (RADIUS/TACACS+) protocol inbound ssh Autorise SSH uniquement sur ces interfaces ssh user admin ... Crée l\u0026rsquo;utilisateur SSH avec auth par mot de passe public-key create rsa Génère la paire de clés RSA pour SSH ","permalink":"https://blog.ldtr.ovh/posts/hpe-switch-5140-configuration/","summary":"Mémo de configuration d\u0026rsquo;un switch HPE 5140 PoE \u0026ndash; modes opératoires, VLANs, ports trunk/access, SNMP et SSH.","title":"HPE 5140 PoE : configuration de base"},{"content":"Guide d\u0026rsquo;installation de FreshRSS sur une distribution RHEL/Fedora (testé sur RHEL 9 / Fedora). Couvre l\u0026rsquo;installation complète avec Apache, MariaDB, PHP 8.2, SELinux et firewalld.\nMise à jour du système sudo dnf update -y Installation d\u0026rsquo;Apache et PHP # Apache sudo dnf install httpd -y sudo systemctl start httpd sudo systemctl enable httpd # PHP et modules requis par FreshRSS sudo dnf install php php-mysqli php-xml php-json php-mbstring php-curl -y Installation de MariaDB sudo dnf install mariadb-server -y sudo systemctl start mariadb sudo systemctl enable mariadb # Sécurisation interactive (définir mot de passe root, supprimer anonymous users...) sudo mysql_secure_installation Création de la base de données sudo mysql -u root -p CREATE DATABASE freshrss; CREATE USER \u0026#39;freshrssuser\u0026#39;@\u0026#39;localhost\u0026#39; IDENTIFIED BY \u0026#39;motdepassefort\u0026#39;; GRANT ALL PRIVILEGES ON freshrss.* TO \u0026#39;freshrssuser\u0026#39;@\u0026#39;localhost\u0026#39;; FLUSH PRIVILEGES; EXIT; Téléchargement de FreshRSS cd /var/www/html/ git clone https://github.com/FreshRSS/FreshRSS sudo chown -R apache:apache freshrss Configuration Apache Crée le virtualhost /etc/httpd/conf.d/freshrss.conf :\n\u0026lt;VirtualHost *:80\u0026gt; DocumentRoot \u0026#34;/var/www/html/freshrss\u0026#34; ServerName localhost \u0026lt;Directory \u0026#34;/var/www/html/freshrss\u0026#34;\u0026gt; AllowOverride All Require all granted \u0026lt;/Directory\u0026gt; \u0026lt;/VirtualHost\u0026gt; Pare-feu sudo firewall-cmd --zone=public --add-port=80/tcp --permanent sudo firewall-cmd --zone=public --add-port=443/tcp --permanent sudo firewall-cmd --reload SELinux sudo semanage port -a -t http_port_t -p tcp 80 sudo semanage port -a -t http_port_t -p tcp 443 sudo systemctl restart httpd ⚠️ Si Apache ne peut toujours pas accéder aux fichiers, SELinux bloque probablement les accès réseau ou fichiers. Solution temporaire pour déboguer :\nsudo setenforce 0En production, utilise audit2allow pour générer des règles SELinux correctes plutôt que de désactiver SELinux.\nMise à jour de PHP vers 8.2 FreshRSS requiert PHP \u0026gt;= 8.1. RHEL 9 livre PHP 8.0 par défaut \u0026ndash; il faut passer par le dépôt Remi :\n# Ajouter le dépôt Remi sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm -y # Activer PHP 8.2 sudo dnf module reset php sudo dnf module enable php:remi-8.2 # Installer PHP 8.2 sudo dnf install php php-cli php-pdo php-fpm php-json php-mbstring -y Installation via l\u0026rsquo;interface web Rends-toi sur http://adresse_ip et suis l\u0026rsquo;assistant d\u0026rsquo;installation. Renseigne les informations de la base de données créée précédemment.\nChoix de la langue Vérification des dépendances et composants nécessaires : Configuration de la base de données Configuration générale la dernière étape étant le lancement de l\u0026rsquo;installation\nConfiguration de l\u0026rsquo;API mobile Dans FreshRSS → Paramètres → Authentification : configure l\u0026rsquo;accès par API Dans FreshRSS → Paramètres → Profil : un mot de passe API distinct de ton mot de passe principal.\nL\u0026rsquo;URL de l\u0026rsquo;API Google Reader compatible :\nhttps://freshrss.example.net/api/greader.phpApplications compatibles Plateforme Application Licence Android Readrops Libre Android Capy Reader Libre Android FeedMe Propriétaire Linux Newsboat Libre Linux FeedReader Libre macOS / iOS Vienna RSS Libre macOS / iOS Fluent Reader Lite Libre macOS / iOS Reeder Commercial Firefox FreshRSS-Notify Libre ","permalink":"https://blog.ldtr.ovh/posts/installation-freshrss-rhel/","summary":"FreshRSS · Apache · MariaDB · PHP 8.2 \u0026ndash; Installation sur RHEL/Fedora avec configuration SELinux et firewalld incluse.","title":"Installer FreshRSS sur RHEL/Fedora avec Apache et MariaDB"},{"content":"Script PowerShell pour créer des comptes utilisateurs dans Active Directory en masse à partir d\u0026rsquo;un fichier CSV. Inclut la vérification des OUs, la détection des doublons et la gestion des dates d\u0026rsquo;expiration.\nFormat du fichier CSV Le fichier C:\\temp\\import.csv doit utiliser ; comme délimiteur et contenir les colonnes suivantes :\nColonne Description Prenom Prénom de l\u0026rsquo;utilisateur Nom Nom de famille Service Nom de l\u0026rsquo;OU cible (doit exister dans l\u0026rsquo;AD) DateIn Date d\u0026rsquo;entrée (format dd/MM/yyyy) DateOut Date d\u0026rsquo;expiration du compte (format dd/MM/yyyy) Tel Numéro de téléphone Script Import-Module ActiveDirectory Import-Module \u0026#39;Microsoft.PowerShell.Security\u0026#39; $users = Import-Csv -Delimiter \u0026#34;;\u0026#34; -Path \u0026#34;C:\\temp\\import.csv\u0026#34; # Liste les utilisateurs existants avant import Get-ADUser -Filter * | Select-Object Surname, GivenName, Name, DistinguishedName, SamAccountName, Mail, Enabled foreach ($user in $users) { $fname = $user.Prenom $lname = $user.Nom $login = ($fname.Substring(0,1) + $lname).ToLower() $password = \u0026#34;P@ssword59\u0026#34; $service = $user.Service $dateOut = $user.DateOut $tel = $user.Tel $UO = \u0026#34;OU=$service,OU=Services,DC=bagdad,DC=lan\u0026#34; # Vérification de l\u0026#39;existence de l\u0026#39;OU if (-Not (Get-ADOrganizationalUnit -Filter \u0026#34;DistinguishedName -eq \u0026#39;$UO\u0026#39;\u0026#34;)) { Write-Warning \u0026#34;L\u0026#39;OU $UO n\u0026#39;existe pas. L\u0026#39;utilisateur $login sera ignoré.\u0026#34; continue } Write-Host \u0026#34;Vérification de la présence de l\u0026#39;utilisateur : $login dans l\u0026#39;AD\u0026#34; $existingUser = Get-ADUser -Filter \u0026#34;SamAccountName -eq \u0026#39;$login\u0026#39;\u0026#34; -SearchBase \u0026#34;DC=bagdad,DC=lan\u0026#34; if ($existingUser) { Write-Host \u0026#34;$login existe déjà dans l\u0026#39;Active Directory. Aucune création.\u0026#34; -ForegroundColor Yellow } else { # Validation de la date d\u0026#39;expiration try { $expirationDate = [datetime]::ParseExact($dateOut, \u0026#34;dd/MM/yyyy\u0026#34;, $null) } catch { Write-Warning \u0026#34;La date d\u0026#39;expiration $dateOut pour $fname $lname est invalide. Skipping...\u0026#34; continue } # Création du compte try { New-ADUser ` -Name \u0026#34;$fname $lname\u0026#34; ` -SamAccountName $login ` -UserPrincipalName \u0026#34;$login@bagdadmedilab.fr\u0026#34; ` -DisplayName \u0026#34;$lname, $fname\u0026#34; ` -GivenName $fname ` -Surname $lname ` -AccountPassword (ConvertTo-SecureString $password -AsPlainText -Force) ` -Path $UO ` -OfficePhone $tel ` -ChangePasswordAtLogon $true ` -Enabled $true ` -Description \u0026#34;Date d\u0026#39;entrée : $($user.DateIn)\u0026#34; ` -AccountExpirationDate $expirationDate Write-Host \u0026#34;Utilisateur $login ($fname $lname) ajouté avec succès.\u0026#34; -ForegroundColor Green } catch { Write-Warning \u0026#34;Erreur lors de la création de $login : $_\u0026#34; } } } Explication ligne par ligne Chargement des modules Import-Module ActiveDirectory Import-Module \u0026#39;Microsoft.PowerShell.Security\u0026#39;Charge les modules nécessaires \u0026ndash; AD pour la gestion des comptes, Security pour la manipulation des mots de passe.\nImport du CSV $users = Import-Csv -Delimiter \u0026#34;;\u0026#34; -Path \u0026#34;C:\\temp\\import.csv\u0026#34;Importe la liste des utilisateurs depuis le CSV en utilisant ; comme séparateur de colonnes.\nConstruction des variables $login = ($fname.Substring(0,1) + $lname).ToLower()Génère l\u0026rsquo;identifiant de connexion automatiquement : initiale du prénom + nom, en minuscules. Exemple : Jean Dupont → jdupont.\n$UO = \u0026#34;OU=$service,OU=Services,DC=bagdad,DC=lan\u0026#34;Construit le Distinguished Name de l\u0026rsquo;OU cible dynamiquement depuis la colonne Service du CSV.\nVérifications avant création Le script effectue deux vérifications avant toute création :\nL\u0026rsquo;OU existe \u0026ndash; si elle n\u0026rsquo;existe pas, l\u0026rsquo;utilisateur est ignoré avec un warning Le compte n\u0026rsquo;existe pas déjà \u0026ndash; si le SamAccountName est déjà pris, aucune création Gestion de la date d\u0026rsquo;expiration $expirationDate = [datetime]::ParseExact($dateOut, \u0026#34;dd/MM/yyyy\u0026#34;, $null)Parse la date au format dd/MM/yyyy. Si le format est invalide, le compte est ignoré plutôt que créé sans date d\u0026rsquo;expiration.\nCréation du compte New-ADUser crée le compte avec :\nMot de passe temporaire + obligation de changement à la première connexion (-ChangePasswordAtLogon $true) Compte activé immédiatement (-Enabled $true) Date d\u0026rsquo;expiration automatique depuis le CSV Points d\u0026rsquo;attention Le mot de passe par défaut P@ssword59 est en clair dans le script \u0026ndash; en production, utiliser Read-Host -AsSecureString ou un coffre-fort (KeePass, Azure Key Vault) Le script ne gère pas les doublons par nom complet, seulement par SamAccountName \u0026ndash; deux J. Dupont dans l\u0026rsquo;entreprise créeront un conflit L\u0026rsquo;OU doit exister avant l\u0026rsquo;import \u0026ndash; le script ne la crée pas automatiquement ","permalink":"https://blog.ldtr.ovh/posts/ps-creation-users-ad-csv/","summary":"PowerShell · Active Directory \u0026ndash; Import en masse d\u0026rsquo;utilisateurs depuis un CSV avec création automatique de comptes, vérification des OUs et gestion des doublons.","title":"PowerShell : créer des utilisateurs AD depuis un CSV"},{"content":"Je suis Loïs Dutour, DevOps en Bachelor Administrateur d\u0026rsquo;Infrastructures Sécurisées (AIS), avec un BTS SIO SISR en poche. Mes deux alternances m\u0026rsquo;ont amenée de technicienne de proximité à un poste DevOps et ma trajectoire pointe clairement vers la cybersécurité.\nJe construis, j\u0026rsquo;automatise, je casse, je répare. Mon homelab est mon terrain d\u0026rsquo;entraînement.\nHomelab Matériel de récupération, stack sérieuse. Mon homelab tourne sur Proxmox VE en cluster et me sert à tester ce que je ne peux pas faire en prod.\nCe que j\u0026rsquo;y fais concrètement :\nDéployer des infrastructures reproductibles avec Ansible et Terraform Expérimenter des architectures conteneurisées avec Docker Mettre en place des outils de supervision et de sécurité Reproduire des scénarios d\u0026rsquo;attaque et de défense Stack technique Infrastructure \u0026amp; DevOps Proxmox VE · VMware ESXi · OpenStack Docker · GitHub Actions · Jenkins Ansible · Terraform TrueNAS · Linux · Windows Server Réseaux Cisco (CCNA ITN + SRWE) · HPE Segmentation réseau · VLANs · routage Cybersécurité Wazuh · Nessus Essentials · OpenVAS PKI locale · OpenSSL Root-Me \u0026ndash; 140 points Formation Bachelor AIS \u0026ndash; Administrateur d\u0026rsquo;Infrastructures Sécurisées Alternance DevOps \u0026ndash; en cours\nBTS SIO SISR Alternance technicienne de proximité\nCertifications Certification Organisme CCNA – Switching, Routing and Wireless Essentials Cisco Networking Academy CCNA – Introduction to Networks Cisco Networking Academy MOOC SecNumacadémie ANSSI MOOC RGPD CNIL Introduction à la Cybersécurité Cisco Networking Academy Objectifs Je cherche une alternance en cybersécurité (DevSecOps / Blue Team / Cloud Security) pour continuer à monter en compétences sur la sécurisation d\u0026rsquo;infrastructures et les pratiques défensives.\nMe retrouver GitHub : cacti-lfs Root-Me : Cacti LinkedIn : Loïs Dutour ","permalink":"https://blog.ldtr.ovh/a-propos/","summary":"\u003cp\u003eJe suis \u003cstrong\u003eLoïs Dutour\u003c/strong\u003e, DevOps en \u003cstrong\u003eBachelor Administrateur d\u0026rsquo;Infrastructures Sécurisées (AIS)\u003c/strong\u003e, avec un BTS SIO SISR en poche. Mes deux alternances m\u0026rsquo;ont amenée de technicienne de proximité à un poste DevOps et ma trajectoire pointe clairement vers la \u003cstrong\u003ecybersécurité\u003c/strong\u003e.\u003c/p\u003e\n\u003cp\u003eJe construis, j\u0026rsquo;automatise, je casse, je répare. Mon homelab est mon terrain d\u0026rsquo;entraînement.\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"homelab\"\u003eHomelab\u003c/h2\u003e\n\u003cp\u003eMatériel de récupération, stack sérieuse. Mon homelab tourne sur \u003cstrong\u003eProxmox VE en cluster\u003c/strong\u003e et me sert à tester ce que je ne peux pas faire en prod.\u003c/p\u003e","title":"À propos"}]