{
  "kanal": "test",
  "version": "26.10.23.10",
  "veroeffentlicht": "2026-10-23T11:43:52Z",
  "mindestversion": "",
  "hinweise": "https://getkastra.de/aenderungen/26.10.23.10/",
  "aenderungen": {
    "art": "eingriff",
    "neu": ["Bringt das Holen eines Repositories einen neuen Commit, startet Kastra die Anwendung der Domain danach selbst neu: eine Node.js-Anwendung wird deployt (Abhängigkeiten, Bau, Neustart), ein laufender Container samt Bau neu gestartet. Ein angehaltener Container bleibt angehalten. Der Schalter *Anwendung nach einem neuen Stand neu starten* am Repository ist für neue und vorhandene Repositories eingeschaltet.", "Beendet der Kernel einen Prozess, weil der Arbeitsspeicher nicht reicht, meldet Kastra das als neue Alarmart `OOM_KILL` — mit dem Namen des Prozesses und den Zeilen des Kernels. Kritisch, wenn der ganze Node voll war; eine Warnung, wenn nur eine Subscription an die Speichergrenze ihres Tarifs gestoßen ist. Bisher fiel ein solcher Abbruch niemandem auf.", "Die Übersicht eines Nodes zeigt unter *Fakten*, wie viel Swap er hat, und weist darauf hin, wenn er keinen hat.", "Unter *Einstellungen › PHP* gibt es eine allgemeine PHP-Konfiguration für alle Nodes und alle PHP-Fassungen: Grenzen, Fehler und Regionales, Sitzungen, OPcache, FPM-Prozesse und freie `php.ini`-Zeilen. Jede Domain erbt, was sie nicht selbst setzt; bei jedem Feld steht, wie viele Domains abweichen. Nur für Administratoren.", "Der Bereich *PHP* einer Domain zeigt bei jedem Feld, ob der Wert eigen ist oder *wie allgemein*; ein leeres Feld oder *Alles wie allgemein* setzt ihn zurück. Neu dort: Sitzungs-Cookies (nur über HTTPS, HttpOnly, SameSite, nur bekannte Kennungen), das OPcache-Prüfintervall, freie `php.ini`-Zeilen und — für Administratoren — die FPM-Prozesse samt harter Zeitgrenze und Protokoll langsamer Anfragen.", "Dauert eine PHP-Anfrage länger als eingestellt, steht ihr Aufrufstapel im neuen Protokoll *Langsame PHP-Anfragen* der Domain.", "Die PHP-Fassung des Webmails lässt sich im Bereich *Mailserver* eines Nodes einstellen, unabhängig von den Maildomains. *Automatisch* bleibt die Voreinstellung und wählt wie bisher die neueste Fassung bis 8.3. Fehlen der gewählten Fassung Erweiterungen, die Roundcube braucht, bleibt das Webmail auf der automatischen Wahl, und der Rollout nennt die fehlenden Pakete. Eine Fassung, auf der das Webmail eingestellt ist, lässt sich unter *Laufzeiten* nicht entfernen.", "Kastra prüft die Software auf jedem Node gegen bekannte Sicherheitslücken: jedes installierte Paket — auch PostgreSQL, OpenSSL, OpenSSH und den Kernel —, dazu Node.js, WildFly, phpMyAdmin, Roundcube, Composer und WP-CLI. Die Daten kommen nachts von Debian, Ubuntu, php.net, der Node.js Security-WG, OSV und endoflife.date; der Paketbestand verlässt dafür den Server nicht. Der neue Bereich *Sicherheitslücken* eines Nodes nennt je Technologie Paket, installierte Fassung, Fix-Fassung, CVE, betroffene Domains und den nächsten Schritt; eine Lücke, die nicht greift, lässt sich mit Begründung quittieren.", "Die Seite *Sicherheitslücken* zeigt dasselbe über alle Nodes und beantwortet, ob eine bestimmte Technologie irgendwo betroffen ist. Eingestellt wird unter *Einstellungen › Sicherheitslücken*: Schwelle des Alarms, Karenz und die Adressen der Quellen (leer schaltet eine Quelle ab, etwa ohne Internet oder mit eigenem Spiegel). Nur für Administratoren.", "Neue Alarmarten: `SCHWACHSTELLE` meldet behebbare Lücken ab Dringlichkeit *hoch* und — kritisch — jede Lücke, die laut CISA aktiv ausgenutzt wird; Fixe, die die automatischen Sicherheitsupdates selbst holen, erst nach 48 Stunden. `LEBENSENDE` meldet Software ohne Sicherheitsupdates (etwa PHP 8.1 oder Node.js 20), `SCHWACHSTELLEN_DATEN` eine Quelle, die länger als 72 Stunden nicht abgerufen werden konnte.", "Im Bereich *Sicherheitslücken* eines Nodes spielt *Aktualisieren* den Fix eines Befunds ein, *Alle behebbaren aktualisieren* alle auf einmal — als Aufgabe mit Protokoll, danach verschwindet der Befund. Das ist auch der Weg für PHP aus sury: die automatischen Sicherheitsupdates holen es weiterhin nicht, weil sury neben PHP neuere Bibliotheken mitbringt. Was sich so nicht beheben lässt (phpMyAdmin, Roundcube, Composer, WP-CLI, ein Kernel, der nur neu starten muss), nennt den Grund.", "Läuft auf dem Host der Control Plane kein Agent, zeigt die Seite *Sicherheitslücken* ihn als „nicht erfasst“: PostgreSQL und Java dort werden dann nicht geprüft.", "Die Control Plane lädt dafür einmal am Tag Daten von security-tracker.debian.org, security-metadata.canonical.com, cisa.gov, php.net, raw.githubusercontent.com, osv-vulnerabilities.storage.googleapis.com und endoflife.date. Sie liegen unter `/var/lib/kastra-control-plane/schwachstellen`.", "Erkannter Spam landet im Ordner *Junk* des Postfachs. Bisher bekam er nur den Kopf `X-Spam: Yes` und blieb im Posteingang, weil kaum ein Mailprogramm diesen Kopf auswertet. Unter *Mail › Spamfilter* lässt eine Maildomain ihn auf Wunsch im Posteingang.", "Der Bereich *Mailserver* eines Nodes hat einen Abschnitt *Spamfilter* mit drei Schwellen in Punkten: Greylisting ab (Vorgabe 4), Spam ab (6) und Ablehnen ab (15). Nur für Administratoren.", "Jede Maildomain führt unter *Mail › Spamfilter* zwei Absenderlisten: *Nie Spam* (weder vertagt noch abgelehnt noch im Junk-Ordner) und *Immer Spam* (immer im Junk-Ordner), je Zeile eine Adresse oder `@domain`.", "Verschiebt jemand eine Mail in den Junk-Ordner, lernt der Spamfilter sie als Spam; holt er sie heraus, als erwünscht — in jedem Mailprogramm über IMAP und im Webmail.", "Eingehende Mail trägt im Kopf `X-Spamd-Result` mit den Punkten und den Regeln, die angeschlagen haben, und `X-Spam-Status`. Daran lässt sich ablesen, warum eine Mail im Junk-Ordner liegt."],
    "geaendert": ["*Archiv erstellen* im Dateimanager packt im Hintergrund: über der Liste und in der Leiste unten rechts steht, wie viel schon gepackt ist, und der Dateimanager bleibt währenddessen bedienbar — auch ein Seitenwechsel hält das Packen nicht an. Ein großes Archiv bricht nicht mehr nach fünf Minuten ab; die Grenze liegt jetzt bei einer Stunde.", "Die Control Plane nimmt sich höchstens 1,5 GB Heap statt bis zu 70 % des Arbeitsspeichers. Auf einem Host, den sie mit Datenbanken und Kundenanwendungen teilt, durfte sie sich bisher fast alles nehmen. Reicht der Heap nicht, beendet sie sich und wird neu gestartet, statt halb lebendig weiterzulaufen. Eine andere Grenze steht als `KASTRA_JAVA_OPTS` in `/etc/kastra/control-plane.env`.", "Der Upload-Fortschritt in PHP-Sitzungen (`session.upload_progress.enabled`) ist auf jeder Domain **aus** und lässt sich je Domain nicht wieder einschalten, auch nicht über eine `.user.ini`. Braucht eine Anwendung ihn, schaltet ihn ein Administrator unter *Einstellungen › PHP* ein. Anlass ist die für den 21. Oktober 2026 angekündigte PHP-Sicherheitslücke in diesem Handler.", "`opcache_get_status()` und `opcache_reset()` sind für jede Domain gesperrt, und PHP prüft bei jedem Treffer im OPcache, ob der Benutzer die Datei lesen darf. Bisher sah jede Domain die Dateipfade aller anderen Domains derselben PHP-Fassung, und *Cache leeren* in einer Anwendung leerte ihn allen.", "PHP-Werte einer Domain, die genau auf der bisherigen Vorgabe standen (etwa `memory_limit = 256M`), gelten nach dem Update als *wie allgemein* und folgen künftig der allgemeinen Konfiguration. Auf dem Node ändert sich dadurch nichts; eine Domain, die einen solchen Wert bewusst eingetragen hatte, trägt ihn bei Bedarf neu ein.", "Freie `php.ini`-Zeilen je Domain nehmen nur Direktiven an, die eine Anwendung auch selbst über `.user.ini` oder `ini_set()` setzen dürfte. Eine Zeile wie `sendmail_path` hätte im FPM-Pool sonst einen beliebigen Befehl erlaubt.", "Eingehende Mail mit 15 Punkten oder mehr wird abgelehnt — auch auf bestehenden Nodes. Bisher wurde nichts abgelehnt, auch eindeutiger Spam nicht. Verloren geht dabei nichts unbemerkt: der absendende Server bekommt den Fehler und benachrichtigt seinen Absender. Wer weiterhin nichts ablehnen will, leert im Bereich *Mailserver* das Feld *Ablehnen ab*.", "Der lernende Teil des Spamfilters (Bayes) lernt von selbst nur noch eindeutigen Spam ab der Ablehnschwelle. Bisher lernte er alles ab 6 Punkten als Spam, auch Grenzfälle."],
    "behoben": ["Eine Einzelseitenanwendung (Flutter, Angular, React) lässt sich über die Zusatzkonfiguration einrichten: ein eigenes `try_files` im `location`-Kontext ersetzt das von Kastra erzeugte. Bisher standen dann zwei nebeneinander, und der Rollout scheiterte mit `NGINX_CONFIG_INVALID`.", "Setzt die Zusatzkonfiguration im `location`-Kontext ein eigenes `add_header`, etwa `Cache-Control`, behält die Domain trotzdem HSTS und ihre Sicherheits-Header. Bisher fielen beide dabei still weg.", "Ein gekürzter Hinweis unter einem Eingabefeld zeigt beim Überfahren überall seinen vollen Text, etwa im Formular *Tarif bearbeiten*. Bisher tat er das nur auf wenigen Seiten.", "Die Protokolle einer Domain füllen ihren Kasten sofort ganz. Bisher erschien bei einem langen Protokoll nur der obere Teil, der Rest erst beim Rollen."],
    "eingriffe": ["W-003-swapdatei — legt auf einem Node **ohne** Swap die Swapdatei `/kastra.swap` an (ein Viertel des Arbeitsspeichers, mindestens 1 GiB, höchstens 4 GiB), trägt sie in `/etc/fstab` ein und setzt über `/etc/sysctl.d/90-kastra-swap.conf` `vm.swappiness = 10`. Ein Node, der schon Swap hat, in einem Container läuft, nicht auf ext4 oder xfs liegt oder weniger als das Vierfache der Dateigröße frei hat, bleibt unverändert; die Ausgabe sagt, warum. Läuft je Node einmal, auf einem neu installierten Node gleich bei der Installation. Zurücknehmbar: `swapoff /kastra.swap`, die Zeile aus `/etc/fstab` nehmen, `/kastra.swap` und `/etc/sysctl.d/90-kastra-swap.conf` löschen."],
    "rendert": ["fpm-confd — neu je PHP-Fassung: `/etc/php/<fassung>/fpm/conf.d/99-kastra.ini` mit `opcache.validate_permission = 1`, `opcache.restrict_api` und `session.upload_progress.enabled = 0`, dazu, was unter *Einstellungen › PHP* allgemein steht. Alle FPM-Fassungen werden dafür einmal neu geladen. Die Datei gehört ab jetzt Kastra; eine von Hand dort abgelegte Datei mit anderem Namen bleibt unberührt. Eine Notfalldatei wie `99-notfall.ini` kann nach dem Update weg.", "fpm-pool — jeder Pool trägt `php_admin_flag[session.upload_progress.enabled] = off`. Weitere neue Zeilen (Sitzungs-Cookies, OPcache, Zeitgrenze, Slowlog, allgemeine freie Zeilen) erscheinen nur, wenn jemand einen Wert einstellt.", "apparmor-php — das Profil von PHP-FPM erlaubt das Schreiben unter `/var/log/kastra/subscriptions/` und das Mitlesen eines langsamen Workers für das Protokoll langsamer Anfragen.", "logrotate — `php-slow.log` wird mit `php-error.log` gedreht.", "mail — auf jedem Node mit Mailserver: unter `/etc/rspamd/local.d/` neu `milter_headers.conf` und `settings.conf`, geändert `actions.conf` und `classifier-bayes.conf`; neu das Verzeichnis `/etc/dovecot/kastra-spam/` mit den Sieve-Skripten für Junk-Ordner und Lernen samt zwei Programmen, die `rspamc` aufrufen; die Dovecot-Konfiguration bindet sie über `sieve_before` und IMAPSieve ein. Rspamd und Dovecot werden dafür einmal neu geladen."]
  },
  "pakete": ["kastra-agent", "kastra-control-plane", "kastra-ui"]
}
