
Автоматизированный сервер общего веб-хостинга на базе Tor с поддержкой нескольких версий PHP, маршрутизацией электронной почты, автоматическим масштабированием экземпляров Tor и встроенной защитой, включая защиту от CSRF, CSP и зашифрованные ключи onion.
Это конфигурация для сервера общего хостинга на базе Tor. Предоставляется «как есть», и перед вводом в эксплуатацию вы должны внести изменения в соответствии со своими потребностями. Это незавершённая работа, и перед обновлением следует внимательно проверять историю коммитов на предмет изменений. Для production-сервера рекомендуется не менее 1 ТБ SSD-дискового пространства, 32 ГБ ОЗУ и 8 ядер ЦП. Для небольшого тестового/личного сервера достаточно 4 ГБ ОЗУ и 1 ядра ЦП.
Переводы управляются в Weblate.
Если вы предпочитаете отправлять переводы вручную, скрипт update-translations.sh можно использовать для обновления шаблона языка и файлов перевода из исходного кода.
Он создаст файл var/www/locale/hosting.pot, который вы затем можете использовать как основу для создания нового языкового файла в var/www/ВАШ_КОД_ЯЗЫКА/LC_MESSAGES/hosting.po и отредактировать его с помощью программы для перевода, такой как Poedit.
После завершения вы можете открыть pull request или написать мне, чтобы включить перевод.
Конфигурация тестировалась с Debian 13 (Trixie) и Ubuntu 24.04 LTS. Рекомендуется установить Debian 13 или Ubuntu 24.04 на ваш сервер, но с небольшими доработками вы также сможете запустить это на других дистрибутивах и/или версиях. Если вы хотите собрать это на Raspberry Pi, не используйте образы Raspbian, так как некоторые вещи сломаются. Вместо этого загрузите образ для вашей модели Pi с https://raspi.debian.net/daily-images/.
Самый простой способ установки — с помощью автоматического установщика:
apt update && apt install git && git clone https://github.com/DanWin/hosting && cd hosting
./install.sh
Установщик обрабатывает всё: установку пакетов, компиляцию PHP/ImageMagick, настройку Tor, настройку MySQL и подготовку сервисов. Он запросит пароли или сгенерирует их автоматически.
Параметры:
./install.sh --non-interactive # Пропустить запросы, сгенерировать случайные пароли
./install.sh --vanity <префикс> # Сгенерировать «ванильный» .onion-адрес
./install.sh --skip-binaries # Пропустить компиляцию (использовать, если уже собрано)
./install.sh --db-pass <пароль> # Установить пароль MySQL для хостинга
./install.sh --pma-pass <пароль> # Установить пароль MySQL для phpMyAdmin
./install.sh --admin-pass <пароль> # Установить пароль панели администратора
Генерация «ванильного» .onion использует mkp224o (компилируется автоматически). Допустимы только символы a-z и 2-7. Префикс из 4 символов занимает минуты, из 5 символов — 10-30 минут, из 6+ символов — часы.
Учётные данные сохраняются в /root/hosting-credentials.txt.
cd hosting
./update.sh # Обновить код, сохранить конфигурацию
./update.sh --rebuild # Также пересобрать PHP/ImageMagick
./update.sh --code-only # Обновить только PHP-файлы
Скрипт обновления создаёт резервную копию вашей конфигурации, загружает последний код, восстанавливает пароли и .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
Если после этого шага у вас возникли проблемы с разрешением имён хостов, временно переключитесь на публичный DNS-сервер, например 1.1.1.1 (от CloudFlare) или 8.8.8.8 (от Google):
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
Для вашего clearnet-домена вам нужно добавить его в relay_domains в /etc/postfix/main.cf и отредактировать домен по умолчанию в следующих файлах:
/var/www/common.php
/etc/postfix/canonical
/etc/postfix-clearnet/canonical
Эта настройка имеет два экземпляра Postfix: один для приёма и отправки почты другим .onion-сервисам, и один для перезаписи адресов для передачи их на почтовый релей для clearnet. Вы можете создать второй экземпляр, выполнив:
postmulti -e init
postmulti -I postfix-clearnet -e create
postmulti -i clearnet -e enable
postmulti -i clearnet -p start
Если вы создали экземпляр, раскомментируйте соответствующие настройки релея clearnet в etc/postfix/main.cf и не забудьте также скопировать и изменить файлы конфигурации из etc/postfix-clearnet.
Если вы столкнулись со следующей ошибкой: postfix: fatal: chdir(/var/spool/postfix-clearnet): No such file or directory, вы можете просто скопировать chroot из экземпляра Postfix по умолчанию следующим образом: 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 # только если у вас есть второй экземпляр
Чтобы сохранять временные файлы в памяти, добавьте следующее в /etc/fstab:
tmpfs /tmp tmpfs defaults,noatime 0 0
tmpfs /var/log/nginx tmpfs rw,user,noatime 0 0
Для укрепления системы и скрытия PID от обычных пользователей также добавьте:
proc /proc proc defaults,hidepid=2 0 0