<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>soban</title>
	<atom:link href="https://soban.pl/fr/feed/" rel="self" type="application/rss+xml" />
	<link>https://soban.pl/fr/</link>
	<description>IT, Linux, Servers, Security</description>
	<lastBuildDate>Mon, 02 Mar 2026 14:09:14 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>
	<item>
		<title>CrowdSec – Protection intelligente des serveurs Linux contre les botnets, les attaques brute-force et le scan Internet</title>
		<link>https://soban.pl/fr/crowdsec-protection-serveur-linux/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Fri, 27 Feb 2026 10:47:40 +0000</pubDate>
				<category><![CDATA[Bash]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=795</guid>

					<description><![CDATA[<p>Si vous utilisez un serveur Linux avec Nginx, SSH ou WordPress, vous connaissez probablement déjà Fail2Ban. C’est un bon outil, mais il fonctionne localement — il bloque uniquement les adresses IP ayant attaqué votre serveur. CrowdSec fonctionne de manière totalement différente. Il s’agit d’un système de protection basé sur une réputation IP partagée. Si des [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/fr/crowdsec-protection-serveur-linux/">CrowdSec – Protection intelligente des serveurs Linux contre les botnets, les attaques brute-force et le scan Internet</a> pochodzi z serwisu <a href="https://soban.pl/fr">soban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large is-resized"><img fetchpriority="high" decoding="async" width="1024" height="685" src="https://soban.pl/wp-content/uploads/2026/02/image-4-1024x685.png" alt="" class="wp-image-789" style="aspect-ratio:1.4949112952561037;width:580px;height:auto" srcset="https://soban.pl/wp-content/uploads/2026/02/image-4-1024x685.png 1024w, https://soban.pl/wp-content/uploads/2026/02/image-4-300x201.png 300w, https://soban.pl/wp-content/uploads/2026/02/image-4-768x514.png 768w, https://soban.pl/wp-content/uploads/2026/02/image-4.png 1174w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Si vous utilisez un serveur Linux avec Nginx, SSH ou WordPress, vous connaissez probablement déjà <strong>Fail2Ban</strong>. C’est un bon outil, mais il fonctionne localement — il bloque uniquement les adresses IP ayant attaqué <em>votre</em> serveur.</p>



<p><strong>CrowdSec</strong> fonctionne de manière totalement différente. Il s’agit d’un système de protection basé sur une réputation IP partagée. Si des milliers de serveurs dans le monde détectent une adresse IP malveillante, votre serveur peut la bloquer <strong>avant même qu’une attaque ne soit tentée</strong>.</p>



<h2 class="wp-block-heading">Comment fonctionne CrowdSec ?</h2>



<ul class="wp-block-list">
<li>analyse les journaux système (nginx, ssh, wordpress)</li>



<li>détecte les comportements suspects</li>



<li>partage les informations sur les IP attaquantes avec d&rsquo;autres serveurs</li>



<li>bloque le trafic au niveau du pare-feu</li>
</ul>



<p>Résultat ? La majorité des bots et scanners Internet n’atteignent jamais votre serveur Nginx.</p>



<h2 class="wp-block-heading">Installation de CrowdSec sur Debian / Ubuntu</h2>



<p>L’installation de CrowdSec est très simple et disponible directement depuis les dépôts Debian.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">apt update
apt install crowdsec</pre></div>



<p>Pendant l’installation, CrowdSec :</p>



<ul class="wp-block-list">
<li>crée une API locale (LAPI)</li>



<li>enregistre le serveur dans l’API centrale CrowdSec</li>



<li>télécharge les scénarios de sécurité de base</li>
</ul>



<h2 class="wp-block-heading">Installation du firewall bouncer</h2>



<p>CrowdSec détecte les menaces, mais nécessite un composant d’exécution — appelé <strong>bouncer</strong> — qui bloque le trafic au niveau du pare-feu.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">apt install crowdsec-firewall-bouncer</pre></div>



<p>Par défaut, le bouncer utilise <strong>nftables</strong> et ajoute automatiquement des règles bloquant les adresses IP malveillantes.</p>



<h2 class="wp-block-heading">Installation des collections de sécurité</h2>



<p>Les collections contiennent des analyseurs de logs ainsi que des scénarios de détection d’attaques.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">cscli collections install crowdsecurity/nginx
cscli collections install crowdsecurity/wordpress
cscli collections install crowdsecurity/base-http-scenarios
cscli collections install crowdsecurity/sshd</pre></div>



<p>Rechargez ensuite la configuration :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">systemctl reload crowdsec</pre></div>



<h2 class="wp-block-heading">Configuration des logs Nginx</h2>



<p>Pour permettre à CrowdSec d’analyser le trafic HTTP, vous devez indiquer les fichiers de logs Nginx.</p>



<p>Éditez le fichier :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">nano /etc/crowdsec/acquis.yaml</pre></div>



<p>Ajoutez la configuration suivante :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">filenames:
  - /var/log/nginx/access*.log
  - /var/log/nginx/error*.log
labels:
  type: nginx</pre></div>



<p>Puis redémarrez le service :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">systemctl restart crowdsec</pre></div>



<h2 class="wp-block-heading">Vérification du fonctionnement de CrowdSec</h2>



<p>Statut du service :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">systemctl status crowdsec</pre></div>



<p>Liste des bannissements actifs :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">cscli decisions list</pre></div>



<p>Statistiques :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">cscli metrics</pre></div>



<h2 class="wp-block-heading">Résultat final</h2>



<p>Après une installation correcte de CrowdSec :</p>



<ul class="wp-block-list">
<li>le serveur bloque automatiquement les botnets connus</li>



<li>les attaques WordPress et brute-force SSH sont arrêtées au niveau du pare-feu</li>



<li>Nginx traite beaucoup moins de trafic malveillant</li>



<li>la charge CPU et IO du serveur est significativement réduite</li>
</ul>



<p>CrowdSec peut être considéré comme une <strong>évolution de Fail2Ban</strong> — un système qui ne réagit pas seulement localement, mais qui exploite une intelligence globale des menaces.</p>
<p>Artykuł <a href="https://soban.pl/fr/crowdsec-protection-serveur-linux/">CrowdSec – Protection intelligente des serveurs Linux contre les botnets, les attaques brute-force et le scan Internet</a> pochodzi z serwisu <a href="https://soban.pl/fr">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Fail2Ban : comment détecter les récidivistes et les bannir pendant une semaine (recidive)</title>
		<link>https://soban.pl/fr/fail2ban-recidive-nginx-wordpress-configuration/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Thu, 26 Feb 2026 12:12:08 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=754</guid>

					<description><![CDATA[<p>Si vous utilisez Fail2Ban avec Nginx et WordPress, vous remarquerez tôt ou tard une chose : les mêmes adresses IP reviennent. Elles sont bannies pendant quelques minutes ou une heure, disparaissent… puis reviennent essayer /.env, /wp-login.php, /phpmyadmin ou d’autres chemins d’attaque populaires. La solution n’est pas de rendre les filtres plus agressifs. La solution est [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/fr/fail2ban-recidive-nginx-wordpress-configuration/">Fail2Ban : comment détecter les récidivistes et les bannir pendant une semaine (recidive)</a> pochodzi z serwisu <a href="https://soban.pl/fr">soban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large is-resized"><img decoding="async" width="1024" height="688" src="https://soban.pl/wp-content/uploads/2026/02/image-3-1024x688.png" alt="" class="wp-image-749" style="width:566px;height:auto" srcset="https://soban.pl/wp-content/uploads/2026/02/image-3-1024x688.png 1024w, https://soban.pl/wp-content/uploads/2026/02/image-3-300x201.png 300w, https://soban.pl/wp-content/uploads/2026/02/image-3-768x516.png 768w, https://soban.pl/wp-content/uploads/2026/02/image-3.png 1157w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><br>Si vous utilisez Fail2Ban avec Nginx et WordPress, vous remarquerez tôt ou tard une chose : les mêmes adresses IP reviennent. Elles sont bannies pendant quelques minutes ou une heure, disparaissent… puis reviennent essayer <code>/.env</code>, <code>/wp-login.php</code>, <code>/phpmyadmin</code> ou d’autres chemins d’attaque populaires.</p>



<p>La solution n’est pas de rendre les filtres plus agressifs. La solution est <strong>recidive</strong> — un deuxième niveau de protection dans Fail2Ban qui analyse l’historique des bannissements et bloque à long terme les récidivistes.</p>



<h2 class="wp-block-heading">Référence à la configuration précédente</h2>



<p>Si vous n’avez pas encore la configuration de base de Fail2Ban pour Nginx et WordPress, je l’ai décrite ici :</p>



<p><a href="https://soban.pl/fr/fail2ban-nginx-wordpress-configuration/" target="_blank" rel="noopener">Fail2Ban + Nginx + WordPress – configuration de base</a></p>



<p>Dans cet article, nous configurons des jail comme <code>nginx-exploit</code>, <code>nginx-secure</code> ou <code>sshd</code>. Recidive ne remplace pas cette configuration — il la renforce.</p>



<h2 class="wp-block-heading">Comment trouver les récidivistes dans les logs</h2>



<p>Il est d’abord utile de vérifier si le problème existe réellement. Nous extrayons des logs Fail2Ban la liste des IP qui ont été bannies le plus souvent :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">grep "Ban " /var/log/fail2ban.log | awk '{print $NF}' | sort | uniq -c | sort -nr | head</pre></div>



<p>Exemple de résultat (adresses partiellement anonymisées) :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">13 204.76.203.18
9 41.142.XXX.XXX
8 64.89.XXX.XXX
8 50.82.XXX.XXX
8 35.243.XXX.XXX
8 34.24.XXX.XXX
7 45.166.XXX.XXX
7 34.83.XXX.XXX
7 176.42.XXX.XXX
6 49.36.XXX.XXX</pre></div>



<p>Si vous voyez des nombres comme 8, 9, 13 — cela signifie que ces IP reviennent après la levée du bannissement. Un <code>bantime</code> court n’est pour elles qu’une simple pause technique.</p>



<h2 class="wp-block-heading">Pourquoi recidive est meilleur que l’augmentation du bantime</h2>



<ul class="wp-block-list">
<li>Vous n’avez pas besoin de bannir tout le monde pendant 24h pour une simple faute de frappe dans une URL.</li>



<li>Vous ne augmentez pas le risque de bloquer des utilisateurs légitimes.</li>



<li>La sanction est progressive et concerne uniquement les adresses qui reviennent.</li>
</ul>



<p>Recidive analyse <code>/var/log/fail2ban.log</code> et compte combien de fois une IP a été bannie par d’autres jail. Cela permet de “neutraliser” uniquement celles qui ont déjà été bloquées à plusieurs reprises.</p>



<h2 class="wp-block-heading">Configuration de recidive (5 bannissements en 24h = 7 jours de bannissement)</h2>



<p>Ajoutez le bloc suivant dans <code>/etc/fail2ban/jail.local</code> :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">nano /etc/fail2ban/jail.local</pre></div>



<p>À la fin du fichier, collez :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">[recidive]
enabled  = true
logpath  = /var/log/fail2ban.log
bantime  = 7d
findtime = 1d
maxretry = 5</pre></div>



<p>Enregistrez le fichier et redémarrez Fail2Ban :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">systemctl restart fail2ban</pre></div>



<p>Vérifiez le statut du jail :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">fail2ban-client status recidive</pre></div>



<h2 class="wp-block-heading">Comment vérifier qui est proche du seuil recidive</h2>



<p>Si vous souhaitez voir les IP qui ont déjà plusieurs bannissements et s’approchent du seuil recidive :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">grep "Ban " /var/log/fail2ban.log | awk '{print $NF}' | sort | uniq -c | awk '$1 &gt;= 3 {print}' | sort -nr</pre></div>



<h2 class="wp-block-heading">Résumé</h2>



<p>Recidive est l’un des moyens les plus simples et les plus efficaces pour limiter les scanners et bots récurrents. Au lieu de bannir agressivement tout le monde — vous bloquez uniquement ceux qui reviennent à plusieurs reprises.</p>



<p>Dans un environnement avec plusieurs domaines, un reverse proxy Nginx et WordPress, c’est pratiquement un élément incontournable de la configuration : moins de bruit dans les logs, moins d’attaques répétitives et moins d’analyse manuelle.</p>
<p>Artykuł <a href="https://soban.pl/fr/fail2ban-recidive-nginx-wordpress-configuration/">Fail2Ban : comment détecter les récidivistes et les bannir pendant une semaine (recidive)</a> pochodzi z serwisu <a href="https://soban.pl/fr">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Debian 13 (Trixie) → Proxmox VE 9 – Installation simplifiée sur un Debian pur</title>
		<link>https://soban.pl/fr/installation-proxmox-ve-9-sur-debian-13/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Mon, 23 Feb 2026 16:29:36 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=737</guid>

					<description><![CDATA[<p>Proxmox VE 9 est basé sur Debian 13 (Trixie) et introduit un noyau plus récent, des versions mises à jour de LXC et QEMU ainsi qu’une pile de virtualisation améliorée. Ce guide présente une méthode simplifiée et automatisée pour installer Proxmox VE 9 sur un système Debian 13 propre à l’aide de deux scripts d’installation. [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/fr/installation-proxmox-ve-9-sur-debian-13/">Debian 13 (Trixie) → Proxmox VE 9 – Installation simplifiée sur un Debian pur</a> pochodzi z serwisu <a href="https://soban.pl/fr">soban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large is-resized"><img decoding="async" width="1024" height="680" src="https://soban.pl/wp-content/uploads/2026/02/image-2-1024x680.png" alt="" class="wp-image-727" style="width:593px;height:auto" srcset="https://soban.pl/wp-content/uploads/2026/02/image-2-1024x680.png 1024w, https://soban.pl/wp-content/uploads/2026/02/image-2-300x199.png 300w, https://soban.pl/wp-content/uploads/2026/02/image-2-768x510.png 768w, https://soban.pl/wp-content/uploads/2026/02/image-2.png 1118w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Proxmox VE 9 est basé sur Debian 13 (Trixie) et introduit un noyau plus récent, des versions mises à jour de LXC et QEMU ainsi qu’une pile de virtualisation améliorée. Ce guide présente une méthode simplifiée et automatisée pour installer Proxmox VE 9 sur un système Debian 13 propre à l’aide de deux scripts d’installation.</p>



<p>La méthode suit la même approche que mon précédent guide Proxmox 8 sur Debian 12, mais adaptée à Debian 13 et Proxmox VE 9.</p>



<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li>Installation fraîche de Debian 13 (Trixie)</li>



<li>Accès root</li>



<li>Connexion Internet</li>
</ul>



<p>Toutes les commandes doivent être exécutées en tant que root.</p>



<h2 class="wp-block-heading">Partie 1 – Préparation du système &amp; installation du noyau Proxmox</h2>



<p>Téléchargez le premier script :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">wget http://soban.pl/bash/install-proxmox9-part1.sh
chmod +x install-proxmox9-part1.sh
./install-proxmox9-part1.sh</pre></div>



<p>Ce script :</p>



<ul class="wp-block-list">
<li>Définit le nom d’hôte et met à jour le fichier /etc/hosts</li>



<li>Installe le trousseau (keyring) d’archives Proxmox (vérifié via SHA512)</li>



<li>Ajoute le dépôt Proxmox VE 9 pour Debian 13</li>



<li>Effectue une mise à niveau complète du système</li>



<li>Installe proxmox-default-kernel</li>



<li>Redémarre le système</li>
</ul>



<h3 class="wp-block-heading">Contenu de install-proxmox9-part1.sh</h3>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">#!/usr/bin/env bash
set -euo pipefail

# Part 1/2: Debian 13 (Trixie) -&gt; Proxmox VE 9
# - sets /etc/hosts
# - adds PVE repo + installs Proxmox archive keyring (verified by SHA512)
# - full-upgrade
# - installs proxmox-default-kernel
# - reboots

log() { echo "[$(date '+%F %T')] $*"; }
die() { echo "ERROR: $*" &gt;&amp;2; exit 1; }

if [[ "$(id -u)" -ne 0 ]]; then
  die "Run as root."
fi

log "=== Proxmox VE 9 install (part 1/2) on Debian 13 Trixie ==="

if ! grep -qi 'trixie' /etc/os-release; then
  log "WARNING: This does not look like Debian 13 (Trixie). Continue at your own risk."
fi

log "Network interfaces (for reference):"
ip -br -c a || true

CURRENT_HOSTNAME="$(hostname)"
CURRENT_IP="$(hostname -I | awk '{print $1}')"

read -r -p "Hostname for this node [${CURRENT_HOSTNAME}]: " HOSTNAME
HOSTNAME="${HOSTNAME:-$CURRENT_HOSTNAME}"

read -r -p "Primary IP for /etc/hosts [${CURRENT_IP}]: " IPADDR
IPADDR="${IPADDR:-$CURRENT_IP}"

if [[ -z "${HOSTNAME}" || -z "${IPADDR}" ]]; then
  die "Hostname/IP cannot be empty."
fi

log "Setting hostname to: ${HOSTNAME}"
hostnamectl set-hostname "${HOSTNAME}"

log "Backing up /etc/hosts -&gt; /etc/hosts.backup"
cp -a /etc/hosts /etc/hosts.backup

log "Writing /etc/hosts (makes hostname resolvable locally)"
cat &gt; /etc/hosts &lt;&lt;EOT
127.0.0.1       localhost
${IPADDR}       ${HOSTNAME}

# IPv6
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
EOT

log "Installing prerequisites"
apt update
apt install -y wget ca-certificates gnupg

log "Installing Proxmox archive keyring to /usr/share/keyrings/proxmox-archive-keyring.gpg"
KEYRING="/usr/share/keyrings/proxmox-archive-keyring.gpg"
wget -q https://enterprise.proxmox.com/debian/proxmox-release-trixie.gpg -O "${KEYRING}"

log "Verifying SHA512 of keyring"
EXPECTED_SHA512="8678f2327c49276615288d7ca11e7d296bc8a2b96946fe565a9c81e533f9b15a5dbbad210a0ad5cd46d361ff1d3c4bac55844bc296beefa4f88b86e44e69fa51"
ACTUAL_SHA512="$(sha512sum "${KEYRING}" | awk '{print $1}')"

if [[ "${ACTUAL_SHA512}" != "${EXPECTED_SHA512}" ]]; then
  die "Keyring SHA512 mismatch!
Expected: ${EXPECTED_SHA512}
Actual:   ${ACTUAL_SHA512}"
fi

log "Adding Proxmox VE 9 no-subscription repo (Trixie)"
cat &gt; /etc/apt/sources.list.d/pve-install-repo.list &lt;&lt;EOT
deb [arch=amd64 signed-by=/usr/share/keyrings/proxmox-archive-keyring.gpg] http://download.proxmox.com/debian/pve trixie pve-no-subscription
EOT

log "Updating + full-upgrade"
apt update
apt full-upgrade -y

log "Installing Proxmox kernel meta-package: proxmox-default-kernel"
apt install -y proxmox-default-kernel

log "Part 1 done. Rebooting now. After reboot run: ./install-proxmox9-part2.sh"
reboot</pre></div>



<h2 class="wp-block-heading">Partie 2 – Installation de Proxmox VE 9</h2>



<p>Après le redémarrage, téléchargez et exécutez :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">wget http://soban.pl/bash/install-proxmox9-part2.sh
chmod +x install-proxmox9-part2.sh
./install-proxmox9-part2.sh</pre></div>



<h3 class="wp-block-heading">Contenu de install-proxmox9-part2.sh</h3>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">#!/usr/bin/env bash
set -euo pipefail

# Part 2/2: Debian 13 (Trixie) -&gt; Proxmox VE 9
# - verifies running PVE kernel (unless FORCE=1)
# - installs proxmox-ve + required packages
# - removes Debian kernel packages (keeps pve)
# - updates grub
# - removes os-prober
# - prints URL to GUI

log() { echo "[$(date '+%F %T')] $*"; }
die() { echo "ERROR: $*" &gt;&amp;2; exit 1; }

FORCE="${FORCE:-0}"

if [[ "$(id -u)" -ne 0 ]]; then
  die "Run as root."
fi

log "=== Proxmox VE 9 install (part 2/2) ==="

KERNEL="$(uname -r || true)"
if ! echo "${KERNEL}" | grep -qi 'pve'; then
  if [[ "${FORCE}" != "1" ]]; then
    die "You are NOT running a PVE kernel (uname -r: ${KERNEL}).
Reboot and select the Proxmox kernel first.
If you really want to continue anyway: FORCE=1 ./install-proxmox9-part2.sh"
  else
    log "WARNING: Continuing despite not running PVE kernel because FORCE=1"
  fi
else
  log "OK: running PVE kernel: ${KERNEL}"
fi

log "Update package lists"
apt update

log "Install Proxmox VE packages"
# postfix is optional but commonly installed by docs; choose config during prompts
DEBIAN_FRONTEND=readline apt install -y proxmox-ve postfix open-iscsi chrony

log "Upgrade remaining packages"
apt full-upgrade -y

log "Removing Debian kernel meta-package and non-PVE kernels (best-effort)"
# Remove Debian meta kernel (keeps proxmox kernel)
apt remove -y linux-image-amd64 || true

# Purge any installed linux-image-* that is NOT a pve kernel
mapfile -t KPKGS &lt; &lt;(dpkg -l | awk '/^ii  linux-image-/{print $2}' | grep -vE 'pve|proxmox' || true)
if (( ${#KPKGS[@]} &gt; 0 )); then
  log "Purging non-PVE kernel packages: ${KPKGS[*]}"
  apt purge -y "${KPKGS[@]}" || true
fi

log "Update grub"
update-grub || true

log "Remove os-prober (recommended for servers; avoids odd grub side effects)"
apt remove -y os-prober || true

log "Done. Proxmox UI should be available at:"
IP="$(hostname -I | awk '{print $1}')"
echo "https://${IP}:8006"

log "Login: root + your root password"</pre></div>



<h2 class="wp-block-heading">Accès à l’interface Web</h2>



<p>Après avoir terminé le second script, ouvrez :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">https://YOUR_SERVER_IP:8006</pre></div>



<p>Connectez-vous avec l’utilisateur <strong>root</strong> et votre mot de passe root. Vous pouvez voir un avertissement de certificat — c’est normal pour une installation récente.</p>



<h2 class="wp-block-heading">Dépannage – erreur 401 Unauthorized (dépôt pve-enterprise)</h2>



<p>Si après l’installation ou lors de l’exécution de <code>apt update</code> vous obtenez l’erreur suivante&nbsp;:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">Err:8 https://enterprise.proxmox.com/debian/pve trixie InRelease
  401  Unauthorized [IP: 2001:41d0:b00:5900::34 443]
Error: Failed to fetch https://enterprise.proxmox.com/debian/pve/dists/trixie/InRelease  401  Unauthorized
Error: The repository 'https://enterprise.proxmox.com/debian/pve trixie InRelease' is not signed.
Notice: Updating from such a repository can't be done securely, and is therefore disabled by default.</pre></div>



<p>Cela signifie que le <strong>dépôt enterprise</strong> est activé, mais que votre système ne dispose pas d’un abonnement Proxmox valide.  
Dans ce guide, nous utilisons le dépôt <em>pve-no-subscription</em>, il est donc nécessaire de désactiver le dépôt enterprise.</p>



<p>Corrigez le problème en exécutant&nbsp;:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">mv /etc/apt/sources.list.d/pve-enterprise.sources \
   /etc/apt/sources.list.d/pve-enterprise.sources.disabled

apt update</pre></div>



<p>Après cela, la mise à jour devrait s’exécuter correctement&nbsp;:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">apt update && apt dist-upgrade -y && apt autoremove -y</pre></div>



<p>Si tout est correctement configuré, vous verrez le message&nbsp;:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="lang:sh decode:true ">All packages are up to date.</pre></div>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Cette méthode offre une manière propre et contrôlée de déployer Proxmox VE 9 directement sur Debian 13 sans utiliser l’installateur ISO. Elle est particulièrement utile pour les environnements automatisés, les laboratoires et les configurations d’infrastructure personnalisées.</p>
<p>Artykuł <a href="https://soban.pl/fr/installation-proxmox-ve-9-sur-debian-13/">Debian 13 (Trixie) → Proxmox VE 9 – Installation simplifiée sur un Debian pur</a> pochodzi z serwisu <a href="https://soban.pl/fr">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Configuration Fail2Ban pour Nginx &#8211; bloquer les scanners et les tentatives d&#8217;exploitation sans bloquer l&#8217;administration WordPress</title>
		<link>https://soban.pl/fr/fail2ban-nginx-wordpress-configuration/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Mon, 16 Feb 2026 23:11:24 +0000</pubDate>
				<category><![CDATA[Bash]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=722</guid>

					<description><![CDATA[<p>Ce guide présente une installation et une configuration complètes de Fail2Ban pour Nginx, conçues pour : bloquer les véritables scanners et tentatives d’exploitation (par exemple les requêtes vers /.env, /.git, /phpmyadmin, etc.), éviter le blocage accidentel des administrateurs (problème fréquent lorsque le bannissement repose uniquement sur les erreurs HTTP), bannir les adresses IP après des [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/fr/fail2ban-nginx-wordpress-configuration/">Configuration Fail2Ban pour Nginx &#8211; bloquer les scanners et les tentatives d&rsquo;exploitation sans bloquer l&rsquo;administration WordPress</a> pochodzi z serwisu <a href="https://soban.pl/fr">soban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="486" height="747" src="https://soban.pl/wp-content/uploads/2026/02/image-1.png" alt="" class="wp-image-717" srcset="https://soban.pl/wp-content/uploads/2026/02/image-1.png 486w, https://soban.pl/wp-content/uploads/2026/02/image-1-195x300.png 195w" sizes="auto, (max-width: 486px) 100vw, 486px" /></figure>



<h2 class="wp-block-heading">Ce guide présente une installation et une configuration complètes de Fail2Ban pour Nginx, conçues pour :</h2>



<ul class="wp-block-list">
<li>bloquer les véritables scanners et tentatives d’exploitation (par exemple les requêtes vers <code>/.env</code>, <code>/.git</code>, <code>/phpmyadmin</code>, etc.),</li>
<li>éviter le blocage accidentel des administrateurs (problème fréquent lorsque le bannissement repose uniquement sur les erreurs HTTP),</li>
<li>bannir les adresses IP après des activités suspectes répétées,</li>
<li>utiliser une courte durée de bannissement (5 minutes) afin de réduire le risque de s’auto-bloquer.</li>
</ul>



<h2 class="wp-block-heading">Pourquoi bannir uniquement sur la base des erreurs HTTP peut poser problème</h2>



<p>De nombreux guides recommandent de bannir les adresses IP uniquement selon les codes de statut HTTP (4xx/499). En pratique, cela provoque souvent des auto-blocages, car les applications modernes génèrent de nombreuses requêtes (AJAX, panneaux d’administration, reconstruction du cache), ce qui peut entraîner des erreurs HTTP lors d’une utilisation normale.</p>



<p>Cette configuration adopte une approche plus sûre :</p>



<ul class="wp-block-list">
<li>les <strong>chemins d’exploitation</strong> sont toujours considérés comme suspects,</li>
<li>les <strong>erreurs HTTP ne sont comptabilisées que lorsque la requête ne contient pas d’en-tête Referer</strong> (comportement typique des scanners),</li>
<li>les <strong>User-Agents malveillants connus</strong> sont pris en compte.</li>
</ul>



<h2 class="wp-block-heading">Étape 1 : Installer Fail2Ban</h2>



<p>Installez Fail2Ban :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">apt update
apt install -y fail2ban</pre>



<p>Activez et démarrez le service :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">systemctl enable fail2ban
systemctl start fail2ban</pre>



<p>Vérifiez son fonctionnement :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">fail2ban-client ping
systemctl status fail2ban</pre>



<h2 class="wp-block-heading">Étape 2 : Créer le filtre nginx-secure</h2>



<p>Créez le fichier de filtre :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">nano /etc/fail2ban/filter.d/nginx-secure.conf</pre>



<p>Collez la configuration suivante :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">[Definition]

failregex =
    ^&lt;HOST&gt; - .* "(?:GET|POST|HEAD|PUT|DELETE|OPTIONS|PATCH|PROPFIND|CONNECT) (?:/\.env|/wp-config\.php|/phpinfo\.php|/(?:phpmyadmin|adminer)(?:/|$)|/(?:\.git|\.svn|\.hg)(?:/|$)|/vendor/phpunit/|/cgi-bin/).*" \d{3} .*

    ^&lt;HOST&gt; - .* "(?:GET|POST|HEAD|PUT|DELETE|OPTIONS|PATCH|PROPFIND|CONNECT) [^"]*" (?:400|403|404|405|408|413|414|429|444) [^"]* "-" ".*"

    ^&lt;HOST&gt; - .* "(?:GET|POST|HEAD|PUT|DELETE|OPTIONS|PATCH|PROPFIND|CONNECT).*" \d{3} .* "(?:[^"]*)" "(?:[^"]*(?:sqlmap|nikto|masscan|zgrab|nmap|acunetix|wpscan|dirbuster|gobuster)[^"]*)"

ignoreregex =</pre>



<h2 class="wp-block-heading">Étape 3 : Créer le jail nginx-secure</h2>



<p>Créez le fichier de configuration du jail :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">nano /etc/fail2ban/jail.d/nginx-secure.conf</pre>



<p>Collez la configuration suivante :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">[nginx-secure]
enabled  = true
port     = http,https
filter   = nginx-secure

logpath  = /var/log/nginx/access.log
           /var/log/nginx/access-*.log

findtime = 600
maxretry = 20
bantime  = 300

action   = iptables-multiport[name=nginx-secure, port="http,https"]

ignoreip = 127.0.0.1/8 ::1</pre>



<h2 class="wp-block-heading">Étape 4 : Redémarrer Fail2Ban</h2>



<pre class="urvanov-syntax-highlighter-plain-tag">fail2ban-server -t
systemctl restart fail2ban</pre>



<h2 class="wp-block-heading">Étape 5 : Vérifier l’intégration avec le pare-feu</h2>



<p>Vérifiez que la chaîne Fail2Ban existe :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">iptables -S | grep f2b-nginx-secure
iptables -L f2b-nginx-secure -n -v</pre>



<h2 class="wp-block-heading">Test depuis une machine externe</h2>



<p>Test du chemin d’exploitation :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">for i in 1 2 3 4 5; do
  curl -I https://soban.pl/.env
done</pre>



<p>Test de la logique des erreurs sans Referer :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">for i in 1 2 3 4 5; do
  curl -sS -o /dev/null -w "%{http_code}\n" https://soban.pl/this-path-should-not-exist-$i
done</pre>



<p>Après plusieurs requêtes suspectes, l’adresse IP sera bannie pendant 5 minutes.</p>



<h2 class="wp-block-heading">Vérifier les adresses IP bannies</h2>



<pre class="urvanov-syntax-highlighter-plain-tag">fail2ban-client status nginx-secure</pre>



<h2 class="wp-block-heading">Débannir une adresse IP</h2>



<p>Retirer un bannissement manuellement :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">fail2ban-client set nginx-secure unbanip YOUR_IP</pre>



<h2 class="wp-block-heading">Résumé</h2>



<ul class="wp-block-list">
<li>bloque les véritables scanners et tentatives d’exploitation,</li>
<li>réduit le risque d’auto-blocage des administrateurs,</li>
<li>utilise un bannissement court de 5 minutes,</li>
<li>compatible avec iptables-nft,</li>
<li>facile à tester et à débannir.</li>
</ul>
<p>Artykuł <a href="https://soban.pl/fr/fail2ban-nginx-wordpress-configuration/">Configuration Fail2Ban pour Nginx &#8211; bloquer les scanners et les tentatives d&rsquo;exploitation sans bloquer l&rsquo;administration WordPress</a> pochodzi z serwisu <a href="https://soban.pl/fr">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Mise à niveau automatique Debian 12 → Debian 13 avec mise à jour optionnelle de PHP et nginx</title>
		<link>https://soban.pl/fr/upgrade-debian-12-vers-13/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Mon, 16 Feb 2026 11:17:47 +0000</pubDate>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=711</guid>

					<description><![CDATA[<p>La mise à niveau de Debian de la version 12 (bookworm) vers 13 (trixie) est une opération qui doit être effectuée de manière reproductible et sans surprises, en particulier sur les serveurs et les conteneurs (par exemple Proxmox LXC ou machines virtuelles). Ci-dessous, vous trouverez un guide simple ainsi que des commandes prêtes à l&#8217;emploi [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/fr/upgrade-debian-12-vers-13/">Mise à niveau automatique Debian 12 → Debian 13 avec mise à jour optionnelle de PHP et nginx</a> pochodzi z serwisu <a href="https://soban.pl/fr">soban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large is-resized">
<img loading="lazy" decoding="async" width="1024" height="682" src="https://soban.pl/wp-content/uploads/2026/02/image-1024x682.png" alt="Mise à niveau Debian 12 vers Debian 13" class="wp-image-707" style="width:551px;height:auto" srcset="https://soban.pl/wp-content/uploads/2026/02/image-1024x682.png 1024w, https://soban.pl/wp-content/uploads/2026/02/image-300x200.png 300w, https://soban.pl/wp-content/uploads/2026/02/image-768x511.png 768w, https://soban.pl/wp-content/uploads/2026/02/image.png 1119w" sizes="auto, (max-width: 1024px) 100vw, 1024px" />
</figure>



<p>La mise à niveau de Debian de la version 12 (<strong>bookworm</strong>) vers 13 (<strong>trixie</strong>) est une opération qui doit être effectuée de manière reproductible et sans surprises, en particulier sur les serveurs et les conteneurs (par exemple Proxmox LXC ou machines virtuelles). Ci-dessous, vous trouverez un guide simple ainsi que des commandes prêtes à l&#8217;emploi pour télécharger et exécuter le script de mise à niveau.</p>



<p><strong>Avant de lancer la mise à niveau :</strong> créez une sauvegarde ou un snapshot. Dans Proxmox, la meilleure option est <code>vzdump</code> ou un snapshot. Sur bare metal, sauvegardez au minimum <code>/etc</code>, les applications et les bases de données.</p>



<ul class="wp-block-list">
<li><strong>Proxmox LXC / VM</strong> : sauvegarde avec vzdump ou snapshot.</li>
<li><strong>Serveur</strong> : sauvegarde de /etc, /var/www, bases de données (MySQL/PostgreSQL) et certificats SSL.</li>
</ul>



<p>Téléchargement du script :</p>



<p><a href="https://soban.pl/bash/upgrade_to_debian13.sh" target="_blank" rel="noopener noreferrer">https://soban.pl/bash/upgrade_to_debian13.sh</a></p>



<h2 class="wp-block-heading">1) Sauvegarde avant la mise à niveau (exemples)</h2>



<p>Exemple de sauvegarde dans Proxmox (exécuter sur l’hôte Proxmox, remplacez CTID/VMID) :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">vzdump 101 --mode snapshot --compress zstd --storage local</pre>



<p>Exemple de sauvegarde simple du système de fichiers sur un serveur (cela ne remplace pas un snapshot complet, mais c&rsquo;est mieux que rien) :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">tar czf /root/backup_before_upgrade.tar.gz /etc /var/www /root</pre>



<h2 class="wp-block-heading">2) Télécharger le script (wget / curl)</h2>



<p>La méthode la plus simple consiste à utiliser <strong>wget</strong>. Si la commande <code>wget</code> ne fonctionne pas malgré l&rsquo;installation du paquet, utilisez le chemin complet <code>/usr/bin/wget</code>.</p>



<p><strong>Variante A (wget standard) :</strong></p>



<pre class="urvanov-syntax-highlighter-plain-tag">apt update
apt install -y wget
cd /root
wget -O upgrade_to_debian13.sh https://soban.pl/bash/upgrade_to_debian13.sh
chmod +x upgrade_to_debian13.sh</pre>



<p><strong>Variante B (wget avec chemin complet – utile si PATH est incorrect) :</strong></p>



<pre class="urvanov-syntax-highlighter-plain-tag">apt update
apt install -y wget
cd /root
/usr/bin/wget -O upgrade_to_debian13.sh https://soban.pl/bash/upgrade_to_debian13.sh
chmod +x upgrade_to_debian13.sh</pre>



<p><strong>Variante C (curl) :</strong></p>



<pre class="urvanov-syntax-highlighter-plain-tag">apt update
apt install -y curl
cd /root
curl -fsSL -o upgrade_to_debian13.sh https://soban.pl/bash/upgrade_to_debian13.sh
chmod +x upgrade_to_debian13.sh</pre>



<h2 class="wp-block-heading">3) Aide du script (paramètres)</h2>



<p>Avant d&rsquo;exécuter la mise à niveau, affichez la liste des paramètres disponibles et des exemples d&rsquo;utilisation :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">cd /root
./upgrade_to_debian13.sh --help</pre>



<h2 class="wp-block-heading">4) Mise à niveau Debian 12 → Debian 13 (système uniquement)</h2>



<p>Si vous utilisez actuellement Debian 12 (bookworm) et souhaitez effectuer la mise à niveau du système :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">cd /root
./upgrade_to_debian13.sh</pre>



<p>Le script sauvegarde <code>/etc/apt/sources.list</code>, remplace les dépôts par trixie, exécute <code>apt update</code> et <code>apt full-upgrade</code>, puis <code>autoremove</code> et <code>autoclean</code>.</p>



<h2 class="wp-block-heading">5) Détection automatique PHP/nginx et mise à jour si nécessaire</h2>



<p>Si le conteneur ou la VM utilise une stack web et que vous souhaitez que le script détecte automatiquement PHP (nginx + <code>fastcgi_pass</code>) et mette à jour PHP et nginx si nécessaire :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">cd /root
./upgrade_to_debian13.sh --auto</pre>



<h2 class="wp-block-heading">6) Forcer la mise à niveau de PHP et nginx (correction du socket PHP-FPM)</h2>



<p>Si vous souhaitez forcer l&rsquo;installation ou la mise à niveau de PHP et corriger automatiquement la configuration nginx pour utiliser le bon socket PHP-FPM :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">cd /root
./upgrade_to_debian13.sh --with-php --with-nginx --php-version 8.2</pre>



<p>Cette commande installe PHP 8.2 (php-fpm et modules courants) et remplace les anciens chemins de socket PHP-FPM dans nginx par <code>/run/php/php8.2-fpm.sock</code>. Ensuite, elle exécute <code>nginx -t</code> et recharge ou redémarre les services.</p>



<h2 class="wp-block-heading">7) Déjà sur Debian 13 ? Mode PHP/nginx uniquement</h2>



<p>Si le système est déjà sous Debian 13 (trixie) et que vous souhaitez uniquement mettre à jour PHP et nginx sans modifier les dépôts système :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">cd /root
./upgrade_to_debian13.sh --php-nginx-only --with-php --with-nginx --php-version 8.2</pre>



<h2 class="wp-block-heading">8) Mode test (dry-run)</h2>



<p>Si vous souhaitez voir ce que le script fera sans effectuer de modifications :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">cd /root
./upgrade_to_debian13.sh --auto --dry-run</pre>



<h2 class="wp-block-heading">9) Diagnostic : wget installé mais ne fonctionne pas</h2>



<p>Si <code>apt</code> indique que wget est installé mais que le shell affiche <code>command not found</code>, il s&rsquo;agit généralement d&rsquo;un problème PATH. La solution la plus simple est d&rsquo;utiliser le chemin complet : <code>/usr/bin/wget</code>.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">echo "$PATH"
command -v wget || true
ls -l /usr/bin/wget || true
/usr/bin/wget --version || true</pre>



<h2 class="wp-block-heading">Résumé</h2>



<p>Cette solution permet de mettre à niveau Debian 12 → Debian 13 et de corriger automatiquement les problèmes courants PHP/nginx après la mise à niveau (socket PHP-FPM, test de configuration nginx, redémarrage des services). Créez toujours une sauvegarde avant la mise à niveau et commencez par exécuter <code>--help</code>.</p>



<p>Script : <a href="https://soban.pl/bash/upgrade_to_debian13.sh" target="_blank" rel="noopener noreferrer">https://soban.pl/bash/upgrade_to_debian13.sh</a></p>

<p>Artykuł <a href="https://soban.pl/fr/upgrade-debian-12-vers-13/">Mise à niveau automatique Debian 12 → Debian 13 avec mise à jour optionnelle de PHP et nginx</a> pochodzi z serwisu <a href="https://soban.pl/fr">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Proxmox Mises à jour automatiques des VM (qm + vzdump) avec tests réseau et restauration automatique</title>
		<link>https://soban.pl/fr/proxmox-vm-auto-upgrade-script-4/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 16:17:10 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=691</guid>

					<description><![CDATA[<p>Dans cet article, je présente un script simple (mais très efficace) pour automatiser les mises à jour des machines virtuelles sur Proxmox VE. Le script peut : Où télécharger le script Vous pouvez télécharger le script directement depuis mon site : soban.pl/bash/upgrade_proxmox_qm.sh Dossiers requis Avant de lancer l’automatisation, créez deux dossiers : un pour les [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/fr/proxmox-vm-auto-upgrade-script-4/">Proxmox Mises à jour automatiques des VM (qm + vzdump) avec tests réseau et restauration automatique</a> pochodzi z serwisu <a href="https://soban.pl/fr">soban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="498" height="745" src="https://soban.pl/wp-content/uploads/2026/01/image-1.png" alt="" class="wp-image-681" style="width:452px;height:auto" srcset="https://soban.pl/wp-content/uploads/2026/01/image-1.png 498w, https://soban.pl/wp-content/uploads/2026/01/image-1-201x300.png 201w" sizes="auto, (max-width: 498px) 100vw, 498px" /></figure>



<p>Dans cet article, je présente un script simple (mais très efficace) pour automatiser les mises à jour des machines virtuelles sur Proxmox VE. Le script peut :</p>



<ul class="wp-block-list">
<li>créer une sauvegarde de la VM (optionnel),</li>



<li>démarrer la VM si elle était arrêtée au départ,</li>



<li>effectuer une mise à niveau complète via apt et redémarrer la VM,</li>



<li>lancer des tests réseau avant et après la mise à jour,</li>



<li>restaurer automatiquement depuis la sauvegarde en cas de problème (optionnel),</li>



<li>éteindre la VM à la fin si elle était initialement arrêtée.</li>
</ul>



<h3 class="wp-block-heading">Où télécharger le script</h3>



<p>Vous pouvez télécharger le script directement depuis mon site :</p>



<p><strong>soban.pl/bash/upgrade_proxmox_qm.sh</strong></p>



<h3 class="wp-block-heading">Dossiers requis</h3>



<p>Avant de lancer l’automatisation, créez deux dossiers : un pour les scripts et un pour les logs :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">mkdir -p /root/automate_scripts /root/logs</pre></div>



<h3 class="wp-block-heading">Installer le script</h3>



<p>Téléchargez le script dans <code>/root/automate_scripts/</code> et rendez-le exécutable :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">cd /root/automate_scripts
curl -fsSL -o upgrade_proxmox_qm.sh "https://soban.pl/bash/upgrade_proxmox_qm.sh"
chmod +x /root/automate_scripts/upgrade_proxmox_qm.sh</pre></div>



<h3 class="wp-block-heading">Comment ça marche (version courte)</h3>



<ul class="wp-block-list">
<li>D’abord, une <strong>sauvegarde</strong> est créée (vzdump snapshot + zstd) si l’option est activée.</li>



<li>Si la VM était en état <strong>stopped</strong>, le script la démarre et attend <strong>WAIT_TIME</strong> secondes.</li>



<li>Ensuite, le script exécute des <strong>tests réseau AVANT la mise à jour</strong> :
		<ul>
			
			
			
			
		</ul>
	





</li>



<li>Le script exécute apt update/upgrade/dist-upgrade/autoremove/clean puis redémarre la VM (<strong>reboot</strong>).</li>



<li>Après le redémarrage, il attend à nouveau (<strong>WAIT_TIME</strong>) et relance les tests <strong>APRÈS la mise à jour</strong>.</li>



<li>Si les tests échouent et qu’une sauvegarde est disponible, la VM est restaurée automatiquement via <strong>qmrestore</strong>.</li>



<li>Enfin, la VM est arrêtée si elle était initialement arrêtée.</li>
</ul>



<h3 class="wp-block-heading">Lancer le script manuellement</h3>



<p>Le script attend exactement deux arguments :</p>



<ul class="wp-block-list">
<li><code>VMID</code> – l’ID de la VM dans Proxmox</li>



<li><code>TIME_SEC</code> – le temps d’attente après démarrage/redémarrage (en secondes)</li>
</ul>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">/root/automate_scripts/upgrade_proxmox_qm.sh 901 500</pre></div>



<p><strong>Astuce :</strong> adaptez WAIT_TIME au temps réel de démarrage de la VM et à la durée de la mise à jour. En pratique, <code>300</code> à <code>1000</code> secondes fonctionnent très bien selon la VM.</p>



<h3 class="wp-block-heading">Script complet (référence)</h3>



<p>Ci-dessous, le script complet (code et commentaires restent en anglais) :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">#!/bin/bash

WAIT_TIME=$2  # wait time for VM start/restart (in seconds)
DO_BACKUP="y" # 'y' - create backup, 'n' - skip backup
DO_UPDATE="y" # 'y' - run system update, 'n' - skip update

echo "---------------START---------------"
date
echo "-----------------------------------"

# Argument check
if [ "$#" -ne 2 ]; then
    echo "Usage: $0 &lt;VMID&gt; &lt;TIME_SEC&gt;"
    exit 1
fi

VMID="$1"
TARGET_HOSTNAME=$(/usr/sbin/qm list | grep -w "$VMID" | awk '{print $2}')
VM_STATUS=$(/usr/sbin/qm status "$VMID" | awk '{print $2}')
HOST_MACHINE=$(hostname)
WAS_STOPPED=0

if [ "$VM_STATUS" = "stopped" ]; then
    WAS_STOPPED=1
else
    WAS_STOPPED=0
fi

# Create backup if DO_BACKUP is set to 'y'
backup_result="Backup not attempted"
if [ "$DO_BACKUP" = "y" ]; then
    echo "Creating backup for VM $VMID..."
    BACKUP_OUTPUT=$(/usr/bin/vzdump "$VMID" --storage local --mode snapshot --compress zstd)
    BACKUP_FILE=$(echo "$BACKUP_OUTPUT" | grep -oP 'vzdump-qemu-[^\s]+' | tr -d "'")

    if [ -z "$BACKUP_FILE" ]; then
        echo "Backup failed: No backup file created."
        backup_result="Backup created: NOK"
        exit 1
    else
        echo "Backup created successfully: $BACKUP_FILE"
        backup_result="Backup created: OK"
    fi
else
    echo "Backup not attempted (backup is disabled)."
fi

# Start VM if it was originally stopped
if [ "$WAS_STOPPED" -eq 1 ]; then
    echo "Starting VM $VMID for update..."
    /usr/sbin/qm start "$VMID"
    echo "Waiting $WAIT_TIME seconds for VM to start..."
    sleep "$WAIT_TIME"
fi

# Test functions
perform_ping_test() {
    source="$1"
    target="$2"
    if ssh root@"$source" "ping -c 3 -W 2 $target" &gt;/dev/null 2&gt;&amp;1; then
        echo "Ping from $source to $target: OK"
        return 0
    else
        echo "Ping from $source to $target: NOK"
        return 1
    fi
}

test_curl() {
    source="$1"
    target="$2"
    if ssh root@"$source" "curl -s --head --connect-timeout 5 $target" &gt;/dev/null 2&gt;&amp;1; then
        echo "Curl from $source to $target: OK"
        return 0
    else
        echo "Curl from $source to $target: NOK"
        return 1
    fi
}

perform_local_ping_test() {
    source="$1"
    target="$2"
    if ping -c 3 -W 2 "$target" &gt;/dev/null 2&gt;&amp;1; then
        echo "Ping from $source to $target: OK"
        return 0
    else
        echo "Ping from $source to $target: NOK"
        return 1
    fi
}

DEFAULT_GW=$(/sbin/ip route | grep default | awk '{print $3}')

perform_tests() {
    status=0
    perform_local_ping_test "$HOST_MACHINE" "$TARGET_HOSTNAME" || status=1
    perform_ping_test "$TARGET_HOSTNAME" "8.8.8.8" || status=1
    perform_ping_test "$TARGET_HOSTNAME" "$DEFAULT_GW" || status=1
    test_curl "$TARGET_HOSTNAME" "http://google.com" || status=1
    return ${status:-0}
}

# General tests before update
echo "--- General tests BEFORE update ---"
if perform_tests; then
    echo "All network tests before update: OK"
    echo "$backup_result"

    if [ "$backup_result" == "Backup created: OK" ] || [ "$backup_result" == "Backup not attempted" ]; then
        echo "BEFORE status: OK"
    else
        echo "BEFORE status: NOK"
    fi
else
    echo "Some network tests before update: NOK"
    echo "$backup_result"
    echo "BEFORE status: NOK"
    [ "$WAS_STOPPED" -eq 1 ] &amp;&amp; /usr/sbin/qm shutdown "$VMID"
    exit 1
fi
echo "-----------------------------------"

# System update and reboot
update_result="Upgrade system: NOK"
if [ "$DO_UPDATE" = "y" ]; then
    echo "--- Updating VM $VMID ---"
    if ssh root@"$TARGET_HOSTNAME" "/usr/bin/apt update &amp;&amp; \
                          /usr/bin/apt upgrade -y &amp;&amp; \
                          /usr/bin/apt dist-upgrade -y &amp;&amp; \
                          /usr/bin/apt autoremove -y &amp;&amp; \
                          /usr/bin/apt autoclean &amp;&amp; \
                          /usr/bin/apt clean &amp;&amp; \
                          /usr/bin/apt --purge autoremove &amp;&amp; \
                          /sbin/reboot"; then
        echo "---END Updating VM $VMID ---"
        echo "Upgrade system: OK"
        update_result="Upgrade system: OK"
    else
        echo "Upgrade system: NOK"
        update_result="Upgrade system: NOK"
        [ "$WAS_STOPPED" -eq 1 ] &amp;&amp; /usr/sbin/qm shutdown "$VMID"
        echo "Update failed. Exiting."
        exit 1
    fi
fi

# Wait for VM reboot if update was performed
if [ "$DO_UPDATE" = "y" ]; then
    echo "Waiting $WAIT_TIME seconds for VM to reboot..."
    sleep "$WAIT_TIME"
fi

# Tests after reboot if update was performed
if [ "$DO_UPDATE" = "y" ]; then
    echo "--- Network tests AFTER update ---"
    if perform_tests; then
        echo "All network tests after update: OK"
        echo "$update_result"
        echo "AFTER status: OK"
    else
        echo "Some network tests after update: NOK"
        echo "$update_result"
        echo "Attempting to restore from backup..."

        if [ "$DO_BACKUP" = "y" ]; then
            /usr/sbin/qm stop "$VMID"
            /usr/sbin/qmrestore "/var/lib/vz/dump/$BACKUP_FILE" "$VMID" --force

            if [ "$WAS_STOPPED" -eq 1 ]; then
                /usr/sbin/qm shutdown "$VMID"
            fi

            echo "Restore attempt finished. Please check VM status."
            echo "AFTER status: NOK"
        else
            echo "No backup available for restoration. The VM might not function properly after failed update."
            echo "AFTER status: NOK"
        fi
    fi
    echo "-----------------------------------"
fi

# Shut down VM if it was originally stopped
if [ "$WAS_STOPPED" -eq 1 ]; then
    echo "Shutting down VM $VMID (originally stopped)."
    /usr/sbin/qm shutdown "$VMID"
fi

echo "---------------END---------------"
date
echo "-----------------------------------"</pre></div>



<h3 class="wp-block-heading">Cron (planning hebdomadaire + logs séparés par VM)</h3>



<p>Voici un exemple de crontab : une VM différente est mise à jour chaque jour de la semaine, et les logs sont enregistrés dans des fichiers séparés sous <code>/root/logs/</code>.</p>



<p>Modifier le crontab root :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">crontab -e</pre></div>



<p>Collez les règles ci-dessous (les commentaires restent en anglais) :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">15 0 * * 1 /root/automate_scripts/upgrade_proxmox_qm.sh 901 500 &gt; /root/logs/kali.log 2&gt;&amp;1                 # Monday: upgrade Kali Linux (VMID 901)
15 0 * * 2 /root/automate_scripts/upgrade_proxmox_qm.sh 903 500 &gt; /root/logs/proxmox-test-01.log 2&gt;&amp;1      # Tuesday: upgrade proxmox-test-01 (VMID 903)
15 0 * * 3 /root/automate_scripts/upgrade_proxmox_qm.sh 904 500 &gt; /root/logs/ubuntu-lte.log 2&gt;&amp;1           # Wednesday: upgrade ubuntu-lte (VMID 904)
15 0 * * 4 /root/automate_scripts/upgrade_proxmox_qm.sh 905 1000 &gt; /root/logs/backup-machine.log 2&gt;&amp;1      # Thursday: upgrade backup-machine (VMID 905)</pre></div>



<h3 class="wp-block-heading">Vérifications rapides / Dépannage</h3>



<ul class="wp-block-list">
<li>Assurez-vous que root peut se connecter en SSH depuis l’hôte Proxmox vers la VM (le script utilise <code>ssh root@&lt;vm-hostname&gt;</code>).</li>



<li>Vérifiez que DNS (ou <code>/etc/hosts</code>) résout correctement le hostname de la VM sur l’hôte Proxmox.</li>



<li>Si apt demande des confirmations, configurez des mises à niveau non interactives ou bloquez les paquets problématiques.</li>
</ul>



<p>Voilà ! Déposez le script dans /root/automate_scripts/, envoyez les journaux dans /root/logs/, et la maintenance hebdomadaire de votre machine virtuelle devient quasiment automatique.</p>
<p>Artykuł <a href="https://soban.pl/fr/proxmox-vm-auto-upgrade-script-4/">Proxmox Mises à jour automatiques des VM (qm + vzdump) avec tests réseau et restauration automatique</a> pochodzi z serwisu <a href="https://soban.pl/fr">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Dell WD19/WD19S : mise à jour du firmware sur Proxmox/Debian sans timeouts USB (fwupd + correctif autosuspend)</title>
		<link>https://soban.pl/fr/dell-wd19s-mise-a-jour-firmware-proxmox-debian-timeout-usb/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Sun, 18 Jan 2026 21:16:28 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=672</guid>

					<description><![CDATA[<p>Si vous essayez de mettre à jour le firmware d’une station d’accueil Dell WD19/WD19S sur Proxmox (ou Debian) via fwupdmgr, vous pouvez tomber sur l’erreur classique Operation timed out pendant l’étape Erasing…. En pratique, la mise à jour échoue à cause de la gestion d’énergie USB (autosuspend). Ci-dessous, vous trouverez un correctif simple et efficace, [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/fr/dell-wd19s-mise-a-jour-firmware-proxmox-debian-timeout-usb/">Dell WD19/WD19S : mise à jour du firmware sur Proxmox/Debian sans timeouts USB (fwupd + correctif autosuspend)</a> pochodzi z serwisu <a href="https://soban.pl/fr">soban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="669" src="https://soban.pl/wp-content/uploads/2026/01/image-1024x669.png" alt="" class="wp-image-667" style="aspect-ratio:1.5306645407436934;width:654px;height:auto" srcset="https://soban.pl/wp-content/uploads/2026/01/image-1024x669.png 1024w, https://soban.pl/wp-content/uploads/2026/01/image-300x196.png 300w, https://soban.pl/wp-content/uploads/2026/01/image-768x502.png 768w, https://soban.pl/wp-content/uploads/2026/01/image.png 1113w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><br>Si vous essayez de mettre à jour le firmware d’une station d’accueil Dell WD19/WD19S sur Proxmox (ou Debian) via <code>fwupdmgr</code>, vous pouvez tomber sur l’erreur classique <em>Operation timed out</em> pendant l’étape <strong>Erasing…</strong>. En pratique, la mise à jour échoue à cause de la gestion d’énergie USB (autosuspend). Ci-dessous, vous trouverez un correctif simple et efficace, ainsi qu’un script prêt à l’emploi à lancer sur un serveur ou un ordinateur portable.</p>



<h2 class="wp-block-heading">Symptômes</h2>



<p>Le plus souvent, pendant la mise à jour du firmware du dock (WD19/WD19S), vous verrez une erreur similaire à :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">failed to write-firmware: failed to erase bank: failed after 5 retries: failed to SetReport: USB error: Operation timed out [-7]</pre></div>



<p>À ce stade, <code>fwupdmgr</code> peut afficher le périphérique WD19S en <strong>Update State: Failed</strong> ou continuer à indiquer <strong>pending activation</strong>, mais le flash ne se termine jamais complètement.</p>



<h2 class="wp-block-heading">Pourquoi cela arrive-t-il ?</h2>



<p>Pendant le flash, le dock effectue des opérations longues. Si le système tente d’économiser de l’énergie sur l’USB (autosuspend), les transferts de contrôle USB peuvent échouer. Résultat : un timeout exactement lors de l’effacement de la banque de firmware (<em>erase bank</em>).</p>



<h2 class="wp-block-heading">Correctif rapide : désactiver l’autosuspend USB pendant la mise à jour</h2>



<p>La solution la plus simple consiste à définir temporairement l’autosuspend à <code>-1</code> (désactivé). Ce paramètre reste actif jusqu’au redémarrage (sauf si vous le rendez permanent via la cmdline du noyau), mais cela suffit largement le temps de la mise à jour.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">echo -1 &gt; /sys/module/usbcore/parameters/autosuspend</pre></div>



<p>Ensuite, lancez la mise à jour :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">fwupdmgr refresh --force
fwupdmgr update</pre></div>



<h2 class="wp-block-heading">Après la mise à jour : “pending activation” et nécessité de débrancher le câble</h2>



<p>Après une installation réussie du firmware pour WD19/WD19S, <code>fwupdmgr</code> affiche souvent le message suivant :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">The update will continue when the device USB cable has been unplugged.
WD19S is pending activation; use fwupdmgr activate to complete the update.</pre></div>



<p>Procédez dans cet ordre précis :</p>



<ul class="wp-block-list">
<li>Débranchez le câble USB-C du dock (côté ordinateur).</li>



<li>(Optionnel) Débranchez l’alimentation du dock pendant 10–15 secondes, puis rebranchez-la.</li>



<li>Rebranchez le câble USB-C.</li>



<li>Lancez l’activation :</li>
</ul>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">fwupdmgr activate</pre></div>



<p>Enfin, vérifiez le statut :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">fwupdmgr get-updates
fwupdmgr get-devices | less</pre></div>



<h2 class="wp-block-heading">Script prêt à l’emploi : installation + mise à jour + désactivation autosuspend (avec restauration)</h2>



<p>Ci-dessous, un script prêt à l’emploi qui :</p>



<ul class="wp-block-list">
<li>installe <code>fwupd</code></li>



<li>rafraîchit les métadonnées LVFS</li>



<li>désactive temporairement l’autosuspend USB (pour éviter les timeouts sur WD19S)</li>



<li>lance les mises à jour du firmware</li>



<li>restaure ensuite la valeur précédente d’autosuspend (même en cas d’échec)</li>
</ul>



<p>Vous pouvez copier le script directement depuis cet article, mais si vous préférez aller plus vite, vous pouvez le télécharger ici :</p>



<p><strong>https://soban.pl/bash/dell_updage.sh</strong></p>



<p>Exemple de téléchargement et d’exécution :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">cd /root/scripts
curl -fsSL https://soban.pl/bash/dell_updage.sh -o dell_updage.sh
chmod +x dell_updage.sh
./dell_updage.sh</pre></div>



<p>Si vous voulez prévisualiser le script avant de l’exécuter :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">curl -fsSL https://soban.pl/bash/dell_updage.sh | less</pre></div>



<p>Si <code>less</code> n’est pas installé :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">apt update
apt install -y less</pre></div>



<h2 class="wp-block-heading">Script (contenu complet)</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">#!/bin/bash
set -euo pipefail

# dell upgrade:
# - installs fwupd
# - refreshes metadata
# - runs fwupdmgr update
# - TEMPORARILY disables USB autosuspend to avoid WD19/WD19S timeouts
# - restores autosuspend setting after update

echo "[INFO] Installing fwupd..."
apt update
apt install -y fwupd

echo "[INFO] Refreshing firmware metadata..."
fwupdmgr refresh --force
fwupdmgr get-updates || true

# Save current autosuspend value (if exists)
AUTOSUSPEND_PATH="/sys/module/usbcore/parameters/autosuspend"
OLD_AUTOSUSPEND=""

if [[ -f "$AUTOSUSPEND_PATH" ]]; then
  OLD_AUTOSUSPEND="$(cat "$AUTOSUSPEND_PATH" || true)"
  echo "[INFO] Current usbcore autosuspend: ${OLD_AUTOSUSPEND}"
else
  echo "[WARN] autosuspend sysfs file not found: $AUTOSUSPEND_PATH"
fi

restore_autosuspend() {
  if [[ -f "$AUTOSUSPEND_PATH" &amp;&amp; -n "${OLD_AUTOSUSPEND}" ]]; then
    echo "[INFO] Restoring usbcore autosuspend back to: ${OLD_AUTOSUSPEND}"
    echo "${OLD_AUTOSUSPEND}" &gt; "$AUTOSUSPEND_PATH" || true
  fi
}
trap restore_autosuspend EXIT

# Disable autosuspend to prevent USB timeout during dock firmware erase/write
if [[ -f "$AUTOSUSPEND_PATH" ]]; then
  echo "[INFO] Disabling USB autosuspend (set to -1) to avoid dock update timeouts..."
  echo -1 &gt; "$AUTOSUSPEND_PATH"
fi

read -p ""Do you want to update the entire device? (y/n): " answer
if [[ "$answer" == "y" || "$answer" == "Y" ]]; then
  echo "[INFO] Running fwupdmgr update..."
  fwupdmgr update || {
    echo "[ERROR] fwupdmgr update failed."
    echo "[HINT] If this is Dell dock (WD19/WD19S), try: unplug USB-C, replug, then run: fwupdmgr activate"
    exit 1
  }

  echo "[INFO] Update finished."
  echo "[INFO] If you updated a Dell dock and it says 'pending activation':"
  echo "       1) Unplug USB-C cable from the dock"
  echo "       2) (Optional) Unplug dock power for 10 seconds, plug back"
  echo "       3) Run: fwupdmgr activate"
else
  echo "[INFO] Skipping firmware update."
fi

echo "[INFO] Done."</pre></div>



<h2 class="wp-block-heading">Exécuter le script</h2>



<p>Le plus simple :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">chmod +x dell_updage.sh
./dell_updage.sh</pre></div>



<h2 class="wp-block-heading">FAQ &amp; conseils</h2>



<ul class="wp-block-list">
<li><strong>La mise à jour échoue encore ?</strong> Débranchez tous les périphériques du dock (écrans/LAN/USB), ne laissez que l’alimentation et l’USB-C, faites un hard reset (débranchez l’alimentation 30s), puis réessayez.</li>



<li><strong>“pending activation” après la mise à jour</strong> – c’est normal pour WD19/WD19S. Vous devez débrancher l’USB-C, rebrancher, puis exécuter <code>fwupdmgr activate</code>.</li>



<li><strong>Est-ce que ça met à jour le BIOS du laptop ?</strong> Pas forcément. <code>fwupdmgr</code> liste séparément “System Firmware” (BIOS/UEFI) et le dock. Cet article se concentre sur le dock et le problème de timeout USB.</li>
</ul>



<h2 class="wp-block-heading">Résumé</h2>



<p>Si la mise à jour du firmware Dell WD19/WD19S échoue sur Proxmox/Debian pendant l’étape <em>Erasing…</em>, il suffit dans la plupart des cas de désactiver temporairement l’autosuspend USB. Le script ci-dessus le fait automatiquement, puis restaure le réglage précédent afin que le système continue de fonctionner normalement.</p>
<p>Artykuł <a href="https://soban.pl/fr/dell-wd19s-mise-a-jour-firmware-proxmox-debian-timeout-usb/">Dell WD19/WD19S : mise à jour du firmware sur Proxmox/Debian sans timeouts USB (fwupd + correctif autosuspend)</a> pochodzi z serwisu <a href="https://soban.pl/fr">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>iftop comme un bon outil de surveillance du trafic réseau</title>
		<link>https://soban.pl/fr/iftop-comme-bon-outil-surveillance-trafic-reseau/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Thu, 04 Nov 2021 13:58:02 +0000</pubDate>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=775</guid>

					<description><![CDATA[<p>iftop est un outil en ligne de commande permettant de surveiller la bande passante réseau en temps réel. Il affiche une liste continuellement mise à jour des connexions réseau ainsi que la quantité de données transférées entre elles. Les connexions sont présentées sous forme de tableau et peuvent être triées selon l’utilisation de la bande [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/fr/iftop-comme-bon-outil-surveillance-trafic-reseau/">iftop comme un bon outil de surveillance du trafic réseau</a> pochodzi z serwisu <a href="https://soban.pl/fr">soban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><strong>iftop</strong> est un outil en ligne de commande permettant de surveiller la bande passante réseau en temps réel. Il affiche une liste continuellement mise à jour des connexions réseau ainsi que la quantité de données transférées entre elles. Les connexions sont présentées sous forme de tableau et peuvent être triées selon l’utilisation de la bande passante.</p>



<p>iftop propose différentes options de filtrage permettant de limiter l’affichage à des hôtes, réseaux ou ports spécifiques. Il prend en charge IPv6 et peut afficher les adresses IP source et destination, les numéros de ports ainsi que les protocoles utilisés.</p>



<p>Cet outil est particulièrement utile pour surveiller le trafic en temps réel et identifier les services ou machines consommant le plus de bande passante. Il peut également aider à détecter des problèmes de performance réseau et faciliter le dépannage.</p>



<p>En résumé, iftop est un outil léger mais puissant, constituant un excellent complément à la boîte à outils de tout administrateur système ou réseau.</p>



<p>L’un des outils de surveillance réseau que j’utilise le plus est <strong>iftop</strong>. Il devient particulièrement utile lorsque la liaison réseau est saturée. En pratique, il peut aussi aider à détecter des schémas de trafic anormaux, notamment des attaques de type DoS. Dans l’exemple ci-dessous, je vais transférer un fichier volumineux vers une machine distante avec une limitation de bande passante et observer le trafic à l’aide de iftop.</p>



<p>Commençons par installer iftop sur la machine locale (dans cet exemple, Kali Linux) :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block">
<pre class="urvanov-syntax-highlighter-plain-tag"># apt install iftop</pre>
</div>



<figure class="wp-block-image size-full">
<img loading="lazy" decoding="async" width="904" height="422" src="https://soban.pl/wp-content/uploads/2021/11/image-4.png" alt="Installation de iftop sous Kali Linux" class="wp-image-286" srcset="https://soban.pl/wp-content/uploads/2021/11/image-4.png 904w, https://soban.pl/wp-content/uploads/2021/11/image-4-300x140.png 300w, https://soban.pl/wp-content/uploads/2021/11/image-4-768x359.png 768w" sizes="auto, (max-width: 904px) 100vw, 904px" />
</figure>



<p>La distribution importe peu — iftop est disponible dans la plupart des dépôts Linux, notamment sous Debian.</p>



<p>Installons maintenant iftop sur la machine distante (Debian Linux) :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block">
<pre class="urvanov-syntax-highlighter-plain-tag"># apt install iftop</pre>
</div>



<figure class="wp-block-image size-full">
<img loading="lazy" decoding="async" width="928" height="396" src="https://soban.pl/wp-content/uploads/2021/11/image-6.png" alt="Installation de iftop sous Debian Linux" class="wp-image-288" srcset="https://soban.pl/wp-content/uploads/2021/11/image-6.png 928w, https://soban.pl/wp-content/uploads/2021/11/image-6-300x128.png 300w, https://soban.pl/wp-content/uploads/2021/11/image-6-768x328.png 768w" sizes="auto, (max-width: 928px) 100vw, 928px" />
</figure>



<p>Pour commencer la surveillance du trafic réseau, exécutez iftop avec les paramètres <code>-PpNn</code> :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block">
<pre class="urvanov-syntax-highlighter-plain-tag"># iftop -PpNn</pre>
</div>



<figure class="wp-block-image size-full">
<img loading="lazy" decoding="async" width="963" height="509" src="https://soban.pl/wp-content/uploads/2021/11/image-9.png" alt="iftop en cours de surveillance du trafic" class="wp-image-292" srcset="https://soban.pl/wp-content/uploads/2021/11/image-9.png 963w, https://soban.pl/wp-content/uploads/2021/11/image-9-300x159.png 300w, https://soban.pl/wp-content/uploads/2021/11/image-9-768x406.png 768w" sizes="auto, (max-width: 963px) 100vw, 963px" />
</figure>



<p>Comme je suis connecté à la machine distante via SSH, je peux voir ma session SSH active dans la liste des connexions.</p>



<p>Revenons maintenant à la machine locale et créons un fichier volumineux :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block">
<pre class="urvanov-syntax-highlighter-plain-tag"># truncate -s 1G 1G-file.txt</pre>
</div>



<p>Après avoir créé le fichier de 1 Go, transférons-le vers la machine distante avec une limitation de bande passante :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block">
<pre class="urvanov-syntax-highlighter-plain-tag"># scp -l 800 -P2222 1G-file.txt soban@soban.pl:~</pre>
</div>



<figure class="wp-block-image size-full">
<img loading="lazy" decoding="async" width="960" height="128" src="https://soban.pl/wp-content/uploads/2021/11/image-10.png" alt="Transfert de fichier avec limitation de débit via scp" class="wp-image-293" srcset="https://soban.pl/wp-content/uploads/2021/11/image-10.png 960w, https://soban.pl/wp-content/uploads/2021/11/image-10-300x40.png 300w, https://soban.pl/wp-content/uploads/2021/11/image-10-768x102.png 768w" sizes="auto, (max-width: 960px) 100vw, 960px" />
</figure>



<p>L’option <code>-l 800</code> limite le débit à 800 Kbit/s. Pour convertir en KB/s, il faut diviser par 8, soit environ 100 KB/s.</p>



<figure class="wp-block-image size-full">
<img loading="lazy" decoding="async" width="957" height="354" src="https://soban.pl/wp-content/uploads/2021/11/image-11.png" alt="Trafic sortant affiché dans iftop" class="wp-image-294" srcset="https://soban.pl/wp-content/uploads/2021/11/image-11.png 957w, https://soban.pl/wp-content/uploads/2021/11/image-11-300x111.png 300w, https://soban.pl/wp-content/uploads/2021/11/image-11-768x284.png 768w" sizes="auto, (max-width: 957px) 100vw, 957px" />
</figure>



<figure class="wp-block-image size-full">
<img loading="lazy" decoding="async" width="964" height="501" src="https://soban.pl/wp-content/uploads/2021/11/image-12.png" alt="Trafic entrant affiché dans iftop" class="wp-image-295" srcset="https://soban.pl/wp-content/uploads/2021/11/image-12.png 964w, https://soban.pl/wp-content/uploads/2021/11/image-12-300x156.png 300w, https://soban.pl/wp-content/uploads/2021/11/image-12-768x399.png 768w" sizes="auto, (max-width: 964px) 100vw, 964px" />
</figure>



<p>De cette manière, il est possible d’observer à la fois le trafic sortant et entrant en temps réel. Bien que simple, iftop offre une excellente visibilité sur l’activité réseau en direct.</p>



<p>Lors d’attaques par force brute, on observe généralement un grand nombre de connexions de courte durée. En revanche, une attaque DoS vise à saturer la bande passante, ce qui se traduit par un trafic entrant élevé. Si l’augmentation du trafic est légitime, il est possible d’envisager une limitation du débit — des outils comme iptables peuvent être utilisés à cet effet.</p>
<p>Artykuł <a href="https://soban.pl/fr/iftop-comme-bon-outil-surveillance-trafic-reseau/">iftop comme un bon outil de surveillance du trafic réseau</a> pochodzi z serwisu <a href="https://soban.pl/fr">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Analyse SSL et suites de chiffrement avec Nmap sous Debian 11</title>
		<link>https://soban.pl/fr/nmap-scaning-ciphers-and-ssl-2/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Thu, 30 Sep 2021 14:15:56 +0000</pubDate>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=784</guid>

					<description><![CDATA[<p>Analyse SSL et suites de chiffrement avec Nmap sous Debian 11 Dans cet exemple, nous utilisons Debian 11 (Bullseye). Commençons par vérifier la version du système : Nmap est l’un des outils les plus puissants pour l’analyse réseau et les audits de sécurité. Il permet de scanner les ports ouverts, détecter les services actifs, identifier [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/fr/nmap-scaning-ciphers-and-ssl-2/">Analyse SSL et suites de chiffrement avec Nmap sous Debian 11</a> pochodzi z serwisu <a href="https://soban.pl/fr">soban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><strong>Analyse SSL et suites de chiffrement avec Nmap sous Debian 11</strong></p>



<p>Dans cet exemple, nous utilisons <strong>Debian 11 (Bullseye)</strong>. Commençons par vérifier la version du système :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag"># cat /etc/issue
Debian GNU/Linux 11 \n \l</pre></div>



<p><strong>Nmap</strong> est l’un des outils les plus puissants pour l’analyse réseau et les audits de sécurité. Il permet de scanner les ports ouverts, détecter les services actifs, identifier les versions logicielles et analyser les <strong>protocoles SSL/TLS ainsi que les suites de chiffrement</strong> supportées par un serveur.</p>



<p>L’installation sous Debian 11 est simple :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag"># apt install nmap</pre></div>



<p>Une fois installé, nous pouvons analyser un serveur HTTPS distant. Par exemple :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag"># nmap -sV --script ssl-enum-ciphers -p 443 google.com</pre></div>



<p>L’option <code>-sV</code> active la détection de version des services, tandis que <code>--script ssl-enum-ciphers</code> analyse les versions TLS et les suites de chiffrement disponibles. Cela permet de vérifier :</p>
<ul>
<li>les versions TLS activées (TLS 1.0, 1.1, 1.2, 1.3),</li>
<li>la présence de chiffrements faibles comme 3DES,</li>
<li>les vulnérabilités cryptographiques potentielles.</li>
</ul>



<p>Nmap est plus lent que des outils comme <strong>sslscan</strong>, mais il fournit des informations très détaillées, particulièrement utiles pour tester une infrastructure interne.</p>



<p><strong>TLS 1.0 :</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="384" src="https://soban.pl/wp-content/uploads/2021/09/image-1-1024x384.png" alt="Analyse TLS 1.0 avec Nmap" class="wp-image-37" srcset="https://soban.pl/wp-content/uploads/2021/09/image-1-1024x384.png 1024w, https://soban.pl/wp-content/uploads/2021/09/image-1-300x112.png 300w, https://soban.pl/wp-content/uploads/2021/09/image-1-768x288.png 768w, https://soban.pl/wp-content/uploads/2021/09/image-1.png 1086w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>TLS 1.1 :</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="399" src="https://soban.pl/wp-content/uploads/2021/09/image-2-1024x399.png" alt="Analyse TLS 1.1 avec Nmap" class="wp-image-39" srcset="https://soban.pl/wp-content/uploads/2021/09/image-2-1024x399.png 1024w, https://soban.pl/wp-content/uploads/2021/09/image-2-300x117.png 300w, https://soban.pl/wp-content/uploads/2021/09/image-2-768x299.png 768w, https://soban.pl/wp-content/uploads/2021/09/image-2.png 1091w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>TLS 1.2 :</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="583" src="https://soban.pl/wp-content/uploads/2021/09/image-3-1024x583.png" alt="Suites de chiffrement TLS 1.2 détectées par Nmap" class="wp-image-40" srcset="https://soban.pl/wp-content/uploads/2021/09/image-3-1024x583.png 1024w, https://soban.pl/wp-content/uploads/2021/09/image-3-300x171.png 300w, https://soban.pl/wp-content/uploads/2021/09/image-3-768x437.png 768w, https://soban.pl/wp-content/uploads/2021/09/image-3.png 1084w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>L’élément essentiel lors d’une analyse SSL/TLS est de vérifier l’absence de chiffrements faibles ou obsolètes.</p>



<p>Si vous voyez le message suivant :</p>
<p><em>« 64-bit block cipher 3DES vulnerable to SWEET32 attack »</em></p>
<p>cela signifie que le serveur prend encore en charge 3DES, vulnérable à l’attaque <strong>SWEET32</strong>. En environnement de production, ces chiffrements doivent être désactivés.</p>



<p>Pour analyser un site public, vous pouvez également utiliser :</p>
<p><strong>https://www.ssllabs.com/ssltest/</strong></p>
<p>Cependant, pour des serveurs internes, des environnements de test ou une infrastructure privée, utiliser <strong>Nmap directement depuis Debian</strong> reste une solution efficace.</p>



<p>Une analyse régulière SSL/TLS permet de maintenir un niveau de sécurité élevé et d’éliminer les protocoles obsolètes ainsi que les chiffrements faibles.</p>
<p>Artykuł <a href="https://soban.pl/fr/nmap-scaning-ciphers-and-ssl-2/">Analyse SSL et suites de chiffrement avec Nmap sous Debian 11</a> pochodzi z serwisu <a href="https://soban.pl/fr">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
