<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Betrieb – Serverküche</title><link>https://serverkueche.de/tags/betrieb/</link><description>Betrieb – Neueste Beiträge von Serverküche</description><generator>Hugo</generator><language>de-DE</language><managingEditor>feedback@serverkueche.de (Serverküche)</managingEditor><webMaster>feedback@serverkueche.de (Serverküche)</webMaster><copyright>2026 Serverküche</copyright><lastBuildDate>Sat, 24 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://serverkueche.de/tags/betrieb/index.xml" rel="self" type="application/rss+xml"/><item><title>100 Tage netcup: was dir vorher niemand sagt</title><link>https://serverkueche.de/tutorials/100-tage-netcup/</link><pubDate>Sat, 24 Oct 2026 00:00:00 +0000</pubDate><author>feedback@serverkueche.de (Serverküche)</author><guid>https://serverkueche.de/tutorials/100-tage-netcup/</guid><description>Ein netcup-VPS, hundert Tage im Dauerbetrieb: was wirklich passiert ist, welche Eigenheiten Zeit kosten – und was die Preisrunde für Bestandskunden bedeutet.</description><content:encoded><![CDATA[<p>Auf diesem VPS entsteht jedes Rezept dieser Seite. Seit dem 16. Juli läuft er, und in der Zeit
haben wir rund zwanzig Anwendungen darauf aufgesetzt, getestet und wieder abgeräumt. Dieser
Artikel ist die Bilanz: was tatsächlich passiert ist, und die Eigenheiten, über die wir
gestolpert sind.</p>
<p>Kein Werbetext. Die unangenehmste Zahl steht gleich in Schritt 2.</p>
<h2 id="was-bauen-wir">Was bauen wir?</h2>
<p>Nichts – wir berichten. Am Ende weißt du, was dich bei netcup im Dauerbetrieb erwartet, welche
vier Eigenheiten dich sonst je einen Abend kosten, was die Preisrunde vom September für dich
bedeutet – je nachdem, ob du Bestandskunde bist oder neu bestellst – und wie netcup auf eine
kritische Kernel-Lücke reagiert hat.</p>
<p>Die Maschine ist ein <strong>VPS 1000 G12</strong> mit 4 vCore, 8 GB RAM und 251 GB Platte, auf Debian 13.
Darauf laufen dauerhaft nur ein Reverse Proxy und wechselnde Test-Setups.</p>
<div class="not-prose my-6 rounded-lg border-l-4 p-4 border-sky-300 bg-sky-50 dark:border-sky-800 dark:bg-sky-900/20">
  <p class="mb-1 flex items-center gap-2 font-semibold text-slate-900 dark:text-white">
    <span aria-hidden="true">ℹ️</span>Stand der Zahlen
  </p>
  <div class="prose-kitchen text-sm">Die Messwerte in den Schritten 1 und 2 stammen vom <strong>3. Oktober 2026</strong>, also von Tag 79. Bis zum
Erscheinen dieses Artikels sind es hundert Tage; an den Größenordnungen ändert das nichts, die
Werte sind aber bewusst datiert statt gerundet. Was an Tag 94 passierte, steht in Schritt 7.</div>
</div>
<h2 id="voraussetzungen">Voraussetzungen</h2>
<p>Keine – das hier ist ein Bericht, kein Rezept. Wenn du mitlesen und bei dir nachsehen willst,
brauchst du nur einen SSH-Zugang zu deinem eigenen Server. Die Befehle in Schritt 2 laufen auf
jedem Linux-Host mit Docker.</p>
<p>Wer noch gar keinen Server hat: Die Tarife stehen in der
<a href="/netcup-empfehlung/">netcup-Übersicht</a>, und was dein Vorhaben wirklich braucht, schätzt der
<a href="/serverempfehlung/">Server-Rechner</a>.</p>
<div class="not-prose my-6 overflow-hidden rounded-xl border border-paprika-200 bg-paprika-50 dark:border-paprika-800 dark:bg-paprika-900/20"
     data-track-content data-content-name="Affiliate-Box · /tutorials/100-tage-netcup/" data-content-piece="VPS 1000 G12.5">
  <div class="flex items-center justify-between border-b border-paprika-200 bg-paprika-100 px-4 py-1.5 text-xs font-semibold uppercase tracking-wide text-paprika-700 dark:border-paprika-800 dark:bg-paprika-900/40 dark:text-paprika-300">
    <span>🍳 Empfehlung</span>
    <span title="Mit * markierte Links sind Affiliate-Links.">Anzeige</span>
  </div>
  <div class="flex flex-col gap-4 p-4 sm:flex-row sm:items-center sm:justify-between">
    <div>
      <p class="text-lg font-bold text-slate-900 dark:text-white">VPS 1000 G12.5</p>
      <p class="mt-1 text-sm text-slate-600 dark:text-slate-300">4 vCore · 8 GB RAM · 128 GB SSD</p>
      <p class="mt-1 text-sm font-semibold text-paprika-700 dark:text-paprika-400">ab 14,50 €/Monat</p>
      <p class="mt-2 text-sm text-slate-600 dark:text-slate-400">Der Server aus diesem Bericht. 8 GB RAM reichen für einen Reverse Proxy und eine Handvoll Dienste.</p>
    </div>
    <a href="https://www.netcup.com/de/server/vps/vps-1000-g12.5-24m-eu?ref=44083#vps-1000-g12.5-12m-eu" rel="sponsored noopener" target="_blank"
   data-track-event="Affiliate|netcup: Affiliate-Box|VPS 1000 G12.5 · {page}"
   class="inline-flex shrink-0 items-center justify-center rounded-lg bg-paprika-600 px-5 py-2.5 font-semibold text-white transition-colors hover:bg-paprika-700">
  Zu netcup →
</a>

  </div><div class="px-4 pb-4"><div class="not-prose my-3 rounded-lg border border-herb-500/40 bg-herb-50 px-3 py-2 text-sm text-slate-700 dark:bg-herb-900/20 dark:text-slate-200"
     data-voucher-api="vps-1000" data-voucher-msg-empty="Gerade ist für diesen Tarif kein Code frei – nimm den 5,95-€-Code." data-voucher-msg-limit="Für heute sind keine weiteren Codes drin – nimm den 5,95-€-Code oder versuch es morgen." data-voucher-msg-error="Der Code ließ sich gerade nicht abrufen – nimm den 5,95-€-Code."
     data-voucher-hint="Warenkorb vorher leeren – der Code legt den Server selbst hinein.">
  <p class="flex flex-wrap items-center gap-x-2 gap-y-1"><span>💶 <span class="font-semibold">1 Monat gratis</span>:</span>
    <button type="button" data-voucher-reveal data-copy-title="Zum Kopieren klicken"
            class="cursor-pointer rounded bg-white px-2 py-0.5 font-mono text-sm font-semibold text-herb-800 hover:ring-2 hover:ring-herb-500/40 dark:bg-slate-800 dark:text-herb-400">Code anzeigen</button>
    <button type="button" data-voucher-next hidden
            class="rounded border border-herb-500/40 px-2 py-0.5 text-xs text-herb-800 hover:bg-white dark:text-herb-400 dark:hover:bg-slate-800">anderer Code</button>
  </p><p class="mt-1 text-xs text-slate-500 dark:text-slate-400" data-voucher-hint-target>
    Einmal einlösbar, gilt für VPS 1000 G12.5.
    <a href="https://www.netcup.com/de/checkout/warenkorb?ref=44083" rel="sponsored noopener" target="_blank"
       data-track-event="Affiliate|netcup: Gutschein einlösen|VPS 1000 G12.5 · {page}"
       class="font-medium text-herb-800 underline underline-offset-2 hover:text-herb-900 dark:text-herb-400">Im Warenkorb einlösen →</a>
  </p><p class="mt-2 flex flex-wrap items-center gap-x-2 gap-y-1 border-t border-herb-500/30 pt-2">
    <span>💶 <span class="font-semibold">5,95 € Gutschein</span> für netcup-Neukunden:</span>
    <button type="button" data-voucher-code data-track-voucher="36nc17844976032"
            title="Zum Kopieren klicken" class="cursor-pointer rounded bg-white px-2 py-0.5 font-mono text-sm font-semibold text-herb-800 hover:ring-2 hover:ring-herb-500/40 dark:bg-slate-800 dark:text-herb-400">36nc17844976032</button>
    <span class="text-xs text-slate-500 dark:text-slate-400">immer gültig · nicht für Domains und VPS Lite</span>
  </p><p class="mt-1 text-xs"><a href="/netcup-gutschein/" class="font-medium text-herb-800 underline underline-offset-2 hover:text-herb-900 dark:text-herb-400">Alle netcup-Gutscheine →</a></p>
</div></div>
</div>

<h2 id="schritt-für-schritt">Schritt für Schritt</h2>
<h3 id="schritt-1-was-in-79-tagen-passiert-ist">Schritt 1: Was in 79 Tagen passiert ist</h3>
<p>Das Langweiligste zuerst, und das ist als Kompliment gemeint:</p>
<table>
	<thead>
			<tr>
					<th>Beobachtung</th>
					<th>Wert</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Laufzeit ohne Neustart</td>
					<td>79 Tage</td>
			</tr>
			<tr>
					<td>Fehlgeschlagene systemd-Dienste</td>
					<td>0</td>
			</tr>
			<tr>
					<td>Ungeplante Ausfälle</td>
					<td>keine bemerkt</td>
			</tr>
			<tr>
					<td>Protokollierte <code>apt</code>-Läufe</td>
					<td>39</td>
			</tr>
			<tr>
					<td>Automatische Sicherheitsupdates mit Paketen</td>
					<td>2</td>
			</tr>
			<tr>
					<td>Ausgestellte Let&rsquo;s-Encrypt-Zertifikate</td>
					<td>31</td>
			</tr>
	</tbody>
</table>
<p>Der Server lief durch. Keine Ausfälle, keine abgestürzten Dienste, keine Supportfälle. Die
automatischen Sicherheitsupdates haben in der ganzen Zeit genau zweimal etwas zu tun gehabt –
beide Male Docker, am 21. Juli. Das ist kein Mangel, sondern Debian stable: Es passiert selten
etwas, und wenn, dann gezielt.</p>
<p>Die 39 <code>apt</code>-Läufe sagen dabei mehr über uns als über den Server: Es sind fast ausschließlich
unsere eigenen Installationen für Tutorials, nicht automatische Wartung. Ein Server hält sich
eben nicht selbst sauber. Was ohne Zutun passiert, sind genau jene zwei Sicherheitsupdates –
alles andere steht und fällt damit, dass jemand hinsieht.</p>
<p>Zwei Einschränkungen, damit die Zahl nicht besser klingt als sie ist. Erstens sagt „79 Tage
Laufzeit&quot; nichts über Verfügbarkeit aus – wir haben nicht von außen gemessen, sondern nur
festgestellt, dass die Maschine nicht neu gestartet ist. Zweitens gilt das für den <strong>Host</strong>,
nicht für alles darauf:</p>
<div class="sk-code">
  <span class="sk-code-head">Terminal</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker ps --format <span class="s2">&#34;{{.Names}}\t{{.Status}}&#34;</span></span></span></code></pre></div>
</div>
<div class="sk-code">
  <span class="sk-code-head">Ausgabe</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">traefik-traefik-1   Up 2 weeks</span></span></code></pre></div>
</div>
<p>Der Reverse Proxy lief eben <strong>nicht</strong> 79 Tage, sondern zwei Wochen. Ein Docker-Update hat ihn
irgendwann neu gestartet. Das ist unkritisch und genau das, was <code>restart: unless-stopped</code>
leisten soll – aber „der Server läuft seit elf Wochen&quot; und „dein Dienst lief elf Wochen&quot; sind
zwei verschiedene Aussagen.</p>
<p>Eine Zahl aus der Tabelle verdient noch einen Blick: <strong>31 Let&rsquo;s-Encrypt-Zertifikate</strong> in 79
Tagen. Jedes Test-Setup bekam eine eigene Subdomain, und für jede holt Traefik ein eigenes
Zertifikat. Das ist unauffällig, bis man weiß, dass Let&rsquo;s Encrypt pro registrierter Domain
<strong>50 Zertifikate in 7 Tagen</strong> ausstellt – global, unabhängig davon, welcher Account fragt.
Danach füllt sich das Kontingent nur langsam wieder auf, mit einem Zertifikat alle gut drei
Stunden.</p>
<p>Über 79 Tage verteilt ist das völlig unkritisch. Wer aber an einem Nachmittag zwanzig
Subdomains durchprobiert und dabei ein paarmal von vorn anfängt, steht plötzlich vor einem
Proxy, der keine Zertifikate mehr bekommt – und sucht den Fehler bei sich. Für Testreihen gibt
es deshalb Let&rsquo;s Encrypts Staging-Umgebung, die dieselbe Mechanik ohne Kontingent durchspielt.</p>
<h3 id="schritt-2-die-platte-füllt-sich--und-es-sind-nicht-deine-daten">Schritt 2: Die Platte füllt sich – und es sind nicht deine Daten</h3>
<p>Hier die unangenehme Zahl. Ein Blick auf die Platte:</p>
<div class="sk-code">
  <span class="sk-code-head">Terminal</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">df -h /</span></span></code></pre></div>
</div>
<div class="sk-code">
  <span class="sk-code-head">Ausgabe</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">/dev/vda4       251G   73G  169G  31% /</span></span></code></pre></div>
</div>
<p>73 GB belegt. Auf einem Server, auf dem genau <strong>ein</strong> Container läuft. Die Erklärung:</p>
<div class="sk-code">
  <span class="sk-code-head">Terminal</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker system df</span></span></code></pre></div>
</div>
<div class="sk-code">
  <span class="sk-code-head">Ausgabe</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
</span></span><span class="line"><span class="cl">Images          107       1         74.58GB   68.43GB (91%)
</span></span><span class="line"><span class="cl">Containers      1         1         8.192kB   0B (0%)
</span></span><span class="line"><span class="cl">Build Cache     33        0         209.5MB   4.096kB</span></span></code></pre></div>
</div>
<p><strong>107 Images, 74,58 GB, davon 91 % wegwerfbar.</strong> Nicht die Daten füllen den Server, sondern die
Reste. Jedes <code>docker compose down</code> räumt Container und Volumes ab – die heruntergeladenen Images
bleiben liegen. Die größten Brocken bei uns:</p>
<div class="sk-code">
  <span class="sk-code-head">Ausgabe</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">3.69GB  mcr.microsoft.com/playwright:v1.56.0-noble
</span></span><span class="line"><span class="cl">3.50GB  ghcr.io/paperless-ngx/paperless-ngx:3.1.3
</span></span><span class="line"><span class="cl">3.45GB  mcr.microsoft.com/playwright:v1.61.1-noble
</span></span><span class="line"><span class="cl">3.38GB  stirlingtools/stirling-pdf:2.14.3
</span></span><span class="line"><span class="cl">3.12GB  ghcr.io/immich-app/immich-server:v3.1.0
</span></span><span class="line"><span class="cl">3.11GB  ghcr.io/immich-app/immich-server:v3.0.3</span></span></code></pre></div>
</div>
<p>Zweimal Playwright, zweimal Immich – jedes Update legt ein neues Image daneben, das alte bleibt.
Nach ein paar Monaten hat man eine Image-Halde, von der man nichts merkt, bis die Platte eng wird.</p>
<p>Das ist der Punkt, an dem die Tarifgeneration plötzlich zählt. Unser VPS 1000 ist ein <strong>G12</strong> mit
251 GB. Der aktuelle G12.5 kommt mit <strong>128 GB</strong>. Dieselbe Halde wäre dort schon über die Hälfte
der Platte – und das, bevor überhaupt Nutzdaten anfallen.</p>
<p>Aufräumen ist eine Zeile:</p>
<div class="sk-code">
  <span class="sk-code-head">Terminal</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker image prune -a</span></span></code></pre></div>
</div>
<p>Das entfernt alle Images, die gerade kein Container benutzt. Lass es laufen, wenn du weißt, was
läuft; sonst zieht der nächste Start die Images neu. Für den Alltag reicht das mildere
<code>docker image prune</code> – das wirft nur unbenannte Zwischenschichten weg.</p>
<h3 id="schritt-3-mail-geht-nicht-raus-und-es-liegt-nicht-an-dir">Schritt 3: Mail geht nicht raus, und es liegt nicht an dir</h3>
<p>Die erste Eigenheit, die Zeit kostet. Du setzt einen Mailserver auf, alles sieht gut aus, und
ausgehende Mail läuft in einen Timeout auf Port 25.</p>
<p>Schuld ist netcups Default-Policy <strong>„netcup Mail block&quot;</strong>: Sie sperrt die Ports 25, 465 und 587
nach außen. Gemessen haben wir genau das – diese drei laufen in einen Timeout, während 993, 22
und 443 offen sind.</p>
<p>Der wichtige Teil: Das ist <strong>kein Supportfall</strong>. Du nimmst dem Server die Policy im Server
Control Panel unter <em>Firewall → Policys</em> selbst ab, ohne Ticket, ohne Wartezeit. Viele suchen
den Fehler stattdessen stundenlang in Postfix. Wie es geht, steht in
<a href="/tutorials/netcup-firewall-einrichten/">netcup-Firewall einrichten</a>; dass deine Mail danach
auch ankommt, ist noch einmal ein eigenes Thema in
<a href="/tutorials/mailserver-zustellbarkeit/">E-Mail-Zustellbarkeit</a>.</p>
<h3 id="schritt-4-die-firewall-ist-bei-udp-zustandslos">Schritt 4: Die Firewall ist bei UDP zustandslos</h3>
<p>Die Eigenheit, die am meisten verwirrt, weil sie sich wie ein kaputter Server anfühlt.</p>
<p>Bei TCP merkt sich die netcup-Firewall, dass du eine Verbindung aufgebaut hast, und lässt die
Antwort durch. <strong>Bei UDP tut sie das nicht.</strong> Dein Server fragt einen DNS-Server auf Port 53,
die Antwort kommt von Port 53 zurück – und fliegt raus, weil keine Regel sie erwartet.</p>
<p>Das Ergebnis: Namensauflösung und Zeitsynchronisation funktionieren nicht, obwohl ausgehend
alles erlaubt scheint. Du brauchst für DNS und NTP <strong>eigene Eingangsregeln</strong> auf Quellport 53
und 123. Die fertige, wiederverwendbare Policy dafür steht ebenfalls in
<a href="/tutorials/netcup-firewall-einrichten/">netcup-Firewall einrichten</a>.</p>
<p>Wer die SCP-Firewall gar nicht nutzt, merkt davon nichts – dann schützt nur die Firewall auf dem
Server selbst.</p>
<h3 id="schritt-5-eingehend-ist-fast-alles-zu">Schritt 5: Eingehend ist fast alles zu</h3>
<p>Die dritte Eigenheit ist die harmloseste, kostet aber genauso sicher einen Nachmittag, wenn man
sie nicht kennt. Offen sind bei uns eingehend <strong>22, 80 und 443</strong>. Sonst nichts.</p>
<p>Gemessen: Ein Dienst auf 8443 lief von außen in einen Timeout, während er auf dem Server selbst
tadellos antwortete. Genau dieses Muster – lokal geht&rsquo;s, von außen nicht – ist das Erkennungszeichen.</p>
<p>Jeder weitere Port ist eine <strong>eigene Policy</strong> im SCP. Wir mussten das einmal für Jitsi machen,
das UDP 10000 für die Medienströme braucht. Plane das ein, bevor du einen Dienst auswählst, der
exotische Ports braucht.</p>
<h3 id="schritt-6-die-preisrunde--und-was-bestandskunden-niemand-sagt">Schritt 6: Die Preisrunde – und was Bestandskunden niemand sagt</h3>
<p>Am 22. September hat netcup die Preise für <strong>Neubestellungen</strong> erhöht und das im eigenen Forum
<a href="https://forum.netcup.de/thread/22999-rampocalypse-we-need-to-talk-about-pricing-again/">offen begründet</a>:
Die Einkaufspreise für RAM und Flash-Speicher liegen beim Fünffachen von vor einem Jahr, der
Markt ist bis in die Refurbished-Ware leergekauft.</p>
<p>Bemerkenswert ist weniger die Erhöhung als die Begründung. netcup legt offen, welche vier
Möglichkeiten zur Wahl standen: alles abverkaufen und auf „ausverkauft&quot; stellen, die Server
massiv überbuchen, die Preise halten und dafür die Spezifikationen zusammenstreichen – oder die
Produkte an das Marktniveau anpassen. Entschieden haben sie sich für den vierten Weg. Man muss
die Preise nicht mögen, aber die Alternative „gleicher Preis, heimlich weniger Leistung&quot; wäre
für dich als Betreiber die unangenehmere gewesen, weil man sie erst merkt, wenn es klemmt.</p>
<p>Was sich ändert:</p>
<table>
	<thead>
			<tr>
					<th>Produkt</th>
					<th>Aufschlag</th>
					<th>Dazu</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>VPS Lite</td>
					<td>bis 20 %</td>
					<td>Spezifikationen unverändert</td>
			</tr>
			<tr>
					<td>VPS (x86)</td>
					<td>bis 40 %</td>
					<td>kleinere Platten</td>
			</tr>
			<tr>
					<td>Root-Server</td>
					<td>70–110 %</td>
					<td>kleinere Platten, neuer RS 500</td>
			</tr>
	</tbody>
</table>
<p>Zur Platte schreibt netcup, man provisioniere weiterhin flash-basiert mit RAID 6, könne aber
„nur NVMe nicht garantieren&quot;. Das ist etwas anderes als „keine NVMe mehr&quot; – man weiß vorher
nicht, was man bekommt.</p>
<p>Und jetzt der Teil, den man leicht übersieht, obwohl er bares Geld wert ist:</p>
<ul>
<li><strong>Bestandsverträge werden nicht erhöht.</strong> Wer einen Server hat, zahlt weiter seinen Preis.</li>
<li><strong>Upgrades laufen zum alten Preis.</strong> netcup hat dafür eigens Kapazität auf der
Bestands-Hardware freigehalten. Ein RS 1000 G12 lässt sich also auf einen RS 2000 G12 zu den
alten Konditionen hochziehen – das gilt auch bei der Verlängerung.</li>
<li><strong>Die Tauschbörse erhält die alten Preise.</strong> Übernimmst du dort einen Vertrag, behältst du die
G12-Konditionen, solange Angebote da sind.</li>
</ul>
<p>Praktisch heißt das: Wenn du ohnehin wachsen willst, ist ein Upgrade des bestehenden Vertrags
deutlich günstiger als eine Neubestellung. Und wenn du neu einsteigst, lohnt ein Blick in die
Tauschbörse, bevor du bestellst.</p>
<h3 id="schritt-7-tag-94--netcup-startet-alle-server-neu">Schritt 7: Tag 94 – netcup startet alle Server neu</h3>
<p>Kurz vor Redaktionsschluss kam doch noch ein Neustart, und zwar nicht von uns. Am 15. Oktober
wurde <strong>PwnEscape</strong> veröffentlicht (CVE-2026-99999, CVSS 9.3): ein Fehler im IPv4-Netzwerkstack
des Linux-Kernels. Ein Gast kann damit über präparierte Pakete Speicher des <strong>Hosts</strong> auslesen;
im Labor des Entdeckers reichte das bis zur Codeausführung auf dem Host. Gefunden hat ihn
<a href="https://pwn.ai/blog/pwnescape">pwn.ai</a> bei einem Sicherheitswettbewerb von Vercel. Der Fix
steckt seit dem 14. Oktober im Kernel – wirksam wird er aber erst, wenn der <strong>KVM-Host</strong>
mit dem gepatchten Kernel neu bootet. Und mit dem Host gehen alle VMs darauf mit.</p>
<p>Für einen Anbieter, auf dessen Hosts fremde Kunden nebeneinander laufen, ist das der
schlimmste Fall: Eine VM könnte den Speicher ihrer Nachbarn lesen. netcup kündigte am
16. Oktober auf <a href="https://www.netcup-status.de/">netcup-status.de</a> blockweise Neustarts aller
VPS und Root-Server ab dem 17. an, mit 20 bis 30 Minuten Unterbrechung je Server. Die Meldung
sprach zunächst nur von Softwareupdates. In einem Nachtrag vom 19. Oktober nennt netcup den Grund
ausdrücklich: PwnEscape, bekannt geworden erst wenige Stunden vor Beginn der Neustarts.
Normalerweise, schreibt netcup dort, kündige man solche Wartungen mit mehreren Tagen Vorlauf an –
das sei hier nicht möglich gewesen.</p>
<p>Bei uns war es am 18. Oktober so weit. Das Journal zeigt, wie der Neustart ankam:</p>
<div class="sk-code">
  <span class="sk-code-head">Terminal</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">journalctl -b -1 -u systemd-logind --no-hostname <span class="p">|</span> grep hypervisor</span></span></code></pre></div>
</div>
<div class="sk-code">
  <span class="sk-code-head">Ausgabe</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Oct 18 10:19:30 systemd-logind[774]: System is powering down (hypervisor initiated shutdown).</span></span></code></pre></div>
</div>
<p><code>hypervisor initiated shutdown</code> heißt: netcup hat den Server über den QEMU-Gast-Agenten
<strong>geordnet</strong> heruntergefahren, wie mit einem Druck auf den Ein-Aus-Schalter. Dienste wurden
sauber beendet, Dateisysteme synchronisiert. Um 10:34 lief er wieder – <strong>14½ Minuten</strong>
Unterbrechung, weniger als angekündigt. Traefik kam dank <code>restart: unless-stopped</code> von selbst
wieder hoch, zu tun war nichts.</p>
<p>Bemerkenswert ist das Timing. Einen öffentlichen Exploit gab es zu dem Zeitpunkt nicht; der
Entdecker rechnet erst in einigen Wochen damit. netcup hat nicht gewartet, bis es einen gibt,
sondern zwei Tage nach der Veröffentlichung mit den Neustarts begonnen. Eine Viertelstunde Ausfall an einem
Sonntagvormittag ist dafür ein guter Preis – die Alternative wäre ein Host, auf dem eine fremde
VM in deinen Speicher sieht.</p>
<p>Was du daraus mitnimmst:</p>
<ul>
<li><strong>Dienste müssen ohne dich starten.</strong> Prüf, dass alles mit <code>restart: unless-stopped</code> oder
als aktivierte systemd-Unit läuft. Ein Container, den du einmal von Hand gestartet hast, ist
nach so einem Neustart einfach weg.</li>
<li><strong>Angekündigt heißt nicht terminiert.</strong> Die Statusmeldung nannte einen Zeitraum von Tagen,
keine Uhrzeit pro Server. Die Benachrichtigungs-Mail kommt laut netcup inzwischen etwa eine
Stunde vor dem Neustart des einzelnen Servers – an die Adresse aus dem Kundenkonto, also sieh
zu, dass du die auch liest. Wer wissen will, wann sein Dienst wirklich weg war, braucht ein
Monitoring von außen, etwa <a href="/tutorials/uptime-kuma-monitoring/">Uptime Kuma</a>.</li>
<li><strong>Den Host patcht netcup, den Gast du.</strong> PwnEscape steckt im Kernel des KVM-Hosts, nicht in
deiner VM – dort gibt es nichts zu tun, und ein Kernel-Update im Gast hätte nicht geholfen.
Für deinen eigenen Kernel gilt trotzdem weiter, was unter „Wartung &amp; Backups&quot; steht.</li>
</ul>
<p>Ob es dich schon getroffen hat, zeigt <code>last</code>:</p>
<div class="sk-code">
  <span class="sk-code-head">Terminal</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">last -x reboot shutdown <span class="p">|</span> head -3</span></span></code></pre></div>
</div>
<div class="sk-code">
  <span class="sk-code-head">Ausgabe</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">reboot   system boot  6.12.111+deb13-a Sun Oct 18 10:34 - still running
</span></span><span class="line"><span class="cl">reboot   system boot  6.12.111+deb13-a Thu Oct  8 11:29 - 10:19 (9+22:49)
</span></span><span class="line"><span class="cl">shutdown system down  6.12.111+deb13-a Sun Oct 18 10:19 - 10:34  (00:14)</span></span></code></pre></div>
</div>
<p>Ein <code>shutdown</code> ab dem 17. Oktober, den du nicht selbst ausgelöst hast, war dieser Neustart. Achte
auf die Kernel-Spalte: vor und nach dem Neustart dieselbe Version, 6.12.111. Neu gebootet hat
der Host darunter, nicht unser System. Der
Eintrag vom 8. Oktober ist übrigens unser eigener: der Neustart nach einem Kernel-Update, mit dem
die Laufzeit aus Schritt 1 nach 84 Tagen endete.</p>
<p>Drei Tage später, am 21. Oktober, kam der nächste Notfall – diesmal in PHP
(CVE-2026-109618 und -109619). netcup nahm Webhosting und Managed Server vorübergehend vom Netz
und spielte selbst gepatchte PHP-Versionen ein. Auf einem VPS passiert das nicht: Dort steckt PHP
in deinen Container-Images, und die aktualisiert niemand außer dir. Wie du herausfindest, welche
deiner Dienste betroffen sind, steht in
<a href="/tutorials/docker-stack-aktuell-halten/">Den ganzen Docker-Stack sicher aktuell halten</a>.</p>
<h2 id="wenn-es-nicht-funktioniert">Wenn es nicht funktioniert</h2>
<div class="troubleshoot not-prose">
<p><strong>Ausgehende Mail läuft in einen Timeout auf Port 25, 465 oder 587.</strong> Das ist nicht deine
Konfiguration, sondern netcups Default-Policy „netcup Mail block&quot;. Nimm sie dem Server im SCP
unter <em>Firewall → Policys</em> ab – kein Ticket nötig, siehe
<a href="/tutorials/netcup-firewall-einrichten/">netcup-Firewall einrichten</a>.</p>
<p><strong>DNS oder Zeitsynchronisation funktionieren nicht, obwohl ausgehend alles erlaubt ist.</strong> Die
netcup-Firewall arbeitet bei UDP zustandslos und lässt die Antwortpakete nicht automatisch
durch. Lege Eingangsregeln für Quellport 53 (DNS) und 123 (NTP) an.</p>
<p><strong>Ein Dienst antwortet auf dem Server, aber nicht von außen.</strong> Dann hält ihn die SCP-Firewall
auf, nicht die auf dem Server. Eingehend offen sind nur 22, 80 und 443; jeder weitere Port
braucht eine eigene Policy. Prüf gegen <code>curl</code> von einem fremden Rechner, nicht von localhost.</p>
<p><strong>Die Platte ist voll, aber du findest keine großen Dateien.</strong> Sieh bei Docker nach:
<code>docker system df</code> zeigt dir, wie viel in Images steckt und wie viel davon wegwerfbar ist. Bei
uns waren es 68 GB von 73 GB Belegung. <code>docker image prune -a</code> räumt auf.</p>
<p><strong>Ein Container wird vom Kernel beendet (OOM), obwohl der Server Luft hat.</strong> Dann greift ein
Speicherlimit des Containers, nicht das des Hosts. Im Log steht in diesem Fall
<code>constraint=CONSTRAINT_MEMCG</code>. Genau einmal ist uns das passiert – erhöhe das Limit des Dienstes,
bevor du über einen größeren Server nachdenkst.</p>

</div>
<p class="mt-3 text-sm text-slate-500 dark:text-slate-400">
  Dein Problem ist nicht dabei?
  <a href="/fehler/" class="font-medium text-paprika-700 hover:underline dark:text-paprika-400">Alle Fehlermeldungen durchsuchen →</a>
</p>

<h2 id="wartung--backups">Wartung &amp; Backups</h2>
<p>Nach hundert Tagen ist die Liste dessen, was man wirklich regelmäßig tun muss, kurz – aber sie
ist nicht leer.</p>
<p><strong>Monatlich aufräumen.</strong> <code>docker image prune -a</code> gehört in den Kalender, sonst wiederholt sich
Schritt 2 bei dir. Zwei Minuten, und auf kleinen Platten der Unterschied zwischen „läuft&quot; und
„Disk full&quot; an einem Sonntagabend.</p>
<p><strong>Neu starten, wenn ein neuer Kernel da ist.</strong> Den Kernel des Hosts aktualisiert netcup – wie bei
PwnEscape notfalls mit einem Neustart deines Servers. Den Kernel in deiner VM aktualisierst du.
Automatische Sicherheitsupdates installieren ihn, aktivieren ihn aber nicht. Prüf mit <code>ls /var/run/reboot-required</code> und plane den Neustart
selbst, statt ihn jahrelang aufzuschieben. Elf Wochen Laufzeit sind kein Ausweis von Qualität,
wenn darunter ein ungepatchter Kernel läuft.</p>
<p><strong>Snapshots sind kein Backup.</strong> Sie liegen beim selben Anbieter auf derselben Infrastruktur und
helfen dir gegen einen kaputten Upgrade-Versuch, nicht gegen einen verlorenen Account. Wie man
sie im SCP anlegt, steht in
<a href="/tutorials/netcup-snapshots-scp/">netcup Server Control Panel</a> – das echte Backup gehört
verschlüsselt weg vom Server, etwa mit <a href="/tutorials/backups-mit-restic/">restic</a>.</p>
<p><strong>Einmal im Quartal in die Rechnung sehen.</strong> Nach der Preisrunde sind Bestandsverträge und
Neubestellungen unterschiedlich teuer. Wenn du wachsen willst, prüf zuerst das Upgrade deines
bestehenden Vertrags – nicht den Warenkorb.</p>
]]></content:encoded></item></channel></rss>