Zum Inhalt
Getestet, wie es benutzt wird. Kastra ist nicht unter Produktionsbedingungen geprüft — auch der Kanal stabil nicht. Was das heißt.
test 26.10.28.2 stabil 26.10.12.1

Changelog · Fassung

26.10.23.15

Eingriff am Node Test

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.
  • Die Mailstatistik einer Maildomain und eines Nodes hat einen Abschnitt Spamfilter: wie viele eingehende Mails sauber, vertagt, als Spam markiert und abgelehnt wurden, wie oft jemand Spam selbst in den Junk-Ordner gelegt oder erwünschte Post herausgeholt hat, die Quoten Spam erkannt und Fehlalarme mit einer Empfehlung zur Schwelle und die Verteilung der Punkte mit den Schwellen des Nodes. Als Spam bewertete oder abgelehnte versendete Mail steht als Warnung darunter. Gezählt wird ab dem Update.
  • Die Liste Sendungen zeigt bei jeder Mail, die Rspamd bewertet hat, ihre Punkte.

Geändert

  • 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

  • Alarme per Mail oder Webhook kommen wieder an. Bisher blieben sie oft unzugestellt und standen unter Einstellungen › Alarmierung dauerhaft als wartend — betroffen war jede Alarmart außer der Probemeldung, etwa Node nicht erreichbar oder Verwaltete Dateien verändert.
  • 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 am Node

  • 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 anders

  • 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 und jede Korrektur ins Mailprotokoll schreiben; die Dovecot-Konfiguration bindet sie über sieve_before und IMAPSieve ein. Rspamd und Dovecot werden dafür einmal neu geladen.

Alle Fassungen