
Server di hosting web condiviso automatizzato basato su Tor con supporto multi-versione PHP, routing email, istanze Tor con auto-scaling, e rafforzamento della sicurezza integrato inclusa protezione CSRF, CSP e chiavi onion crittografate.
Questa è una configurazione per un server di hosting condiviso basato su Tor. Viene fornita così com'è e, prima di metterla in produzione, dovresti apportare modifiche in base alle tue esigenze. È un lavoro in corso e dovresti controllare attentamente la cronologia dei commit per eventuali modifiche prima di aggiornare. Per un server di produzione, si consigliano almeno 1 TB di spazio su disco SSD, 32 GB di RAM e 8 core della CPU. Per un piccolo server di test/personale, sono sufficienti 4 GB di RAM e 1 core della CPU.
Le traduzioni sono gestite in Weblate.
Se preferisci inviare manualmente le traduzioni, lo script update-translations.sh può essere utilizzato per aggiornare il template della lingua e i file di traduzione dal sorgente.
Genererà il file var/www/locale/hosting.pot che potrai poi usare come base per creare un nuovo file di lingua in var/www/YOUR_LANG_CODE/LC_MESSAGES/hosting.po e modificarlo con un programma di traduzione, come Poedit.
Una volta terminato, puoi aprire una pull request, o inviarmi un'email, per includere la traduzione.
La configurazione è stata testata con Debian 13 (Trixie) e Ubuntu 24.04 LTS. Si consiglia di installare Debian 13 o Ubuntu 24.04 sul tuo server, ma con qualche piccolo aggiustamento potresti riuscire a farla funzionare anche su altre distribuzioni e/o versioni. Se vuoi costruirlo su un raspberry pi, non usare le immagini raspbian perché molte cose si romperanno. Scarica invece un'immagine per il tuo modello di pi da https://raspi.debian.net/daily-images/.
Il modo più semplice per installare è con l'installer automatico:
apt update && apt install git && git clone https://github.com/DanWin/hosting && cd hosting
./install.sh
L'installer gestisce tutto: installazione dei pacchetti, compilazione di PHP/ImageMagick, configurazione di Tor, setup di MySQL e provisioning dei servizi. Richiederà le password o le genererà automaticamente.
Opzioni:
./install.sh --non-interactive # Salta le richieste, genera password casuali
./install.sh --vanity <prefisso> # Genera un indirizzo .onion personalizzato
./install.sh --skip-binaries # Salta la compilazione (usa se già compilato)
./install.sh --db-pass <pass> # Imposta la password MySQL per hosting
./install.sh --pma-pass <pass> # Imposta la password MySQL per phpMyAdmin
./install.sh --admin-pass <pass> # Imposta la password del pannello di amministrazione
La generazione di un .onion personalizzato usa mkp224o (compilato automaticamente). Sono validi solo i caratteri a-z e 2-7. Un prefisso di 4 caratteri richiede minuti, 5 caratteri richiede 10-30 minuti, 6+ caratteri richiede ore.
Le credenziali sono salvate in /root/hosting-credentials.txt.
cd hosting
./update.sh # Aggiorna il codice, preserva la configurazione
./update.sh --rebuild # Ricostruisce anche PHP/ImageMagick
./update.sh --code-only # Aggiorna solo i file PHP
Lo script di aggiornamento esegue un backup della configurazione, recupera l'ultimo codice, ripristina le password e l'indirizzo onion, e riavvia i servizi. Rileva se install_binaries.sh è cambiato e ti avvisa di ricostruire.
Se preferisci installare manualmente, segui i passaggi seguenti.
Rimuovi i pacchetti che potrebbero interferire con questa configurazione:
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
Se dopo questo passaggio hai problemi a risolvere i nomi host, passa temporaneamente a un nameserver pubblico come 1.1.1.1 (di CloudFlare) o 8.8.8.8 (di Google)
rm /etc/resolv.conf && echo "nameserver 1.1.1.1" > /etc/resolv.conf
Aggiungi repository aggiuntivi (solo Debian — Ubuntu ha nginx e brotli nativamente):
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
Installa git e clona questo repository
apt update && apt install git && git clone https://github.com/DanWin/hosting && cd hosting
Installa i binari personalizzati ottimizzati
./install_binaries.sh
Nota che anche Debian ha un archivio di pacchetti per servizi onion, quindi potresti voler modificare /etc/apt/sources.list per caricare da lì invece:
deb tor://2s4yqjx5ul6okpp3f2gaunr2syex5jgbfpfvhxxbbjwnrsvbk5v3qbid.onion/debian `lsb_release -cs` main
Copia (e modifica secondo le tue esigenze) i file del sito in var/www in /var/www e i file di configurazione in etc in /etc dopo che l'installazione è terminata. Poi riavvia alcuni servizi:
systemctl daemon-reload && systemctl restart bind9.service && systemctl restart [email protected]
Sostituisci il dominio .onion predefinito con il tuo dominio:
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
Per il tuo dominio clearnet, devi aggiungerlo a relay_domains in /etc/postfix/main.cf e modificare il dominio predefinito nei seguenti file:
/var/www/common.php
/etc/postfix/canonical
/etc/postfix-clearnet/canonical
Questa configurazione ha due istanze di postfix, una per ricevere e inviare mail ad altri servizi .onion e una per riscrivere gli indirizzi per passarli a un relay di posta clearnet. Potresti voler creare o meno la seconda istanza eseguendo
postmulti -e init
postmulti -I postfix-clearnet -e create
postmulti -i clearnet -e enable
postmulti -i clearnet -p start
Se hai creato un'istanza, decommenta la configurazione relativa al relay clearnet in etc/postfix/main.cf e assicurati di copiare e modificare anche i file di configurazione da etc/postfix-clearnet
Se hai riscontrato il seguente problema: postfix: fatal: chdir(/var/spool/postfix-clearnet): No such file or directory puoi semplicemente copiare il chroot dall'istanza postfix predefinita così: cd /var/spool/ && cp -a postfix/ postfix-clearnet/
Dopo aver copiato (e modificato) la configurazione di posfix, devi creare i database dai file di mapping (anche ogni volta che aggiorni quei file):
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 #solo se hai una seconda istanza
Per salvare i file temporanei in memoria, aggiungi quanto segue a /etc/fstab:
tmpfs /tmp tmpfs defaults,noatime 0 0
tmpfs /var/log/nginx tmpfs rw,user,noatime 0 0
Per indurire il sistema e nascondere i pid agli utenti non root, aggiungi anche quanto segue:
proc /proc proc defaults,hidepid=2 0 0