
خادم استضافة ويب مشتركة قائم على Tor بشكل تلقائي مع دعم إصدارات متعددة من PHP، توجيه البريد الإلكتروني، مثيلات Tor ذاتية التوسع، وتعزيز أمني مدمج بما في ذلك حماية CSRF وCSP ومفاتيح onion المشفرة.
هذا إعداد لخادم استضافة مشتركة قائم على تور. يتم توفيره كما هو، وقبل وضعه في الإنتاج، يجب إجراء تغييرات وفقًا لاحتياجاتك. هذا عمل قيد التطوير، ويجب عليك مراجعة تاريخ الالتزامات بعناية قبل التحديث. بالنسبة لخادم إنتاج، يُوصى بمساحة تخزين SSD لا تقل عن 1 تيرابايت، وذاكرة وصول عشوائي 32 جيجابايت، و8 نوى معالجة. بالنسبة لخادم اختبار/شخصي صغير، فإن 4 جيجابايت من ذاكرة الوصول العشوائي ونواة معالج واحدة كافية.
تتم إدارة الترجمات في Weblate.
إذا كنت تفضل تقديم الترجمات يدويًا، يمكن استخدام البرنامج النصي update-translations.sh لتحديث قالب اللغة وملفات الترجمة من المصدر.
سيقوم بإنشاء الملف var/www/locale/hosting.pot الذي يمكنك استخدامه كأساس لإنشاء ملف لغة جديد في var/www/YOUR_LANG_CODE/LC_MESSAGES/hosting.po وتحريره باستخدام برنامج ترجمة، مثل Poedit.
بمجرد الانتهاء، يمكنك فتح طلب سحب، أو مراسلتي عبر البريد الإلكتروني، لتضمين الترجمة.
تم اختبار التكوين مع دبيان 13 (Trixie) وأوبونتو 24.04 LTS. يُوصى بتثبيت دبيان 13 أو أوبونتو 24.04 على خادمك، ولكن مع بعض التعديلات قد يعمل هذا أيضًا على توزيعات/إصدارات أخرى. إذا كنت ترغب في بنائه على راسبيري باي، يُرجى عدم استخدام صور 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 <prefix> # إنشاء عنوان .onion مخصص
./install.sh --skip-binaries # تخطي التجميع (استخدم إذا كان مبنيًا بالفعل)
./install.sh --db-pass <pass> # تعيين كلمة مرور MySQL للاستضافة
./install.sh --pma-pass <pass> # تعيين كلمة مرور MySQL لـ phpMyAdmin
./install.sh --admin-pass <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
إذا واجهت مشاكل في حل أسماء المضيفين بعد هذه الخطوة، قم بالتبديل مؤقتًا إلى خادم أسماء عام مثل 1.1.1.1 (من CloudFlare) أو 8.8.8.8 (من Google)
rm /etc/resolv.conf && echo "nameserver 1.1.1.1" > /etc/resolv.conf
أضف مستودعات إضافية (دبيان فقط — أوبونتو تحتوي على 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
لاحظ أن دبيان يحتوي أيضًا على أرشيف حزمة خدمة البصل، لذلك قد ترغب في تحرير /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/
بعد نسخ (وتعديل) تكوين posfix، تحتاج إلى إنشاء قواعد بيانات من ملفات التعيين (وفي كل مرة تقوم فيها بتحديث تلك الملفات):
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
لتعزيز النظام وإخفاء أرقام التعريف (pids) عن المستخدمين غير الجذر، أضف أيضًا ما يلي:
proc /proc proc defaults,hidepid=2 0 0
وأضف الخيارات noatime,usrjquota=aquota.user,jqfmt=vfsv1 إلى نقطة التحميل /home، ثم قم بتهيئة الحصة. استبدل /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)
في بعض الحالات، قد تحصل على خطأ بأن الحصة غير مدعومة. هذا هو الحال عادةً في البيئات الافتراضية. تأكد من تثبيت النواة الكاملة، وليس نواة بحزمة -virtual. تكون عادةً linux-image-amd64 أو linux-image-arm64 أو linux-image-generic، حسب توزيعتك. تأكد أيضًا من أنك تعمل على جهاز افتراضي حقيقي (مثل KVM). بعض المزودين يبيعون VPSes محتواة (مثل OpenVZ)، مما يعني أنك لا تدير نواة خاصة بك...
قم بتثبيت sodium_compat لدعم hidden_service الإصدار 3
cd /var/www && composer install
أنشئ مستخدم mysql لـ phpmyadmin وقم بتكوينه في /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 كل ساعة ويضيف مثيلًا جديدًا لكل ~250 حسابًا. تذهب معرفات المثيلات a إلى z، ثم aa, ab, إلخ. يمكنك أيضًا تعيين المثيلات يدويًا في SERVICE_INSTANCES في /var/www/common.php وتشغيل setup.php.
htmlspecialchars()script-src 'none'