<?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/de/feed/" rel="self" type="application/rss+xml" />
	<link>https://soban.pl/de/</link>
	<description>IT, Linux, Servers, Security</description>
	<lastBuildDate>Fri, 27 Feb 2026 11:14:43 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>
	<item>
		<title>CrowdSec – Intelligenter Linux-Server-Schutz vor Botnetzen, Brute-Force-Angriffen und Internet-Scans</title>
		<link>https://soban.pl/de/crowdsec-linux-server-schutz/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Fri, 27 Feb 2026 10:48:22 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=797</guid>

					<description><![CDATA[<p>Wenn Sie einen Linux-Server mit Nginx, SSH oder WordPress betreiben, kennen Sie wahrscheinlich bereits Fail2Ban. Es ist ein gutes Tool, arbeitet jedoch lokal — es blockiert nur IP-Adressen, die Ihren Server angegriffen haben. CrowdSec funktioniert völlig anders. Es handelt sich um ein Sicherheitssystem, das auf gemeinsamer IP-Reputation basiert. Wenn tausende Server weltweit eine angreifende IP-Adresse [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/de/crowdsec-linux-server-schutz/">CrowdSec – Intelligenter Linux-Server-Schutz vor Botnetzen, Brute-Force-Angriffen und Internet-Scans</a> pochodzi z serwisu <a href="https://soban.pl/de">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>Wenn Sie einen Linux-Server mit Nginx, SSH oder WordPress betreiben, kennen Sie wahrscheinlich bereits <strong>Fail2Ban</strong>. Es ist ein gutes Tool, arbeitet jedoch lokal — es blockiert nur IP-Adressen, die <em>Ihren</em> Server angegriffen haben.</p>



<p><strong>CrowdSec</strong> funktioniert völlig anders. Es handelt sich um ein Sicherheitssystem, das auf gemeinsamer IP-Reputation basiert. Wenn tausende Server weltweit eine angreifende IP-Adresse erkennen, kann Ihr Server diese <strong>blockieren, bevor überhaupt ein Angriff erfolgt</strong>.</p>



<h2 class="wp-block-heading">Wie funktioniert CrowdSec?</h2>



<ul class="wp-block-list">
<li>analysiert Systemlogs (nginx, ssh, wordpress)</li>



<li>erkennt verdächtiges Verhalten</li>



<li>tauscht Informationen über angreifende IP-Adressen mit anderen Servern aus</li>



<li>blockiert den Datenverkehr auf Firewall-Ebene</li>
</ul>



<p>Das Ergebnis? Die meisten Bots und Internet-Scanner erreichen Ihren Nginx-Server gar nicht erst.</p>



<h2 class="wp-block-heading">Installation von CrowdSec auf Debian / Ubuntu</h2>



<p>Die Installation von CrowdSec ist sehr einfach und direkt über die Debian-Repositories verfügbar.</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>Während der Installation führt CrowdSec automatisch folgende Schritte aus:</p>



<ul class="wp-block-list">
<li>erstellt eine lokale API (LAPI)</li>



<li>registriert den Server in der CrowdSec Central API</li>



<li>lädt grundlegende Sicherheitsszenarien herunter</li>
</ul>



<h2 class="wp-block-heading">Installation des Firewall-Bouncers</h2>



<p>CrowdSec erkennt Bedrohungen, benötigt jedoch eine ausführende Komponente — den sogenannten <strong>Bouncer</strong>, der den Datenverkehr in der Firewall blockiert.</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>Standardmäßig verwendet der Bouncer <strong>nftables</strong> und fügt automatisch Regeln zum Blockieren schädlicher IP-Adressen hinzu.</p>



<h2 class="wp-block-heading">Installation der Sicherheitskollektionen</h2>



<p>Kollektionen enthalten Log-Parser sowie Angriffserkennungs-Szenarien.</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>Laden Sie anschließend die Konfiguration neu:</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">Konfiguration der Nginx-Logs</h2>



<p>Damit CrowdSec den HTTP-Verkehr analysieren kann, müssen die Nginx-Logdateien angegeben werden.</p>



<p>Datei bearbeiten:</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>Folgende Konfiguration hinzufügen:</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>Anschließend den Dienst neu starten:</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">Überprüfung der CrowdSec-Funktion</h2>



<p>Dienststatus:</p>



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



<p>Liste aktiver Sperren:</p>



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



<p>Systemmetriken:</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">Endergebnis</h2>



<p>Nach einer korrekten CrowdSec-Installation:</p>



<ul class="wp-block-list">
<li>blockiert der Server automatisch bekannte Botnetze</li>



<li>werden WordPress- und SSH-Brute-Force-Angriffe bereits auf Firewall-Ebene gestoppt</li>



<li>muss Nginx deutlich weniger schädlichen Traffic verarbeiten</li>



<li>werden CPU- und IO-Ressourcen spürbar entlastet</li>
</ul>



<p>CrowdSec kann als <strong>Weiterentwicklung von Fail2Ban</strong> betrachtet werden — ein System, das nicht nur lokal reagiert, sondern globale Bedrohungsinformationen nutzt.</p>
<p>Artykuł <a href="https://soban.pl/de/crowdsec-linux-server-schutz/">CrowdSec – Intelligenter Linux-Server-Schutz vor Botnetzen, Brute-Force-Angriffen und Internet-Scans</a> pochodzi z serwisu <a href="https://soban.pl/de">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Fail2Ban: Wie man Wiederholungstäter erkennt und für eine Woche sperrt (Recidive)</title>
		<link>https://soban.pl/de/fail2ban-recidive-nginx-wordpress-2/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Thu, 26 Feb 2026 12:21:30 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=762</guid>

					<description><![CDATA[<p>Wenn du Fail2Ban zusammen mit Nginx und WordPress verwendest, wirst du früher oder später eine Sache bemerken: dieselben IP-Adressen kommen immer wieder zurück. Sie werden für einige Minuten oder eine Stunde gebannt, verschwinden … und versuchen kurz darauf erneut /.env, /wp-login.php, /phpmyadmin oder andere bekannte Angriffs-Pfade. Die Lösung besteht nicht darin, die Filter aggressiver einzustellen. [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/de/fail2ban-recidive-nginx-wordpress-2/">Fail2Ban: Wie man Wiederholungstäter erkennt und für eine Woche sperrt (Recidive)</a> pochodzi z serwisu <a href="https://soban.pl/de">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>Wenn du Fail2Ban zusammen mit Nginx und WordPress verwendest, wirst du früher oder später eine Sache bemerken: dieselben IP-Adressen kommen immer wieder zurück. Sie werden für einige Minuten oder eine Stunde gebannt, verschwinden … und versuchen kurz darauf erneut <code>/.env</code>, <code>/wp-login.php</code>, <code>/phpmyadmin</code> oder andere bekannte Angriffs-Pfade.</p>



<p>Die Lösung besteht nicht darin, die Filter aggressiver einzustellen. Die Lösung ist <strong>recidive</strong> — eine zweite Schutzebene in Fail2Ban, die die Bann-Historie analysiert und Wiederholungstäter langfristig blockiert.</p>



<h2 class="wp-block-heading">Bezug zur vorherigen Konfiguration</h2>



<p>Falls du noch keine grundlegende Fail2Ban-Konfiguration für Nginx und WordPress hast, habe ich sie hier beschrieben:</p>



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



<p>In diesem Artikel konfigurieren wir Jails wie <code>nginx-exploit</code>, <code>nginx-secure</code> oder <code>sshd</code>. Recidive ersetzt diese Konfiguration nicht — es verstärkt sie.</p>



<h2 class="wp-block-heading">Wie man Wiederholungstäter in den Logs findet</h2>



<p>Zunächst solltest du prüfen, ob das Problem tatsächlich besteht. Wir extrahieren aus den Fail2Ban-Logs die Liste der IP-Adressen, die am häufigsten gebannt wurden:</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>Beispielausgabe (Adressen teilweise anonymisiert):</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>Wenn du Zahlen wie 8, 9 oder 13 siehst, bedeutet das, dass diese IPs nach Ablauf des Banns zurückkehren. Eine kurze <code>bantime</code> ist für sie lediglich eine technische Pause.</p>



<h2 class="wp-block-heading">Warum recidive besser ist als eine längere bantime</h2>



<ul class="wp-block-list">

<li>Du musst nicht jeden für 24 Stunden bannen, nur wegen eines Tippfehlers in der URL.</li>



<li>Du erhöhst nicht das Risiko, legitime Nutzer zu blockieren.</li>



<li>Die Strafe ist progressiv und betrifft nur wiederkehrende Adressen.</li>

</ul>



<p>Recidive analysiert <code>/var/log/fail2ban.log</code> und zählt, wie oft eine IP von anderen Jails gebannt wurde. Dadurch werden nur diejenigen „endgültig blockiert“, die bereits mehrfach aufgefallen sind.</p>



<h2 class="wp-block-heading">Recidive-Konfiguration (5 Bans in 24h = 7 Tage Bann)</h2>



<p>Füge folgenden Block in <code>/etc/fail2ban/jail.local</code> ein:</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>Am Ende der Datei einfügen:</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>Datei speichern und Fail2Ban neu starten:</p>



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



<p>Status des Jails prüfen:</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">Wie man prüft, wer nahe am recidive-Schwellenwert ist</h2>



<p>Wenn du IP-Adressen sehen möchtest, die bereits mehrere Bans haben und sich dem recidive-Schwellenwert nähern:</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">Zusammenfassung</h2>



<p>Recidive ist eine der einfachsten und zugleich effektivsten Methoden, um wiederkehrende Scanner und Bots einzudämmen. Statt aggressiv alle zu bannen — blockierst du nur diejenigen, die mehrfach zurückkehren.</p>



<p>In einer Umgebung mit mehreren Domains, Nginx-Reverse-Proxy und WordPress ist es praktisch ein Pflichtbestandteil der Konfiguration: weniger Log-Rauschen, weniger wiederholte Angriffe und weniger manuelle Analyse.</p>
<p>Artykuł <a href="https://soban.pl/de/fail2ban-recidive-nginx-wordpress-2/">Fail2Ban: Wie man Wiederholungstäter erkennt und für eine Woche sperrt (Recidive)</a> pochodzi z serwisu <a href="https://soban.pl/de">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Debian 13 (Trixie) → Proxmox VE 9 – Vereinfachte Installation auf einem reinen Debian-System</title>
		<link>https://soban.pl/de/proxmox-ve-9-installation-auf-debian-13/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Mon, 23 Feb 2026 16:28:43 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=735</guid>

					<description><![CDATA[<p>Proxmox VE 9 basiert auf Debian 13 (Trixie) und bringt einen neueren Kernel, aktualisierte Versionen von LXC und QEMU sowie einen verbesserten Virtualisierungs-Stack mit. Dieser Leitfaden beschreibt eine vereinfachte und automatisierte Methode zur Installation von Proxmox VE 9 auf einem sauberen Debian-13-System mithilfe von zwei Installationsskripten. Die Methode folgt demselben Ansatz wie mein früherer Leitfaden [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/de/proxmox-ve-9-installation-auf-debian-13/">Debian 13 (Trixie) → Proxmox VE 9 – Vereinfachte Installation auf einem reinen Debian-System</a> pochodzi z serwisu <a href="https://soban.pl/de">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 basiert auf Debian 13 (Trixie) und bringt einen neueren Kernel, aktualisierte Versionen von LXC und QEMU sowie einen verbesserten Virtualisierungs-Stack mit. Dieser Leitfaden beschreibt eine vereinfachte und automatisierte Methode zur Installation von Proxmox VE 9 auf einem sauberen Debian-13-System mithilfe von zwei Installationsskripten.</p>



<p>Die Methode folgt demselben Ansatz wie mein früherer Leitfaden zur Installation von Proxmox 8 auf Debian 12, wurde jedoch an Debian 13 und Proxmox VE 9 angepasst.</p>



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



<ul class="wp-block-list">
<li>Frische Installation von Debian 13 (Trixie)</li>



<li>Root-Zugriff</li>



<li>Internetverbindung</li>
</ul>



<p>Alle Befehle müssen als root ausgeführt werden.</p>



<h2 class="wp-block-heading">Teil 1 – Systemvorbereitung &#038; Installation des Proxmox-Kernels</h2>



<p>Lade das erste Skript herunter:</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>Dieses Skript:</p>



<ul class="wp-block-list">
<li>Setzt den Hostnamen und aktualisiert die Datei /etc/hosts</li>



<li>Installiert den Proxmox-Archive-Keyring (SHA512-verifiziert)</li>



<li>Fügt das Proxmox VE 9 Repository für Debian 13 hinzu</li>



<li>Führt ein vollständiges System-Upgrade durch</li>



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



<li>Startet das System neu</li>
</ul>



<h3 class="wp-block-heading">Inhalt von 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) -> 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: $*" >&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 -> /etc/hosts.backup"
cp -a /etc/hosts /etc/hosts.backup

log "Writing /etc/hosts (makes hostname resolvable locally)"
cat > /etc/hosts <<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 > /etc/apt/sources.list.d/pve-install-repo.list <<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">Teil 2 – Installation von Proxmox VE 9</h2>



<p>Nach dem Neustart herunterladen und ausführen:</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">Inhalt von 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) -> 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: $*" >&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"
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)"
apt remove -y linux-image-amd64 || true

mapfile -t KPKGS < <(dpkg -l | awk '/^ii  linux-image-/{print $2}' | grep -vE 'pve|proxmox' || true)
if (( ${#KPKGS[@]} > 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">Zugriff auf die Weboberfläche</h2>



<p>Nach Abschluss des zweiten Skripts öffnen Sie:</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>Melden Sie sich mit dem Benutzer <strong>root</strong> und Ihrem Root-Passwort an. Eine Zertifikatswarnung ist bei einer frischen Installation normal.</p>



<h2 class="wp-block-heading">Fehlerbehebung – 401 Unauthorized (pve-enterprise Repository)</h2>



<p>Falls nach der Installation oder bei der Ausführung von <code>apt update</code> folgender Fehler erscheint:</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>Dies bedeutet, dass das <strong>Enterprise-Repository</strong> aktiviert ist, aber Ihr System keine gültige Proxmox-Subskription besitzt.  
In diesem Leitfaden wird das <em>pve-no-subscription</em>-Repository verwendet, daher sollte das Enterprise-Repository deaktiviert werden.</p>



<p>Beheben Sie das Problem mit folgendem Befehl:</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>Danach sollte die Aktualisierung erfolgreich durchlaufen:</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>Wenn alles korrekt konfiguriert ist, erscheint die Meldung:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">All packages are up to date.</pre></div>



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



<p>Diese Methode bietet eine saubere und kontrollierte Möglichkeit, Proxmox VE 9 direkt auf Debian 13 bereitzustellen, ohne den ISO-Installer zu verwenden. Besonders geeignet ist sie für automatisierte Umgebungen, Labore und individuelle Infrastruktur-Setups.</p>
<p>Artykuł <a href="https://soban.pl/de/proxmox-ve-9-installation-auf-debian-13/">Debian 13 (Trixie) → Proxmox VE 9 – Vereinfachte Installation auf einem reinen Debian-System</a> pochodzi z serwisu <a href="https://soban.pl/de">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Fail2Ban + Nginx (WordPress-freundlich): 5 verdächtige Anfragen → 5-Minuten-Sperre (iptables-nft Fix, Tests und IP entsperren)</title>
		<link>https://soban.pl/de/fail2ban-nginx-wordpress-anleitung/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Mon, 16 Feb 2026 23:13:18 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=724</guid>

					<description><![CDATA[<p>Diese Anleitung zeigt die vollständige Installation und Konfiguration von Fail2Ban für Nginx und WordPress, um: Scanner und Bots zu blockieren (z. B. Zugriffe auf /.env, /.git, phpmyadmin usw.), den WordPress-Administrator nicht zu blockieren, eine IP nach 5 verdächtigen oder ungültigen Anfragen zu sperren, nur eine kurze Sperre von 5 Minuten anzuwenden (kein Risiko, sich selbst [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/de/fail2ban-nginx-wordpress-anleitung/">Fail2Ban + Nginx (WordPress-freundlich): 5 verdächtige Anfragen → 5-Minuten-Sperre (iptables-nft Fix, Tests und IP entsperren)</a> pochodzi z serwisu <a href="https://soban.pl/de">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">Diese Anleitung zeigt die vollständige Installation und Konfiguration von Fail2Ban für Nginx und WordPress, um:</h2>




<ul class="wp-block-list">
<li>Scanner und Bots zu blockieren (z. B. Zugriffe auf /.env, /.git, phpmyadmin usw.),</li>
<li>den WordPress-Administrator nicht zu blockieren,</li>
<li>eine IP nach 5 verdächtigen oder ungültigen Anfragen zu sperren,</li>
<li>nur eine kurze Sperre von 5 Minuten anzuwenden (kein Risiko, sich selbst lange auszusperren).</li>
</ul>




<h2 class="wp-block-heading">Schritt 1: Fail2Ban installieren</h2>




<p>Installieren Sie Fail2Ban:</p>




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





<p>Aktivieren und starten Sie den Dienst:</p>




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





<p>Überprüfen Sie den Status:</p>




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





<h2 class="wp-block-heading">Schritt 2: nginx-secure Filter erstellen</h2>




<p>Erstellen Sie die Filterdatei:</p>




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





<p>Fügen Sie folgende Konfiguration ein:</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|pma|adminer)(?:/|$)|/(?:\.git|\.svn|\.hg)(?:/|$)|/vendor/phpunit/|/cgi-bin/).*" \d{3} .*

    ^&lt;HOST&gt; - .* "(?:GET|POST|HEAD|PUT|DELETE|OPTIONS|PATCH|PROPFIND|CONNECT) (?!/(?:wp-login\.php|wp-admin/))[^"]*" (?:400|403|405|408|413|414|429|444|499) .*

    ^&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">Schritt 3: nginx-secure Jail erstellen</h2>




<p>Erstellen Sie die Jail-Konfigurationsdatei:</p>




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





<p>Fügen Sie folgende Konfiguration ein:</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 = 5
bantime  = 300

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

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





<h2 class="wp-block-heading">Schritt 4: Fail2Ban neu starten</h2>




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





<h2 class="wp-block-heading">Schritt 5: Firewall überprüfen</h2>




<p>Überprüfen Sie, ob die Fail2Ban-Chain existiert:</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">Externer Test</h2>




<p>Führen Sie dies von einer anderen Maschine aus:</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>Nach 5 Versuchen wird die IP-Adresse für 5 Minuten gesperrt.</p>




<h2 class="wp-block-heading">Gesperrte IPs anzeigen</h2>




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





<h2 class="wp-block-heading">IP entsperren</h2>




<p>Entsperren Sie Ihre IP manuell:</p>




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





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




<ul class="wp-block-list">
<li>schützt vor Scannern und Exploit-Versuchen,</li>
<li>blockiert das WordPress-Admin-Panel nicht,</li>
<li>verwendet eine kurze Sperrzeit von 5 Minuten,</li>
<li>voll kompatibel mit iptables-nft,</li>
<li>einfach zu testen und einfach zu entsperren.</li>
</ul>

<p>Artykuł <a href="https://soban.pl/de/fail2ban-nginx-wordpress-anleitung/">Fail2Ban + Nginx (WordPress-freundlich): 5 verdächtige Anfragen → 5-Minuten-Sperre (iptables-nft Fix, Tests und IP entsperren)</a> pochodzi z serwisu <a href="https://soban.pl/de">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Automatisches Upgrade von Debian 12 → Debian 13 mit optionalem PHP &#8211; und nginx-Update</title>
		<link>https://soban.pl/de/upgrade-debian-12-auf-13/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Mon, 16 Feb 2026 11:21:37 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=713</guid>

					<description><![CDATA[<p>Das Upgrade von Debian von Version 12 (bookworm) auf Version 13 (trixie) ist ein Vorgang, der auf Servern und Containern (z. B. Proxmox LXC oder virtuelle Maschinen) reproduzierbar und ohne Überraschungen durchgeführt werden sollte. Unten finden Sie eine einfache Anleitung sowie fertige Befehle zum Herunterladen und Ausführen des Upgrade-Skripts. Vor dem Upgrade: erstellen Sie ein [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/de/upgrade-debian-12-auf-13/">Automatisches Upgrade von Debian 12 → Debian 13 mit optionalem PHP &#8211; und nginx-Update</a> pochodzi z serwisu <a href="https://soban.pl/de">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="Debian 12 auf Debian 13 Upgrade" 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>Das Upgrade von Debian von Version 12 (<strong>bookworm</strong>) auf Version 13 (<strong>trixie</strong>) ist ein Vorgang, der auf Servern und Containern (z. B. Proxmox LXC oder virtuelle Maschinen) reproduzierbar und ohne Überraschungen durchgeführt werden sollte. Unten finden Sie eine einfache Anleitung sowie fertige Befehle zum Herunterladen und Ausführen des Upgrade-Skripts.</p>



<p><strong>Vor dem Upgrade:</strong> erstellen Sie ein Backup oder einen Snapshot. In Proxmox ist die beste Option <code>vzdump</code> oder ein Snapshot. Auf Bare-Metal-Systemen sichern Sie mindestens <code>/etc</code>, Anwendungen und Datenbanken.</p>



<ul class="wp-block-list">
<li><strong>Proxmox LXC / VM</strong>: Backup mit vzdump oder Snapshot.</li>
<li><strong>Server</strong>: Backup von /etc, /var/www, Datenbanken (MySQL/PostgreSQL) und SSL-Zertifikaten.</li>
</ul>



<p>Download des Skripts:</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) Backup vor dem Upgrade (Beispiele)</h2>



<p>Beispiel für ein Backup in Proxmox (auf dem Proxmox-Host ausführen, CTID/VMID ersetzen):</p>



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



<p>Beispiel für ein einfaches Dateisystem-Backup auf einem Server (ersetzt keinen vollständigen Snapshot, ist aber besser als nichts):</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) Skript herunterladen (wget / curl)</h2>



<p>Am einfachsten verwenden Sie <strong>wget</strong>. Wenn der Befehl <code>wget</code> trotz installiertem Paket nicht funktioniert, verwenden Sie den vollständigen Pfad <code>/usr/bin/wget</code>.</p>



<p><strong>Variante A (Standard wget):</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 mit vollständigem Pfad – hilfreich bei PATH-Problemen):</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) Skripthilfe (Parameter)</h2>



<p>Bevor Sie das Upgrade starten, zeigen Sie die verfügbaren Parameter und Beispiele an:</p>



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



<h2 class="wp-block-heading">4) Upgrade Debian 12 → Debian 13 (nur System)</h2>



<p>Wenn Sie derzeit Debian 12 (bookworm) verwenden und ein System-Upgrade durchführen möchten:</p>



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



<p>Das Skript erstellt ein Backup von <code>/etc/apt/sources.list</code>, wechselt die Repositories zu trixie, führt <code>apt update</code> und <code>apt full-upgrade</code> aus und anschließend <code>autoremove</code> und <code>autoclean</code>.</p>



<h2 class="wp-block-heading">5) Automatische Erkennung von PHP/nginx und Update bei Bedarf</h2>



<p>Wenn der Container oder die VM einen Webserver verwendet und das Skript automatisch PHP (nginx + <code>fastcgi_pass</code>) erkennen und PHP sowie nginx aktualisieren soll:</p>



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



<h2 class="wp-block-heading">6) PHP- und nginx-Upgrade erzwingen (PHP-FPM Socket Fix)</h2>



<p>Wenn Sie die Installation oder das Upgrade von PHP erzwingen und die nginx-Konfiguration automatisch auf den richtigen PHP-FPM-Socket umstellen möchten:</p>



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



<p>Dieser Befehl installiert PHP 8.2 (php-fpm und gängige Module) und ersetzt alte PHP-FPM-Socket-Pfade in der nginx-Konfiguration durch <code>/run/php/php8.2-fpm.sock</code>. Anschließend wird <code>nginx -t</code> ausgeführt und die Dienste werden neu geladen oder neu gestartet.</p>



<h2 class="wp-block-heading">7) Bereits Debian 13 installiert? Nur PHP/nginx Modus</h2>



<p>Wenn das System bereits Debian 13 (trixie) verwendet und Sie nur PHP und nginx aktualisieren möchten, ohne die System-Repositories zu ändern:</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) Testmodus (Dry-Run)</h2>



<p>Wenn Sie sehen möchten, was das Skript tun wird, ohne Änderungen vorzunehmen:</p>



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



<h2 class="wp-block-heading">9) Diagnose: wget installiert, aber funktioniert nicht</h2>



<p>Wenn <code>apt</code> meldet, dass wget installiert ist, aber die Shell <code>command not found</code> anzeigt, liegt meist ein PATH-Problem vor. Verwenden Sie in diesem Fall den vollständigen Pfad <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">Zusammenfassung</h2>



<p>Diese Lösung ermöglicht ein sicheres Upgrade von Debian 12 → Debian 13 und behebt optional typische PHP/nginx-Probleme nach dem Upgrade. Erstellen Sie immer ein Backup vor dem Upgrade und beginnen Sie mit <code>--help</code>, um die verfügbaren Optionen zu prüfen.</p>



<p>Skript: <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/de/upgrade-debian-12-auf-13/">Automatisches Upgrade von Debian 12 → Debian 13 mit optionalem PHP &#8211; und nginx-Update</a> pochodzi z serwisu <a href="https://soban.pl/de">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Proxmox Automatische VM-Updates (qm + vzdump) mit Netzwerktests und Auto-Wiederherstellung</title>
		<link>https://soban.pl/de/proxmox-vm-auto-upgrade-script-3/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 16:12:22 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=688</guid>

					<description><![CDATA[<p>Proxmox: Automatische VM-Updates (qm + vzdump) mit Netzwerktests und Auto-Wiederherstellung In diesem Artikel zeige ich ein einfaches (aber sehr effektives) Skript zur Automatisierung von Updates für virtuelle Maschinen in Proxmox VE. Das Skript kann: Woher bekommt man das Skript? Du kannst das Skript direkt von meiner Webseite herunterladen: soban.pl/bash/upgrade_proxmox_qm.sh Benötigte Ordner Bevor du die Automatisierung [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/de/proxmox-vm-auto-upgrade-script-3/">Proxmox Automatische VM-Updates (qm + vzdump) mit Netzwerktests und Auto-Wiederherstellung</a> pochodzi z serwisu <a href="https://soban.pl/de">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>


<h2 class="wp-block-heading">Proxmox: Automatische VM-Updates (qm + vzdump) mit Netzwerktests und Auto-Wiederherstellung</h2>



<p>In diesem Artikel zeige ich ein einfaches (aber sehr effektives) Skript zur Automatisierung von Updates für virtuelle Maschinen in Proxmox VE. Das Skript kann:</p>



<ul class="wp-block-list">
<li>ein Backup der VM erstellen (optional),</li>



<li>die VM starten, falls sie vorher ausgeschaltet war,</li>



<li>ein vollständiges System-Upgrade über apt durchführen und neu starten,</li>



<li>Netzwerktests vor und nach dem Update ausführen,</li>



<li>bei Problemen automatisch aus dem Backup wiederherstellen (optional),</li>



<li>am Ende die VM wieder herunterfahren, wenn sie ursprünglich gestoppt war.</li>
</ul>



<h3 class="wp-block-heading">Woher bekommt man das Skript?</h3>



<p>Du kannst das Skript direkt von meiner Webseite herunterladen:</p>



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



<h3 class="wp-block-heading">Benötigte Ordner</h3>



<p>Bevor du die Automatisierung startest, erstelle zwei Ordner: einen für Skripte und einen für 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">Skript installieren</h3>



<p>Lade das Skript nach <code>/root/automate_scripts/</code> herunter und mache es ausführbar:</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">Wie funktioniert es? (kurz erklärt)</h3>



<ul class="wp-block-list">
<li>Zuerst wird ein <strong>Backup</strong> (vzdump snapshot + zstd) erstellt – wenn Backups aktiviert sind.</li>



<li>Wenn die VM den Status <strong>stopped</strong> hatte, startet das Skript sie und wartet <strong>WAIT_TIME</strong> Sekunden.</li>



<li>Danach werden <strong>Netzwerktests VOR dem Update</strong> ausgeführt:
		<ul>
			
			
			
			
		</ul>
	





</li>



<li>Das Skript führt apt update/upgrade/dist-upgrade/autoremove/clean aus und startet am Ende die VM neu (<strong>reboot</strong>).</li>



<li>Nach dem Neustart wartet es erneut (<strong>WAIT_TIME</strong>) und führt die gleichen Tests <strong>NACH dem Update</strong> aus.</li>



<li>Wenn die Tests fehlschlagen und ein Backup vorhanden ist, wird automatisch <strong>qmrestore</strong> ausgeführt.</li>



<li>Am Ende fährt es die VM (optional) wieder herunter, wenn sie ursprünglich gestoppt war.</li>
</ul>



<h3 class="wp-block-heading">Manueller Start</h3>



<p>Das Skript erwartet genau zwei Argumente:</p>



<ul class="wp-block-list">
<li><code>VMID</code> – die VM-ID in Proxmox</li>



<li><code>TIME_SEC</code> – Wartezeit nach Start/Reboot (in Sekunden)</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>Tipp:</strong> Wähle WAIT_TIME passend zur realen Bootzeit der VM und der Dauer des Updates. In der Praxis sind <code>300</code> bis <code>1000</code> Sekunden meistens sinnvoll (je nach VM).</p>



<h3 class="wp-block-heading">Vollständiges Skript (zum Einfügen / Nachschlagen)</h3>



<p>Unten findest du das komplette Skript in der gleichen Form, wie es in dieser Automatisierung verwendet wird:</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 (wöchentlicher Zeitplan + separate Logs pro VM)</h3>



<p>Unten ist ein Beispiel für crontab: Updates laufen einmal pro Woche (jeden Wochentag eine andere VM), und Logs werden in separate Dateien unter <code>/root/logs/</code> geschrieben.</p>



<p>Bearbeite root crontab:</p>



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



<p>Füge folgende Regeln ein (Kommentare bleiben auf Englisch):</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">Schnelle Checks / Troubleshooting</h3>



<ul class="wp-block-list">
<li>Stelle sicher, dass root vom Proxmox-Host per SSH zur VM verbinden kann (das Skript nutzt <code>ssh root@&lt;vm-hostname&gt;</code>).</li>



<li>Prüfe, ob DNS (oder <code>/etc/hosts</code>) den VM-Hostname auf dem Proxmox-Host korrekt auflöst.</li>



<li>Wenn apt nach Bestätigungen fragt, stelle sicher, dass die VM non-interactive Upgrades unterstützt oder halte problematische Pakete zurück.</li>
</ul>



<p>Das war&#8217;s. Legen Sie das Skript in /root/automate_scripts/ ab, senden Sie die Protokolle nach /root/logs/, und Ihre wöchentliche VM-Wartung wird größtenteils zu einer Routineaufgabe.</p>
<p>Artykuł <a href="https://soban.pl/de/proxmox-vm-auto-upgrade-script-3/">Proxmox Automatische VM-Updates (qm + vzdump) mit Netzwerktests und Auto-Wiederherstellung</a> pochodzi z serwisu <a href="https://soban.pl/de">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Dell WD19/WD19S: Firmware-Update auf Proxmox/Debian ohne USB-Timeouts (fwupd + Autosuspend-Fix)</title>
		<link>https://soban.pl/de/dell-wd19s-firmware-update-proxmox-debian-usb-timeout-fix-2/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Sun, 18 Jan 2026 21:21:40 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=677</guid>

					<description><![CDATA[<p>Wenn du versuchst, die Firmware der Dell WD19/WD19S Dockingstation auf Proxmox (oder Debian) mit fwupdmgr zu aktualisieren, kannst du auf den klassischen Fehler Operation timed out während der Phase Erasing… stoßen. In der Praxis scheitert das Update oft wegen USB-Energieverwaltung (Autosuspend). Unten findest du einen einfachen, wirksamen Fix sowie ein fertiges Script zum Ausführen auf [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/de/dell-wd19s-firmware-update-proxmox-debian-usb-timeout-fix-2/">Dell WD19/WD19S: Firmware-Update auf Proxmox/Debian ohne USB-Timeouts (fwupd + Autosuspend-Fix)</a> pochodzi z serwisu <a href="https://soban.pl/de">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>Wenn du versuchst, die Firmware der Dell WD19/WD19S Dockingstation auf Proxmox (oder Debian) mit <code>fwupdmgr</code> zu aktualisieren, kannst du auf den klassischen Fehler <em>Operation timed out</em> während der Phase <strong>Erasing…</strong> stoßen. In der Praxis scheitert das Update oft wegen USB-Energieverwaltung (Autosuspend). Unten findest du einen einfachen, wirksamen Fix sowie ein fertiges Script zum Ausführen auf Server oder Laptop.</p>



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



<p>Am häufigsten erscheint während des Dock-Updates (WD19/WD19S) ein Fehler ähnlich wie dieser:</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>In diesem Fall kann <code>fwupdmgr</code> das WD19S-Gerät als <strong>Update State: Failed</strong> anzeigen oder ständig <strong>pending activation</strong> melden – der Flash-Vorgang wird aber nicht vollständig abgeschlossen.</p>



<h2 class="wp-block-heading">Warum passiert das?</h2>



<p>Beim Flashen führt das Dock lang laufende Operationen aus. Wenn das System versucht, über USB Strom zu sparen (Autosuspend), können USB-Control-Transfers fehlschlagen. Das Ergebnis ist ein Timeout genau beim Löschen der Firmware-Bank (<em>erase bank</em>).</p>



<h2 class="wp-block-heading">Schneller Fix: USB-Autosuspend während des Updates deaktivieren</h2>



<p>Die einfachste Lösung ist, Autosuspend temporär auf <code>-1</code> zu setzen (also deaktivieren). Diese Einstellung gilt bis zum Neustart (außer du machst sie dauerhaft per Kernel-Cmdline), reicht aber völlig für den Update-Prozess.</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>Danach startest du das Update:</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">Nach dem Update: „pending activation” und USB-Kabel trennen</h2>



<p>Nach einer erfolgreichen Firmware-Installation für WD19/WD19S gibt <code>fwupdmgr</code> oft diese Meldung aus:</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>Dann gehst du genau so vor:</p>



<ul class="wp-block-list">
<li>USB-C-Kabel vom Dock trennen (vom Laptop).</li>



<li>(Optional) Stromversorgung des Docks für 10–15 Sekunden trennen und wieder anschließen.</li>



<li>USB-C-Kabel wieder einstecken.</li>



<li>Aktivierung ausführen:</li>
</ul>



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



<p>Am Ende überprüfst du den Status:</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">Fertiges Script: Installation + Update + Autosuspend deaktivieren (mit Restore)</h2>



<p>Unten findest du ein fertiges Script, das:</p>



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



<li>LVFS-Metadaten aktualisiert</li>



<li>USB-Autosuspend temporär deaktiviert (damit WD19S keine Timeouts wirft)</li>



<li>Firmware-Updates ausführt</li>



<li>danach den vorherigen Autosuspend-Wert wiederherstellt (auch wenn das Update fehlschlägt)</li>
</ul>



<p>Du kannst das Script aus dem Artikel kopieren – oder schneller soll&#8217;s gehen: Du kannst es direkt herunterladen von:</p>



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



<p>Beispiel zum Download und Ausführen:</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>Wenn du den Inhalt vor dem Ausführen prüfen willst:</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>Falls <code>less</code> nicht installiert ist:</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 (vollständiger Inhalt)</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">Script ausführen</h2>



<p>Am einfachsten so:</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; Tipps</h2>



<ul class="wp-block-list">
<li><strong>Update schlägt immer noch fehl?</strong> Trenne alle Geräte vom Dock (Monitore/LAN/USB), lasse nur Strom und USB-C, führe einen Hard-Reset durch (Strom 30s abziehen) und versuche es erneut.</li>



<li><strong>„pending activation” nach dem Update</strong> – das ist bei WD19/WD19S normal. Du musst USB-C abziehen, wieder einstecken und dann <code>fwupdmgr activate</code> ausführen.</li>



<li><strong>Aktualisiert das den Laptop-BIOS?</strong> Nicht immer. <code>fwupdmgr</code> zeigt „System Firmware” (BIOS/UEFI) separat vom Dock. Dieser Artikel konzentriert sich auf das Dock und das USB-Timeout-Problem.</li>
</ul>



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



<p>Wenn ein Dell WD19/WD19S Firmware-Update auf Proxmox/Debian während <em>Erasing…</em> scheitert, reicht es in den meisten Fällen, USB-Autosuspend temporär zu deaktivieren. Das Script oben macht das automatisch und stellt danach die vorherige Einstellung wieder her, damit dein System normal weiterläuft.</p>
<p>Artykuł <a href="https://soban.pl/de/dell-wd19s-firmware-update-proxmox-debian-usb-timeout-fix-2/">Dell WD19/WD19S: Firmware-Update auf Proxmox/Debian ohne USB-Timeouts (fwupd + Autosuspend-Fix)</a> pochodzi z serwisu <a href="https://soban.pl/de">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>iftop als gutes Tool zur Überwachung des Netzwerkverkehrs</title>
		<link>https://soban.pl/de/iftop-als-gutes-tool-zur-ueberwachung-des-netzwerkverkehrs/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Thu, 04 Nov 2021 13:59:11 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=777</guid>

					<description><![CDATA[<p>iftop ist ein Kommandozeilen-Tool zur Echtzeit-Überwachung der Netzwerkbandbreite. Es zeigt eine kontinuierlich aktualisierte Liste von Netzwerkverbindungen sowie die zwischen ihnen übertragenen Datenmengen an. Die Verbindungen werden tabellarisch dargestellt und können nach Bandbreitennutzung sortiert werden. iftop bietet verschiedene Filteroptionen, mit denen sich die Anzeige auf bestimmte Hosts, Netzwerke oder Ports beschränken lässt. Es unterstützt IPv6 und [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/de/iftop-als-gutes-tool-zur-ueberwachung-des-netzwerkverkehrs/">iftop als gutes Tool zur Überwachung des Netzwerkverkehrs</a> pochodzi z serwisu <a href="https://soban.pl/de">soban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><strong>iftop</strong> ist ein Kommandozeilen-Tool zur Echtzeit-Überwachung der Netzwerkbandbreite. Es zeigt eine kontinuierlich aktualisierte Liste von Netzwerkverbindungen sowie die zwischen ihnen übertragenen Datenmengen an. Die Verbindungen werden tabellarisch dargestellt und können nach Bandbreitennutzung sortiert werden.</p>



<p>iftop bietet verschiedene Filteroptionen, mit denen sich die Anzeige auf bestimmte Hosts, Netzwerke oder Ports beschränken lässt. Es unterstützt IPv6 und kann Quell- und Ziel-IP-Adressen, Portnummern sowie verwendete Protokolle anzeigen.</p>



<p>Das Tool ist besonders nützlich, um den Netzwerkverkehr in Echtzeit zu überwachen und Dienste oder Hosts zu identifizieren, die die meiste Bandbreite verbrauchen. Zudem hilft es dabei, Leistungsprobleme im Netzwerk zu erkennen und die Fehlersuche zu erleichtern.</p>



<p>Zusammenfassend ist iftop ein leichtgewichtiges, aber leistungsstarkes Werkzeug und eine wertvolle Ergänzung für das Toolkit jedes System- oder Netzwerkadministrators.</p>



<p>Eines der nützlichsten Netzwerk-Monitoring-Tools, das ich verwende, ist <strong>iftop</strong>. Besonders hilfreich ist es, wenn die Netzwerkverbindung ausgelastet oder gesättigt ist. In der Praxis kann es auch dabei helfen, ungewöhnliche Verkehrsmuster zu erkennen, beispielsweise DoS-Angriffe. Im folgenden Beispiel übertrage ich eine große Datei auf eine entfernte Maschine mit begrenzter Bandbreite und beobachte dabei den Datenverkehr mit iftop.</p>



<p>Zunächst installieren wir iftop auf der lokalen Maschine (in diesem Fall 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 von iftop unter 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>Die verwendete Distribution spielt keine große Rolle — iftop ist in den meisten Linux-Repositories verfügbar, unter anderem auch unter Debian.</p>



<p>Nun installieren wir iftop auf der entfernten Maschine (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 von iftop unter 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>Um die Überwachung des Netzwerkverkehrs zu starten, führen wir iftop mit den Parametern <code>-PpNn</code> aus:</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 während der Überwachung des Netzwerkverkehrs" 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>Da ich per SSH mit der entfernten Maschine verbunden bin, sehe ich meine aktive SSH-Sitzung in der Verbindungsübersicht.</p>



<p>Nun wechseln wir zurück zur lokalen Maschine und erstellen eine große Datei:</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>Nachdem die 1-GB-Datei erstellt wurde, übertragen wir sie mit einer Bandbreitenbegrenzung auf die entfernte Maschine:</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="Dateiübertragung mit Geschwindigkeitsbegrenzung über 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>Die Option <code>-l 800</code> begrenzt die Übertragungsrate auf 800 Kbit/s. Um dies in KB/s umzurechnen, teilt man durch 8 — das ergibt ungefähr 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="Ausgehender Netzwerkverkehr in 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="Eingehender Netzwerkverkehr in 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>Auf diese Weise lässt sich sowohl ausgehender als auch eingehender Datenverkehr in Echtzeit beobachten. Obwohl iftop ein einfaches Tool ist, bietet es eine sehr gute Transparenz der aktuellen Netzwerkaktivität.</p>



<p>Bei Brute-Force-Angriffen sieht man in der Regel viele kurzlebige Verbindungen. Ein DoS-Angriff hingegen zielt darauf ab, die Bandbreite zu saturieren, was sich durch hohen eingehenden Datenverkehr bemerkbar macht. Ist ein Traffic-Anstieg legitim, kann man eine Begrenzung der Verbindungsgeschwindigkeit in Betracht ziehen — beispielsweise mit iptables.</p>
<p>Artykuł <a href="https://soban.pl/de/iftop-als-gutes-tool-zur-ueberwachung-des-netzwerkverkehrs/">iftop als gutes Tool zur Überwachung des Netzwerkverkehrs</a> pochodzi z serwisu <a href="https://soban.pl/de">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SSL &#8211; und TLS-Analyse mit Nmap unter Debian 11</title>
		<link>https://soban.pl/de/ssl-tls-analyse-nmap-debian-11/</link>
		
		<dc:creator><![CDATA[soban]]></dc:creator>
		<pubDate>Thu, 30 Sep 2021 14:16:46 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://soban.pl/?p=786</guid>

					<description><![CDATA[<p>SSL- und TLS-Analyse mit Nmap unter Debian 11 In diesem Beispiel verwenden wir Debian 11 (Bullseye). Zunächst überprüfen wir die Systemversion: Nmap ist eines der leistungsfähigsten Open-Source-Tools für Netzwerkscans und Sicherheitsanalysen. Es ermöglicht das Scannen offener Ports, das Erkennen aktiver Dienste, die Identifikation von Softwareversionen sowie die Analyse unterstützter SSL/TLS-Protokolle und Cipher Suites. Die Installation [&#8230;]</p>
<p>Artykuł <a href="https://soban.pl/de/ssl-tls-analyse-nmap-debian-11/">SSL &#8211; und TLS-Analyse mit Nmap unter Debian 11</a> pochodzi z serwisu <a href="https://soban.pl/de">soban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><strong>SSL- und TLS-Analyse mit Nmap unter Debian 11</strong></p>



<p>In diesem Beispiel verwenden wir <strong>Debian 11 (Bullseye)</strong>. Zunächst überprüfen wir die Systemversion:</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> ist eines der leistungsfähigsten Open-Source-Tools für Netzwerkscans und Sicherheitsanalysen. Es ermöglicht das Scannen offener Ports, das Erkennen aktiver Dienste, die Identifikation von Softwareversionen sowie die Analyse unterstützter <strong>SSL/TLS-Protokolle und Cipher Suites</strong>.</p>



<p>Die Installation unter Debian 11 ist einfach:</p>



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



<p>Nach der Installation können wir einen entfernten HTTPS-Server analysieren. Zum Beispiel:</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>Die Option <code>-sV</code> aktiviert die Diensterkennung mit Versionsinformationen, während <code>--script ssl-enum-ciphers</code> die unterstützten TLS-Versionen und Cipher Suites analysiert. Dadurch können Sie überprüfen:</p>
<ul>
<li>welche TLS-Versionen aktiv sind (TLS 1.0, 1.1, 1.2, 1.3),</li>
<li>ob schwache Verschlüsselungen wie 3DES unterstützt werden,</li>
<li>ob potenzielle kryptografische Schwachstellen vorhanden sind.</li>
</ul>



<p>Nmap ist langsamer als Tools wie <strong>sslscan</strong>, liefert jedoch sehr detaillierte Ergebnisse und eignet sich besonders für interne Infrastrukturtests.</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="TLS 1.0 Analyse mit 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="TLS 1.1 Analyse mit 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="TLS 1.2 Cipher Suites erkannt mit 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>Der wichtigste Punkt bei der SSL/TLS-Analyse ist die Identifikation schwacher oder veralteter Verschlüsselungsverfahren.</p>



<p>Wenn folgende Meldung erscheint:</p>
<p><em>&#8222;64-bit block cipher 3DES vulnerable to SWEET32 attack&#8220;</em></p>
<p>bedeutet dies, dass der Server noch 3DES unterstützt, welches für die <strong>SWEET32-Attacke</strong> anfällig ist. In Produktionsumgebungen sollte diese Verschlüsselung deaktiviert werden.</p>



<p>Für die Analyse öffentlicher Websites können Sie zusätzlich folgenden Dienst nutzen:</p>
<p><strong>https://www.ssllabs.com/ssltest/</strong></p>
<p>Für interne Server, Testumgebungen oder private Infrastrukturen ist jedoch die direkte Analyse mit <strong>Nmap unter Debian</strong> eine effiziente und unabhängige Lösung.</p>



<p>Regelmäßige SSL/TLS-Scans helfen dabei, ein hohes Sicherheitsniveau aufrechtzuerhalten und veraltete Protokolle sowie schwache Cipher Suites konsequent zu entfernen.</p>
<p>Artykuł <a href="https://soban.pl/de/ssl-tls-analyse-nmap-debian-11/">SSL &#8211; und TLS-Analyse mit Nmap unter Debian 11</a> pochodzi z serwisu <a href="https://soban.pl/de">soban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
