
自動化されたTorベースの共有Webホスティングサーバー。PHPマルチバージョン対応、メールルーティング、自動スケーリングTorインスタンス、CSRF保護、CSP、暗号化されたオニオンキーを含む組み込みのセキュリティ強化を備えています。
これは Tor ベースの共有ホスティングサーバー用のセットアップです。現状のまま提供されており、本番環境に導入する前に、必要に応じて変更を加える必要があります。これは開発中のものであり、更新前にコミット履歴を慎重に確認してから更新することをお勧めします。 本番サーバーでは、少なくとも 1TB の SSD ディスク容量、32GB RAM、8 CPU コアを推奨します。小規模なテスト/個人サーバーであれば、4GB RAM と 1 CPU コアで十分です。
翻訳は Weblate で管理されています。
手動で翻訳を提出する場合は、スクリプト update-translations.sh を使用して、ソースから言語テンプレートと翻訳ファイルを更新できます。
これにより、ファイル var/www/locale/hosting.pot が生成され、これをベースとして var/www/YOUR_LANG_CODE/LC_MESSAGES/hosting.po に新しい言語ファイルを作成し、Poedit などの翻訳プログラムで編集できます。
完了したら、プルリクエストを開くか、メールで翻訳を送信してください。
この構成は Debian 13 (Trixie) および Ubuntu 24.04 LTS でテストされています。サーバーには Debian 13 または Ubuntu 24.04 をインストールすることを推奨しますが、少し調整すれば他のディストリビューションやバージョンでも動作する可能性があります。Raspberry Pi で構築する場合は、Raspbian イメージは使用しないでください。いくつかの機能が壊れます。代わりに https://raspi.debian.net/daily-images/ から Pi モデルに合ったイメージをダウンロードしてください。
最も簡単なインストール方法は、自動インストーラーを使用することです:
apt update && apt install git && git clone https://github.com/DanWin/hosting && cd hosting
./install.sh
インストーラーは、パッケージのインストール、PHP/ImageMagick のコンパイル、Tor の設定、MySQL のセットアップ、サービスのプロビジョニングなどをすべて処理します。パスワードを要求するか、自動的に生成します。
オプション:
./install.sh --non-interactive # Skip prompts, generate random passwords
./install.sh --vanity <prefix> # Generate a vanity .onion address
./install.sh --skip-binaries # Skip compiling (use if already built)
./install.sh --db-pass <pass> # Set hosting MySQL password
./install.sh --pma-pass <pass> # Set phpMyAdmin MySQL password
./install.sh --admin-pass <pass> # Set admin panel password
バニティ .onion の生成には mkp224o が使用されます(自動的にコンパイルされます)。有効な文字は a-z と 2-7 のみです。4 文字のプレフィックスは数分、5 文字は 10〜30 分、6 文字以上は数時間かかります。
認証情報は /root/hosting-credentials.txt に保存されます。
cd hosting
./update.sh # Update code, preserve config
./update.sh --rebuild # Also rebuild PHP/ImageMagick
./update.sh --code-only # Only update PHP files
更新スクリプトは設定をバックアップし、最新のコードをプルし、パスワードと onion アドレスを復元し、サービスを再起動します。install_binaries.sh が変更されたことを検出し、再ビルドを警告します。
手動でインストールする場合は、以下の手順に従ってください。
このセットアップに干渉する可能性のあるパッケージを削除します:
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
この手順の後にホスト名解決に問題が発生した場合は、一時的に CloudFlare の 1.1.1.1 や Google の 8.8.8.8 などのパブリックネームサーバーに切り替えてください。
rm /etc/resolv.conf && echo "nameserver 1.1.1.1" > /etc/resolv.conf
追加のリポジトリを追加します(Debian のみ — Ubuntu には nginx と brotli が標準で含まれています):
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
git をインストールし、このリポジトリをクローンします
apt update && apt install git && git clone https://github.com/DanWin/hosting && cd hosting
カスタム最適化バイナリをインストールします
./install_binaries.sh
Debian には onion サービスパッケージアーカイブもあるので、代わりにそこから読み込むように /etc/apt/sources.list を編集しても構いません:
deb tor://2s4yqjx5ul6okpp3f2gaunr2syex5jgbfpfvhxxbbjwnrsvbk5v3qbid.onion/debian `lsb_release -cs` main
インストールが完了したら、var/www 内のサイトファイルを /var/www に、etc 内の設定ファイルを /etc にコピーし(必要に応じて変更してください)、その後いくつかのサービスを再起動します:
systemctl daemon-reload && systemctl restart bind9.service && systemctl restart [email protected]
デフォルトの .onion ドメインを自分のドメインに置き換えます:
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
クリアネットドメインについては、relay_domains を /etc/postfix/main.cf に追加し、以下のファイルのデフォルトドメインを編集する必要があります:
/var/www/common.php
/etc/postfix/canonical
/etc/postfix-clearnet/canonical
このセットアップには 2 つの postfix インスタンスがあります。1 つは他の .onion サービスとのメール送受信用、もう 1 つはアドレスを書き換えてクリアネット向けメールリレーに渡すためのものです。2 番目のインスタンスは以下のコマンドで作成するか、省略することができます:
postmulti -e init
postmulti -I postfix-clearnet -e create
postmulti -i clearnet -e enable
postmulti -i clearnet -p start
インスタンスを作成した場合は、etc/postfix/main.cf でクリアネットリレー関連の設定のコメントを解除し、etc/postfix-clearnet の設定ファイルもコピーして変更してください。
以下のエラーが発生した場合: postfix: fatal: chdir(/var/spool/postfix-clearnet): No such file or directory は、デフォルトの postfix インスタンスから chroot をコピーすることで解決できます: cd /var/spool/ && cp -a postfix/ postfix-clearnet/
postfix 設定をコピー(および変更)した後、マッピングファイルからデータベースを作成する必要があります(これらのファイルを更新するたびにも行います):
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 #only if you have a second instance
一時ファイルをメモリに保存するには、/etc/fstab に以下を追加します:
tmpfs /tmp tmpfs defaults,noatime 0 0
tmpfs /var/log/nginx tmpfs rw,user,noatime 0 0
システムを強化し、非 root ユーザーから PID を隠すには、以下も追加します:
proc /proc proc defaults,hidepid=2 0 0
そして、/home マウントポイントに noatime,usrjquota=aquota.user,jqfmt=vfsv1 オプションを追加し、quota を初期化します。/home が別パーティーションでない場合は、/ に置き換えてください:
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)
場合によっては、quota がサポートされていないというエラーが発生することがあります。これは通常、仮想環境で発生します。-virtual パッケージを含まないフルカーネルをインストールしていることを確認してください。通常は linux-image-amd64、linux-image-arm64、またはディストリビューションに応じて linux-image-generic です。また、実際の仮想マシン(例: KVM)上で実行していることを確認してください。一部のプロバイダーはコンテナ型 VPS(例: OpenVZ)を販売しており、その場合は独自のカーネルを実行していません...
v3 hidden_service サポートのために sodium_compat をインストールします
cd /var/www && composer install
phpmyadmin 用の mysql ユーザーを作成し、/var/www/html/phpmyadmin/config.inc.php で設定し、$cfg['blowfish_secret'] にランダムな文字を入力します:
mysql
CREATE USER 'phpmyadmin'@'%' IDENTIFIED BY 'MY_PASSWORD';
CREATE DATABASE phpmyadmin;
GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'phpmyadmin'@'%';
FLUSH PRIVILEGES;
quit
mysql phpmyadmin < /var/www/html/phpmyadmin/sql/create_tables.sql
ホスティング管理用にすべての権限を持つ mysql ユーザーを作成します:
mysql
CREATE USER 'hosting'@'%' IDENTIFIED BY 'MY_PASSWORD';
GRANT ALL PRIVILEGES ON *.* TO 'hosting'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
quit
次に、/var/www/common.php と /etc/postfix/sql/alias.cf でデータベース設定を編集します。
最後に、以下のコマンドを実行してデータベースをセットアップします
php /var/www/setup.php
さまざまな管理タスクを定期的に実行するために systemd タイマーを有効にします:
systemctl enable hosting-del.timer && systemctl enable hosting.timer && systemctl enable hosting-autoscale.timer
最後のステップは再起動し、すべてのサービスが起動するまで約 5 分間待ち、テストアカウントを作成してすべてが動作することを確認することです。
ユーザーは登録時に PHP 8.2、8.3、8.4、8.5 から選択でき、ダッシュボードからバージョンを変更できます。デフォルトは PHP 8.5 です。
Tor インスタンスはアカウント数に基づいて自動的にスケーリングされます。hosting-autoscale.timer は 1 時間ごとに実行され、約 250 アカウントごとに新しいインスタンスを追加します。インスタンス ID は a から z、次に aa、ab と続きます。/var/www/common.php の SERVICE_INSTANCES でインスタンスを手動で設定し、setup.php を実行することもできます。
htmlspecialchars() でエスケープscript-src 'none' のコンテンツセキュリティポリシー