Überblick
Das Problem
Eine Contao-Website ist kein einzelnes Programm, sondern ein Gefüge aus Contao-Kern, Dutzenden Composer-Paketen, PHP-Konfiguration, Webserver, Website-Wurzeln mit eigenen Domains, Backend-Konten und einem Upload-Verzeichnis, in das Redakteure täglich Dateien legen. Jede dieser Schichten hat eigene Sicherheitseinstellungen — und jede wird an einer anderen Stelle geprüft, wenn überhaupt.
- Sicherheitslücken in Paketen bleiben unbemerkt. Ein Hinweis zu einem installierten Paket wird veröffentlicht; ob er Ihre Website betrifft, erfahren Sie nur, wenn jemand regelmäßig
composer auditausführt und das Ergebnis liest. - Sicherheits-Header und Content Security Policy sind Handarbeit. Sie werden in
.htaccess, in der Nginx-Konfiguration, im CDN oder in der Seitenstruktur gesetzt. Ob die Live-Antwort sie tatsächlich enthält und ob zwei Schichten sich widersprechen, sieht man erst mit Browser-Werkzeugen. - Brute-Force-Versuche gegen das Backend laufen im Stillen. Fehlgeschlagene Anmeldungen landen bestenfalls in einem Protokoll, das niemand auswertet. Ob ein Angriff einem bestimmten Administratorkonto gilt oder aus vielen Adressen gleichzeitig kommt, bleibt unsichtbar.
- Gefährliche Dateien liegen im Web-Root. Ein vergessener Datenbank-Dump, ein
.env-Backup oder ein als Bild getarntes PHP-Skript im Upload-Bereich ist öffentlich abrufbar, bis es zufällig jemand findet. - Kontenhygiene verwahrlost. Ehemalige Mitarbeiter behalten Administratorrechte, Zwei-Faktor-Authentifizierung ist bei einigen Konten aktiv, bei anderen nicht, und niemand hat eine Übersicht.
- Es gibt keinen Nachweis. Wenn ein Kunde, die Geschäftsführung oder ein Auditor fragt, wie es um die Sicherheit der Website steht, gibt es nichts Vorzeigbares außer einem Bauchgefühl.
Am stärksten trifft das Agenturen und Betreiber mit mehreren Installationen: Jede Website muss einzeln überprüft werden, und jede Prüfung beginnt wieder bei null.
Die Lösung
Die Contao Security Suite prüft die Installation von innen, zeigt das Ergebnis als priorisierte Liste mit einem Score im Contao-Backend — und behebt in der Pro-Edition, was sie sicher selbst beheben kann.
Statt verstreuter Werkzeuge gibt es einen Bereich im Backend: System → Security Suite. Ein Audit führt 27 Sicherheitsprüfungen in zehn Bereichen aus, berechnet daraus einen Score von 0 bis 100 und legt für jedes Problem eine Feststellung mit Lebenszyklus an. Parallel zeichnet die Suite Sicherheitsereignisse auf, wertet die Backend-Anmeldungen aus und kann Angreifer auf Anwendungsebene drosseln und sperren.
| Aufgabe | Ohne Security Suite | Mit der Contao Security Suite |
|---|---|---|
| Sicherheitslage beurteilen | Einzelne Werkzeuge, Browser-Entwicklertools, Bauchgefühl | Ein Audit, ein Score, eine priorisierte Liste |
| Paket-Schwachstellen finden | composer audit von Hand, Ausgabe lesen | Teil jedes Audits; in Pro ein eingegrenztes Update per Klick |
| Header und CSP setzen | .htaccess, Server- oder CDN-Konfiguration | Vorlagen je Website-Wurzel im Backend, gegen die Live-Antwort geprüft |
| Backend-Angriffe erkennen | Protokolle durchsuchen | Login-Auswertung mit angegriffenen Konten, Quellen und Trends |
| Angreifer sperren | Server-Firewall, Hoster-Ticket | Automatische und manuelle Sperren auf Anwendungsebene, optional am Cloudflare-Edge |
| Exponierte Dateien entfernen | Zufallsfund, dann FTP | Gefunden, auf HTTP-Erreichbarkeit geprüft, per Klick in Quarantäne verschoben |
| Nachweis für Dritte | Keiner | Fünf Berichtstypen als CSV oder druckfähige Seite |
- Unbemerkte Paket-Lücken → die Prüfung Bekannte Schwachstellen im Bereich Erweiterungen.
- Handarbeit bei Headern und CSP → die Bereiche HTTP-Header und CSP.
- Stille Brute-Force-Versuche → Login-Sicherheit und Aktiver Schutz.
- Gefährliche Dateien → der Bereich Dateien mit Quarantäne.
- Kontenhygiene → Benutzer & Zugriff.
- Fehlender Nachweis → Berichte.
Wann das Paket passt
| Situation | Einschätzung |
|---|---|
| Sie betreuen eine oder mehrere Contao-5-Websites und wollen ihre Sicherheitslage regelmäßig und nachvollziehbar prüfen | Passt genau. Schon die Free-Edition liefert Audit, Score und Feststellungen. |
| Ihr Backend wird sichtbar mit Anmeldeversuchen beschossen | Passt — mit Pro. Aktiver Schutz drosselt und sperrt Quellen, ohne Konten zu sperren. |
| Sie müssen Kunden oder Auditoren einen Sicherheitsstand belegen | Passt — mit Pro. Die Berichte sind als Nachweis gedacht, ausdrücklich nicht als Compliance-Zertifikat. |
| Sie wollen Header und CSP ohne Serverzugriff pflegen | Passt — mit Pro. Die Suite setzt die Werte auf Anwendungsebene. |
| Sie brauchen eine Netzwerk-Firewall, DDoS-Schutz oder eine Web Application Firewall vor dem Webserver | Nicht dieses Paket. Die Suite sieht nur Anfragen, die PHP erreichen. Statische Dateien, die der Webserver direkt ausliefert, und Volumenangriffe auf Netzwerkebene liegen außerhalb ihrer Reichweite. |
| Sie betreiben Contao 4.13 | Nicht dieses Paket. Vorausgesetzt wird Contao ^5.3. |
| Sie erwarten einen vollständigen TLS-Scanner oder Penetrationstest | Nicht dieses Paket. Die TLS-Prüfung meldet Erreichbarkeit, Ablauf und Hostnamen des Zertifikats — keine Cipher-Suiten, keine Bewertung wie bei externen Testdiensten. |
Teil 1 — Einrichtung
Der Weg von der Installation bis zum ersten aussagekräftigen Audit:
- Voraussetzungen prüfen
- Installation vorbereiten
- Über den Contao Manager installieren — oder über Composer
- Installation überprüfen
- Lizenz aktivieren
- Berechtigungen für Nicht-Administratoren vergeben
- Das erste Audit ausführen
- Grundkonfiguration vornehmen
Voraussetzungen
| Komponente | Anforderung |
|---|---|
| PHP | ^8.1 |
| Contao | contao/core-bundle ^5.3 |
| Symfony | ^6.4 || ^7.0 (durch Contao vorgegeben) |
| Doctrine DBAL | ^3.6 || ^4.0 |
| Zwei-Faktor-Bundle | scheb/2fa-bundle ^6.0 || ^7.0 || ^8.0 |
PHP-Erweiterung sodium | erforderlich |
PHP-Erweiterung openssl | für die Zertifikatsprüfung |
| Datenbank | die MySQL-/MariaDB-Verbindung von Contao |
| Beschreibbares Verzeichnis | ein privates Verzeichnis unterhalb von var/ — außerhalb des öffentlichen Webverzeichnisses, für den Webserver beschreibbar |
| Ausgehendes HTTPS vom Server | für die Lizenzaktivierung; optional für composer audit, die Live-Prüfungen der eigenen Website, Cloudflare und AbuseIPDB |
| Composer-Programm auf dem Server | optional: für die Schwachstellenprüfung der Erweiterungen und die Paket-Behebung (composer im PATH oder composer.phar im Projektverzeichnis) |
| Contao-Cron | optional: für geplante Scans, die tägliche Datenbereinigung und die externen Anbieter |
Mindestens eine Startseite (Website-Wurzel) muss eine Domain eingetragen haben. Ohne Domain lässt sich keine Lizenz aktivieren, und die Live-Prüfungen von Headern und Dateien haben kein Ziel.
Vor der Installation
- Datensicherung anlegen. Datenbank und Projektverzeichnis sichern. Die Installation selbst ändert nichts an Ihren Inhalten, legt aber 21 neue Tabellen an.
- Domains der Website-Wurzeln prüfen. In der Seitenstruktur jede Startseite öffnen und das Feld für die Domain prüfen. Die Lizenz wird an genau diese Hostnamen gebunden —
example.comundwww.example.comsind zwei verschiedene Domains. - Erst auf einer Testumgebung ausprobieren, wenn möglich. Das Audit ist rein lesend und gefahrlos. Aktiver Schutz, CSP und die automatische Behebung verändern dagegen das Verhalten der Website — diese Funktionen sollten Sie kennen, bevor Sie sie auf dem Produktivsystem einschalten.
- Ihre eigene IP-Adresse notieren. Bevor Sie später den Aktiven Schutz oder den Backend-Sperrmodus einschalten, gehört Ihre Büro- oder VPN-Adresse auf die Liste der vertrauenswürdigen Quellen.
- Prüfen, ob ein Reverse-Proxy oder CDN vorgeschaltet ist. Dann muss Contao die Proxy-Adressen als vertrauenswürdig kennen, sonst sieht die Suite die Proxy-Adresse statt der Besucheradresse. Siehe Aktiver Schutz.
Installation über den Contao Manager
- Contao Manager öffnen und anmelden.
- Bereich Entdecken öffnen. Neue Pakete werden immer dort gesucht und hinzugefügt; der Bereich Pakete daneben zeigt unter Installierte Pakete nur, was bereits vorhanden ist. Entdecken ist zugleich die Startansicht.
- Über Pakete suchen nach
vtinnovations/contao-security-suitesuchen und beim Treffer Paket hinzufügen wählen. - Änderungen anwenden. Der Contao Manager installiert das Paket, aktualisiert den Autoloader und kopiert die Backend-Dateien (CSS/JS) nach
public/bundles/. - Bereich Systemwartung → Datenbank-Migrationen und -Backups → Datenbank prüfen; die angezeigten Datenbank-Änderungen bestätigen. Dabei entstehen die Tabellen mit dem Präfix
tl_secsuite_. - Unter Systemwartung den Anwendungs-Cache leeren (in der Navigation auch als Cache erneuern).
Es sind keine Einträge in config/config.yaml, keine manuelle Bundle-Registrierung und keine Änderungen an .htaccess nötig.
Installation über Composer
composer require vtinnovations/contao-security-suite
vendor/bin/contao-console contao:migrate
vendor/bin/contao-console cache:clear
In einer Managed Edition, die frisch aufgesetzt wird, übernimmt vendor/bin/contao-console contao:setup Migration und Cache in einem Schritt.
Aktualisieren
composer update vtinnovations/contao-security-suite
vendor/bin/contao-console contao:migrate
vendor/bin/contao-console cache:clear
Über den Contao Manager genügt es, das Paket zu aktualisieren und anschließend Datenbank prüfen auszuführen.
Installation überprüfen
- Auf der Konsole prüfen, ob die Befehle registriert sind:
Erwartet werdenvendor/bin/contao-console list security-suitesecurity-suite:scanundsecurity-suite:purge-events. - Im Backend erscheint in der linken Navigation unter System der Eintrag Security Suite. Er öffnet das Sicherheits-Dashboard.
- Oben im Dashboard steht die Registerkartenleiste der Suite: Dashboard, Sicherheitsprobleme, Ereignisse, Login-Sicherheit, CSP, HTTP-Header, Benutzer & Zugriff, Dateien, Erweiterungen, System, Berichte, Einstellungen. Die übrigen Bereiche sind absichtlich nicht in der linken Navigation.
- Unter System → Einstellungen gibt es oben den Abschnitt V-T.ONE Licence management mit dem Feld Contao Security Suite.
Fehlt der Eintrag, siehe Fehlerbehebung.
Lizenz aktivieren
Für jede Edition ist eine gültige Lizenz erforderlich — auch für Free. Eine Installation ohne Lizenz ist nicht dasselbe wie Free: Das Dashboard öffnet sich und weist auf die fehlende Lizenz hin, es läuft aber kein neues Audit, weder im Backend noch per Konsole noch geplant. Alles bereits Aufgezeichnete bleibt erhalten.
Die Lizenz wird nicht im Bereich Einstellungen der Suite eingetragen, sondern in den normalen Contao-Einstellungen. Der Abschnitt V-T.ONE Licence management ist die gemeinsame Lizenzverwaltung aller V-T.ONE-Produkte; ist ein weiteres V-T.ONE-Paket installiert, steht dessen Feld im selben Abschnitt.
So aktivieren Sie die Lizenz
- Als Administrator anmelden. Der Lizenzbereich ist nur für Administratoren sichtbar.
- System → Einstellungen öffnen. Ganz oben steht der Abschnitt V-T.ONE Licence management, darin das Feld Contao Security Suite.
- Den Lizenzschlüssel in das Feld Lizenzschlüssel eintragen (Platzhalter:
XXXXX-XXXXX-XXXXX-XXXXX). - Lizenz prüfen und aktivieren wählen. Der Server — nicht Ihr Browser — fragt den V-T.ONE-Lizenzdienst über HTTPS an.
- Die Statuszeile prüfen. Bei Erfolg erscheint „Pro-Lizenz aktiv. Alle Funktionen der Security Suite sind freigeschaltet.“ beziehungsweise „Kostenlose Lizenz aktiv. Für den vollen Funktionsumfang auf Pro upgraden.“
- Darunter zeigt der Abschnitt Schlüssel (nicht im Klartext), Paket, Gültig ab, Gültig bis (bei unbefristeten Lizenzen „unbegrenzt“) und Zuletzt geprüft.
- Zurück unter System → Security Suite zeigt der Kopf des Dashboards die aktive Edition.
Die drei Schaltflächen
| Schaltfläche | Wirkung |
|---|---|
| Lizenz prüfen und aktivieren | Aktiviert den eingetragenen Schlüssel für diese Installation. |
| Lizenz aktualisieren | Holt den aktuellen Stand der bereits aktivierten Lizenz, etwa nach einer Verlängerung, einem Upgrade von Free auf Pro oder wenn der Status dazu auffordert. |
| Lizenz entfernen | Entfernt die Lizenz von dieser Installation. Bestätigungsdialog: „Die Lizenz von dieser Installation entfernen? Die Contao Security Suite sperrt ihre Pro-Funktionen, bis eine neue Lizenz aktiviert wird. Es werden keine Findings, Ereignisse oder Konfigurationen gelöscht.“ |
Was Sie über die Lizenz wissen müssen
- Domain-Bindung. Eine Lizenz gilt für die Domains, für die sie ausgestellt ist, und nur, wenn eine dieser Domains genau so als Domain einer Startseite in dieser Installation eingetragen ist. Es gibt keine Platzhalter:
example.comundwww.example.comsind zwei verschiedene Domains. Welche Domains gebunden sind, verwalten Sie unter v-t.one. - Administrator und ausgehendes HTTPS. Aktivieren, Aktualisieren und Entfernen erfordern eine Administrator-Sitzung. Der Server braucht eine ausgehende HTTPS-Verbindung zum Lizenzdienst.
- Fehlschlag ändert nichts. Ist der Lizenzdienst nicht erreichbar oder lehnt er die Anfrage ab, bleibt der gespeicherte Lizenzstatus unverändert: „Der Lizenzdienst war nicht erreichbar. Die installierte Lizenz bleibt aktiv.“
- Entfernen löscht keine Inhalte. Feststellungen, Ereignisse, Scans, Datei-Referenz, CSP- und Header-Konfigurationen und alle Verläufe bleiben erhalten. Pro-Funktionen sind sofort gesperrt.
- Ablauf. Eine abgelaufene Pro-Lizenz kann — je nach Lizenz — auf den Free-Umfang zurückfallen. Der Status lautet dann „Pro-Lizenz abgelaufen — kostenlose Funktionen aktiv“. Eine Pro-Testlizenz verhält sich bis zu ihrem Ablauf wie Pro („Pro-Testlizenz aktiv“).
- Datensicherung. Das Paket legt Lizenzdaten in einem privaten Verzeichnis unterhalb von
var/ab — außerhalb des öffentlichen Webverzeichnisses und nicht über HTTP erreichbar. Es muss für den Webserver beschreibbar sein und gehört in die Datensicherung.
Statusmeldungen
| Angezeigter Status | Was zu tun ist |
|---|---|
| „Pro-Lizenz aktiv“ | Nichts. Alle Funktionen sind freigeschaltet. |
| „Pro-Testlizenz aktiv“ | Nichts bis zum Ablauf der Testphase. |
| „Kostenlose Lizenz aktiv“ | Free-Umfang. Für Pro einen Pro-Schlüssel aktivieren. |
| „Pro-Lizenz abgelaufen — kostenlose Funktionen aktiv“ | Lizenz verlängern, dann Lizenz aktualisieren. |
| „Keine aktive Lizenz“ / „Keine gültige Lizenz“ | Einen Free- oder Pro-Schlüssel aktivieren. |
| „Lizenz muss erneut geprüft werden — „Lizenz aktualisieren“ wählen“ | Lizenz aktualisieren wählen. |
| „Aktualisierung erforderlich — „Lizenz aktualisieren“ wählen“ | Lizenz aktualisieren wählen. |
| „Lizenz abgelaufen“ | Lizenz unter v-t.one verlängern, dann Lizenz aktualisieren. |
| „Die Lizenz ist an keine hier konfigurierte Domain gebunden“ | Domain der Startseite mit den gebundenen Domains vergleichen — exakt, mit oder ohne www. |
| „Für diese Installation ist keine Domain konfiguriert“ | In der Seitenstruktur bei der Startseite eine Domain eintragen. |
| „Pro-Lizenz für diese Installation zurückgezogen“ | Kontakt mit V-T.ONE aufnehmen. |
| „Dieser Build kann Lizenzen nicht prüfen“ | Das Paket aus einem offiziellen Release neu installieren. |
Backend-Berechtigungen
Administratoren haben Zugriff auf alle Bereiche. Jeder Bereich der Suite ist ein eigenes Backend-Modul und wird von Contao einzeln geprüft — Nicht-Administratoren brauchen daher die Modulrechte für jeden Bereich, den sie öffnen sollen.
So geben Sie einer Benutzergruppe Zugriff
- Benutzerverwaltung → Benutzergruppen öffnen und die Gruppe bearbeiten.
- Im Abschnitt der erlaubten Backend-Module unter System die gewünschten Bereiche ankreuzen: Security Suite (das Dashboard) sowie zum Beispiel Sicherheitsprobleme, Ereignisse, Login-Sicherheit und die übrigen Bereiche.
- Speichern. Die Mitglieder sehen die Bereiche beim nächsten Seitenaufruf.
| Aktion | Erforderliche Rechte |
|---|---|
| Dashboard sehen, Audit starten | Modul Security Suite |
| Feststellungen ignorieren, Risiko akzeptieren, erneut öffnen | Modul Sicherheitsprobleme |
| Automatische Behebung (Einzel-Fix, „Alle beheben“, Rückgängig) | Administrator — oder die Module Sicherheitsprobleme und Einstellungen der Security Suite zusammen (nicht Contaos eigene Einstellungen) |
| Sperren, vertrauen, Angriffsmodus, Backend-Sperrmodus, Sitzungen beenden | Modul Login-Sicherheit |
| Lizenz verwalten | Administrator |
Die Schaltflächen der automatischen Behebung werden auch Benutzern angezeigt, denen das zweite Modulrecht fehlt. Ein Klick endet dann mit einer Zugriffsverweigerung. Vergeben Sie Behebungsrechte daher bewusst als Paar.
Das erste Audit
Das Audit liest nur die Konfiguration und zeichnet Feststellungen auf. Es ändert nichts an der Website. Es braucht eine gültige Free- oder Pro-Lizenz.
So führen Sie das erste Audit aus
- System → Security Suite öffnen. Ohne bisheriges Audit steht dort „Es wurde noch kein Audit ausgeführt“.
- Oben rechts Audit starten wählen. Es gibt keinen Bestätigungsdialog.
- Den Tab geöffnet lassen und warten. Das Audit läuft synchron in dieser Anfrage: Es durchsucht das Dateisystem, ruft
composer auditauf und fragt die Live-Antwort jeder Website-Wurzel ab. Je nach Größe der Installation dauert das einige Sekunden bis über eine Minute. - Nach dem Lauf kehrt die Seite zum Dashboard zurück und meldet zum Beispiel „Sicherheits-Audit abgeschlossen: 27 Prüfungen, 19 bestanden, 6 Feststellung(en) offen.“ und „Score: 74/100 (basierend auf 22 implementierten Prüfungen).“
- Die Karte Gesamter Sicherheits-Score, die Schweregrad-Aufschlüsselung und die Liste priorisierter Probleme sind jetzt gefüllt.
- In Pro: die Registerkarte Sicherheitsprobleme öffnen und die Liste von oben abarbeiten — siehe Sicherheitsprobleme verwalten.
Führen Sie das erste Audit auf dem Produktivserver aus. Die Header-, HSTS- und HTTPS-Behebungen werden erst angeboten, wenn ein Audit die Live-Antwort der Website über https:// abrufen konnte — ein Audit auf einer lokalen Entwicklungsumgebung kann das nicht.
Grundkonfiguration
Die Standardwerte sind so gewählt, dass nichts blockiert wird, bevor Sie es bewusst einschalten. Für einen typischen Betrieb mit Pro empfiehlt sich diese Reihenfolge:
- Einstellungen → Aktiver Schutz: Ihre eigene Adresse unter Vertrauenswürdige Quellen eintragen.
- Login-Sicherheit: die Client-IP-Diagnose (dieser Request) prüfen. Steht dort die Warnung „Die Ermittlung der Client-IP ist nicht zuverlässig“, zuerst die Proxy-Konfiguration von Contao korrigieren.
- Einstellungen → Aktiver Schutz: Aktiver Backend-Schutz aktiviert einschalten und speichern.
- Einstellungen → Scans & Zeitplanung: Geplante Scans aktiviert und eine Scan-Häufigkeit wählen — und sicherstellen, dass der Contao-Cron tatsächlich läuft.
- Einstellungen → Benachrichtigungen: Sicherheitsbenachrichtigungen aktiv einschalten und Empfänger eintragen.
- Unter Dateien eine Datei-Referenz festlegen, sobald Sie wissen, dass der aktuelle Dateibestand sauber ist.
Teil 2 — Funktionen im Detail
Free und Pro im Vergleich
Die Analyse läuft in beiden Editionen vollständig. Pro schaltet alle weiteren Registerkarten und jede verändernde Aktion frei.
| Funktion | Ohne Lizenz | Free | Pro |
|---|---|---|---|
| Dashboard öffnen | ja, mit Lizenzhinweis | ja | ja |
| Audit starten (Backend, Konsole, geplant) | nein | ja | ja |
| Score, Schweregrad-Aufschlüsselung, Zusammenfassung verdächtiger Anmeldungen auf dem Dashboard | nur bereits Aufgezeichnetes | ja | ja |
| Aufzeichnung von Backend-Anmeldeereignissen | ja | ja | ja |
| Registerkarten außer Dashboard (Sicherheitsprobleme, Ereignisse, Login-Sicherheit, CSP, HTTP-Header, Benutzer & Zugriff, Dateien, Erweiterungen, System, Berichte, Einstellungen) | nein | nein | ja |
| Feststellungen ignorieren / Risiko akzeptieren | nein | nein | ja |
| Automatische Behebung, „Alle beheben“, Rückgängig | nein | nein | ja |
| Aktiver Schutz, Sperren, Angriffsmodus, Backend-Sperrmodus | nein | nein | ja |
| CSP und Header anwenden | nein | nein | ja |
| Dateien in Quarantäne verschieben oder löschen | nein | nein | ja |
| Berichte und Exporte | nein | nein | ja |
| Cloudflare, AbuseIPDB, Benachrichtigungen | nein | nein | ja |
Konkret heißt das: Mit Free sehen Sie, was an Ihrer Website unsicher ist, und wie sich der Score entwickelt — aber Sie können nichts davon aus der Suite heraus beheben, keine Detailliste öffnen und keine Quelle sperren. Gesperrte Registerkarten bleiben sichtbar und tragen ein Schloss mit dem Hinweis „Erfordert Contao Security Suite Pro“. Ein Klick öffnet eine Hinweisseite statt des Bereichs.
Fällt eine Installation von Pro auf Free zurück, stoppen auch die laufenden Pro-Wirkungen: Die Suite setzt keine Header mehr, Sperren werden nicht mehr durchgesetzt und die adaptive Prüfung entfällt. Die mit dem CSP-Modul geschriebene Content Security Policy bleibt dagegen bestehen, weil sie in Contaos eigenen Feldern der Startseite gespeichert ist.
Dashboard
Das Sicherheits-Dashboard ist der Einstiegspunkt unter System → Security Suite und in Free wie Pro verfügbar. Es beantwortet zwei Fragen zugleich: Ist die Installation sicher konfiguriert, und ist etwas Auffälliges geschehen?
| Element | Inhalt |
|---|---|
| Kopf | Letztes Audit, Überwachung seit, Edition, die Schaltflächen Audit starten und Alle Probleme beheben |
| Gesamter Sicherheits-Score | Wert 0–100, Bewertung, Veränderung Seit dem letzten Audit |
| Kennzahlen | offene Feststellungen, Ereignisse, Anmeldeaktivität |
| Sicherheitsaktivität | Diagramm mit Umschalter 24 Stunden / 7 Tage / 30 Tage (Standard: 7 Tage) |
| Feststellungen nach Schweregrad | Kreisdiagramm der offenen Feststellungen |
| Priorisierte Probleme | die wichtigsten offenen Feststellungen |
| Login-Analyse | Zusammenfassung verdächtiger Anmeldungen, angegriffene Benutzernamen, Angriffsquellen |
| Sicherheitskontrollen | Status von Aktivem Schutz, CSP, Headern und weiteren Kontrollen; Kachel mit Link CSP konfigurieren |
| Audit-Scan-Status | Prüfungen, bestanden, Warnungen, Dauer — mit zweiter Schaltfläche Audit starten |
| Verlauf des Sicherheits-Scores | Score jedes abgeschlossenen Audits |
So lesen Sie das Dashboard
- Zuerst den Score und seine Veränderung seit dem letzten Audit ansehen. Ein Rückgang heißt: Etwas ist seit dem letzten Lauf schlechter geworden.
- Die Kachel Feststellungen nach Schweregrad zeigt, ob kritische oder hohe Probleme offen sind.
- Die Login-Analyse zeigt, ob gerade angegriffen wird. Viele Fehlversuche gegen einen Administratornamen sind ein Signal, den Aktiven Schutz zu prüfen.
- Mit Pro über Alle Probleme beheben die automatisch behebbaren Probleme auf einmal angehen — siehe Automatische Behebung.
Bei mehreren Website-Wurzeln erscheint eine Auswahl Website. Der Score wird derzeit für die gesamte Installation berechnet, nicht getrennt je Website-Wurzel; die Auswahl ändert die angezeigten Werte nicht.
Audit-Scan und Sicherheits-Score
Ein Audit führt alle 27 Prüfungen aus, berechnet den Score und aktualisiert die Feststellungen. Es ist rein lesend: „Dieses Audit ist schreibgeschützt: Es prüft die Konfiguration und zeichnet Feststellungen auf und ändert nie CSP, HSTS, Benutzer oder Servereinstellungen.“ Lizenz: Free oder Pro.
So starten Sie ein Audit
| Weg | Auslöser |
|---|---|
| Backend | Schaltfläche Audit starten im Kopf des Dashboards, in der Karte Audit-Scan-Status oder auf der Registerkarte Sicherheitsprobleme. Läuft synchron; danach geht es immer zum Dashboard zurück. |
| Konsole | vendor/bin/contao-console security-suite:scan — siehe Konsolenbefehle |
| Zeitplan | Contao-Cron, wenn Geplante Scans aktiviert eingeschaltet ist und die Scan-Häufigkeit passt |
| Nach einer Behebung | automatisch (Auslöser „System“) |
Was bei einem Audit geschieht
- Abgelaufene Risikoakzeptanzen werden wieder auf Offen gesetzt.
- Jede Prüfung läuft für sich. Scheitert eine Prüfung technisch, laufen die übrigen weiter; die Meldung nennt „%d Prüfung(en) konnten nicht ausgeführt werden.“
- Der Score wird aus den Ergebnissen berechnet.
- Die Feststellungen werden abgeglichen: Neue Probleme werden Offen, nicht mehr gefundene werden Behoben, wieder aufgetauchte werden erneut geöffnet. Ignoriert und Risiko akzeptiert bleiben, wie Sie sie gesetzt haben.
So wird der Score berechnet
Jede Prüfung hat ein Gewicht. Eine bestandene Prüfung bringt das volle Gewicht, eine Warnung die Hälfte, ein Fehlschlag nichts. Rein informative und technisch gescheiterte Prüfungen zählen nicht mit. Der Score ist der erreichte Anteil am möglichen Gewicht, gerundet auf 0–100.
| Score | Bewertung |
|---|---|
| 90 und mehr | Ausgezeichnet |
| 75–89 | Gut |
| 60–74 | Ausreichend |
| 40–59 | Schwach |
| unter 40 | Kritisch |
Ignorieren verbessert den Score nicht. Der Score stammt aus den Prüfergebnissen des letzten Audits, nicht aus dem Status der Feststellungen. Eine ignorierte oder risikoakzeptierte Feststellung zählt weiter. Der Hinweis „Der Score spiegelt die bisher umgesetzten Prüfungen wider“ erinnert daran, dass der Score nur abdeckt, was die Suite prüft.
Die 27 Sicherheitsprüfungen
Die Spalte Behebung gibt an, was Pro mit einer Feststellung tun kann: automatisch (ohne Rückfrage), mit Bestätigung (die Suite ändert selbst, aber erst nach Vorschau und Bestätigung), assistiert (genaue Schritte und Direktlink, die Änderung machen Sie), manuell (keine Behebung auf Anwendungsebene möglich) oder informativ.
| Bereich | Prüfung (Schlüssel) | Was geprüft wird | Behebung |
|---|---|---|---|
| Contao-Kern | contao.version | Meldet die installierte Contao-Version | manuell |
| Erweiterungen | extensions.known_vulnerabilities | Bekannte Sicherheitshinweise über composer audit | mit Bestätigung — Paket aktualisieren |
| Erweiterungen | extensions.composer_integrity | composer.json, composer.lock und installierte Pakete stimmen überein | mit Bestätigung — Paket auflösen |
| Erweiterungen | extensions.abandoned | Als aufgegeben markierte Pakete | assistiert |
| Authentifizierung | authentication.backend_2fa | 2FA-Abdeckung der aktiven Backend-Konten | assistiert — 2FA einrichten |
| Authentifizierung | authentication.request_token | CSRF-Schutz von Contao verfügbar | manuell |
| HTTP-Header | headers.security_headers | X-Content-Type-Options, Referrer-Policy, Permissions-Policy | mit Bestätigung — Prüfen & Behebung anwenden |
| HTTP-Header | headers.hsts | Strict-Transport-Security aktiv | mit Bestätigung — Header korrigieren |
| HTTP-Header | headers.https_context | Backend über HTTPS; „SSL verwenden“ je Website-Wurzel | mit Bestätigung — HTTPS-URLs aktivieren |
| HTTP-Header | headers.conflicts | Doppelte oder widersprüchliche Header in der Live-Antwort | assistiert |
| CSP | csp.configuration | Erzwungene CSP je Website-Wurzel | mit Bestätigung — Prüfen & Behebung anwenden |
| CSP | csp.policy_quality | Wildcards, unsafe-eval, unerwartetes unsafe-inline, Reporting | mit Bestätigung — CSP anwenden |
| CSP | csp.inline_styles | Art der Freigabe von Inline-Styles | mit Bestätigung — CSP anwenden |
| Serverkonfiguration | server.app_debug | Debug-Modus in Produktion | mit Bestätigung — Problem beheben |
| Serverkonfiguration | server.php_version | PHP-Version | manuell |
| Serverkonfiguration | system.php_runtime | allow_url_include, display_errors in Produktion, expose_php | mit Bestätigung — PHP-Einstellungen beheben |
| Serverkonfiguration | system.session_cookies | HttpOnly, Secure, SameSite des Session-Cookies | mit Bestätigung — PHP-Einstellungen beheben |
| Serverkonfiguration | system.trusted_proxies | Zu weit gefasste vertrauenswürdige Proxy-Bereiche | assistiert |
| Dateisicherheit | files.sensitive_exposure | .env, Schlüssel, Dumps, Backups, VCS-Daten im Web-Root | mit Bestätigung — Datei sichern |
| Dateisicherheit | files.suspicious | Skripte und getarnte Dateien in Upload-Bereichen | mit Bestätigung — Datei sichern |
| Dateisicherheit | files.permissions | Für alle beschreibbare Dateien | mit Bestätigung — Rechte korrigieren |
| Dateisicherheit | files.integrity | Änderungen gegenüber der Datei-Referenz | assistiert |
| Benutzersicherheit | users.admin_hygiene | Zu viele, inaktive, deaktivierte oder angegriffene Administratorkonten | assistiert |
| Benutzersicherheit | users.privileged_groups | Gruppen mit weitreichenden Rechten | assistiert |
| Benutzersicherheit | users.inventory | Zählt die Backend-Konten | informativ |
| SSL / TLS | ssl_tls.certificate_health | HTTPS-Verbindung, Zertifikatsablauf, Hostname | manuell |
| Überwachung | suite.hardening | Die eigenen Überwachungseinstellungen der Suite | automatisch — Automatisch beheben |
Schweregrade einer Feststellung: Kritisch, Hoch, Mittel, Niedrig, Information. Eine exponierte Datei wird zum Beispiel Kritisch, sobald das Audit bestätigt hat, dass sie tatsächlich über HTTP abrufbar ist.
Sicherheitsprobleme verwalten
Die Registerkarte Sicherheitsprobleme listet alle Feststellungen mit Filter, Suche und Verlauf. Lizenz: Pro.
| Status | Bedeutung |
|---|---|
| Offen | Das Problem besteht. |
| Behebung ausstehend | Eine Behebung wurde geschrieben, wirkt aber erst, sobald der Server sie übernimmt. Der nächste Audit-Scan schließt die Feststellung — oder öffnet sie nach spätestens 24 Stunden wieder, wenn die Wirkung ausbleibt. |
| Behoben | Das letzte Audit hat das Problem nicht mehr gefunden. |
| Ignoriert | Von Ihnen ausgeblendet. Das Problem besteht weiter. |
| Risiko akzeptiert | Bewusst mit Begründung hingenommen, optional bis zu einem Ablaufdatum. |
So bearbeiten Sie eine Feststellung
- Sicherheitsprobleme öffnen. Über Status, Schweregrad, Bereich, Sortierung und Suche filtern, dann Anwenden. Pro Seite stehen 20 Feststellungen.
- Bei der gewünschten Zeile Details öffnen wählen. Die Detailansicht zeigt Befund, Nachweis, den Abschnitt Behebung und den Verlauf.
- Entscheiden:
- Lässt sich das Problem beheben, die Behebung verwenden — siehe Automatische Behebung.
- Ist es für diese Website kein Problem, Ignorieren aufklappen, optional eine Begründung eintragen und Feststellung ignorieren wählen.
- Wollen Sie das Risiko bewusst tragen, Risiko akzeptieren aufklappen, die Begründung (Pflichtfeld) und optional ein Ablaufdatum (optional) eintragen und Risiko akzeptieren wählen.
- Die Seite lädt die Detailansicht neu; der Verlauf zeigt die Änderung mit Ihrem Benutzernamen.
- Eine ignorierte, akzeptierte oder behobene Feststellung lässt sich über Erneut öffnen → Feststellung erneut öffnen zurückholen.
Ignorieren, Risiko akzeptieren und erneut öffnen ändern nur den Status der Feststellung — nie die Website. Läuft das Ablaufdatum einer Risikoakzeptanz ab, wird die Feststellung beim nächsten Audit oder Aufruf der Liste wieder Offen.
Automatische Behebung
Wo die Suite den zugrunde liegenden Zustand sicher selbst ändern kann, bietet Pro eine echte Aktion an. Jede Behebung durchläuft Vorschau → Anwenden → Verifizieren → erneutes Audit. Ein geschriebener Wert gilt nie als Beweis: Erst wenn die Prüfung das Problem nicht mehr findet, ist die Feststellung behoben. Lizenz: Pro. In Free tragen die Schaltflächen ein Schloss mit dem Hinweis „Die automatische Behebung erfordert Contao Security Suite Pro“.
So beheben Sie eine einzelne Feststellung
- In Sicherheitsprobleme die Zeile mit dem Hinweis „Die Security Suite kann dies automatisch beheben.“ und dem Kennzeichen Behebbar suchen.
- Für eine Vorschau Details öffnen wählen. Der Abschnitt Behebung zeigt Aktueller Zustand, Nach der Behebung, Warum das die Sicherheit verbessert, Auswirkung auf die Kompatibilität, So wird es überprüft und ob sich die Behebung rückgängig machen lässt.
- Behebung anwenden wählen (bei Behebungen ohne Rückfrage: Automatisch beheben). Alternativ direkt in der Listenzeile die Schaltfläche mit dem Namen der Aktion wählen, zum Beispiel Header korrigieren oder Datei sichern; dann erscheint zuerst ein Bestätigungsdialog.
- Warten. Die Behebung läuft synchron, einschließlich eines vollständigen Audits danach — bei einem Composer-Update kann das deutlich länger als eine Minute dauern. Den Tab nicht schließen.
- Die Meldung lesen:
- „Behoben und verifiziert: …“ — erledigt.
- „Angewendet — wartet auf die Bestätigung durch den nächsten Scan: …“ — die Änderung wirkt erst später (zum Beispiel PHP-Einstellungen); Status Behebung ausstehend.
- „Die Konfiguration wurde geändert, aber der Zustand besteht weiterhin — die Feststellung bleibt offen.“ — eine andere Schicht (Webserver, CDN) überschreibt den Wert.
- „Die automatische Behebung konnte nicht angewendet werden. Es blieb nichts halb geändert zurück; ein erneuter Versuch ist gefahrlos.“
So beheben Sie alles auf einmal
- Auf dem Dashboard Alle Probleme beheben (n) wählen — oder auf Sicherheitsprobleme Alle behebbaren Probleme beheben (n), oder oben in einem Bereich wie Dateien die bereichsbezogene Schaltfläche.
- Der Dialog Sicherheitsbehebungen bestätigen gruppiert die Feststellungen: Automatisch behoben, Nach Ihrer Bestätigung hier behoben, Überprüfung erforderlich und Erfordert Administrator-Eingriff.
- Die Liste durchsehen und %d Problem(e) beheben wählen. Eine einzige Bestätigung gilt für den ganzen Lauf — alle automatisch und alle mit Bestätigung behebbaren Punkte werden ausgeführt.
- Warten, bis die Seite zurückkehrt. Die Meldung fasst zusammen: „Sammelbehebung abgeschlossen: … behoben und verifiziert, … angewendet und wartend auf den nächsten Scan, … nicht abgeschlossen, … erfordern noch Prüfung oder manuelles Handeln.“
- Über Verbleibende Probleme ansehen die Punkte abarbeiten, die eine Person brauchen.
„Alle beheben“ ignoriert den Bereichsfilter der Liste. Wenn Sie in Sicherheitsprobleme nach einem Bereich filtern, zählt die Schaltfläche nur die Feststellungen dieses Bereichs — der Dialog behebt aber alle automatisch behebbaren Feststellungen der Installation. Wollen Sie nur einen Bereich beheben, verwenden Sie die Schaltfläche oben in dessen eigener Registerkarte. Löschen von Dateien und die Einrichtung von 2FA sind nie Teil von „Alle beheben“.
Läuft bereits eine Sammelbehebung, wird eine zweite abgewiesen, bis die erste fertig ist (höchstens zehn Minuten).
So machen Sie eine Behebung rückgängig
- In Sicherheitsprobleme die Feststellung über den Filter Status finden und Details öffnen.
- Letzte Behebung rückgängig machen wählen. Es gibt keinen Dialog.
- Meldung: „Die vorherige Konfiguration wurde wiederhergestellt und die Feststellung wieder geöffnet.“
Rückgängig machen lassen sich alle Behebungen außer Paket auflösen: Header, HSTS, HTTPS-URLs, CSP, Dateiquarantäne (die Datei wird an ihren Ort zurückgelegt), Dateirechte, Paket-Updates, APP_DEBUG, PHP- und Session-Einstellungen und die eigenen Einstellungen der Suite.
Was die Suite bewusst nicht automatisch erledigt
- 2FA-Einrichtung — jeder Kontoinhaber richtet sie selbst ein; die Suite erzeugt nie ein Geheimnis.
- Administratorrechte und Gruppenrechte — eine Entscheidung über Menschen.
- Änderungen gegenüber der Datei-Referenz — die Referenz enthält Hash-Werte, keine Kopien; eine Änderung zu akzeptieren könnte einen Einbruch verbergen.
- Aufgegebene Pakete, PHP- und Contao-Upgrades, Zertifikate, Weiterleitungen, Webserver- und CDN-Konfiguration.
Für diese Punkte zeigt die Detailansicht die genauen Schritte und einen Direktlink, etwa Contao-Benutzereinstellungen öffnen oder Contao-Benutzergruppen öffnen.
Ereignisse
Die Registerkarte Ereignisse zeigt die aufgezeichnete Sicherheitstelemetrie: Backend-Anmeldungen, Audits, Statuswechsel von Feststellungen, Sperren, Konfigurationsänderungen und Exporte. Wiederholte gleiche Fehlversuche innerhalb einer Stunde werden zu einer Zeile mit Zähler zusammengefasst. Lizenz: Pro (die Aufzeichnung selbst läuft auch in Free).
So filtern und exportieren Sie Ereignisse
- Ereignisse öffnen.
- Zeitraum wählen (24 Stunden, 3 Tage, 7 Tage — Standard —, 30 Tage, alle oder ein eigener Zeitraum mit Von/Bis).
- Optional Kategorie, Schweregrad, Ergebnis, Benutzername, IP-Adresse oder Suche setzen und Anwenden wählen. Pro Seite stehen 25 Ereignisse.
- Für den Export CSV exportieren wählen. „Exportiert nur die Ereignisse, die den aktuellen Filtern entsprechen.“ Die Datei
security-events-JJJJMMTT-HHMMSS.csvist UTF-8 und gegen Formel-Einschleusung in Tabellenprogrammen abgesichert; sie enthält höchstens 50.000 Zeilen.
Der CSV-Export enthält IP-Adressen ungekürzt, auch wenn in den Einstellungen die IP-Maskierung eingeschaltet ist. Die Maskierung wirkt derzeit nur in den Berichten.
Login-Sicherheit
Die Registerkarte Login-Sicherheit wertet die Backend-Anmeldungen aus und enthält unten die Karte Aktiver Schutz. Die Auswertung blockiert niemanden — sie zeigt nur. Lizenz: Pro; auf dem Dashboard steht in Free eine Zusammenfassung.
| Karte | Inhalt |
|---|---|
| Kennzahlen | erfolgreiche und fehlgeschlagene Anmeldungen, betroffene Konten und Quellen |
| Analyse fehlgeschlagener Logins | Brute-Force-Cluster je Benutzername, verteilte Angriffe, Password-Spraying, Erfolg nach Fehlversuchen |
| Angegriffene Benutzernamen | welche Namen angegriffen werden — existierend, Administrator oder unbekannt |
| Analyse der Quell-IPs | Herkunft der Versuche |
| Anmeldetrends | 24 Stunden / 7 Tage / 30 Tage |
| Letzte erfolgreiche Anmeldungen | mit Hinweis auf auffällige Erfolge |
| Sicherheit der Backend-Konten | 2FA-Abdeckung: „Für jeden Backend-Benutzer erzwungen“ oder „%d von %d Benutzern geschützt“ |
Die Schwellen der Auswertung stehen unter Einstellungen → Login-Analyse: Analysezeitfenster (Standard 3 Tage), Brute-Force-Schwelle (pro Benutzername) (10), Schwelle für verteilte Angriffe (unterschiedliche IPs pro Benutzername) (3), Password-Spraying-Schwelle (unterschiedliche Benutzernamen pro IP) (5), Schwelle „Erfolg nach Fehlversuchen“ (10) und Zeitfenster „Erfolg nach Fehlversuchen“ (24 Stunden).
So reagieren Sie auf einen sichtbaren Angriff
- In Angegriffene Benutzernamen prüfen, ob ein existierendes Administratorkonto angegriffen wird.
- Wenn ja: sicherstellen, dass dieses Konto 2FA nutzt und ein starkes Passwort hat. Die Suite sperrt nie ein Konto — sie arbeitet ausschließlich mit Quelladressen.
- In Letzte erfolgreiche Anmeldungen prüfen, ob ein Erfolg nach vielen Fehlversuchen markiert ist. Das ist kein Beweis für einen Einbruch, aber ein Grund, mit dem Kontoinhaber zu sprechen und die Sitzungen zu prüfen.
- Ist der Aktive Schutz noch aus, ihn einschalten — siehe nächster Abschnitt.
Aktiver Schutz
Der Aktive Schutz steht vor der Backend-Anmeldung von Contao. Er zählt Fehlversuche je Quelladresse, drosselt Quellen über der Schwelle mit HTTP 429 und sperrt sie bei eingeschalteter automatischer Blockierung vorübergehend — mit wachsender Dauer bei Wiederholung. Konten werden nie gesperrt. Der Schutz wirkt auf Anwendungsebene und ändert keine Server-Firewall. Lizenz: Pro. Ort: Login-Sicherheit → Karte Aktiver Schutz, Einstellungen unter Einstellungen → Aktiver Schutz.
So schalten Sie den Aktiven Schutz ein
- Login-Sicherheit öffnen und in der Karte Aktiver Schutz die Client-IP-Diagnose (dieser Request) ansehen. Die Zeile Durchsetzungsquelle der Security Suite muss Ihre echte öffentliche Adresse zeigen.
- Steht dort die Adresse eines Proxys oder Load-Balancers und erscheint „Die Ermittlung der Client-IP ist nicht zuverlässig“: Die vertrauenswürdigen Proxys in der Contao-/Symfony-Konfiguration eintragen. Die Suite liest Weiterleitungs-Header nie selbst, sondern nur über Contao, wenn der Proxy dort als vertrauenswürdig konfiguriert ist.
- Einstellungen öffnen, Abschnitt Aktiver Schutz.
- Unter Vertrauenswürdige Quellen Ihre Büro- und VPN-Adressen eintragen, eine pro Zeile (exakte IP oder CIDR-Bereich).
- Aktiver Backend-Schutz aktiviert ankreuzen. Automatische temporäre Blockierung aktiviert und Schutz vor verteilten Angriffen aktiviert sind standardmäßig an.
- Einstellungen speichern wählen.
- Zurück in Login-Sicherheit zeigt die Karte den Status Aktiviert und „Der Aktive Schutz setzt durch. Missbräuchliche Backend-Anmeldequellen werden gedrosselt und vorübergehend blockiert.“
| Einstellung | Verhalten | Standard |
|---|---|---|
| Aktiver Backend-Schutz aktiviert | „Hauptschalter für den Aktiven Schutz. Wenn aus, analysiert die Login-Sicherheit weiter, greift aber nie in die Authentifizierung ein.“ | aus |
| Automatische temporäre Blockierung aktiviert | „Wenn aus, wird eine Quelle über der Schwelle für diesen Request gedrosselt, aber es wird keine dauerhafte Blockierung angelegt.“ | an |
| Schutz-Zeitfenster (Minuten) | „Fehlgeschlagene Backend-Anmeldungen werden über dieses gleitende Fenster gezählt, um über eine Blockierung zu entscheiden.“ | 15 |
| Blockier-Schwelle Quell-IP | „Fehlgeschlagene Backend-Anmeldungen einer IP im Fenster, bevor sie blockiert wird.“ | 20 |
| Blockier-Schwelle IP + Benutzername | „Fehlversuche einer IP gegen einen Benutzernamen, bevor diese IP blockiert wird. Das Konto wird nie gesperrt.“ | 10 |
| Blockier-Schwelle Password-Spraying | „Unterschiedliche Benutzernamen, gegen die eine IP scheitert, bevor sie als Password-Spraying blockiert wird.“ | 6 |
| Dauer der ersten Blockierung (Minuten) | Erste Sperre einer Quelle | 15 |
| Blockierdauer bei Wiederholung (Minuten) | Erneute Sperre | 60 |
| Blockierdauer bei schweren/mehrfachen Fällen (Minuten) | Schwere Fälle | 1440 |
| Vertrauenswürdige Quellen | „Exakte IPs oder CIDR-Bereiche, die den gesamten automatischen Login-Schutz umgehen. Eine pro Zeile. Bewusst konfigurieren — nichts wird implizit vertraut.“ Höchstens 200 Einträge. | leer |
| Angriffsmodus aktiv | „Ein strengeres temporäres Profil: niedrigere Schwellen und längere Blockierungen. Auch im Login-Sicherheit-Bereich umschaltbar.“ | aus |
| Strenge-Faktor des Angriffsmodus | „Während der Angriffsmodus aktiv ist, werden Schwellen durch diesen Wert geteilt und Blockierdauern damit multipliziert.“ | 4 |
| Schutz vor verteilten Angriffen aktiviert | „Verknüpft feindliche Backend- und sensible Pfadaktivität über wechselnde IPs, ohne Benutzerkonten zu sperren.“ | an |
Eine gesperrte Quelle erhält an der Backend-Anmeldung HTTP 429 mit „Zu viele Anmeldeversuche. Bitte versuchen Sie es später erneut.“ oder „Der Zugriff auf die Backend-Anmeldung ist vorübergehend eingeschränkt.“
So schalten Sie den Angriffsmodus um
- Login-Sicherheit → Karte Aktiver Schutz → Angriffsmodus aktivieren.
- Der Dialog erklärt die Wirkung. Steht Ihre Adresse nicht auf der Vertrauensliste, warnt er: „Ihre aktuelle Adresse steht nicht auf der Liste der vertrauenswürdigen Quellen. …“ Bestätigen.
- Meldung: „Der Angriffsmodus ist aktiv. Die Schwellen der Backend-Anmeldung sind strenger und Sperren dauern länger. Vertrauenswürdige Quellen sind nicht betroffen.“
- Nach dem Angriff Angriffsmodus deaktivieren wählen. Der Angriffsmodus schaltet sich nie von selbst ab. Bestehende Sperren bleiben, bis sie ablaufen oder Sie sie aufheben.
Nach dem Umschalten des Angriffsmodus und nach „Quelle vertrauen“ / „Vertrauen entfernen“ die Einstellungen prüfen. In der aktuellen Version setzen diese Aktionen die übrigen Ein/Aus-Schalter im Abschnitt Aktiver Schutz auf „aus“ — insbesondere Aktiver Backend-Schutz aktiviert, Automatische temporäre Blockierung aktiviert und Schutz vor verteilten Angriffen aktiviert; bei den Vertrauensaktionen zusätzlich den Angriffsmodus. Öffnen Sie danach Einstellungen → Aktiver Schutz, kreuzen Sie die gewünschten Schalter wieder an und speichern Sie. Erkennbar ist der Zustand am Status der Karte: Steht dort Aus, ist der Schutz nicht aktiv.
Sperren und vertrauenswürdige Quellen
Neben den automatischen Sperren können Sie Quellen von Hand sperren. Eine manuelle Sperre gilt für Website-Frontend und Contao-Backend — jede Anfrage, die PHP erreicht, erhält HTTP 403 „Zugriff verweigert.“. Eine manuelle Sperre hat Vorrang vor der Vertrauensliste. Lizenz: Pro.
So sperren Sie eine Quelle von Hand
- Login-Sicherheit → Aktiver Schutz → Karte Eine Quelle manuell blockieren.
- In IP-Adressen oder CIDR-Bereiche einen Eintrag pro Zeile eingeben. Erlaubt sind exakte IPv4- und IPv6-Adressen, CIDR-Bereiche und bei IPv4 nachgestellte Platzhalter:
203.0.113.10·203.0.113.*·203.0.*.*·203.0.113.0/24·2001:db8::10.*.*.*.*und Platzhalter in der Mitte werden abgelehnt. - Dauer wählen: 15 Minuten, 1 Stunde, 24 Stunden (vorausgewählt) oder Dauerhaft (bis zur Entfernung).
- Nur wenn die Quelle auf der Vertrauensliste steht und trotzdem gesperrt werden soll: Auch sperren, wenn die Quelle vertrauenswürdig ist ankreuzen.
- IP-Adresse blockieren wählen und den Dialog „Die eingegebenen Quellen für die gewählte Dauer vom Website-Frontend und Contao-Backend blockieren?“ bestätigen.
- Meldung: „… ist jetzt auf Anwendungsebene vom Website-Frontend und Contao-Backend gesperrt.“ Bei mehreren Einträgen: „… gesperrt, … bereits gesperrt.“ Ist auch nur eine Zeile ungültig, wird nichts gesperrt und jede fehlerhafte Zeile genannt.
- Die Sperre erscheint in der Tabelle Blockierte Quellen.
Sperren Sie nie Ihre eigene Adresse oder einen Bereich, der sie enthält. Die Schaltfläche Aktuelle Quelle sperren sperrt Ihre aktuelle Adresse dauerhaft — Sie verlieren sofort den Zugriff auf Website und Backend, auch auf diese Seite. Wie Sie wieder hineinkommen, steht unter Wieder Zugang erhalten.
So heben Sie eine Sperre auf
- In der Tabelle Blockierte Quellen die Zeile suchen.
- Blockierung aufheben wählen und den Dialog bestätigen.
- Meldung: „… ist nicht mehr gesperrt. Der Angriffsverlauf bleibt erhalten.“
So markieren Sie eine Quelle als vertrauenswürdig
- In der Tabelle Blockierte Quellen oder in der Quellenreputation bei der Quelle Quelle vertrauen wählen — oder die Adresse unter Einstellungen → Aktiver Schutz → Vertrauenswürdige Quellen eintragen.
- Bestätigen. Bestehende Sperren dieser Quelle werden dabei aufgehoben.
- Meldung: „… ist jetzt vertrauenswürdig und umgeht den automatischen Anmeldeschutz (eine manuelle Sperre gilt weiterhin).“
- Danach die Schalter unter Einstellungen → Aktiver Schutz prüfen (siehe Warnhinweis oben).
Die Quellenreputation fasst je Quelle Risiko-Score, Pfad-Sonden, Frontend-Missbrauch, gefährliche Uploads, Backend-Fehlversuche und Password-Spraying zusammen. Von dort lassen sich Quellen auch für eine Stunde sperren und — mit Cloudflare — Am Edge blockieren.
Vorfallreaktion
Die Karte Vorfallreaktion in Login-Sicherheit bündelt die Notfallmaßnahmen. Lizenz: Pro.
So aktivieren Sie den Backend-Sperrmodus
Im Backend-Sperrmodus dürfen sich nur noch vertrauenswürdige Quellen am Backend anmelden. Bestehende Sitzungen und das Frontend bleiben unberührt.
- Sicherstellen, dass Ihre aktuelle Adresse auf der Vertrauensliste steht. Sonst schlägt die Aktion fehl mit „Der Backend-Sperrmodus konnte nicht geändert werden. Vertrauenswürdig muss die aktuelle Quelle zuerst sein.“
- Unter Einstellungen → Vorfallreaktion den Ablauf des Backend-Sperrmodus prüfen: 30 Minuten, 1 Stunde (Standard), 4 Stunden oder Manuell bis zur Deaktivierung.
- Login-Sicherheit → Vorfallreaktion → Backend-Sperrmodus aktivieren und „Nur vertrauenswürdige Quellen für Backend-Anmeldungen zulassen? …“ bestätigen.
- Meldung: „Backend-Sperrmodus aktiviert.“ Die Karte zeigt Backend-Sperrmodus und den Ablaufzeitpunkt.
- Zum Beenden Backend-Sperrmodus deaktivieren wählen.
So sichern Sie das Backend in einem Schritt
- Backend jetzt sichern wählen.
- Im Dialog die Maßnahmen wählen: Angriffsmodus aktivieren (vorausgewählt), Backend-Sperrmodus aktivieren, Aktuelle Hochrisikoquellen eine Stunde blockieren.
- „Ausgewählte Maßnahmen der Vorfallreaktion anwenden?“ bestätigen.
- Anschließend die Schalter unter Einstellungen → Aktiver Schutz prüfen, wenn der Angriffsmodus gewählt war.
So beenden Sie Backend-Sitzungen
- Die Karte Aktive Backend-Sitzungen zeigt Benutzer, Anmeldezeit, letzte Aktivität, Quell-IP, Sitzungsrisiko und Status. Auffällige Sitzungen sind als Verdächtige Sitzungsaktivität markiert.
- Bei einer fremden Sitzung Sitzung beenden wählen und „Diese Backend-Sitzung beenden? Sie wird bei der nächsten Anfrage abgemeldet.“ bestätigen.
- Mit Alle anderen Sitzungen beenden beenden Sie alle anderen Sitzungen Ihres eigenen Kontos — nicht die anderer Benutzer.
So exportieren Sie einen Vorfallnachweis
- In der Quellenreputation bei der Quelle Nachweis exportieren wählen.
- Es öffnet sich eine HTML-Seite mit den Ereignissen dieser Quelle der letzten sieben Tage. Sie können sie drucken oder als PDF speichern. Der Export wird als Ereignis „Vorfallnachweis exportiert“ aufgezeichnet.
Wieder Zugang erhalten
Es gibt keinen Konsolenbefehl, der eine Sperre oder den Backend-Sperrmodus aufhebt. Diese Wege führen zurück ins Backend:
| Situation | Weg zurück |
|---|---|
| Backend-Sperrmodus aktiv, Sie sind noch angemeldet | Bestehende Sitzungen bleiben aktiv. In Login-Sicherheit Backend-Sperrmodus deaktivieren wählen. |
| Backend-Sperrmodus aktiv, Sie sind abgemeldet | Den eingestellten Ablauf abwarten (Standard eine Stunde) — oder sich von einer vertrauenswürdigen Quelle anmelden. Bei Manuell bis zur Deaktivierung endet er nie von selbst. |
| Automatisch gesperrt | Die Sperre abwarten oder von einer anderen, vertrauenswürdigen Adresse anmelden und die Sperre aufheben. |
| Eigene Adresse manuell gesperrt | Von einem anderen Netz anmelden (zum Beispiel Mobilfunk) und unter Blockierte Quellen Blockierung aufheben wählen. |
| Kein anderer Weg | Mit Datenbankzugriff (siehe unten). |
Notfall über die Datenbank
-- Backend-Sperrmodus beenden
UPDATE tl_secsuite_lockdown SET active = 0 WHERE id = 1;
-- Eine manuelle oder automatische Sperre einer Adresse aufheben
UPDATE tl_secsuite_ip_block SET status = 'lifted'
WHERE ip = '203.0.113.10' AND status = 'active';
Der blockierte Zugang zur Anmeldung zeigt im Backend-Sperrmodus eine schlichte Seite „Access to the backend login is temporarily restricted.“
Weitere Schutzfunktionen
Diese Funktionen sind Teil des Aktiven Schutzes und benötigen Pro. Bis auf die adaptive Prüfung und die Sitzungsüberwachung setzen sie Aktiver Backend-Schutz aktiviert voraus.
| Funktion | Wirkung | Einstellungen |
|---|---|---|
| Adaptive Prüfung | Quellen mit erhöhtem, aber noch nicht sperrwürdigem Risiko erhalten an der Backend-Anmeldung eine zusätzliche Rechenaufgabe. Vertrauenswürdige Quellen sind ausgenommen. Nach drei Fehlschlägen in zehn Minuten wird die Quelle bei eingeschalteter automatischer Blockierung gesperrt. | Einstellungen → Adaptive Prüfung: Adaptive Prüfung aktiviert (an), Reputationsschwelle für Prüfung (40), Gültigkeit der Prüfungsfreigabe (Minuten) (10) |
| Verteilte Angriffe | Erkennt Angriffe aus vielen wechselnden Adressen auf ein Konto, einen Pfad oder die ganze Website. Das angegriffene Ziel wird kurz gedrosselt; kein Konto wird gesperrt. Anzeige in der Karte Verteilte Angriffe. | Einstellungen → Aktiver Schutz: Korrelationsfenster (60 s) und Schwellen |
| Gefährliche Uploads | Weist Uploads mit ausführbarer Endung (auch als vorletzte Endung), PHP- oder Shebang-Inhalt oder falschem Bildtyp ab, bevor Contao sie speichert. Uploads von Administratoren im Backend sind ausgenommen. | keine eigene |
| Anfrage-Missbrauch | Begrenzt Passwort-Reset, Mitgliederanmeldung, Registrierung und erkennbare öffentliche Formulare je Quelle. Normale Seitenaufrufe werden nie begrenzt. | Einstellungen → Anfrage-Missbrauch: Fenster 300 s; Limits 5 / 10 / 5 / 15; Drosselung 10 Minuten |
| Pfad-Sonden | Erkennt typische Suchpfade wie /.env, /.git/, wp-login.php oder phpmyadmin und erhöht die Reputation der Quelle. Ein einzelner normaler 404 zählt nicht. | — |
| Sensible Pfade abweisen | Liefert für bekannte sensible Pfade einen allgemeinen 404, sofern die Anfrage Contao erreicht. | Einstellungen → Härtung: Bekannte sensible Pfade auf Anwendungsebene abweisen (aus) |
| Sitzungsüberwachung | Bewertet Backend-Sitzungen und markiert verdächtige. Ein IP-Wechsel allein beendet keine Sitzung. | — |
Der Text der adaptiven Prüfung („Additional verification“) und die Ablehnung eines Uploads („The uploaded file was rejected.“) erscheinen derzeit in englischer Sprache.
Cloudflare, AbuseIPDB, Fail2ban
Optionale Pro-Integrationen. Der lokale Schutz bleibt maßgeblich und wartet nie auf einen externen Dienst.
So richten Sie Cloudflare ein
- In Cloudflare ein API-Token mit minimalen Rechten für Firewall-Access-Rules der Zone anlegen und die 32-stellige Zonen-ID notieren.
- Einstellungen → Externe Durchsetzung öffnen.
- Externe Durchsetzung aktiviert ankreuzen, Anbieter für externe Durchsetzung auf Cloudflare stellen.
- Cloudflare-Zonen-ID und Cloudflare-API-Token eintragen. Das Token wird verschlüsselt gespeichert und danach nie wieder angezeigt; ein leeres Feld beim Speichern behält den bisherigen Wert.
- Einstellungen speichern.
- In Login-Sicherheit → Externe Durchsetzung Verbindung zum Anbieter testen wählen. Erwartet: „Die Verbindung zum konfigurierten externen Anbieter wurde bestätigt.“
- Optional Automatische Edge-Hochstufung einschalten. Dann werden schwere Wiederholungstäter ab der Schwelle für automatische Edge-Hochstufung (80) für Cloudflare vorgemerkt und vom stündlichen Cron übertragen.
Manuell: In der Quellenreputation Am Edge blockieren legt für genau diese IP eine einstündige Edge-Sperre an; Edge-Blockierung entfernen nimmt sie zurück.
Prüfen Sie die Meldung nach einer Edge-Aktion genau: „Die Aktion beim externen Anbieter ist fehlgeschlagen; der lokale Schutz bleibt aktiv.“ erscheint derzeit wie eine Erfolgsmeldung. Edge-Sperren sind nur für die zuletzt aktiven Quellen der Reputationsliste sichtbar; ältere entfernen Sie bei Bedarf im Cloudflare-Dashboard.
So richten Sie AbuseIPDB ein
- Einstellungen → Bedrohungsdaten: Bedrohungsdaten aktiviert ankreuzen, Anbieter für Bedrohungsdaten auf AbuseIPDB stellen.
- AbuseIPDB-API-Schlüssel eintragen (verschlüsselt gespeichert) und speichern.
- Quellen, die automatisch gesperrt wurden, werden vorgemerkt und vom täglichen Cron abgefragt (höchstens 20 je Lauf). Ein hoher Missbrauchswert erhöht die Reputation der Quelle. Das Ergebnis steht in der Quellenreputation unter Externe Bedrohungsdaten.
Fail2ban
Für neu angelegte automatische Sperren und bestätigte Edge-Sperren schreibt die Suite eine Zeile in ihren Monolog-Kanal contao_security_suite:
SECURITY_SUITE_PROTECTION event=blocked ip=203.0.113.10 attack=ip_username action=application event_id=0
attack ist einer von source_ip, ip_username, password_spray, malicious_path_probe, frontend_abuse, challenge_failure, external. Die Suite legt keine eigene Datei an — in welcher Protokolldatei die Zeile landet, bestimmt Ihre Monolog-Konfiguration. Ein Fail2ban-Filter setzt dort an. Manuelle Sperren erzeugen keine Zeile.
Benachrichtigungen
Die Suite verschickt Sicherheitswarnungen per E-Mail über den in Contao konfigurierten Mailer. Lizenz: Pro.
So richten Sie Benachrichtigungen ein
- Sicherstellen, dass Contao E-Mails versenden kann.
- Einstellungen → Benachrichtigungen: Sicherheitsbenachrichtigungen aktiv ankreuzen.
- Empfänger-E-Mail-Adresse(n) eintragen — durch Komma, Semikolon oder Zeilenumbruch getrennt, höchstens 10.
- Die Anlässe wählen und die Abkühlzeit für Benachrichtigungen (Minuten) festlegen (Standard 60). „Während dieser Zeit wird pro Quelle und Ereignistyp nur eine Meldung gesendet.“
- Einstellungen speichern.
| Schalter | Anlässe |
|---|---|
| Bei automatischen Blockierungen und Wiederholungstätern benachrichtigen | automatische Sperre, Password-Spraying, Wiederholungstäter |
| Bei Angriffserkennung und Frontend-Drosselungen benachrichtigen | Pfad-Sondierung, Frontend- und Passwort-Reset-Drosselung, verteilte Angriffe, wiederholte Fehlschläge der adaptiven Prüfung |
| Bei gefährlichen Uploads benachrichtigen | abgewiesener Upload |
| Bei erfolgreicher Anmeldung nach einer großen Angriffswelle benachrichtigen | Anmeldung von einer Quelle mit hoher Angriffsaktivität, Anmeldung während eines verteilten Angriffs |
| immer, wenn Benachrichtigungen aktiv sind | Angriffsmodus eingeschaltet, verdächtige Sitzung, Sitzung beendet, Backend-Sperrmodus geändert |
Betreff: [Contao Security Suite] <Titel>. Ein Mailfehler unterbricht nie den Schutz.
CSP
Die Registerkarte CSP ist eine Bedienoberfläche über Contaos eigener Content Security Policy je Website-Wurzel. Sie wählen Vorlagen und eigene Regeln, die Suite baut daraus eine Richtlinie, prüft sie mit Contaos eigenem CSP-Parser und schreibt sie in die CSP-Felder der Startseite. Contao sendet den Header danach selbst. Lizenz: Pro.
So richten Sie eine CSP ein
- CSP öffnen und oben die Website-Root wählen. Die Seite lädt mit dieser Wurzel neu.
- Die Vorlagen ankreuzen, die Ihre Website braucht — zum Beispiel Google Fonts, YouTube, Matomo, Google Maps. Vorlagen mit dem Kennzeichen Benötigt Ursprünge brauchen eine Adresse im Eingabefeld, etwa die Domain Ihrer Matomo-Instanz.
- Unter Erweitert / eigene Regeln bei Bedarf Zusätzliche CSP-Regeln eintragen. Sichere Basisrichtlinie einbeziehen ergänzt
default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'. - Speichern & Vorschau wählen. Es wird nur ein Entwurf gespeichert; an der Website ändert sich noch nichts. Die Vorschau zeigt Basis, Aus Vorlagen, Aus eigenen Regeln und Endgültig zusammengeführte Richtlinie.
- Hinweise unter „Diese müssen behoben werden, bevor die Richtlinie angewendet werden kann:“ korrigieren und erneut speichern. Hinweise unter „Hinweis — die Richtlinie kann trotzdem angewendet werden:“ sind Empfehlungen.
- Auf Website-Root anwenden wählen und „Diese Content Security Policy jetzt auf den ausgewählten Website-Root anwenden?“ bestätigen. Die Schaltfläche ist gesperrt, solange der gespeicherte Entwurf blockierende Fehler hat.
- Meldung: „Content Security Policy für „…“ aktiviert und angewendet. Sie ist durchsetzend; Berichte und Protokollierung sind deaktiviert.“
- Die Website im Browser durchklicken und in den Entwicklertools auf blockierte Ressourcen achten. Fehlende Quellen als Vorlage oder eigene Regel ergänzen, speichern, erneut anwenden.
So schalten Sie die CSP ab oder kehren zurück
- CSP für diesen Root deaktivieren („Die Content Security Policy für diesen Website-Root deaktivieren?“) schaltet die CSP der Wurzel ab; der Richtlinientext bleibt erhalten.
- Vorherige Konfiguration wiederherstellen („Die vorherige CSP-Konfiguration für diesen Website-Root wiederherstellen?“) stellt den Zustand wieder her, den die Wurzel vor der ersten Änderung durch die Suite hatte, und gibt die Verwaltung an Sie zurück. Vor jeder Änderung legt die Suite automatisch eine Sicherung an. Gibt es keine, steht dort „Keine vorherige Konfiguration aufgezeichnet“.
| Vorlagengruppe | Vorlagen |
|---|---|
| Kern / Allgemein | Inline-Bilder (data:), Blob-Ressourcen, Inline-SVG, Web-Worker |
| Schriften | Google Fonts, Externe Webschriften |
| Medien & Video | YouTube, Vimeo, Externe Medien |
| Analyse | Google Analytics / Tag Manager, Matomo |
| Karten | Google Maps, OpenStreetMap / Leaflet |
| Frames / eingebettete Inhalte | Externes iframe |
| Häufige Frontend-Anforderungen | Externe Bilder, Externe Stylesheets, Externe Skripte, API-/Connect-Endpunkte, Inline-Style-Attribute, Unsichere Anfragen hochstufen |
Die Suite schreibt immer eine durchsetzende Richtlinie. Einen Report-Only-Modus bietet sie nicht an; report-uri und report-to sind in eigenen Regeln nicht erlaubt. Eine strenge Richtlinie kann Inline-Skripte oder nicht deklarierte Drittanbieter-Widgets blockieren — testen Sie jede Wurzel nach dem Anwenden. Die Option Aktuelle Richtlinie in die eigenen Regeln importieren wirkt nur, wenn Sie im selben Formular direkt Auf Website-Root anwenden wählen; sie wird nicht mit dem Entwurf gespeichert.
HTTP-Header
Die Registerkarte HTTP-Header vergleicht die konfigurierten Sicherheits-Header mit der Live-Antwort und setzt fehlende Header je Website-Wurzel auf Anwendungsebene. Die Suite fügt einen Header nur hinzu, wenn die Antwort ihn nicht schon enthält — ein Wert von Webserver, Proxy oder einem anderen Bundle gewinnt immer. Header werden nur im Frontend gesendet. .htaccess und die Seitenstruktur werden nicht angefasst. Lizenz: Pro.
So setzen Sie die empfohlenen Header
- Zuerst ein Audit auf dem Produktivserver ausführen, damit die Spalte Beobachtet gefüllt ist. Ohne Audit steht dort „Die Live-Antwort wurde noch nicht geprüft“.
- HTTP-Header öffnen und die Website-Wurzel wählen.
- Die Vorlage wählen: Empfohlen (vorausgewählt), Streng oder Benutzerdefiniert. Bei Empfohlen und Streng werden die einzelnen Wertfelder ignoriert — nur Zusätzliche Header bleiben wirksam.
- Speichern & Vorschau wählen. Noch wird nichts gesendet.
- Auf Website-Root anwenden wählen und „Diese Sicherheits-Header jetzt auf den ausgewählten Website-Root anwenden?“ bestätigen.
- Ein erneutes Audit ausführen und in der Tabelle prüfen, dass der Status Vorhanden lautet.
- Zum Abschalten Header-Verwaltung für diesen Root deaktivieren wählen; die Konfiguration bleibt gespeichert.
| Vorlage | Gesendete Header |
|---|---|
| Empfohlen | X-Content-Type-Options: nosniff, Referrer-Policy: strict-origin-when-cross-origin, X-Frame-Options: SAMEORIGIN, Permissions-Policy mit camera, microphone, geolocation, payment, usb gesperrt |
| Streng | nosniff, strict-origin, DENY, alle 16 Permissions-Policy-Funktionen gesperrt, Cross-Origin-Opener-Policy und Cross-Origin-Resource-Policy auf same-origin |
| Benutzerdefiniert | die eingetragenen Werte |
Die Tabelle zeigt je Header Einstufung (Empfohlen, Veraltet, Kontextabhängig, Wertabhängig, Von Contao verwaltet), Konfiguriert, Beobachtet und Status (Vorhanden, Fehlt, Nicht beobachtet, Von anderswo, Nicht verwaltet). Konflikte — doppelte Header, abweichende Werte aus einer anderen Schicht, Access-Control-Allow-Origin: * — stehen als Hinweise über der Tabelle.
HSTS wird in dieser Registerkarte nur angezeigt („Strict-Transport-Security wird von Contao verwaltet“). Ist Contaos HSTS aus, bietet die Feststellung zu headers.hsts die Behebung Header korrigieren an: Strict-Transport-Security: max-age=15552000 (180 Tage), nie includeSubDomains oder preload, nur auf HTTPS-Antworten und nur, wenn das letzte Audit HTTPS für die Wurzel nachgewiesen hat.
Die HSTS-Behebung geht beim nächsten Speichern verloren. Sie steht danach im Feld Zusätzliche Header. Speichern oder wenden Sie die Header-Konfiguration dieser Wurzel danach erneut an, entfernt die Suite die HSTS-Zeile ohne Meldung. Prüfen Sie nach jeder Änderung an den Headern, ob die Feststellung zu HSTS wieder offen ist, und wenden Sie die Behebung dann erneut an.
Mehrere Website-Wurzeln erhalten Header nur, wenn jede Wurzel eine eigene Domain hat, die genau dem aufgerufenen Hostnamen entspricht. Teilen sich mehrere Sprach-Wurzeln eine Domain, gilt die Konfiguration der ersten Wurzel in der Sortierung. Unter Einstellungen → Datenschutz blendet PHP-Versions-Header (X-Powered-By) ausblenden zusätzlich den PHP-Versions-Header aus.
Benutzer & Zugriff
Die Registerkarte Benutzer & Zugriff prüft Backend-Konten, Gruppen, Rechte und 2FA-Abdeckung. Sie ist rein lesend und ändert nie ein Konto. Lizenz: Pro.
So prüfen Sie die Konten
- Benutzer & Zugriff öffnen. Die Kennzahlen zeigen unter anderem Inaktive Admins (180 T).
- Über die Filter (Suche „Benutzername oder Name“, Rolle, 2FA, Zustand, Gruppe) die Liste eingrenzen.
- Markierte Auffälligkeiten durchgehen: vorhersehbare Administratornamen (
admin,administrator,root,contao,webmaster), Administratoren ohne 2FA, seit 180 Tagen inaktive oder deaktivierte Administratoren, mehr als fünf aktive Administratoren, 20 oder mehr Fehlversuche in 30 Tagen gegen einen Administrator, Gruppen mit weitreichenden Rechten. - Über den Link einer Zeile direkt den Datensatz in Contaos Benutzer- oder Gruppenverwaltung öffnen und dort ändern.
- Die Rechtematrix der Gruppen zeigt, welche Gruppe auf welche Module zugreift.
2FA richtet jeder Kontoinhaber selbst unter seinem Profil ein. Ob 2FA für alle erzwungen wird, steuert Contao selbst; die Suite zeigt es nur an.
Dateien
Die Registerkarte Dateien zeigt die Ergebnisse des Dateisystem-Scans: exponierte sensible Dateien, verdächtige Dateien in Upload-Bereichen, Bilder mit Skriptinhalt, für alle beschreibbare Dateien und Änderungen gegenüber der Datei-Referenz. Der Scan läuft beim Audit, nicht beim Öffnen der Registerkarte. Lizenz: Pro.
| Aspekt | Verhalten |
|---|---|
| Durchsuchte Verzeichnisse | public, web, files, config, templates, contao, app/config, system/config, system/modules sowie die Projektdateien composer.json, composer.lock, .env*, .htaccess, web.config |
| Ausgenommen | u. a. vendor/, var/, node_modules/, .git/, assets/, bundles/, contao-manager/ |
| Grenzen | höchstens 25.000 Dateien, Tiefe 12, Symlinks werden nie verfolgt; Dateien über 8 MB werden erfasst, aber nicht gehasht |
| Exponierte Dateien | nur unterhalb von public/ bzw. web/: .env*, .htpasswd, Schlüssel, Datenbank-Dumps, Archive und Backups, Editor-Sicherungen, Logs, phpinfo-Dateien, VCS-Daten. Das Audit fragt bis zu 15 davon per HTTP ab; ist eine abrufbar, wird sie Kritisch und trägt „Über HTTP erreichbar“. |
| Verdächtige Dateien | nur in Upload-Bereichen (files/): Skripte (.php, .phtml, .phar, .sh, .py …), .htaccess, versteckte ausführbare Dateien, Bilder mit PHP- oder Skriptinhalt |
Eine Datei wird nie geöffnet, ausgeführt oder eingebunden — nur ihr Name, ihre Rechte und für die Typprüfung die ersten Bytes werden gelesen.
So legen Sie die Datei-Referenz fest
- Ein Audit ausführen. Der Abschnitt Dateiintegritäts-Referenz erscheint erst nach dem ersten Audit.
- Sicherstellen, dass der aktuelle Dateibestand vertrauenswürdig ist — etwa direkt nach einem Deployment.
- Referenz festlegen wählen und „Die Dateiintegritäts-Referenz aus dem aktuellen Dateisystemzustand festlegen?“ bestätigen. Die Suite durchläuft das Dateisystem synchron; den Tab offen lassen.
- Ab dem nächsten Audit zeigt Änderungen gegenüber der Referenz Dateien als Hinzugefügt, Geändert oder Entfernt.
- Nach einem geplanten Update Referenz aktualisieren wählen. Einzelne Änderungen lassen sich nicht akzeptieren — nur die ganze Referenz ersetzen.
Die Referenz speichert nur Hash-Wert, Größe und Änderungszeit von Anwendungs- und Konfigurationsdateien — nie Inhalte, nie Uploads. Ein Audit überschreibt sie nie von selbst.
So entfernen Sie eine exponierte oder verdächtige Datei
- In der Liste die Datei suchen.
- Datei sichern wählen. Dialog Datei aus dem Web-Root verschieben: „… aus dem Web-Root in den Quarantänebereich der Security Suite verschieben? …“. Mit Aus öffentlichem Verzeichnis verschieben bestätigen.
- Warten — vor und nach der Aktion läuft jeweils ein vollständiger Scan.
- Meldung: „„…“ wurde in den Quarantänebereich verschoben (…/). Sie ist nicht mehr per HTTP erreichbar und kann von dort wiederhergestellt werden.“ Der genannte Pfad liegt im privaten Verzeichnis der Suite unter
var/. - Alternativ Datei löschen: „… dauerhaft löschen? …“ — „Dies entfernt die Datei dauerhaft. Der Vorgang kann nicht rückgängig gemacht werden.“
- Jedes Geheimnis rotieren, das in einer bereits erreichbaren Datei stand (Datenbankpasswort, API-Schlüssel,
APP_SECRET).
Eine über die Registerkarte „Dateien“ in Quarantäne verschobene Datei lässt sich nicht aus dem Backend zurückholen. Dafür gibt es dort keine Schaltfläche. Brauchen Sie die Datei wieder, verschieben Sie sie per SFTP oder Shell aus dem in der Meldung genannten Quarantänepfad an ihren ursprünglichen Ort. Anders bei der Behebung über Sicherheitsprobleme (Datei sichern als Behebung von files.sensitive_exposure oder files.suspicious): Dort legt Letzte Behebung rückgängig machen die Dateien zurück. Wenn Sie die Wahl haben, verschieben Sie Dateien deshalb über Sicherheitsprobleme.
Weitere Einstellungen unter Einstellungen → Dateisicherheit: Zusätzliche Datei-Scan-Pfade, Ausgeschlossene Pfade (projekt-relativ, einer pro Zeile), Maximale Größe für Inhaltsprüfung (Bytes) und Dateiintegritäts-Überwachung aktiviert. Dateisystem-Sicherheits-Scan aktiviert (unter Scans & Zeitplanung) schaltet den Scan ab; die Datei-Prüfungen melden dann „deaktiviert“, nicht „0 Probleme“.
Erweiterungen
Die Registerkarte Erweiterungen zeigt das Composer-Inventar und das Ergebnis von composer audit. Das Audit ruft composer audit --locked --format=json als eigenen Prozess auf (Zeitlimit 90 Sekunden). Lizenz: Pro.
| Unterseite | Inhalt |
|---|---|
| Contao-Erweiterungen | installierte Contao-Bundles mit Version |
| Abhängigkeiten | alle Pakete, aufgegebene mit Kennzeichen „aufgegeben → Ersatz“ |
| Sicherheitshinweise | bekannte Schwachstellen je Paket |
| Composer-Integrität | gültige composer.json, vorhandene composer.lock, Übereinstimmung mit den installierten Paketen |
Mögliche Zustände: „Es wurde noch kein Abhängigkeits-Audit ausgeführt“, „Keine bekannten Schwachstellen“, „… bekannte Schwachstelle(n) …“ und „Das Abhängigkeits-Audit konnte nicht ausgeführt werden“ mit „Der Schwachstellenstatus ist UNBEKANNT …“. Der letzte Zustand bedeutet ausdrücklich nicht „keine Schwachstellen“.
So beheben Sie eine Paket-Schwachstelle
- In Sicherheitsprobleme die Feststellung zu
extensions.known_vulnerabilitiesöffnen. - Details öffnen und die Vorschau lesen: Die Suite plant ein eingegrenztes
composer update <Pakete>ohne Skripte und Plugins. Sie verweigert, wenn der Plan zu viele Pakete, ein nicht betroffenes Contao-Kernpaket oder ein Herabstufen berührt. - Behebung anwenden (Schaltfläche Paket aktualisieren). Zuerst läuft ein Probelauf, dann das echte Update;
composer.jsonundcomposer.lockwerden vorher gesichert. Das dauert — den Tab offen lassen. - Danach im Contao Manager Datenbank prüfen ausführen und den Anwendungs-Cache leeren. Diese Nacharbeiten führt die Suite nicht aus.
Der Hinweis in der Registerkarte „Nur Hinweise — die Security Suite führt niemals composer install oder composer update aus.“ bezieht sich auf die Registerkarte selbst. Die Behebungen Paket aktualisieren und Paket auflösen in Sicherheitsprobleme führen Composer sehr wohl aus — aber nur nach Ihrer Bestätigung. Sie brauchen ein ausführbares composer und beschreibbare composer.json, composer.lock und vendor/.
Unter Einstellungen → Erweiterungen & Sicherheitshinweise: Abhängigkeits-Hinweisprüfung aktiviert, Netzwerkzugriff für die Hinweisprüfung erlauben (aus = nur lokal zwischengespeicherte Daten) und Aufgegebene Pakete melden.
System
Die Registerkarte System zeigt die sicherheitsrelevante Umgebung: Contao-, Symfony- und Suite-Version, PHP-Einstellungen (expose_php, allow_url_include, display_errors …), APP_ENV und Debug-Modus, Session-Cookie-Einstellungen, HTTPS, Server-Software, Proxy-Kontext, vertrauenswürdige Proxys und Hosts, Datenbank und Beschreibbarkeit von var/. Dazu den System-Sicherheits-Score. Die Registerkarte selbst ist rein lesend. Lizenz: Pro.
So beheben Sie System-Feststellungen
- Oben in System die offenen Feststellungen ansehen und Alle Probleme bzw. die bereichsbezogene Schaltfläche wählen — oder die Feststellung in Sicherheitsprobleme öffnen.
- Für
server.app_debugschreibt die BehebungAPP_DEBUG=0in die.env.localdes Projekts. Sie wirkt beim nächsten Start der Anwendung; bis dahin lautet der Status Behebung ausstehend. - Für
system.php_runtimeundsystem.session_cookiesschreibt die Behebung einen markierten Block in die.user.iniim Document-Root. Das funktioniert nur unter PHP-FPM / FastCGI; PHP liest die Datei nur alleuser_ini.cache_ttlSekunden neu ein. „Secure“ wird nur gesetzt, wenn Sie über HTTPS arbeiten. - Nach einigen Minuten ein weiteres Audit starten. Erst dann wird die Feststellung Behoben.
allow_url_include und expose_php lassen sich aus der Anwendung heraus nicht ändern. Die Suite nennt die nötige Änderung in der php.ini des Servers.
Berichte
Die Registerkarte Berichte erzeugt Sicherheitsberichte aus den gespeicherten Daten. Lizenz: Pro.
So erstellen Sie einen Bericht
- Berichte öffnen.
- Den Berichtstyp wählen: Aktueller Sicherheitsbericht, Scan-Bericht, Feststellungsbericht, Bericht zu Sicherheitsereignissen oder Bericht zur Login-Sicherheit. Die Seite lädt sofort neu.
- Die Darstellung wählen: Management (nur kritische und hohe Feststellungen, mit Zuordnung zu OWASP, ISO 27001 und DSGVO als Sicherheitsnachweis) oder Technisch (alle offenen Feststellungen, mehr Spalten).
- Den Zeitraum wählen (Standard: 30 Tage). Ein eigener Zeitraum gilt nur, wenn er ausgewählt ist; er darf höchstens 366 Tage umfassen und nicht in der Zukunft enden. Der aktuelle Sicherheitsbericht und der Scan-Bericht ignorieren den Zeitraum.
- Optional nach Schweregrad, Status oder Kategorie filtern.
- Exportieren:
- CSV exportieren lädt
security-<typ>-JJJJMMTT-HHMMSS.csvherunter (UTF-8, gegen Formel-Einschleusung abgesichert). - Drucken / Als PDF speichern öffnet eine druckfreundliche Seite in einem neuen Tab. Dort mit der Druckfunktion des Browsers drucken oder als PDF speichern.
- CSV exportieren lädt
Jeder Export wird als Sicherheitsereignis aufgezeichnet. Unter Einstellungen → Berichte stellen Sie Standard-Berichtszeitraum, Organisations-/Website-Bezeichnung (erscheint auf dem Bericht), IP-Adressen in Berichte aufnehmen und Benutzernamen in Berichten maskieren ein.
Die Compliance-Zuordnung ist ein Sicherheitsnachweis, keine Compliance-Bestätigung. Berichtsinhalte, Spaltenköpfe und die Druckseite erscheinen derzeit in englischer Sprache.
Einstellungen
Die Registerkarte Einstellungen ist der zentrale Konfigurationsspeicher der Suite. Jeder Wert wird serverseitig geprüft; ungültige Werte werden einzeln abgewiesen, die übrigen trotzdem gespeichert. Sicherheitsrelevante Änderungen stehen im Verlauf sicherheitsrelevanter Änderungen mit Zeitpunkt, Wert und Benutzer; Geheimnisse erscheinen dort nie. Lizenz: Pro.
So ändern Sie Einstellungen
- Einstellungen öffnen.
- Den Abschnitt suchen: Allgemein, Überwachung, Scans & Zeitplanung, Aufbewahrung, Login-Analyse, Aktiver Schutz, Anfrage-Missbrauch, Benachrichtigungen, Adaptive Prüfung, Vorfallreaktion, Externe Durchsetzung, Bedrohungsdaten, Härtung, Feststellungen, Dateisicherheit, Erweiterungen & Sicherheitshinweise, Berichte, Datenschutz, Erweitert.
- Werte ändern und Einstellungen speichern wählen.
- Die Meldung lesen. Wurde ein Wert abgewiesen, nennt sie den betroffenen Schlüssel.
Geplante Scans und Aufbewahrung
| Option | Verhalten | Standard |
|---|---|---|
| Geplante Scans aktiviert | Startet das Audit über den Contao-Cron | aus |
| Scan-Häufigkeit | Stündlich, Täglich, Wöchentlich | Täglich |
| Security Suite aktiviert | Hauptschalter für geplante Scans | an |
| Aufbewahrung von Sicherheitsereignissen | „Tage. Ältere Ereignisse werden vom Aufbewahrungsjob gelöscht.“ 7–3650 | 90 |
| Aufbewahrung des Scan-Verlaufs | Tage, 30–3650 | 365 |
| Aufbewahrung behobener Feststellungen / des Verlaufs | „Tage. Offene, ignorierte und risikoakzeptierte Feststellungen werden nie gelöscht.“ 30–3650 | 365 |
Die Einstellungsseite sagt selbst: „Die Security Suite kann nicht überprüfen, ob der Cron tatsächlich läuft — dieses Feld spiegelt nur die konfigurierte Absicht wider.“ Läuft kein Contao-Cron, rufen Sie security-suite:scan aus Ihrer eigenen Crontab auf (siehe Cron-Jobs).
Die Einstellungen der übrigen Abschnitte sind in den jeweiligen Funktionsabschnitten beschrieben: Login-Analyse, Aktiver Schutz, Anfrage-Missbrauch, Adaptive Prüfung, Härtung, Vorfallreaktion, Externe Durchsetzung und Bedrohungsdaten, Benachrichtigungen, Dateisicherheit, Erweiterungen und Berichte. Welche Einstellungen derzeit ohne Wirkung sind, steht unter Bekannte Einschränkungen.
Erscheint „Die Einstellungstabelle ist noch nicht verfügbar“, fehlt die Datenbankmigration. Bis dahin gelten die Standardwerte.
Teil 3 — Für Entwickler
Konsolenbefehle
security-suite:scan
„Runs the Security Suite audit checks and records the result (read-only).“ Teilt sich die Logik mit der Schaltfläche im Backend und ändert nichts an der Website. Keine Optionen. Braucht eine gültige Free- oder Pro-Lizenz.
vendor/bin/contao-console security-suite:scan
| Exit-Code | Bedeutung |
|---|---|
| 0 | keine offenen Feststellungen ab Mittel |
| 1 | mittlere Feststellungen oder Prüfungen, die nicht ausgeführt werden konnten |
| 2 | hohe Feststellungen |
| 3 | kritische Feststellungen |
| 4 | Das Audit selbst ist gescheitert |
| 5 | Keine gültige Free- oder Pro-Lizenz |
Die Exit-Codes eignen sich für CI und Monitoring, etwa als Prüfung nach einem Deployment.
security-suite:purge-events
„Applies the Security Suite retention windows to events, scans and resolved findings.“ Löscht nur Zeilen älter als die konfigurierten Fenster. Läuft ohne Lizenz.
| Option | Wirkung |
|---|---|
--days=N | überschreibt das Fenster für Ereignisse für diesen Lauf (mindestens 7) |
--dry-run | zeigt nur die Fenster an, löscht nichts |
Verändernde Aktionen — Behebung, Sperren, Konfiguration, Exporte — gibt es nicht als Konsolenbefehl.
Cron-Jobs
Alle Jobs laufen über Contaos Cron-Framework und setzen voraus, dass contao:cron ausgelöst wird.
| Job | Intervall | Wirkung |
|---|---|---|
| Geplanter Scan | stündlich / täglich / wöchentlich | Startet ein Audit, wenn Geplante Scans aktiviert und Security Suite aktiviert an sind und das Intervall der Scan-Häufigkeit entspricht |
| Aufbewahrung | täglich | Wendet die Aufbewahrungsfenster an; bereinigt auch abgelaufene Sperren, Sitzungen, Anfragefenster und Zwischenspeicher. Aktive Sperren werden nie gelöscht. |
| Externe Durchsetzung | stündlich | Überträgt bis zu 20 vorgemerkte Edge-Sperren an Cloudflare und entfernt abgelaufene (Pro) |
| Bedrohungsdaten | täglich | Fragt bis zu 20 vorgemerkte Adressen bei AbuseIPDB ab (Pro) |
Ohne Contao-Cron das Audit direkt aus der Crontab starten:
15 3 * * * cd /pfad/zum/projekt && vendor/bin/contao-console security-suite:scan --no-interaction >/dev/null 2>&1
45 3 * * * cd /pfad/zum/projekt && vendor/bin/contao-console security-suite:purge-events --no-interaction >/dev/null 2>&1
Datenbanktabellen
Alle Tabellen werden über contao:migrate angelegt. Es sind reine Speichertabellen ohne Bearbeitungsmaske im Backend.
| Tabelle | Inhalt |
|---|---|
tl_secsuite_scan | Audit-Läufe mit Score |
tl_secsuite_finding | Feststellungen, eine je Prüfung |
tl_secsuite_finding_history | Statusverlauf der Feststellungen |
tl_secsuite_remediation | Verlauf der Behebungen mit Rollback-Zustand |
tl_secsuite_snapshot | Zwischenspeicher der Live-Prüfungen |
tl_secsuite_event | Sicherheitsereignisse |
tl_secsuite_csp_config | CSP-Entwürfe je Website-Wurzel |
tl_secsuite_csp_backup | Sicherungen der nativen CSP-Felder |
tl_secsuite_header_config | Header-Konfiguration je Website-Wurzel |
tl_secsuite_file_baseline | Datei-Referenz (Hash, Größe, Änderungszeit) |
tl_secsuite_setting | Einstellungen |
tl_secsuite_setting_log | Verlauf sicherheitsrelevanter Einstellungsänderungen |
tl_secsuite_ip_block | manuelle und automatische Sperren |
tl_secsuite_source | Quellenreputation |
tl_secsuite_request_window | Zähler für Anfrage-Missbrauch |
tl_secsuite_attack_window | Zähler für verteilte Angriffe |
tl_secsuite_notification | Abkühlzeiten der Benachrichtigungen |
tl_secsuite_session | Backend-Sitzungen |
tl_secsuite_lockdown | Zustand des Backend-Sperrmodus |
tl_secsuite_external_block | Edge-Sperren bei Cloudflare |
tl_secsuite_intelligence | Bedrohungsdaten von AbuseIPDB |
Zusätzlich fügt das Paket in tl_settings ein Feld für den Lizenzbereich hinzu.
Routen
Alle Backend-Aktionen sind ausschließlich per POST erreichbar, im Backend-Scope, mit Contao-Request-Token und erneuter Rechteprüfung. Kein GET verändert Zustand.
| Pfad | Zweck |
|---|---|
/contao-security-suite/scan/run | Audit starten |
/contao-security-suite/finding/{id}/{ignore|accept-risk|reopen} | Status einer Feststellung ändern |
/contao-security-suite/remediation/finding/{id}/{fix|rollback} | Einzel-Behebung und Rückgängig |
/contao-security-suite/remediation/bulk/{global|section} | „Alle beheben“ |
/contao-security-suite/events/export | CSV-Export der Ereignisse |
/contao-security-suite/csp/{site}/{save|apply|disable|restore} | CSP-Aktionen je Website-Wurzel |
/contao-security-suite/headers/{site}/{save|apply|disable} | Header-Aktionen je Website-Wurzel |
/contao-security-suite/files/baseline/{establish|update} | Datei-Referenz |
/contao-security-suite/files/action/{quarantine|delete} | Datei in Quarantäne verschieben oder löschen |
/contao-security-suite/protection/{action} | Aktiver Schutz: block, block-current, unblock, trust, untrust, attack-mode, backend-lockdown, terminate-session, terminate-other-sessions, secure-now, external-block, external-unblock, external-test |
/contao-security-suite/incidents/export/{csv|json|html} | Vorfallnachweis (im Backend wird nur html verwendet) |
/contao-security-suite/settings/save | Einstellungen speichern |
/contao-security-suite/reports/export/{csv|print} | Berichtsexport |
Die Backend-Bereiche selbst sind Contao-Backend-Module mit den Schlüsseln security_suite_dashboard, security_suite_issues, security_suite_events, security_suite_login, security_suite_csp, security_suite_headers, security_suite_users, security_suite_files, security_suite_extensions, security_suite_system, security_suite_reports und security_suite_settings (aufrufbar über /contao?do=…).
Dateisystem und Netzwerk
| Ort | Inhalt |
|---|---|
Privates Verzeichnis unterhalb von var/ | Laufzeitdaten der Suite, darunter die Lizenzdaten, der Quarantänebereich und die Composer-Sicherungen vor einem Paket-Update. Nicht per HTTP erreichbar; muss beschreibbar sein und gehört in die Datensicherung. |
public/bundles/vtinnovationscontaosecuritysuite/ | Backend-CSS und -JS, bei der Installation kopiert |
public/.user.ini | nur von der PHP-Behebung geschrieben; markierter Block, übrige Zeilen bleiben erhalten |
.env.local | nur von der APP_DEBUG-Behebung geschrieben; übrige Zeilen bleiben erhalten |
| Ausgehende Verbindung | Wann |
|---|---|
| V-T.ONE-Lizenzdienst (HTTPS) | wenn ein Administrator die Lizenz aktiviert, aktualisiert oder entfernt |
| Eigene Website (HTTPS) | während eines Audits: Live-Antwort jeder Website-Wurzel (5 s Zeitlimit) und HTTP-Abruf exponierter Dateien (höchstens 15) |
| Composer-Advisory-Dienst | bei composer audit, abschaltbar über Netzwerkzugriff für die Hinweisprüfung erlauben |
| Composer-Repositories | bei Paket aktualisieren / Paket auflösen |
| Cloudflare-API, AbuseIPDB | nur wenn konfiguriert |
Protokollierung
Die Suite schreibt in den Monolog-Kanal contao_security_suite, sofern das MonologBundle geladen ist. Sie registriert keinen eigenen Handler; wohin der Kanal schreibt, bestimmt Ihre Monolog-Konfiguration. Meldungen wie „Details stehen im Anwendungsprotokoll“ verweisen auf dieses Protokoll — in der Regel var/logs/prod-*.log.
Ein eigener Handler für Fail2ban:
# config/config.yaml
monolog:
handlers:
security_suite:
type: stream
path: '%kernel.logs_dir%/security-suite.log'
level: warning
channels: ['contao_security_suite']
Geheimnisse stehen weder in Ereignissen noch im Behebungsverlauf noch im Protokoll.
Deployment und Cache
composer install --no-dev
vendor/bin/contao-console contao:migrate --no-interaction
vendor/bin/contao-console cache:clear
vendor/bin/contao-console security-suite:scan # optional als Abnahmeprüfung
- Das private Verzeichnis unterhalb von
var/muss Deployments überdauern. Bei Deployments mit wechselnden Release-Verzeichnissen gehörtvar/zu den geteilten Verzeichnissen, sonst geht die aktivierte Lizenz verloren. - Nach einem geplanten Deployment die Datei-Referenz aktualisieren, sonst meldet das nächste Audit alle geänderten Dateien.
- Ein Audit auf einer Staging-Umgebung erzeugt Feststellungen dieser Umgebung. Der Score der Produktivumgebung entsteht nur dort.
- Ein separater Build-Schritt für die Backend-Dateien ist nicht nötig.
Erweiterbarkeit
Die Contao Security Suite ist ein geschlossenes Produkt. Sie bietet keine öffentliche PHP-API, keine eigenen Contao-Hooks und keine Symfony-Events zum Abonnieren. Prüfungen, Behebungs-Handler, Vorlagen und Dienste sind interne Implementierung und können sich mit jeder Version ändern.
Stabile Integrationspunkte sind:
- die beiden Konsolenbefehle mit ihren Exit-Codes;
- die CSV-Exporte von Ereignissen und Berichten;
- die Fail2ban-Zeilen im Monolog-Kanal
contao_security_suite; - die Sicherheitsbenachrichtigungen per E-Mail.
Die von der Suite gesendeten Header lassen sich jederzeit durch Header des Webservers oder eines eigenen kernel.response-Listeners übersteuern — die Suite setzt nie einen Header, den die Antwort bereits enthält.
Fehlerbehebung
| Symptom | Ursache und Prüfung |
|---|---|
| „Security Suite“ fehlt in der Backend-Navigation | Datenbank prüfen und Cache leeren. Bei Nicht-Administratoren das Modulrecht Security Suite in der Benutzergruppe vergeben — siehe Backend-Berechtigungen. |
| Alle Registerkarten außer Dashboard tragen ein Schloss | Die Installation läuft als Free oder ohne Lizenz. Pro-Lizenz aktivieren — siehe Lizenz aktivieren. |
| „Für Audits ist eine Lizenz erforderlich.“ / Audit starten ist gesperrt | Keine gültige Lizenz. Eine Free- oder Pro-Lizenz aktivieren. Die Konsole endet in diesem Fall mit Exit-Code 5. |
| „Für keine Startseite ist eine Domain konfiguriert, daher kann keine Lizenz aktiviert werden. …“ | In der Seitenstruktur bei der Startseite eine Domain eintragen. |
| „Die Lizenz ist an keine hier konfigurierte Domain gebunden“ | Die Domain der Startseite weicht von den gebundenen Domains ab — oft nur durch www. Exakt angleichen oder die Domain unter v-t.one ergänzen. |
| „Dieser Lizenzschlüssel wurde abgelehnt. Bitte Schlüssel und gebundene Domains unter v-t.one prüfen.“ | Tippfehler im Schlüssel oder Domain nicht gebunden. |
| „Der Lizenzdienst war nicht erreichbar. Die installierte Lizenz bleibt aktiv.“ | Der Server erreicht den Lizenzdienst nicht über HTTPS. Ausgehende Verbindungen, Firewall und Proxy des Hosters prüfen. |
| „Die Lizenz wurde verifiziert, konnte aber nicht gespeichert werden. Bitte prüfen, ob var/contao_security_suite/ beschreibbar ist.“ | Schreibrechte des Webserver-Benutzers auf dieses Verzeichnis herstellen. |
| „Das Sicherheits-Audit konnte nicht abgeschlossen werden. Details stehen im Anwendungsprotokoll.“ | Protokoll (Kanal contao_security_suite) prüfen. Häufig: Zeitlimit von PHP bei sehr großen Installationen — Audit per Konsole ausführen. |
| Erweiterungen: „Das Abhängigkeits-Audit konnte nicht ausgeführt werden“ | Kein ausführbares composer auf dem Server, Zeitlimit oder kein Netzwerk. Das ist ausdrücklich nicht „keine Schwachstellen“. |
| Header-, HSTS- oder HTTPS-Behebung wird nicht angeboten: „Für … gibt es keinen Nachweis, dass HTTPS funktioniert. …“ | Ein Audit auf dem Produktivserver ausführen; jede Website-Wurzel braucht eine Domain. |
| „HSTS ist konfiguriert, aber auf der Live-Antwort noch nicht sichtbar …“ | Ein Cache, CDN oder Proxy liefert noch die alte Antwort. Cache leeren, später erneut auditieren. |
| „Die Konfiguration wurde geändert, aber der Zustand besteht weiterhin — die Feststellung bleibt offen.“ | Eine andere Schicht (Webserver, CDN) setzt den Wert anders. Konflikthinweise in HTTP-Header lesen. |
| „A bulk remediation is already running. Wait for it to finish and try again.“ | Eine Sammelbehebung läuft noch, höchstens zehn Minuten. |
| „Auf diesem Server wurde keine Composer-Programmdatei gefunden …“ | Composer installieren oder composer.phar ins Projektverzeichnis legen — oder das Update im Contao Manager ausführen. |
| „Dieser Server betreibt PHP als Webserver-Modul (nicht FPM / FastCGI) und liest keine projektlokale .user.ini. …“ | Den Wert in der php.ini bzw. der Virtual-Host-Konfiguration setzen. |
| CSP-Anwenden gesperrt / „Diese müssen behoben werden, bevor die Richtlinie angewendet werden kann:“ | Die genannten Fehler im Entwurf beheben und erneut Speichern & Vorschau wählen. Die Schaltfläche richtet sich nach dem gespeicherten Entwurf. |
| Nach dem Anwenden der CSP fehlen Schriften, Videos oder Karten | Die passende Vorlage fehlt. In den Entwicklertools die blockierte Quelle ablesen, Vorlage oder eigene Regel ergänzen, erneut anwenden — oder CSP für diesen Root deaktivieren. |
| Header werden auf einer zweiten Website-Wurzel nicht gesendet | Die Wurzel braucht eine eigene Domain, die genau dem Hostnamen entspricht — siehe HTTP-Header. |
| Status des Aktiven Schutzes plötzlich Aus | Nach Angriffsmodus oder Vertrauensaktionen die Schalter unter Einstellungen → Aktiver Schutz prüfen — siehe Aktiver Schutz. |
| Sperren treffen alle Besucher oder niemanden | Die Suite sieht die Adresse eines Proxys. Client-IP-Diagnose (dieser Request) prüfen und vertrauenswürdige Proxys in Contao konfigurieren. |
| „Der Backend-Sperrmodus konnte nicht geändert werden. Vertrauenswürdig muss die aktuelle Quelle zuerst sein.“ | Eigene Adresse unter Vertrauenswürdige Quellen eintragen. |
| Eigenes Backend zeigt „Zugriff verweigert.“ oder „Access to the backend login is temporarily restricted.“ | Eigene Adresse gesperrt bzw. Backend-Sperrmodus aktiv — siehe Wieder Zugang erhalten. |
| Geplante Scans laufen nicht | Kein Contao-Cron eingerichtet, oder Security Suite aktiviert ist aus. Cron einrichten oder security-suite:scan per Crontab aufrufen. |
| Keine E-Mails | Mailer von Contao, Empfänger und Abkühlzeit prüfen. Unterdrückte Meldungen stehen als Ereignis „Benachrichtigung unterdrückt“ in Ereignisse. |
| „Setting not saved — …: value rejected (out of range or invalid).“ | Der Wert liegt außerhalb des erlaubten Bereichs. Die übrigen Werte wurden gespeichert. |
Bekannte Einschränkungen
- Anwendungsschutz, keine Firewall. Die Suite sieht nur Anfragen, die PHP erreichen. Statische Dateien, die Webserver oder CDN direkt ausliefern, kann sie nicht abfangen; dafür sind die Dateien-Feststellungen und die Server-Hinweise unter Einstellungen → Härtung gedacht.
- Englische Texte. Titel und Beschreibungen der Feststellungen, Berichtsinhalte, die Druckseite, die adaptive Prüfung, Teile der Registerkarten HTTP-Header, Dateien, System und Benutzer & Zugriff sowie einige Meldungen nach dem Speichern erscheinen derzeit auf Englisch.
- Score je Website-Wurzel. Der Score gilt für die gesamte Installation; die Website-Auswahl auf dem Dashboard filtert nicht.
- TLS-Prüfung. Meldet Erreichbarkeit, Ablauf und Hostname des Zertifikats — keine Cipher-Suiten, kein vollständiger TLS-Test.
- Versionsprüfungen.
contao.versionundserver.php_versionmelden die installierten Versionen, vergleichen sie aber nicht mit einer gepflegten Advisory-Quelle. - CSP. Nur durchsetzender Modus, kein Report-Only. Die Wiederherstellung führt zum Zustand vor der ersten Änderung durch die Suite, nicht zur vorletzten Version.
- HSTS-Behebung geht beim nächsten Speichern der Header-Konfiguration verloren.
- Quarantäne aus der Registerkarte „Dateien“ lässt sich nur auf dem Server zurückholen.
- Aktiver Schutz. Angriffsmodus, „Backend jetzt sichern“, „Quelle vertrauen“ und „Vertrauen entfernen“ setzen weitere Schalter des Abschnitts zurück — siehe Aktiver Schutz.
- Kein Notfallbefehl. Backend-Sperrmodus und eigene Sperren lassen sich ohne Backend-Zugang nur über die Datenbank aufheben.
- „Alle beheben“ mit Bereichsfilter behebt alle Bereiche, nicht nur den gefilterten.
- Vorfallnachweis im Backend nur als HTML.
- IP-Maskierung wirkt nur in Berichten, nicht in Login-Sicherheit, Ereignissen, CSV-Export oder Vorfallnachweis.
- Einstellungen ohne Wirkung. Diese Einstellungen werden gespeichert, beeinflussen das Verhalten derzeit aber nicht: Standard-Dashboard-Zeitraum, Informative Feststellungen auf den Bildschirmen anzeigen, Sicherheitsüberwachung aktiviert, Backend-Anmeldeereignisse aufzeichnen (Anmeldungen werden immer aufgezeichnet), Geplanter Scan schließt den Dateisystem-Scan ein, Geplanter Scan schließt die Abhängigkeits-Hinweisprüfung ein, Schwelle (pro Quell-IP) der Login-Analyse, Tiefer Datei-Scan, Transitive Abhängigkeiten in der Erweiterungsliste einbeziehen, Standard-Ablauf der Risikoakzeptanz, Informative Feststellungen in Berichte aufnehmen und Gültigkeit des Anreicherungs-Caches (Minuten). Security Suite aktiviert steuert nur geplante Scans.
- Synchrone Abläufe. Audit, Behebungen, Datei-Referenz und Dateiaktionen laufen in der Anfrage. Bei sehr großen Installationen kann das PHP-Zeitlimit greifen; das Audit lässt sich dann per Konsole ausführen.
Deinstallation
- Wirkungen zurücknehmen, solange die Suite noch installiert ist.
- In CSP je Website-Wurzel Vorherige Konfiguration wiederherstellen oder CSP für diesen Root deaktivieren wählen. Sonst bleibt die von der Suite geschriebene CSP in Contaos eigenen Feldern der Startseite aktiv — auch nach der Deinstallation.
- Behebungen, die Sie zurücknehmen möchten, über Letzte Behebung rückgängig machen zurücksetzen — insbesondere Einträge in
.user.iniund.env.localsowie „SSL verwenden“ an den Startseiten. Diese bleiben sonst bestehen. - Dateien in der Quarantäne prüfen und benötigte zurückholen.
- Bei Cloudflare angelegte Edge-Sperren entfernen oder im Cloudflare-Dashboard löschen.
- Lizenz entfernen unter System → Einstellungen → Lizenz entfernen.
- Paket entfernen — im Contao Manager unter Pakete das Paket zum Entfernen vormerken und die Änderungen anwenden, oder:
Header, Sperren, Aktiver Schutz, adaptive Prüfung und Upload-Prüfung enden damit sofort.composer remove vtinnovations/contao-security-suite vendor/bin/contao-console cache:clear - Daten entfernen (optional). Die Tabellen bleiben nach der Deinstallation erhalten. Wer sie löschen will, entfernt die Tabellen mit dem Präfix
tl_secsuite_— über die Datenbankprüfung, sofern sie das Löschen anbietet, oder von Hand. Danach das Verzeichnisvar/contao_security_suite/löschen; es enthält die Laufzeitdaten der Suite einschließlich gespeicherter Zugangsdaten für externe Anbieter.
