
Automatisierter Tor-basierter Shared-Webhosting-Server mit PHP-Multi-Version-Unterstützung, E-Mail-Routing, automatisch skalierenden Tor-Instanzen und integrierter Sicherheitshärtung einschließlich CSRF-Schutz, CSP und verschlüsselten Zwiebelkeys.
Dies ist ein Setup für einen Tor-basierten Shared-Hosting-Server. Es wird so bereitgestellt, wie es ist, und bevor Sie es in Produktion nehmen, sollten Sie Änderungen entsprechend Ihren Bedürfnissen vornehmen. Dies ist eine Arbeit in Bearbeitung, und Sie sollten die Commit-Historie sorgfältig auf Änderungen prüfen, bevor Sie aktualisieren. Für einen Produktionsserver werden mindestens 1 TB SSD-Speicherplatz, 32 GB RAM und 8 CPU-Kerne empfohlen. Für einen kleinen Test-/Persönlichen Server reichen 4 GB RAM und 1 CPU-Kern.
Übersetzungen werden in Weblate verwaltet.
Wenn Sie Übersetzungen lieber manuell einreichen möchten, kann das Skript update-translations.sh verwendet werden, um die Sprachvorlage und Übersetzungsdateien aus der Quelle zu aktualisieren.
Es erzeugt die Datei var/www/locale/hosting.pot, die Sie dann als Grundlage verwenden können, um eine neue Sprachdatei in var/www/IHRE_SPRACHE/LC_MESSAGES/hosting.po zu erstellen und mit einem Übersetzungsprogramm wie Poedit zu bearbeiten.
Sobald Sie fertig sind, können Sie einen Pull-Request öffnen oder mir eine E-Mail senden, um die Übersetzung einzufügen.
Die Konfiguration wurde mit Debian 13 (Trixie) und Ubuntu 24.04 LTS getestet. Es wird empfohlen, Debian 13 oder Ubuntu 24.04 auf Ihrem Server zu installieren, aber mit ein wenig Anpassung können Sie dies möglicherweise auch auf anderen Distributionen und/oder Versionen zum Laufen bringen. Wenn Sie es auf einem Raspberry Pi aufbauen möchten, verwenden Sie bitte nicht die Raspbian-Images, da einige Dinge kaputt gehen. Laden Sie stattdessen ein Image für Ihr Pi-Modell von https://raspi.debian.net/daily-images/ herunter.
Der einfachste Weg zur Installation ist mit dem automatischen Installer:
apt update && apt install git && git clone https://github.com/DanWin/hosting && cd hosting
./install.sh
Der Installer kümmert sich um alles: Paketinstallation, PHP/ImageMagick-Kompilierung, Tor-Konfiguration, MySQL-Setup und Bereitstellung von Diensten. Er wird nach Passwörtern fragen oder diese automatisch generieren.
Optionen:
./install.sh --non-interactive # Überspringe Eingabeaufforderungen, generiere zufällige Passwörter
./install.sh --vanity <prefix> # Generiere eine Vanity-.onion-Adresse
./install.sh --skip-binaries # Überspringe Kompilierung (verwende, wenn bereits gebaut)
./install.sh --db-pass <pass> # Setze Hosting-MySQL-Passwort
./install.sh --pma-pass <pass> # Setze phpMyAdmin-MySQL-Passwort
./install.sh --admin-pass <pass> # Setze Admin-Panel-Passwort
Die Vanity-.onion-Generierung verwendet mkp224o (wird automatisch kompiliert). Nur Zeichen a-z und 2-7 sind gültig. Ein 4-Zeichen-Präfix dauert Minuten, 5 Zeichen dauert 10-30 Minuten, 6+ Zeichen dauert Stunden.
Anmeldeinformationen werden in /root/hosting-credentials.txt gespeichert.
cd hosting
./update.sh # Aktualisiere Code, behalte Konfiguration
./update.sh --rebuild # Baue auch PHP/ImageMagick neu
./update.sh --code-only # Aktualisiere nur PHP-Dateien
Das Update-Skript erstellt ein Backup Ihrer Konfiguration, zieht den neuesten Code, stellt Passwörter und die Onion-Adresse wieder her und startet Dienste neu. Es erkennt, ob sich install_binaries.sh geändert hat, und warnt Sie vor einem Neubau.
Wenn Sie es vorziehen, manuell zu installieren, folgen Sie den untenstehenden Schritten.
Entfernen Sie Pakete, die dieses Setup stören könnten:
DEBIAN_FRONTEND=noninteractive apt purge -y apache2* dnsmasq* eatmydata exim4* imagemagick-6-common mysql-client* mysql-server* nginx* libnginx-mod* php7* resolvconf && systemctl disable systemd-resolved.service && systemctl stop systemd-resolved.service
Wenn Sie nach diesem Schritt Probleme bei der Auflösung von Hostnamen haben, wechseln Sie vorübergehend zu einem öffentlichen Nameserver wie 1.1.1.1 (von CloudFlare) oder 8.8.8.8 (von Google)
rm /etc/resolv.conf && echo "nameserver 1.1.1.1" > /etc/resolv.conf
Fügen Sie zusätzliche Repositorien hinzu (nur Debian – Ubuntu hat nginx und brotli nativ):
apt update && apt install git apt-transport-tor curl lsb-release
curl -sSL https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc > /etc/apt/trusted.gpg.d/torproject.asc
curl -sSL https://packages.sury.org/nginx/apt.gpg > /etc/apt/trusted.gpg.d/sury.gpg
echo "deb tor://apow7mjfryruh65chtdydfmqfpj5btws7nbocgtaovhvezgccyjazpqd.onion/torproject.org/ `lsb_release -cs` main" >> /etc/apt/sources.list
echo "deb https://packages.sury.org/nginx/ `lsb_release -cs` main" >> /etc/apt/sources.list
apt update && apt upgrade
Installieren Sie git und klonen Sie dieses Repository
apt update && apt install git && git clone https://github.com/DanWin/hosting && cd hosting
Installieren Sie benutzerdefinierte optimierte Binärdateien
./install_binaries.sh
Beachten Sie, dass Debian auch ein Onion-Service-Paketarchiv hat, daher möchten Sie möglicherweise /etc/apt/sources.list bearbeiten, um von dort zu laden:
deb tor://2s4yqjx5ul6okpp3f2gaunr2syex5jgbfpfvhxxbbjwnrsvbk5v3qbid.onion/debian `lsb_release -cs` main
Kopieren (und nach Ihren Bedürfnissen anpassen) Sie die Site-Dateien in var/www nach /var/www und die Konfigurationsdateien in etc nach /etc, nachdem die Installation abgeschlossen ist. Starten Sie dann einige Dienste neu:
systemctl daemon-reload && systemctl restart bind9.service && systemctl restart [email protected]
Ersetzen Sie die Standard-.onion-Domain durch Ihre Domain:
sed -i "s/dhosting4xxoydyaivckq7tsmtgi4wfs3flpeyitekkmqwu4v4r46syd.onion/`cat /var/lib/tor/hidden_service/hostname`/g" /etc/postfix/sql/alias.cf /etc/postfix/sender_login_maps /etc/postfix/main.cf /var/www/skel/www/index.hosting.html /var/www/common.php /etc/postfix/canonical /etc/postfix-clearnet/canonical /var/www/html/squirrelmail/config/config.php
Für Ihre Clearnet-Domain müssen Sie sie zu relay_domains in /etc/postfix/main.cf hinzufügen und die Standard-Domain in den folgenden Dateien bearbeiten:
/var/www/common.php
/etc/postfix/canonical
/etc/postfix-clearnet/canonical
Dieses Setup hat zwei Postfix-Instanzen, eine zum Empfangen und Senden von E-Mails an andere .onion-Dienste und eine zum Umschreiben von Adressen, um sie an einen Clearnet-Mail-Relay weiterzuleiten. Sie möchten möglicherweise die zweite Instanz erstellen oder nicht, indem Sie Folgendes ausführen:
postmulti -e init
postmulti -I postfix-clearnet -e create
postmulti -i clearnet -e enable
postmulti -i clearnet -p start
Wenn Sie eine Instanz erstellt haben, kommentieren Sie die clearnet-relay-bezogene Konfiguration in etc/postfix/main.cf aus und stellen Sie sicher, dass Sie auch die Konfigurationsdateien von etc/postfix-clearnet kopieren und ändern.
Wenn Sie auf das folgende Problem gestoßen sind: postfix: fatal: chdir(/var/spool/postfix-clearnet): No such file or directory können Sie einfach das chroot von der Standard-Postfix-Instanz wie folgt kopieren: cd /var/spool/ && cp -a postfix/ postfix-clearnet/
Nach dem Kopieren (und Ändern) der Postfix-Konfiguration müssen Sie aus den Mapping-Dateien Datenbanken erstellen (auch jedes Mal, wenn Sie diese Dateien aktualisieren):
postalias /etc/aliases
postmap /etc/postfix/canonical /etc/postfix/sender_login_maps /etc/postfix/transport
postmap /etc/postfix-clearnet/canonical /etc/postfix-clearnet/sasl_password /etc/postfix-clearnet/transport #nur wenn Sie eine zweite Instanz haben
Um temporäre Dateien im Speicher zu speichern, fügen Sie Folgendes zu /etc/fstab hinzu:
tmpfs /tmp tmpfs defaults,noatime 0 0
tmpfs /var/log/nginx tmpfs rw,user,noatime 0 0
Um das System zu härten und PIDs vor Nicht-Root-Benutzern zu verbergen, fügen Sie auch Folgendes hinzu:
proc /proc proc defaults,hidepid=2 0 0
Und fügen Sie die Optionen noatime,usrjquota=aquota.user,jqfmt=vfsv1 zum Mountpunkt /home hinzu, initialisieren Sie dann das Quota. Ersetzen Sie /home durch /, wenn Sie keine separate Partition haben:
systemctl daemon-reload
mount -o remount $(findmnt -n -o TARGET --target /home)
quotacheck -cMu $(findmnt -n -o TARGET --target /home)
quotaon $(findmnt -n -o TARGET --target /home)
In einigen Fällen erhalten Sie möglicherweise einen Fehler, dass Quota nicht unterstützt wird. Dies ist normalerweise in virtuellen Umgebungen der Fall. Stellen Sie sicher, dass Sie den vollständigen Kernel installiert haben, nicht einen mit einem -virtual-Paket. Diese sind normalerweise linux-image-amd64, linux-image-arm64 oder linux-image-generic, abhängig von Ihrer Distribution. Stellen Sie auch sicher, dass Sie eine echte virtuelle Maschine ausführen (z.B. KVM). Einige Anbieter verkaufen containerisierte VPS (z.B. OpenVZ), was bedeutet, dass Sie keinen eigenen Kernel ausführen...
Installieren Sie sodium_compat für v3 hidden_service-Unterstützung
cd /var/www && composer install
Erstellen Sie einen MySQL-Benutzer für phpmyadmin und konfigurieren Sie ihn in /var/www/html/phpmyadmin/config.inc.php und füllen $cfg['blowfish_secret'] mit zufälligen Zeichen:
mysql
CREATE USER 'phpmyadmin'@'%' IDENTIFIED BY 'MEIN_PASSWORT';
CREATE DATABASE phpmyadmin;
GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'phpmyadmin'@'%';
FLUSH PRIVILEGES;
quit
mysql phpmyadmin < /var/www/html/phpmyadmin/sql/create_tables.sql
Erstellen Sie einen MySQL-Benutzer mit allen Berechtigungen für unser Hosting-Management:
mysql
CREATE USER 'hosting'@'%' IDENTIFIED BY 'MEIN_PASSWORT';
GRANT ALL PRIVILEGES ON *.* TO 'hosting'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
quit
Bearbeiten Sie dann die Datenbankkonfiguration in /var/www/common.php und /etc/postfix/sql/alias.cf
Zu guter Letzt richten Sie die Datenbank ein, indem Sie Folgendes ausführen
php /var/www/setup.php
Aktivieren Sie systemd-Timer, um regelmäßig verschiedene Verwaltungsaufgaben auszuführen:
systemctl enable hosting-del.timer && systemctl enable hosting.timer && systemctl enable hosting-autoscale.timer
Der letzte Schritt ist ein Neustart, warten Sie etwa 5 Minuten, bis alle Dienste gestartet sind, und überprüfen Sie, ob alles funktioniert, indem Sie ein Testkonto erstellen.
Benutzer können bei der Registrierung zwischen PHP 8.2, 8.3, 8.4 und 8.5 wählen und ihre Version im Dashboard ändern. Die Standardeinstellung ist PHP 8.5.
Tor-Instanzen skalieren automatisch basierend auf der Kontenanzahl. Der hosting-autoscale.timer läuft stündlich und fügt eine neue Instanz für etwa alle 250 Konten hinzu. Instanz-IDs gehen von a bis z, dann aa, ab usw. Sie können Instanzen auch manuell in SERVICE_INSTANCES in /var/www/common.php setzen und setup.php ausführen.
htmlspecialchars() maskiertscript-src 'none'