Guides
CyberPanel-Malware-Scanner mit Shelltrap einrichten
Host-Scanner auf einem Standard-CyberPanel-Server: Voraussetzungen, signierte Pakete, zuerst Report-only, Lizenz und Richtlinien je Domain.
CyberPanel bringt keinen eigenen Malware-Scanner mit, und jede dokumentierte Alternative hat eine Bedingung. Diese Anleitung beschreibt den praktischen Weg zu einem Scanner auf Hostebene auf einem Standard-CyberPanel-Server, in der Reihenfolge, in der wir es tatsächlich tun: am ersten Tag greift nichts ein, aber alles ist sichtbar.
Warum das auf CyberPanel überhaupt umständlich ist
Die Knowledgebase des Panels beschreibt den unterstützten Weg wörtlich :
Imunify360 is available with CyberPanel v2.0.0, but before using it you need to convert your operating system to CloudLinux OS.
Das sind eine kostenpflichtige Lizenz und eine kommerzielle Betriebssystemumstellung — zwei Anschaffungen und eine störende Migration für alle, die Standard-AlmaLinux oder Ubuntu betreiben. Die kostenlose Variante schließt die Lücke ebenfalls nicht: Die Dokumentation von Imunify nennt als unterstützte Panels für ImunifyAV cPanel, Plesk und DirectAdmin ; CyberPanel ist nicht dabei. Das kommerzielle Add-on-Paket von CyberPanel enthält keinen Sicherheitsscanner. Und das Produkt, das diese Rolle jahrelang für eine Einmalzahlung ausgefüllt hat, ConfigServers cxs, ist zusammen mit seinem Hersteller am 31. August 2025 geschlossen worden ; den Hintergrund beschreibt was CyberPanel-Betreiber jetzt tun sollten .
Die ehrliche Zusammenfassung lautet deshalb: Für einen Standard-CyberPanel-Server gibt es keinen offiziell unterstützten Echtzeit-Malware-Scanner. Dass Imunify inoffiziell betrieben wird, ist eine andere Aussage als „wird unterstützt".
Vor der Installation: was der Host mitbringen muss
Aus der Installationsdokumentation:
- Root-Zugriff. Der Broker läuft als root, der Scanner-Worker als Benutzer
shelltrap-scanohne Login. - Ein unterstütztes Betriebssystem: Ubuntu 20.04 / 22.04 / 24.04, AlmaLinux / RockyLinux / RHEL 8, 9 oder 10, CloudLinux 8 oder CentOS 9. Debian ist bei CyberPanel nur Third-Party-Support und wird nicht zugesagt.
- Ein Linux-Dateisystem unter den Kundenverzeichnissen (standardmäßig
/home), auf dem der Installer die Fanotify- und Filehandle-Fähigkeiten tatsächlich prüfen kann. Eine Kernelversion gilt nicht als Fähigkeitsnachweis — es entscheidet die Laufzeitprobe. - Für das Full-Profil: ein laufender oder installierbarer
clamd, dessen Unix-Socket vom Benutzershelltrap-scanerreichbar ist — ein nur für root lesbarer Socket genügt nicht — sowie mindestens 1,5 GiB verfügbarer Arbeitsspeicher nach der gemessenen Reload-Reserve. Sind diese Bedingungen nicht erfüllt, wählt der Installer das Lite-Profil, schreibtscanner.enable_clamd = false, und die geringere Abdeckung wird benannt statt verschwiegen.
Vor dem Download gibt der Installer einen rein lesenden Preflight aus: Kernel, CAP_SYS_ADMIN, SELinux- und AppArmor-Status, ob OpenLiteSpeed oder LiteSpeed Enterprise läuft und welcher Mount und welches Dateisystem tatsächlich hinter /home liegen. Dabei wird kein Dienst gestartet oder verändert.
Schritt 1: Ressourcengrenzen setzen, bevor der Dienst existiert
Die Paketinstallation startet den Dienst sofort, also kommen die Grenzen zuerst. Die folgenden Werte stammen von unserem ersten Produktionshost; betrachten Sie sie als Ausgangspunkt für jene Maschine, nicht als Empfehlung für Ihre:
install -d /etc/systemd/system/shelltrapd.service.d
cat >/etc/systemd/system/shelltrapd.service.d/10-limits.conf <<'EOF'
[Service]
CPUQuota=200%
IOWeight=50
Nice=10
MemoryHigh=6G
MemoryMax=8G
EOF
systemctl daemon-reload
Die Vendor-Unit wird nie bearbeitet; eigene Grenzen gehören in ein Drop-in.
Schritt 2: Installation ohne PHP-Adapter
sudo env SHELLTRAP_SKIP_PHP_ADAPTER=1 apt-get install shelltrap shelltrap-cyberpanel
# RPM-Hosts:
sudo env SHELLTRAP_SKIP_PHP_ADAPTER=1 dnf install shelltrap shelltrap-cyberpanel
SHELLTRAP_SKIP_PHP_ADAPTER=1 verhindert, dass auto_prepend_file in eine lsphp-Konfiguration geschrieben und LiteSpeed neu gestartet wird. Keine Website wird berührt. Die Variable muss in der Umgebung des Paketmanager-Aufrufs stehen, weil diese Umgebung an die Maintainer-Skripte durchgereicht wird.
Pakete werden mit einer SHA-256-Datei und einer abgetrennten GPG-Signatur je Artefakt veröffentlicht. Prüfen Sie beides, bevor Sie eine lokale Datei installieren:
gpgv --keyring /usr/share/keyrings/shelltrap-archive.gpg \
dist/shelltrap_1.2.3_amd64.deb.asc dist/shelltrap_1.2.3_amd64.deb
Weil die Installation den Dienst sofort startet, existiert ein kurzes Fenster, in dem die Standardaktionen gelten — Quarantäne bei Signatur- und Hash-Treffern. Wer dieses Fenster ganz vermeiden will, schreibt die Report-only-Richtlinie vor der Installation in die Zustandsdatenbank; so läuft unser eigenes Teststufen-Verfahren.
Schritt 3: Lizenz aktivieren
shelltrap license activate STL-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
shelltrap license status
Die Aktivierung bindet die Lizenz an einen Server-Fingerabdruck aus /etc/machine-id und liefert ein Ed25519-signiertes Token, das der Daemon offline prüft. Ein systemd-Timer erneuert es täglich mit Jitter. Ohne gültiges Token stürzt nichts ab: Der Status lautet unlicensed, der Watcher zählt Ereignisse weiter, ohne sie zu scannen, und das Upload-Gate antwortet allow mit dem Grund unlicensed.
Schritt 4: Report-only erzwingen, dann starten
shelltrap policy set global signature.action=report hash.action=report \
heuristics.action=report upload.enabled=false
shelltrap policy get global
systemctl enable --now shelltrapd
Jeder Treffer erzeugt jetzt einen Fund und eine Benachrichtigung und verändert nichts auf der Platte. In der ersten Woche lassen wir zusätzlich den wöchentlichen Vollscan-Timer aus, damit die Last rein ereignisgetrieben bleibt:
systemctl disable --now shelltrap-scan.timer
Schritt 5: prüfen, was Sie tatsächlich bekommen haben
shelltrapd --config /etc/shelltrap/shelltrap.toml --check | python3 -m json.tool | head -40
shelltrap health
shelltrap status
stat -c '%a %U:%G %n' /run/shelltrap/api.sock /run/shelltrap/upload.sock
Lesen Sie im --check-Ergebnis sowohl tier als auch diagnostic.tier. Tier A bedeutet den vollständigen Fanotify-Watcher mit Filehandle-Meldung; B, C und D sind dokumentierte Degradationen, und D heißt: auf diesem Host gibt es keinen Echtzeit-Watcher. Ein ausdrücklich konfiguriertes Backend kann das oberste tier die Auswahl statt der Fähigkeit widerspiegeln lassen — genau dafür existiert das Diagnosefeld.
Meldet shelltrap health den Zustand degraded, ist das ein Betriebsfehler und kein sauberer Scan. Häufige frühe Ursachen sind eine fehlende Feed-Generation und ein clamd-Socket, den der Worker nicht erreicht.
Schritt 6: CyberPanel-Plugin installieren
Das Paket shelltrap-cyberpanel bringt die Panel-Integration mit; der Installer des Panels bindet sie ein:
cd /usr/local/CyberCP
/usr/local/CyberCP/bin/python \
/usr/local/CyberCP/pluginInstaller/pluginInstaller.py install --pluginName shelltrap
cat /var/lib/shelltrap/plugin-status.json
Maßgeblich ist diese Statusdatei, nicht die Erfolgsmeldung des Installers: Sie zeigt ok nur bei einer gültigen HTTP-200-Health-Antwort über den Unix-Socket. Nach jedem CyberPanel-Upgrade führen Sie den paketierten Reparaturpfad erneut aus:
sudo /usr/share/shelltrap-cyberpanel/install.sh
Das Plugin ist eine Bedienoberfläche, kein zweiter Scanner. Fällt das Panel aus, laufen Broker und Worker weiter.
Schritt 7: Richtlinien je Domain
Richtlinien vererben global → Account → Domain, und das Plugin zeigt zu jedem wirksamen Wert dessen Herkunft. Administratoren dürfen alles ändern; Reseller und Benutzer nur freigegebene Schlüssel ihrer eigenen Domains, wobei upload.on_error und heuristics.action für beide gesperrt bleiben — eine Grenze, die der Broker unabhängig von der Oberfläche durchsetzt.
Die praktisch relevanten Schlüssel: signature.action, hash.action, heuristics.action, heuristics.threshold, upload.enabled, upload.on_error, upload.timeout_ms, upload.max_size, realtime.enabled, scan.window, scan.exclude, notify.targets, quarantine.retention_days, findings.retention_days.
Je Domain, über den lokalen Socket:
curl --silent --show-error --unix-socket /run/shelltrap/api.sock -X PUT \
-H 'Content-Type: application/json' \
-H 'X-Request-ID: 37700c8fcf884a98b89337a6e4593a60' \
--data '{"signature.action":"quarantine"}' \
http://localhost/v1/policies/domain/42
Stufen Sie Domains einzeln hoch. Eine betreute Kundenseite, deren Inhaber Sie anruft, ist ein guter erster Kandidat; eine Altseite voller ungepflegter Plugins ein schlechter.
Schritt 8: Upload-Gate — später
Wenn die Funde Sie nicht mehr überraschen, führen Sie die Paketkonfiguration ohne die Skip-Variable erneut aus, damit der Adapter für jede vorhandene lsphp-Version geschrieben wird:
sudo dpkg-reconfigure shelltrap # Debian / Ubuntu
sudo dnf reinstall shelltrap # RPM
Das Maintainer-Skript berührt zuerst den CyberPanel-Marker .lsphp_restart.txt und startet LiteSpeed danach sanft neu; ein erzwungenes killall -9 lsphp wird nie verwendet. Beachten Sie, dass eine .user.ini auto_prepend_file überschreiben kann; dann bleibt der asynchrone Watcher der Catch-all.
Wieder entfernen
sudo apt-get remove shelltrap-cyberpanel shelltrap
Konfiguration, Zustand, Logs und Quarantäne überleben die Entfernung. Quarantäne ist Beweismaterial, deshalb löscht selbst purge sie nur hinter einem ausdrücklichen Gate:
sudo SHELLTRAP_PURGE_QUARANTINE=1 apt-get purge shelltrap
Was das für CyberPanel-Betreiber bedeutet
- Installieren Sie im Report-only-Modus und bleiben Sie mindestens eine Woche dabei; erst dann wissen Sie, wie Ihr Bestand aussieht.
- Prüfen Sie unmittelbar nach der Installation
tier,diagnostic.tierund das gewählte Scannerprofil — ein Lite-Profil auf einer speicherknappen Maschine ist eine Abdeckungsentscheidung, die Sie kennen sollten. - Stufen Sie Domains einzeln von
reportaufquarantinehoch und setzen Sie die Aufbewahrung der Quarantäne so, dass Sie Rückfragen noch beantworten können. - Aktivieren Sie das Upload-Gate erst, wenn die Funde langweilig geworden sind, und lassen Sie
upload.on_erroraufopen, sofern nicht eine konkrete Domain das Gegenteil rechtfertigt. - Was bei einem Scanner sonst noch technisch zählt, ordnet warum Webshell-Erkennung auf den Server gehört ein; alle Befehle, Paketprüfungen und Entfernungswege stehen in der Installationsdokumentation .
Shelltrap wird pro Server lizenziert, mit einem Befehl aktiviert und sendet keine Kundendateien nach außen. Zu den Preisen .
Häufige Fragen
Muss ich auf CloudLinux OS umstellen?
Für Shelltrap nicht. Diese Anforderung stammt aus dem dokumentierten Imunify360-Weg von CyberPanel, der ausdrücklich eine Umstellung des Betriebssystems auf CloudLinux OS verlangt. Shelltrap installiert auf Standard-Ubuntu, AlmaLinux, RockyLinux, RHEL, CloudLinux 8 oder CentOS 9.
Bricht die Installation Kundenseiten?
Die erste Installation ist bewusst wirkungslos: Der PHP-Upload-Adapter bleibt aus, alle Aktionen stehen auf report, nichts wird in Quarantäne verschoben. Durchsetzung aktivieren Sie später, je Domain, nachdem Sie eine Woche Funde gesehen haben.
Was passiert, wenn die Lizenz abläuft?
Der Daemon stürzt nicht ab und läuft nicht in eine Restart-Schleife. Er meldet den Status unlicensed mit Grund, der Watcher zählt weiter Ereignisse ohne zu scannen, der Scheduler plant nichts, und das Upload-Gate antwortet allow mit dem Grund unlicensed.
Quellen
Jede Zahl, jedes Datum und jede Herstelleraussage in diesem Artikel verweist auf einen dieser Belege.
- CyberPanel-Knowledgebase — Imunify360 auf CyberPanel installieren und nutzen — abgerufen 2026-09-04
- ImunifyAV-Dokumentation — unterstützte Panels — abgerufen 2026-09-04
- CyberPanel-Add-ons (kommerzielles Paket) — abgerufen 2026-09-04
- configserver.com — Abschaltungsankündigung, archiviert am 30. Juli 2025 — abgerufen 2026-09-04
Mehr aus der Security-Redaktion
CXS ist Geschichte: Was CyberPanel-Betreiber tun sollten
Way to the Web schloss am 31. August 2025. csf lebt in GPLv3-Forks weiter, cxs nicht. Was das für einen CyberPanel-Host …
ComparisonsCXS-Alternativen 2026: der ehrliche Überblick
ConfigServer schloss am 31. August 2025. Was cxs ersetzt, was die Optionen am 4. September 2026 kosten und was auf einem …
AnalysisDie WordPress-Webshell-Welle 2024–2026: Was die Daten zeigen
Belegte Kampagnen, CVE-Ketten und Dateiindikatoren der Backdoor-Welle 2024–2026 – mit Jahresangaben, Vorbehalten und dem …
Shelltrap bewacht genau die Dateien, um die es hier geht
Erkennung in Echtzeit, ein Upload-Gate vor Ihrem PHP, erklärbare Verdikte — und nichts, was Ihren Server verlässt.