Automatische Installation

Automatischer Weg: Ein Skript aus dem Benutzerkonto richtet den gesamten Server ein (Web-Stack Apache + PHP, Datenbank, Sicherheitswerkzeuge, cron). Danach nur noch das Dashboard bereitstellen, SSL ausstellen und die Lizenz eingeben. Läuft unter Ubuntu/Debian: Auf einem frischen VPS richtet es alles von Grund auf ein, auf einem bereits konfigurierten Server nur additiv (Profil „Konfigurierter Server“, Schritt 01). Alle Befehle unten der Reihe nach – einfach von oben nach unten durchgehen. Auf einem frischen VPS passt jeder Schritt der Reihe nach; ist der Server bereits konfiguriert oder läuft darauf ein Hosting-Panel, überlässt das Skript einen Teil der Arbeit bewusst Ihnen — was genau, schreibt es am Ende seines Laufs (die Auswertung der Ausgabe finden Sie in Schritt 01).

Platzhalterwerte in den Befehlen durch eigene ersetzen: monitor.example.com – Ihre Domain; 203.0.113.10 – die reale IP des Servers; /var/www/monitor – das Dashboard-Verzeichnis (wo public/, assets/, config.php liegen); für die DB ein eigenes Passwort wählen.
Das Komplettpaket („Vollständiger Schutz“) ist für einen frischen VPS gedacht. Auf einem sauberen Ubuntu/Debian richtet es das Sicherheitssystem von Grund auf ein – Fail2ban (jail.local), root-crontab, UFW-Regeln, Apache-Konfiguration. Ist der Server bereits konfiguriert (laufendes Dashboard, Websites, Mail, eigene jails) – wählen Sie das Profil „Konfigurierter Server“: Es nimmt nur additive Änderungen vor und lässt Ihre Firewall, Fail2ban, Mail, SSH und sysctl unberührt. Erkennt das Skript eine Hosting-Panel, wechselt es selbst in diesen Modus. Vor dem ersten Start kann ein Testlauf aktiviert werden (Häkchen im Benutzerkonto) – er zeigt, was getan würde, ohne etwas zu ändern. Erstellen Sie auf einem produktiven Server zur Sicherheit einen Snapshot.

01. Autokonfigurationsbefehl aus dem Benutzerkonto

Den Befehl finden Sie in Ihrem Benutzerkonto my.arciveo.com → Bereich „Server-Einrichtung“ (verfügbar nach dem Erwerb von Arcivéo Security Monitor). Er ist an Ihr Konto gebunden und enthält ein persönliches Token.

Das Skript richtet den gesamten Server ein: Web-Stack (Apache + PHP), Datenbank, SSL-Werkzeuge, den vollständigen Satz an Schutzmitteln und Cron-Aufgaben (Lynis, SMART, debsums, Logwatch, Tagesbericht, ipsum-Aktualisierung).

1) Schutzstufe wählen (im Benutzerkonto, vor dem Kopieren des Befehls):

  • Vollständiger Schutz (empfohlen) — UFW (Firewall), Fail2ban, CrowdSec + Bouncer, ipsum (IP-Sperrliste), Suricata (IDS/IPS), Falco, ModSecurity + OWASP CRS (WAF), PSAD, mod_evasive (Anti-DoS), AIDE (Dateiintegrität), debsums, ClamAV + maldet (Antivirus), Auditd, AppArmor, Monit, Lynis (Audit), Logwatch, automatische Sicherheitsupdates.
  • Abgespeckt — für VPS mit wenig RAM: Grundausstattung ohne schwere Komponenten.
  • Eingerichteter Server (Hosting-Panel) — für einen bereits laufenden Server mit Panel (HestiaCP usw.), Websites und E-Mail: nur additive Änderungen (Nachinstallation von Werkzeugen, Cron, sudo-Regeln), während Firewall, Fail2ban, E-Mail, SSH und sysctl unangetastet bleiben. Auf einem Server mit Panel wählt das Skript diesen Modus selbst.
Testlauf. Im Benutzerkonto können Sie das Häkchen „Testlauf“ setzen — dann zeigt der Befehl nur, was das Skript installieren und ändern würde, und beendet sich, ohne etwas anzutasten. Nützlich auf einem bereits eingerichteten Server: erst der Testlauf, dann der echte Start ohne Häkchen.

2) Führen Sie auf dem Server als root den Befehl aus dem Benutzerkonto aus — er sieht so aus:

curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN" | sudo bash
Halten Sie den Befehl geheim — er ist an Ihr Konto gebunden. Der Link hat eine begrenzte Gültigkeit; ist er abgelaufen, klicken Sie im Benutzerkonto auf „Neuen Link abrufen“.
Nach der Autokonfiguration ist der Webserver Apache + PHP-FPM, und die Sicherheitswerkzeuge sowie Cron-Aufgaben sind bereits installiert und laufen „out of the box“.

3) Lesen Sie die Ausgabe am Ende — dort steht, was Ihnen zu tun bleibt. Das Skript schließt seine Arbeit mit einem Prüfblock und der Liste „Weiter — Installation des Dashboards“ ab. Einen Teil der Schritte führt es bewusst nicht aus: welche genau, hängt vom gewählten Profil ab und davon, was es auf dem Server vorgefunden hat. Gleichen Sie mit der Liste unten ab — auszuführen sind nur die Punkte, deren Zeilen in Ihrer Ausgabe erschienen sind.

  • Control panel detected (…) — die Website wird mit den Mitteln des Hosting-Panels selbst angelegt, einen vhost erstellt das Skript nicht. Schritt 03, Zweig „Server mit Hosting-Panel“.
  • No vhost created (no domain given) — Profil „Konfigurierter Server“ ohne Domain: ein vhost ohne Namen würde zur Standard-Website und finge Ihre eigenen Websites ab, deshalb wurde er nicht angelegt. Schritt 03, Zweig „vhost von Hand anlegen“.
  • sudo rules NOT written — das Skript konnte nicht ermitteln, unter welchem Konto das Panel läuft. Das ist ein normaler Fall: die Panel-Dateien werden erst nach der Autokonfiguration hochgeladen, es gab also noch nichts, woran es sich hätte erkennen lassen. Ohne diese Regeln sehen die Module keine Systemdaten. Schritt 04, Block „sudo für den Webserver“.
  • ! Nginx does not read .htaccess — vor Apache steht Nginx, und die Sperre ließ sich nicht automatisch in dessen Konfiguration eintragen. Holen Sie das unbedingt nach: sonst werden data/, keys/, database/ und config.php unter Umgehung der .htaccess nach außen ausgeliefert. Schritt 03, Block „Wenn vor Apache Nginx steht“.
  • UFW installed but inactive — die Firewall ist installiert, aber ausgeschaltet: auf einem konfigurierten Server schaltet das Skript sie nicht selbst ein, um Ihnen nicht den Zugang abzuschneiden. Schalten Sie sie selbst ein und geben Sie dabei unbedingt Ihren SSH-Port frei:
    sudo ufw allow OpenSSH # nicht standardmäßiger SSH-Port: sudo ufw allow 2222/tcp sudo ufw allow 80,443/tcp sudo ufw enable
  • Fail2ban installed but not running — starten Sie ihn: sudo systemctl enable --now fail2ban.
  • Database server present … but not running — starten Sie das Datenbanksystem vor Schritt 04: sudo systemctl enable --now mariadb (oder mysql — je nachdem, was installiert ist).
  • Certbot skipped — issue SSL in … — das Zertifikat wird über den Let's Encrypt-Schalter im Hosting-Panel ausgestellt; Schritt 06 entfällt für Sie.
Ist im Prüfblock alles in Ordnung, lautet die letzte Zeile All checks passed. Punkte mit ! erfordern Aufmerksamkeit; Einzelheiten werden ins Log geschrieben, dessen Pfad das Skript ganz am Ende ausgibt (Log: …).

02. Domain und DNS

Damit das Dashboard über eine Adresse wie monitor.example.com erreichbar ist und ein kostenloses SSL erhält, muss die Domain auf den Server zeigen. Erstellen Sie im DNS-Verwaltungspanel (beim Registrar oder Hoster) einen A-Eintrag:

Typ: A Name: monitor (Subdomain → monitor.example.com) oder @ (Root-Domain → example.com) Wert: 203.0.113.10 ← IP Ihres Servers TTL: 3600

Prüfen Sie nach einigen Minuten (manchmal bis zu einer Stunde), ob die Domain auf den Server zeigt:

dig +short monitor.example.com # sollte Ihre IP zurückgeben # oder, falls dig fehlt: getent hosts monitor.example.com
Das SSL-Zertifikat (Schritt 06) wird nur für eine Domain ausgestellt — deshalb muss der DNS vor der Zertifikatsausstellung auf den Server zeigen.

03. Panel-Dateien hochladen

Der übliche Fall (frischer VPS). Die Autokonfiguration hat bereits das Panel-Verzeichnis /var/www/monitor angelegt und die Apache-Site eingerichtet (DocumentRoot auf das Panel-Stammverzeichnis, PHP-FPM, AllowOverride für .htaccess). In der Ausgabe des Skripts ist das die Zeile vhost … → DocumentRoot …. Ein separates Verzeichnis oder ein vhost muss nicht angelegt werden – einfach die Dateien hochladen und die Rechte setzen.
Zwei Fälle, in denen KEIN vhost angelegt wird — das Skript teilt es am Ende seiner Arbeit ausdrücklich mit. Führen Sie dann zuerst den passenden Zweig unten aus und laden Sie erst danach die Dateien hoch.

Zweig „Server mit Hosting-Panel“ (in der Ausgabe: Control panel detected (…)). Über die Websites auf einem solchen Server bestimmt das Panel, und einen eigenen vhost legt das Skript bewusst nicht an — er würde beim ersten Neuaufbau der Konfigurationen durch das Panel überschrieben. Das Vorgehen:

  1. Legen Sie im Hosting-Panel (HestiaCP usw.) eine Web-Domain an — deren DocumentRoot bleibt unverändert.
  2. Laden Sie die Distribution vollständig in das public_html dieser Domain: neben index.php, api/, assets/ müssen dort auch die Dienstdateien und -ordner config.php, includes/, data/, tmp/, logs/, keys/, cron/, database/ liegen. Nichts muss oberhalb des Web-Roots ausgelagert werden: die Dienstordner sind durch die .htaccess aus der Distribution gesperrt, unter Nginx durch die Sperre, die das Skript in die Konfiguration der Domain eingetragen hat.
  3. SSL wird über den Let's Encrypt-Schalter im Panel selbst ausgestellt — überspringen Sie Schritt 06.
  4. Danach folgen die Rechte (weiter unten in diesem Schritt), die Datenbank (Schritt 04) und config.php (Schritt 05). Ersetzen Sie die Pfade in den Befehlen durch /home/konto/web/domain/public_html und den Eigentümer durch den Benutzer dieser Domain anstelle von www-data.

Zweig „vhost von Hand anlegen“ (in der Ausgabe: No vhost created (no domain given)). Das kommt nur beim Profil „Konfigurierter Server“ vor, wenn keine Domain übergeben wurde. Am einfachsten ist es, den Befehl aus dem Benutzerkonto erneut auszuführen und dabei die Domain anzugeben:

curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN&profile=existing" | sudo bash -s -- monitor.example.com

Ein erneuter Start ist gefahrlos: bereits Erledigtes wird nicht doppelt ausgeführt. Muss der vhost dennoch von Hand angelegt werden — hier ist dieselbe Konfiguration, die das Installationsprogramm schreibt:

sudo mkdir -p /var/www/monitor # Den PHP-FPM-Socket ermitteln wir automatisch — die PHP-Version ist auf jedem Server anders. PHPSOCK=$(ls -1 /run/php/php*-fpm.sock 2>/dev/null | head -1) sudo tee /etc/apache2/sites-available/arciveo-monitor.conf > /dev/null <<'EOF' <VirtualHost *:80> ServerName monitor.example.com DocumentRoot /var/www/monitor <Directory /var/www/monitor> Options -Indexes +FollowSymLinks AllowOverride All Require all granted </Directory> <FilesMatch "\.php$"> SetHandler "proxy:unix:__PHPSOCK__|fcgi://localhost" </FilesMatch> ErrorLog ${APACHE_LOG_DIR}/arciveo-monitor_error.log CustomLog ${APACHE_LOG_DIR}/arciveo-monitor_requests.log combined </VirtualHost> EOF sudo sed -i "s#__PHPSOCK__#${PHPSOCK}#" /etc/apache2/sites-available/arciveo-monitor.conf sudo a2ensite arciveo-monitor.conf sudo apache2ctl configtest sudo systemctl reload apache2
ServerName ist hier zwingend. Ein vhost ohne Namen wird zur Standard-Website von Apache und beantwortet dann Anfragen für fremde Domains auf demselben Server. Aus demselben Grund deaktivieren Sie auf einem konfigurierten Server nicht 000-default.conf: diese Site könnte für einen produktiven Zweck umgebaut worden sein — auf einem frischen VPS entfernt das Installationsprogramm sie selbst, hier ist das nicht nötig.
Wenn vor Apache Nginx steht (in der Ausgabe: ! Nginx does not read .htaccess). Nginx liefert statische Dateien direkt von der Platte aus und liest die .htaccess nicht — die Dienstordner wären dann nach außen offen, obwohl Apache sie korrekt sperrt. Das Skript hat die Datei mit den Sperren bereits vorbereitet; sie muss im Block server{} Ihrer Website eingebunden und Nginx neu geladen werden:
include /etc/nginx/snippets/arciveo-deny.conf;
sudo nginx -t && sudo systemctl reload nginx # Prüfung: sollte 403 zurückgeben, nicht den Inhalt der Datei curl -sI https://monitor.example.com/config.php | head -1
Die Panel-Dateien (das Distributions-Archiv) werden nach dem Kauf im Benutzerkonto unter my.arciveo.com → „Downloads“ heruntergeladen. Entpacken Sie das Archiv vor dem Upload auf den Server.

Laden Sie den Inhalt der Distribution nach /var/www/monitor hoch (sodass darin public/, assets/, config.php usw. liegen) – per SFTP/SCP (FileZilla / WinSCP) oder mit dem Befehl scp vom lokalen Rechner:

scp -r ./monitor/* deploy@203.0.113.10:/var/www/monitor/
Damit im vhost gleich Ihre Domain eingetragen wird (ServerName), übergibt man sie bereits in Schritt 01 an den Autokonfigurations-Befehl: … | sudo bash -s -- monitor.example.com (oder gibt die Domain im Feld „Panel-Domain“ im Benutzerkonto an). Wurde keine Domain übergeben, antwortet das Panel auf jeden Host und über die IP-Adresse, und den ServerName trägt certbot beim Ausstellen des SSL-Zertifikats ein (Schritt 06); eine Neuinstallation ist nicht nötig.
Setzen Sie die Dateirechte – dieser Schritt ist zwingend. Wurde unter root oder per SFTP hochgeladen, gehören die Dateien root, und der Webserver (www-data) kann sie nicht lesen – das Panel öffnet sich leer oder mit Fehler 403 (im Log: .htaccess unreadable / directory not executable). Der Befehl unten behebt das:
# Rechte des gesamten Webroots normalisieren: ein von root angelegtes # Verzeichnis ist für den Webserver (www-data) nicht zugänglich – ohne dies liefert das Panel eine leere Seite oder 403. cd /var/www/monitor # Arbeitsordner VOR chown anlegen – sonst bleiben neue Verzeichnisse root:root # und bei chmod 750 kann der Webserver (www-data) nicht in sie schreiben. sudo mkdir -p data/lynis data/logwatch tmp logs sudo chown -R www-data:www-data /var/www/monitor sudo find /var/www/monitor -type d -exec chmod 755 {} \; sudo find /var/www/monitor -type f -exec chmod 644 {} \; sudo chmod 640 /var/www/monitor/config.php sudo chmod 750 data tmp logs

Schalten Sie den SFTP-Upload für sich selbst frei. Nach dem Befehl oben gehören alle Dateien www-data, während FileZilla / WinSCP sich unter Ihrem eigenen Benutzer verbinden — der Upload scheitert dann mit SSH_FX_PERMISSION_DENIED (Permission denied). Wählen Sie eine der beiden Varianten.

Variante A — eine ACL nur für Ihren Benutzer (empfohlen). Schreibrechte bekommen nur Sie; der Webserver kann den Panel-Code weiterhin nicht überschreiben:

sudo apt install -y acl # Schreibrechte für Ihren Benutzer auf das gesamte Panel-Verzeichnis: sudo setfacl -R -m u:deploy:rwX /var/www/monitor # Dieselbe Regel als Vorgabe — für später angelegte Dateien und Ordner: sudo setfacl -R -d -m u:deploy:rwX /var/www/monitor

Variante B — über die Gruppe www-data. Einfacher, aber der Webserver erhält ebenfalls Schreibrechte auf die Panel-Dateien: bei einer Schwachstelle in PHP ließe sich der Code austauschen. Die Reihenfolge der Befehle ist wichtig — config.php und die Arbeitsordner werden zuletzt abgesichert:

sudo usermod -aG www-data deploy # Schreibrecht für die Gruppe + setgid (Bit 2): per SFTP hochgeladene Dateien # bleiben in der Gruppe www-data — sonst kann das Panel sie nicht überschreiben. sudo find /var/www/monitor -type d -exec chmod 2775 {} \; sudo find /var/www/monitor -type f -exec chmod 664 {} \; sudo chmod 640 /var/www/monitor/config.php sudo chmod 2750 /var/www/monitor/data /var/www/monitor/tmp /var/www/monitor/logs
Nach Variante B verbinden Sie sich in FileZilla neu (Server → Trennen, danach erneut anmelden) — die neue Gruppe wird erst bei einer neuen Anmeldung wirksam, vorher haben Sie weiterhin keine Rechte. Prüfen: id deploy — in der Gruppenliste muss www-data erscheinen; ls -ld /var/www/monitor — Rechte drwxrwsr-x, das s anstelle von x bedeutet, dass setgid gesetzt ist.

04. Datenbank

Erstellen Sie Datenbank und Benutzer und importieren Sie dann das Schema. Der Datenbank-Block wird vollständig ins Terminal eingefügt (sudo mysql meldet root über den Unix-Socket an — kein root-Passwort nötig). monitor_db und monitor_user sind Beispielnamen, Sie können beliebige eigene wählen; merken Sie sich Datenbankname, Benutzer und Passwort — Sie tragen sie im nächsten Schritt in config.php ein:

# 1. Datenbank. Datenbankname, Benutzer und Passwort werden EINMAL unten gesetzt und in alle Zeilen eingesetzt. # Der Block wird VOLLSTÄNDIG ins Terminal eingefügt; sudo mysql meldet root über den Unix-Socket an # (kein root-Passwort nötig). Verwenden Sie NICHT das interaktive `sudo mysql -u root -p` # mit Copy-Paste — beim Einfügen landen die SQL-Zeilen in der Passwortabfrage und gehen verloren. DBNAME='monitor_db' # ← Datenbankname, kann so bleiben DBUSER='monitor_user' # ← Datenbankbenutzer, kann so bleiben DBPASS='CHOOSE_A_PASSWORD' # ← Passwort, eigenes festlegen sudo mysql <<SQL CREATE DATABASE IF NOT EXISTS $DBNAME CHARACTER SET utf8mb4; CREATE USER IF NOT EXISTS '$DBUSER'@'localhost' IDENTIFIED BY '$DBPASS'; GRANT ALL ON $DBNAME.* TO '$DBUSER'@'localhost'; FLUSH PRIVILEGES; SQL # Prüfung (sollte $DBNAME anzeigen): mysql -u "$DBUSER" -p"$DBPASS" -e "SHOW DATABASES;" # Tragen Sie dieselben drei Werte in config.php → DB_NAME, DB_USER, DB_PASS ein.
Normalerweise muss das Schema nicht importiert werden — das Dashboard erstellt Tabellen und das Konto admin beim ersten Aufruf im Browser selbst (aus database/db.sql), sofern die Datenbank leer ist.

Falls die Tabellen nicht angelegt wurden (das Dashboard zeigt einen Fehler bei der Datenbankverbindung oder einen leeren Bildschirm statt des Anmeldeformulars) — importieren Sie das Schema von Hand. Der Befehl wird im Panel-Stammverzeichnis ausgeführt, die Werte stammen aus dem Block oben:

# Import des Schemas: cd /var/www/monitor && mysql -u "$DBUSER" -p"$DBPASS" "$DBNAME" < database/db.sql # Prüfung — es sollte eine Liste der Tabellen erscheinen: mysql -u "$DBUSER" -p"$DBPASS" "$DBNAME" -e "SHOW TABLES;"
Sind die Variablen $DBNAME / $DBUSER / $DBPASS bereits „vergessen“ (neue Terminal-Sitzung) — setzen Sie die Werte von Hand in den Befehl ein oder legen Sie sie mit denselben drei Zeilen aus dem Block oben erneut fest.
sudo für den Webserver. Normalerweise sind die Regeln bereits von der Autokonfiguration geschrieben worden, und die Module sehen Systemdaten sofort. Stand in der Ausgabe des Skripts aber die Zeile sudo rules NOT written — dann gab es nichts, woran sich das Panel-Konto hätte erkennen lassen (die Dateien waren noch nicht hochgeladen), und die Regeln wurden nicht angelegt. Ohne sie bleiben Bereiche wie Firewall, Fail2ban und CrowdSec leer. Jetzt, da die Dateien vorhanden sind, führen Sie den Befehl aus dem Benutzerkonto noch einmal aus und benennen Sie das Konto ausdrücklich:
curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN&profile=existing" | sudo ARCIVEO_USER=www-data bash -s -- monitor.example.com
www-data ersetzen Sie durch den Benutzer, unter dem das PHP Ihrer Website läuft (bei einem Hosting-Panel ist das in der Regel der Eigentümer der Domain). So finden Sie ihn heraus:
ps -o user= -C php-fpm8.3 | sort -u # Version durch Ihre ersetzen # oder: ps aux | grep -m3 '[p]hp-fpm'
Prüfung nach dem erneuten Start: die Datei /etc/sudoers.d/monitor existiert und enthält Zeilen mit Ihrem Benutzer.

05. config.php einrichten

config.php im Wurzelverzeichnis des Dashboards (/var/www/monitor/config.php) ist die einzige Datei, die von Hand bearbeitet werden muss. Alle Dashboard-Einstellungen sind darin als define()-Konstanten festgelegt. Öffnen Sie sie im Editor:

sudo nano /var/www/monitor/config.php

Tragen Sie Ihre Werte an den hervorgehobenen Stellen ein; den Rest lassen Sie unverändert:

// --- Datenbank (aus Schritt 04) --- define('DB_HOST', 'localhost'); // unverändert lassen define('DB_NAME', 'db_name'); // in Schritt 04 erstellt define('DB_USER', 'user'); // in Schritt 04 erstellt define('DB_PASS', 'db_password'); // in Schritt 04 festgelegt define('DB_CHARSET', 'utf8mb4'); // unverändert lassen // --- Anwendung --- define('APP_URL', 'https://monitor.example.com'); // Dashboard-Adresse, ohne Schrägstrich am Ende define('TIMEZONE', 'Europe/Berlin'); // Ihre Zeitzone // --- Sitzungsdauer --- define('SESSION_LIFETIME', 28800); // Inaktivität bis zur erneuten Anmeldung, Sek. (28800 = 8 Std.)

Was zu ändern ist:

  • DB_NAME, DB_USER, DB_PASS — exakt derselbe Datenbankname, Benutzer und dasselbe Passwort, die Sie beim Anlegen der DB in Schritt 04 festgelegt haben (falls Sie die Beispiele behalten haben — monitor_db / monitor_user). DB_HOST und DB_CHARSET nicht anrühren.
  • APP_URL — die vollständige Dashboard-Adresse mit https://, ohne Schrägstrich am Ende und ohne www. Sie muss mit der Domain übereinstimmen, für die Sie die Lizenz aktivieren (Schritt 07), sonst wird der Schlüssel abgelehnt.
  • TIMEZONE — Ihre Zeitzone (Liste — timedatectl list-timezones). Betrifft nur die Anzeige der Daten im Dashboard; auf die Startzeit der cron-Aufgaben hat sie keinen Einfluss (dort gilt die Zeitzone des Systems).
  • SESSION_LIFETIME — nach wie vielen Sekunden Inaktivität das Dashboard eine erneute Anmeldung verlangt (Standard: 8 Stunden). Z. B. 3600 = 1 Stunde, 86400 = 1 Tag.
  • Den Block zum Fehler-Logging (display_errors, log_errors, error_log) — auf Standard belassen.

Speichern Sie die Datei (Ctrl+O, Enter, dann Ctrl+X) und starten Sie PHP-FPM neu — sonst werden die Änderungen wegen OPcache nicht übernommen:

sudo systemctl restart php*-fpm
config.php ist eine geheime Datei (sie enthält das DB-Passwort). Sie liegt im Wurzelverzeichnis des Dashboards, das zugleich das Web-Root ist, ist aber gesperrt: Rechte 640 (in Schritt 03 gesetzt) und eine ausdrückliche Sperre in der .htaccess des Wurzelverzeichnisses. Legen Sie sie nicht in öffentliche Repositories und geben Sie sie dem Support nicht mit echtem Passwort weiter.
Eine ausführliche Erläuterung aller Parameter — in den FAQ: „Die Datei config.php — alle Dashboard-Einstellungen“.

06. SSL ausstellen (HTTPS)

Das Dashboard funktioniert nur über HTTPS. Die Anmeldesitzung nutzt ein sicheres Cookie, und WebAuthn (2FA) funktioniert laut Standard nur über HTTPS. Über http:// ist keine Anmeldung möglich.
Auf einem Server mit Hosting-Panel entfällt dieser Schritt (in der Ausgabe des Skripts: Certbot skipped — issue SSL in …). Das Zertifikat wird über den Let's Encrypt-Schalter an der Web-Domain im Panel selbst ausgestellt — so kümmert sich das Panel auch um die Verlängerung.

certbot und das Apache-Plugin wurden bereits von der automatischen Einrichtung installiert. Der DNS der Domain muss bereits auf den Server zeigen (Schritt 02). Ausstellung mit einem Befehl:

sudo certbot --apache -d monitor.example.com

Soll das Dashboard auch mit www. erreichbar sein — geben Sie beide Namen in einem Befehl an, sonst zeigt der Browser auf der zweiten Adresse eine Zertifikatswarnung:

sudo certbot --apache -d monitor.example.com -d www.monitor.example.com
Fügen Sie den zweiten Namen nur hinzu, wenn auch für ihn ein A-Eintrag auf diesen Server existiert (Schritt 02). Andernfalls kann Let's Encrypt ihn nicht prüfen und stellt das Zertifikat insgesamt nicht aus — einschließlich der Hauptdomain.
Wonach certbot fragt:
  1. Enter email address — Ihre E-Mail (dorthin gehen Hinweise zum Ablauf des Zertifikats).
  2. Terms of Service … (Y)es/(N)o — Y.
  3. Share email with the EFF … (Y)es/(N)o — nach Ihrem Ermessen.
Danach stellt certbot das Zertifikat selbst aus, trägt <VirtualHost *:443> ein, richtet die Weiterleitung http→https und die automatische Verlängerung ein. Am Ende — Successfully enabled HTTPS.
Falls die Ausstellung fehlschlägt — prüfen Sie, dass dig +short monitor.example.com die Server-IP zurückgibt und die Ports 80/443 offen sind (sudo ufw allow 80,443/tcp).

Nach der Ausstellung: https://monitor.example.com öffnet sich mit Schloss, http:// leitet auf https:// weiter.

07. Anmeldung und Ersteinrichtung

Öffnen Sie https://monitor.example.com, melden Sie sich mit admin / useradmin an und arbeiten Sie die Checkliste ab:

  1. admin-Passwort ändern — Bereich „Benutzer“ im Menü.
  2. WebAuthn (2FA) aktivieren — „WebAuthn-Schlüssel“ → Schlüssel/Passkey registrieren (erfordert HTTPS). Registrieren Sie gleich zwei: Bei Verlust des einzigen Schlüssels ist die Anmeldung damit nicht mehr möglich. Mehr dazu.
  3. Zugriff per IP beschränken — „Einstellungen“ → „Zugriffsbeschränkung per IP“ (tragen Sie Ihre IP vor dem Aktivieren ein, sonst sperren Sie sich selbst aus).
  4. Lizenz eingeben — Aktivierungscode ARCIVEO-… aus dem Benutzerkonto auf Ihre Domain aktivieren und den Schlüssel unter „Einstellungen“ → „Lizenz“ einfügen. Mehr dazu.
  5. Benachrichtigungen einrichten — Telegram und/oder E-Mail unter „Einstellungen“. Mehr dazu.
  6. Installationsprogramm entfernen public/start_db.php, falls noch vorhanden: es erlaubt, die Datenbank ohne Anmeldung neu anzulegen. Solange die Datei im Panel-Stammverzeichnis oder in public/ liegt, warnt das Panel mit einem roten Banner davor.
  7. Erste Prüfungen von Hand starten — sonst bleiben einige Bereiche bis zur Nacht leer (siehe Block unten).
Warum „Lynis-Audit“ und „Logwatch“ zunächst leer sind. Die Autokonfiguration hat die Werkzeuge installiert und Cron-Aufgaben angelegt, aber die Prüfungen selbst nicht gestartet — sie laufen nach Zeitplan: Lynis um 03:00, Logwatch um 06:00, debsums um 04:30, ClamAV um 01:30. Bis dahin zeigen die Bereiche ehrlich an, dass noch keine Berichte vorliegen. Um nicht einen ganzen Tag zu warten, führen Sie sie einmal von Hand aus:
# Lynis-Audit — erster Bericht (einige Minuten): sudo /usr/local/bin/lynis-scan.sh # Logwatch-Bericht für den Tag: sudo /usr/local/bin/logwatch_daily.sh # Paketintegrität (debsums) — auf einem großen Server dauert es lange: sudo /usr/local/bin/debsums-scan.sh
Lynis lässt sich auch direkt aus dem Panel starten — die Schaltfläche „Audit starten“ auf der Seite „Lynis-Audit“: sie führt dasselbe Skript im Hintergrund aus und aktualisiert den Bericht selbst. Danach läuft alles nach Zeitplan, ein manueller Start ist nicht mehr nötig.
Der erste Virenscan (sudo /usr/local/bin/clamav-scan.sh) belastet Platte und Prozessor stark und kann eine Stunde und länger dauern — auf einem produktiven Server warten Sie besser den nächtlichen Lauf um 01:30 ab. Die Bereiche „Datenträger (SMART)“, „Leistung“ und „Sicherheitsupdates“ füllen sich von selbst: alle 30 Minuten, alle 5 Minuten bzw. einmal pro Stunde.
Fertig. Ein Nachschlagewerk zu jedem Werkzeug finden Sie in den FAQ.
Sie möchten auf diesem Server eine weitere Website mit eigener Domain betreiben — siehe FAQ: „Eine zweite Website auf diesem Server (eine weitere Domain)“.