2026-02-05/1

This commit is contained in:
Hamza-Ayed
2026-02-05 13:22:27 +03:00
parent 3d441cfea3
commit d0b3e624cc
7 changed files with 4399 additions and 0 deletions

557
PHASE_1_LAPTOP_SETUP.md Normal file
View File

@@ -0,0 +1,557 @@
# 🔐 المرحلة 1: تأمين وإعداد اللابتوب (Ubuntu)
## 📋 نظرة عامة
هذه المرحلة تركّز على تحويل اللابتوب إلى **محطة إدارة آمنة** لإدارة السيرفرات.
---
## 🛠️ الخطوة 1: تثبيت Ubuntu بشكل آمن
### 1.1 التثبيت الأساسي
```bash
# أثناء التثبيت:
# ✅ فعّل Full Disk Encryption (LUKS)
# ✅ استخدم كلمة مرور قوية للتشفير (20+ حرف)
# ✅ اختر "Minimal Installation"
# ✅ فعّل التحديثات التلقائية
```
### 1.2 بعد التثبيت مباشرة
```bash
# تحديث النظام
sudo apt update && sudo apt upgrade -y
sudo apt dist-upgrade -y
# تثبيت الأدوات الأساسية
sudo apt install -y \
build-essential \
git \
curl \
wget \
vim \
htop \
ufw \
fail2ban \
openssh-client \
gnupg2 \
rng-tools \
secure-delete \
cryptsetup \
tmux \
jq \
knockd
```
---
## 🔑 الخطوة 2: توليد المفاتيح الأمنية (الأهم!)
### 2.1 إنشاء مجلد آمن للمفاتيح
```bash
# إنشاء مجلد مشفر للمفاتيح
mkdir -p ~/FORTRESS_KEYS
chmod 700 ~/FORTRESS_KEYS
cd ~/FORTRESS_KEYS
# إنشاء ملف README لتوثيق المفاتيح
cat > README.md <<'EOF'
# 🔐 TRIPZ FORTRESS - Key Management
## المفاتيح المتوفرة:
- fortress_master: المفتاح الرئيسي للسيرفرات
- backup_key: مفتاح احتياطي للطوارئ
- vpn_keys/: مفاتيح WireGuard لكل سيرفر
## الاستخدام:
ssh -i fortress_master tripzadmin@SERVER_IP -p 2200
## النسخ الاحتياطي:
المفاتيح منسوخة على:
1. USB مشفر (Backup A)
2. KeePassXC Database
3. Cloud مشفر (اختياري)
EOF
```
### 2.2 توليد المفتاح الرئيسي
```bash
# توليد مفتاح Ed25519 (أقوى وأسرع من RSA)
ssh-keygen -t ed25519 -C "fortress-master-$(date +%Y%m%d)" -f fortress_master -N ""
# ملاحظات:
# ✅ Ed25519: أكثر أماناً وأسرع من RSA 4096
# ✅ لا passphrase: لأن اللابتوب نفسه مشفّر بالكامل
# ✅ Comment يحتوي على التاريخ للتتبع
# نتيجة:
# fortress_master (المفتاح الخاص - لا تشاركه أبداً!)
# fortress_master.pub (المفتاح العام - يُرفع للسيرفرات)
# عرض المفتاح العام
echo "========================================="
echo "🔑 المفتاح العام (لنسخه للسيرفر):"
echo "========================================="
cat fortress_master.pub
echo "========================================="
```
### 2.3 توليد مفتاح احتياطي (للطوارئ)
```bash
# مفتاح ثانوي للطوارئ (بكلمة مرور!)
ssh-keygen -t ed25519 -C "fortress-backup-$(date +%Y%m%d)" -f backup_key
# هذا المفتاح:
# ✅ يُحفظ في مكان آمن منفصل
# ✅ له passphrase قوية
# ✅ يُستخدم فقط للطوارئ
```
### 2.4 حماية المفاتيح
```bash
# صلاحيات صارمة
chmod 600 fortress_master backup_key
chmod 644 fortress_master.pub backup_key.pub
# تحقق من الصلاحيات
ls -la | grep fortress
# يجب أن ترى: -rw------- (600)
```
---
## 💾 الخطوة 3: النسخ الاحتياطي الآمن للمفاتيح
### 3.1 استخدام KeePassXC (موصى به!)
```bash
# تثبيت KeePassXC
sudo apt install -y keepassxc
# ✅ الميزات:
# - قاعدة بيانات مشفرة محلياً
# - دعم المفاتيح SSH مباشرة
# - Yubikey support
# - Cross-platform
# الإعداد:
# 1. افتح KeePassXC
# 2. أنشئ قاعدة بيانات جديدة: FORTRESS_KEYS.kdbx
# 3. استخدم كلمة مرور قوية (25+ حرف)
# 4. خزّن المفاتيح الخاصة داخل القاعدة
# 5. خزّن معلومات السيرفرات والـ API Keys
```
### 3.2 نسخة USB مشفرة
```bash
# تشفير USB stick
# ⚠️ سيحذف كل البيانات على USB!
# 1. التعرف على USB
lsblk
# افرض أنه /dev/sdb
# 2. تشفير USB بـ LUKS
sudo cryptsetup luksFormat /dev/sdb
# أدخل كلمة مرور قوية
# 3. فتح USB المشفر
sudo cryptsetup open /dev/sdb fortress_usb
# 4. إنشاء نظام ملفات
sudo mkfs.ext4 /dev/mapper/fortress_usb
# 5. تحميل ونسخ المفاتيح
sudo mkdir -p /mnt/fortress_backup
sudo mount /dev/mapper/fortress_usb /mnt/fortress_backup
sudo cp -r ~/FORTRESS_KEYS /mnt/fortress_backup/
sudo cp ~/keepassxc.kdbx /mnt/fortress_backup/
# 6. إلغاء التحميل والإغلاق
sudo umount /mnt/fortress_backup
sudo cryptsetup close fortress_usb
# ✅ الآن لديك نسخة احتياطية مشفرة كاملة!
```
---
## 🛡️ الخطوة 4: تأمين اللابتوب نفسه
### 4.1 تفعيل Firewall
```bash
# تكوين UFW
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow from 192.168.1.0/24 # شبكتك المحلية فقط
sudo ufw enable
# التحقق
sudo ufw status verbose
```
### 4.2 تعطيل الخدمات غير الضرورية
```bash
# إيقاف SSH server (لا نحتاجه على اللابتوب)
sudo systemctl disable ssh
sudo systemctl stop ssh
# إيقاف الخدمات غير الضرورية
sudo systemctl disable bluetooth
sudo systemctl disable cups # طابعات
sudo systemctl disable avahi-daemon # اكتشاف الشبكة
```
### 4.3 Fail2Ban للحماية المحلية
```bash
# تثبيت وتفعيل
sudo apt install -y fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# تكوين بسيط
sudo cat > /etc/fail2ban/jail.local <<'EOF'
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
[sshd]
enabled = false
[laptop-login]
enabled = true
filter = systemd-auth
maxretry = 5
EOF
sudo systemctl restart fail2ban
```
### 4.4 تفعيل التحديثات التلقائية
```bash
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
# اختر YES
```
---
## 📦 الخطوة 5: تثبيت أدوات الإدارة
### 5.1 CLI Tools للإدارة
```bash
# Tmux للجلسات المستمرة
cat > ~/.tmux.conf <<'EOF'
# تحسينات Tmux
set -g mouse on
set -g history-limit 10000
set -g base-index 1
# اختصارات
bind r source-file ~/.tmux.conf
EOF
# SSH Config للسيرفرات
mkdir -p ~/.ssh
cat > ~/.ssh/config <<'EOF'
# تكوين SSH للسيرفرات
Host fortress-*
User tripzadmin
Port 2200
IdentityFile ~/FORTRESS_KEYS/fortress_master
ServerAliveInterval 60
ServerAliveCountMax 3
Compression yes
# مثال:
# Host fortress-web1
# HostName 194.163.xxx.xxx
# LocalForward 8080 localhost:80
# Host fortress-db1
# HostName 194.163.xxx.xxx
EOF
chmod 600 ~/.ssh/config
```
### 5.2 Knock Client (للـ Port Knocking)
```bash
# تثبيت knockd client
sudo apt install -y knockd
# إنشاء سكريبت knock مخصص
cat > ~/FORTRESS_KEYS/knock.sh <<'EOF'
#!/bin/bash
# 🚪 Port Knocking Script
SERVER_IP=$1
KNOCK_SEQUENCE="7000 8000 9000" # سيتم تحديثها لاحقاً
if [ -z "$SERVER_IP" ]; then
echo "Usage: $0 <server-ip>"
exit 1
fi
echo "🚪 Knocking on $SERVER_IP..."
knock $SERVER_IP $KNOCK_SEQUENCE
echo "✅ Knocked! Wait 5 seconds then SSH..."
sleep 5
ssh -i ~/FORTRESS_KEYS/fortress_master -p 2200 tripzadmin@$SERVER_IP
EOF
chmod +x ~/FORTRESS_KEYS/knock.sh
```
### 5.3 تثبيت WireGuard Client
```bash
# تثبيت WireGuard
sudo apt install -y wireguard wireguard-tools
# إنشاء مجلد للـ VPN configs
mkdir -p ~/FORTRESS_KEYS/vpn_configs
chmod 700 ~/FORTRESS_KEYS/vpn_configs
# سيتم إنشاء الـ configs في المرحلة 2
```
---
## 🔍 الخطوة 6: أدوات المراقبة والتنبيهات
### 6.1 تثبيت Telegram CLI (للتنبيهات)
```bash
# تثبيت curl و jq
sudo apt install -y curl jq
# إنشاء سكريبت التنبيهات
cat > ~/FORTRESS_KEYS/telegram_notify.sh <<'EOF'
#!/bin/bash
# 📱 Telegram Notification Script
TELEGRAM_BOT_TOKEN="YOUR_BOT_TOKEN" # سيتم تحديثه
TELEGRAM_CHAT_ID="YOUR_CHAT_ID" # سيتم تحديثه
MESSAGE=$1
if [ -z "$MESSAGE" ]; then
echo "Usage: $0 'message'"
exit 1
fi
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-d chat_id="${TELEGRAM_CHAT_ID}" \
-d text="🛡️ FORTRESS ALERT: $MESSAGE" \
-d parse_mode="HTML" > /dev/null
echo "✅ Notification sent!"
EOF
chmod +x ~/FORTRESS_KEYS/telegram_notify.sh
```
### 6.2 إعداد Telegram Bot
```
📱 الخطوات اليدوية:
1. افتح Telegram وابحث عن: @BotFather
2. أرسل: /newbot
3. اختر اسم للبوت: TRIPZ Fortress Alert Bot
4. اختر username: tripz_fortress_bot
5. احفظ الـ TOKEN المعطى
6. للحصول على Chat ID:
- ابحث عن: @userinfobot
- أرسله أي رسالة
- احفظ الـ ID المعطى
7. حدّث السكريبت:
vim ~/FORTRESS_KEYS/telegram_notify.sh
# ضع TOKEN و CHAT_ID
8. اختبر:
~/FORTRESS_KEYS/telegram_notify.sh "Test Alert!"
```
---
## 📝 الخطوة 7: توثيق كامل
### 7.1 إنشاء ملف المعلومات
```bash
cat > ~/FORTRESS_KEYS/MASTER_INFO.txt <<EOF
═══════════════════════════════════════════
🔐 TRIPZ FORTRESS - معلومات اللابتوب الرئيسي
═══════════════════════════════════════════
تاريخ الإعداد: $(date)
النظام: $(lsb_release -d | cut -f2)
المستخدم: $(whoami)
🔑 المفاتيح المتوفرة:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. fortress_master (المفتاح الرئيسي)
- النوع: Ed25519
- Fingerprint: $(ssh-keygen -lf fortress_master.pub | awk '{print $2}')
2. backup_key (مفتاح احتياطي)
- النوع: Ed25519
- Fingerprint: $(ssh-keygen -lf backup_key.pub | awk '{print $2}')
📦 النسخ الاحتياطية:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ KeePassXC: ~/keepassxc.kdbx
✅ USB مشفر: تحقق من توفره
✅ Cloud: (اختياري)
🛠️ الأدوات المثبتة:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ SSH Client
✅ WireGuard
✅ Knock Client
✅ Telegram CLI
✅ Tmux
✅ UFW Firewall
✅ Fail2Ban
📱 التنبيهات:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Telegram Bot: @tripz_fortress_bot
Chat ID: [محدّث في السكريبت]
⚠️ ملاحظات أمنية:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. القرص الصلب مشفر بالكامل (LUKS)
2. المفاتيح الخاصة لا تغادر هذا الجهاز
3. نسخ احتياطية دورية على USB مشفر
4. لا ترسل المفاتيح الخاصة عبر الإنترنت!
5. استخدم VPN عند الاتصال من شبكات عامة
📞 الدعم:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
https://tripz-egypt.com
[email protected]
═══════════════════════════════════════════
EOF
# عرض الملف
cat ~/FORTRESS_KEYS/MASTER_INFO.txt
```
---
## ✅ نقاط التحقق النهائية
```bash
# سكريبت فحص شامل
cat > ~/FORTRESS_KEYS/check_laptop.sh <<'EOF'
#!/bin/bash
echo "🔍 فحص جاهزية اللابتوب..."
echo "══════════════════════════════════"
# 1. المفاتيح
echo "🔑 المفاتيح:"
if [ -f ~/FORTRESS_KEYS/fortress_master ]; then
echo " ✅ fortress_master موجود"
else
echo " ❌ fortress_master مفقود!"
fi
if [ -f ~/FORTRESS_KEYS/backup_key ]; then
echo " ✅ backup_key موجود"
else
echo " ❌ backup_key مفقود!"
fi
# 2. الصلاحيات
echo ""
echo "🔒 الصلاحيات:"
PERMS=$(stat -c %a ~/FORTRESS_KEYS/fortress_master)
if [ "$PERMS" == "600" ]; then
echo " ✅ صلاحيات المفاتيح صحيحة"
else
echo " ⚠️ صلاحيات المفاتيح: $PERMS (يجب 600)"
fi
# 3. الأدوات
echo ""
echo "🛠️ الأدوات:"
command -v ssh >/dev/null 2>&1 && echo " ✅ SSH Client" || echo " ❌ SSH Client"
command -v wg >/dev/null 2>&1 && echo " ✅ WireGuard" || echo " ❌ WireGuard"
command -v knock >/dev/null 2>&1 && echo " ✅ Knock" || echo " ❌ Knock"
command -v tmux >/dev/null 2>&1 && echo " ✅ Tmux" || echo " ❌ Tmux"
# 4. Firewall
echo ""
echo "🛡️ الحماية:"
sudo ufw status | grep -q "Status: active" && echo " ✅ UFW نشط" || echo " ⚠️ UFW غير نشط"
systemctl is-active --quiet fail2ban && echo " ✅ Fail2Ban نشط" || echo " ⚠️ Fail2Ban غير نشط"
# 5. النسخ الاحتياطية
echo ""
echo "💾 النسخ الاحتياطية:"
if [ -f ~/keepassxc.kdbx ]; then
echo " ✅ KeePassXC Database موجود"
else
echo " ⚠️ KeePassXC Database غير موجود"
fi
echo ""
echo "══════════════════════════════════"
echo "✅ الفحص مكتمل!"
EOF
chmod +x ~/FORTRESS_KEYS/check_laptop.sh
# تشغيل الفحص
~/FORTRESS_KEYS/check_laptop.sh
```
---
## 🎯 الخطوة التالية
بعد إتمام هذه المرحلة بنجاح، انتقل إلى:
📄 **PHASE_2_SERVER_HARDENING.md**
---
## 🆘 استكشاف الأخطاء
### مشكلة: صلاحيات المفاتيح خاطئة
```bash
chmod 600 ~/FORTRESS_KEYS/fortress_master
chmod 600 ~/FORTRESS_KEYS/backup_key
```
### مشكلة: SSH لا يقبل المفتاح
```bash
# تأكد من fingerprint
ssh-keygen -lf ~/FORTRESS_KEYS/fortress_master.pub
# تأكد من تنسيق المفتاح
head -1 ~/FORTRESS_KEYS/fortress_master.pub
# يجب أن يبدأ بـ: ssh-ed25519 AAAA...
```
### مشكلة: Telegram Bot لا يعمل
```bash
# اختبار يدوي
curl "https://api.telegram.org/bot<TOKEN>/getMe"
# يجب أن ترى معلومات البوت
```
---
## 📚 مراجع مفيدة
- SSH Key Management: https://www.ssh.com/academy/ssh/keygen
- KeePassXC Guide: https://keepassxc.org/docs/
- Ubuntu Security: https://ubuntu.com/security
- WireGuard Setup: https://www.wireguard.com/quickstart/
═══════════════════════════════════════════
✅ المرحلة 1 مكتملة - جاهز للمرحلة 2!
═══════════════════════════════════════════

1051
PHASE_2_SERVER_HARDENING.md Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,822 @@
# 🚀 المرحلة 3: نشر التطبيقات (Application Deployment)
## 📋 نظرة عامة
هذه المرحلة تركّز على نشر التطبيقات بأمان على السيرفر المحمي مع CloudPanel.
---
## 🎯 الأهداف
- نشر تطبيقات PHP/Python بأمان
- تكوين قواعد البيانات
- إعداد SSL/TLS
- اختبار وفحص التطبيقات
- مراقبة الأداء
---
## ⚙️ الخطوة 1: التحقق من CloudPanel
### 1.1 فحص التثبيت
```bash
# الاتصال بالسيرفر (باستخدام knock)
~/FORTRESS_KEYS/knock.sh 194.163.xxx.xxx
# بعد الدخول:
# التحقق من CloudPanel
if [ -d "/usr/local/cloudpanel" ]; then
echo "✅ CloudPanel مثبت"
cat /usr/local/cloudpanel/version
else
echo "❌ CloudPanel غير مثبت - سيتم التثبيت"
fi
```
### 1.2 تثبيت CloudPanel (إن لم يكن مثبتاً)
```bash
# تثبيت CloudPanel
curl -sS https://installer.cloudpanel.io/ce/v2/install.sh -o install.sh
sudo bash install.sh
# الانتظار حتى يكتمل التثبيت (5-10 دقائق)
# بعد التثبيت:
# الوصول: https://SERVER_IP:8443
# المستخدم: admin
# كلمة المرور: ستُعرض بعد التثبيت
```
### 1.3 تأمين CloudPanel
```bash
# 1. فتح منفذ CloudPanel في UFW
sudo ufw allow 8443/tcp comment 'CloudPanel Admin'
# 2. إنشاء سكريبت للوصول الآمن
sudo tee /usr/local/bin/fortress/cloudpanel_access.sh > /dev/null <<'EOF'
#!/bin/bash
# 🔐 CloudPanel Safe Access
# فتح المنفذ مؤقتاً (30 دقيقة)
sudo ufw allow from $SSH_CLIENT to any port 8443 proto tcp
echo "✅ CloudPanel متاح لـ 30 دقيقة"
echo "🌐 https://$(curl -s ifconfig.me):8443"
# إغلاق تلقائي بعد 30 دقيقة
(sleep 1800 && sudo ufw delete allow from $SSH_CLIENT to any port 8443 proto tcp) &
EOF
sudo chmod +x /usr/local/bin/fortress/cloudpanel_access.sh
```
---
## 📦 الخطوة 2: إعداد قواعد البيانات
### 2.1 تأمين MySQL/MariaDB
```bash
# تشغيل معالج الأمان
sudo mysql_secure_installation
# الإجابات الموصى بها:
# Enter current password: [اضغط Enter]
# Set root password? [Y]
# Remove anonymous users? [Y]
# Disallow root login remotely? [Y]
# Remove test database? [Y]
# Reload privilege tables? [Y]
```
### 2.2 إنشاء مستخدم قاعدة بيانات للتطبيق
```bash
# الدخول إلى MySQL
sudo mysql
# إنشاء قاعدة بيانات ومستخدم
CREATE DATABASE app_production CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD_HERE';
GRANT ALL PRIVILEGES ON app_production.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
# التحقق
SHOW DATABASES;
SELECT User, Host FROM mysql.user;
EXIT;
```
### 2.3 نسخ احتياطي تلقائي لقواعد البيانات
```bash
sudo tee /usr/local/bin/fortress/db_backup.sh > /dev/null <<'DBBACKUPEOF'
#!/bin/bash
# 💾 Database Backup Script
BACKUP_DIR="/backup/databases"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
DB_NAME="app_production"
DB_USER="appuser"
DB_PASS="STRONG_PASSWORD_HERE"
mkdir -p "$BACKUP_DIR"
# نسخة احتياطية مضغوطة
mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "${BACKUP_DIR}/${DB_NAME}_${TIMESTAMP}.sql.gz"
# تشفير النسخة
openssl enc -aes-256-cbc -salt -pbkdf2 \
-in "${BACKUP_DIR}/${DB_NAME}_${TIMESTAMP}.sql.gz" \
-out "${BACKUP_DIR}/${DB_NAME}_${TIMESTAMP}.sql.gz.enc" \
-k "TRIPZ_DB_$(hostname)_$(date +%Y)"
# حذف غير المشفر
rm -f "${BACKUP_DIR}/${DB_NAME}_${TIMESTAMP}.sql.gz"
# الاحتفاظ بآخر 14 يوم
find "$BACKUP_DIR" -name "*.sql.gz.enc" -mtime +14 -delete
echo "✅ نسخة احتياطية: ${DB_NAME}_${TIMESTAMP}.sql.gz.enc"
DBBACKUPEOF
sudo chmod +x /usr/local/bin/fortress/db_backup.sh
# جدولة (يومياً 3 صباحاً)
(sudo crontab -l 2>/dev/null; echo "0 3 * * * /usr/local/bin/fortress/db_backup.sh >> /var/log/fortress/db_backup.log 2>&1") | sudo crontab -
```
---
## 🌐 الخطوة 3: نشر تطبيق PHP
### 3.1 إنشاء موقع في CloudPanel
```
📝 من واجهة CloudPanel:
1. اذهب إلى: Sites → Add Site
2. املأ البيانات:
- Site Name: myapp.com
- Site User: myapp
- Document Root: /home/myapp/htdocs/myapp.com
- PHP Version: 8.2 (الأحدث)
- Enable Varnish Cache: نعم
3. اضغط: Create Site
```
### 3.2 تكوين PHP (من SSH)
```bash
# تحرير php.ini للموقع
SITE_USER="myapp"
PHP_VERSION="8.2"
sudo tee /home/$SITE_USER/.php/cli/php.ini > /dev/null <<'PHPEOF'
# ══════════════════════════════════════
# TRIPZ FORTRESS - PHP Security Config
# ══════════════════════════════════════
# الأمان
expose_php = Off
display_errors = Off
log_errors = On
error_log = /home/myapp/logs/php_error.log
# الحدود
memory_limit = 256M
upload_max_filesize = 10M
post_max_size = 10M
max_execution_time = 30
max_input_time = 60
# الجلسات
session.cookie_httponly = 1
session.cookie_secure = 1
session.use_strict_mode = 1
# الملفات المعطلة (الخطيرة)
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
PHPEOF
# إعادة تشغيل PHP-FPM
sudo systemctl restart php${PHP_VERSION}-fpm
```
### 3.3 رفع الكود
```bash
# من اللابتوب - رفع الملفات عبر rsync
cd /path/to/your/app
rsync -avz --progress \
-e "ssh -i ~/FORTRESS_KEYS/fortress_master -p 2200" \
./ tripzadmin@194.163.xxx.xxx:/tmp/app_upload/
# على السيرفر - نقل الملفات
sudo mv /tmp/app_upload/* /home/myapp/htdocs/myapp.com/
sudo chown -R myapp:myapp /home/myapp/htdocs/myapp.com/
sudo chmod -R 755 /home/myapp/htdocs/myapp.com/
# الصلاحيات الخاصة (للمجلدات القابلة للكتابة)
sudo chmod -R 775 /home/myapp/htdocs/myapp.com/storage
sudo chmod -R 775 /home/myapp/htdocs/myapp.com/cache
```
### 3.4 تكوين قاعدة البيانات للتطبيق
```bash
# تحرير ملف التكوين (.env للـ Laravel مثلاً)
sudo -u myapp nano /home/myapp/htdocs/myapp.com/.env
# المحتوى:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=app_production
DB_USERNAME=appuser
DB_PASSWORD=STRONG_PASSWORD_HERE
# حماية الملف
sudo chmod 600 /home/myapp/htdocs/myapp.com/.env
```
---
## 🐍 الخطوة 4: نشر تطبيق Python (Flask/Django)
### 4.1 تثبيت Python والأدوات
```bash
# تثبيت Python 3.11
sudo apt install -y python3.11 python3.11-venv python3-pip
# إنشاء مستخدم للتطبيق
sudo useradd -m -s /bin/bash pyapp
```
### 4.2 إنشاء بيئة افتراضية
```bash
# إنشاء المجلدات
sudo mkdir -p /home/pyapp/app
sudo mkdir -p /home/pyapp/logs
# إنشاء venv
sudo -u pyapp python3.11 -m venv /home/pyapp/venv
# تفعيل وتثبيت المتطلبات
sudo -u pyapp /home/pyapp/venv/bin/pip install --upgrade pip
sudo -u pyapp /home/pyapp/venv/bin/pip install flask gunicorn
# أو من requirements.txt:
# sudo -u pyapp /home/pyapp/venv/bin/pip install -r /home/pyapp/app/requirements.txt
```
### 4.3 تكوين Gunicorn (WSGI Server)
```bash
sudo tee /etc/systemd/system/pyapp.service > /dev/null <<'GUNICORNEOF'
[Unit]
Description=Python App - Gunicorn
After=network.target
[Service]
User=pyapp
Group=pyapp
WorkingDirectory=/home/pyapp/app
Environment="PATH=/home/pyapp/venv/bin"
ExecStart=/home/pyapp/venv/bin/gunicorn \
--workers 3 \
--bind unix:/home/pyapp/app.sock \
--access-logfile /home/pyapp/logs/access.log \
--error-logfile /home/pyapp/logs/error.log \
wsgi:app
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
GUNICORNEOF
# تفعيل وبدء
sudo systemctl daemon-reload
sudo systemctl enable pyapp
sudo systemctl start pyapp
# التحقق
sudo systemctl status pyapp
```
### 4.4 تكوين Nginx للتطبيق Python
```bash
sudo tee /etc/nginx/sites-available/pyapp.conf > /dev/null <<'NGINXEOF'
server {
listen 80;
server_name pyapp.example.com;
# التحويل إلى HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name pyapp.example.com;
# SSL Certificates (سيتم إضافتها لاحقاً)
ssl_certificate /etc/letsencrypt/live/pyapp.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/pyapp.example.com/privkey.pem;
# الأمان
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
# السجلات
access_log /home/pyapp/logs/nginx_access.log;
error_log /home/pyapp/logs/nginx_error.log;
# Proxy إلى Gunicorn
location / {
proxy_pass http://unix:/home/pyapp/app.sock;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# الملفات الثابتة
location /static {
alias /home/pyapp/app/static;
expires 30d;
add_header Cache-Control "public, immutable";
}
}
NGINXEOF
# تفعيل الموقع
sudo ln -s /etc/nginx/sites-available/pyapp.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```
---
## 🔒 الخطوة 5: إعداد SSL/TLS (Let's Encrypt)
### 5.1 تثبيت Certbot
```bash
sudo apt install -y certbot python3-certbot-nginx
```
### 5.2 الحصول على شهادة SSL
```bash
# لموقع PHP (عبر CloudPanel)
# استخدم الواجهة: SSL/TLS → Let's Encrypt
# لموقع Python (يدوياً)
sudo certbot --nginx -d pyapp.example.com
# الإجابات:
# Email: your-email@example.com
# Agree to TOS: Yes
# Redirect HTTP to HTTPS: Yes
```
### 5.3 التجديد التلقائي
```bash
# اختبار التجديد
sudo certbot renew --dry-run
# التجديد مُجدول تلقائياً في systemd timer
sudo systemctl status certbot.timer
```
---
## 🔍 الخطوة 6: الفحص والاختبار
### 6.1 سكريبت فحص التطبيق
```bash
sudo tee /usr/local/bin/fortress/app_check.sh > /dev/null <<'APPCHECKEOF'
#!/bin/bash
# 🔍 Application Health Check
echo "🔍 TRIPZ FORTRESS - Application Check"
echo "════════════════════════════════════════"
# 1. فحص المواقع
echo "🌐 المواقع:"
for site in /home/*/htdocs/*; do
if [ -d "$site" ]; then
SITE_NAME=$(basename $site)
SITE_USER=$(basename $(dirname $(dirname $site)))
echo " 📁 $SITE_NAME (المستخدم: $SITE_USER)"
# فحص الصلاحيات
PERMS=$(stat -c %a $site)
if [ "$PERMS" == "755" ]; then
echo " ✅ الصلاحيات: $PERMS"
else
echo " ⚠️ الصلاحيات: $PERMS (مقترح: 755)"
fi
fi
done
# 2. فحص قواعد البيانات
echo ""
echo "💾 قواعد البيانات:"
sudo mysql -e "SHOW DATABASES;" | grep -v -E "Database|information_schema|performance_schema|mysql|sys" | while read db; do
SIZE=$(sudo mysql -e "SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)' FROM information_schema.TABLES WHERE table_schema='$db';" | tail -1)
echo " 📊 $db: ${SIZE} MB"
done
# 3. فحص Nginx
echo ""
echo "🌍 Nginx:"
if nginx -t 2>&1 | grep -q "successful"; then
echo " ✅ التكوين صحيح"
else
echo " ❌ أخطاء في التكوين!"
fi
# 4. فحص PHP-FPM
echo ""
echo "🐘 PHP-FPM:"
for version in 8.0 8.1 8.2 8.3; do
if systemctl is-active --quiet php${version}-fpm 2>/dev/null; then
echo " ✅ PHP $version نشط"
fi
done
# 5. فحص Python Apps
echo ""
echo "🐍 Python Apps:"
if systemctl is-active --quiet pyapp 2>/dev/null; then
echo " ✅ pyapp نشط"
WORKERS=$(ps aux | grep gunicorn | grep -v grep | wc -l)
echo " Workers: $WORKERS"
else
echo " ⚠️ pyapp غير نشط"
fi
# 6. فحص SSL
echo ""
echo "🔒 SSL Certificates:"
sudo certbot certificates 2>/dev/null | grep "Certificate Name" | while read line; do
DOMAIN=$(echo $line | awk '{print $3}')
EXPIRY=$(sudo certbot certificates 2>/dev/null | grep -A 10 "Certificate Name: $DOMAIN" | grep "Expiry Date" | awk '{print $3, $4}')
echo " 🔐 $DOMAIN → ينتهي: $EXPIRY"
done
echo ""
echo "════════════════════════════════════════"
echo "✅ الفحص مكتمل"
APPCHECKEOF
sudo chmod +x /usr/local/bin/fortress/app_check.sh
# تشغيل الفحص
sudo /usr/local/bin/fortress/app_check.sh
```
### 6.2 اختبار الأداء
```bash
# تثبيت أدوات الاختبار
sudo apt install -y apache2-utils
# اختبار PHP site
ab -n 1000 -c 10 https://myapp.com/
# اختبار Python app
ab -n 1000 -c 10 https://pyapp.example.com/
```
---
## 🛡️ الخطوة 7: حماية التطبيقات
### 7.1 ModSecurity (WAF)
```bash
# تثبيت ModSecurity
sudo apt install -y libmodsecurity3 modsecurity-crs
# تكوين Nginx مع ModSecurity
sudo tee /etc/nginx/modsec/main.conf > /dev/null <<'MODSECEOF'
SecRuleEngine On
SecRequestBodyAccess On
SecResponseBodyAccess On
SecAuditEngine RelevantOnly
SecAuditLog /var/log/modsec_audit.log
# OWASP Core Rule Set
Include /etc/nginx/modsec/crs-setup.conf
Include /etc/nginx/modsec/rules/*.conf
MODSECEOF
# تفعيل في Nginx
# (يتطلب إعادة بناء Nginx مع ModSecurity module)
```
### 7.2 Rate Limiting في Nginx
```bash
# إضافة Rate Limiting للحماية من DDoS
sudo tee -a /etc/nginx/nginx.conf > /dev/null <<'RATELIMITEOF'
# ══════════════════════════════════════
# TRIPZ FORTRESS - Rate Limiting
# ══════════════════════════════════════
# تحديد المعدل: 10 طلبات/ثانية
limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s;
# تحديد الاتصالات المتزامنة
limit_conn_zone $binary_remote_addr zone=addr:10m;
RATELIMITEOF
# تطبيق على المواقع
# في ملفات sites-enabled، أضف:
# limit_req zone=general burst=20 nodelay;
# limit_conn addr 10;
```
### 7.3 Fail2Ban للمواقع
```bash
# فلتر Nginx
sudo tee /etc/fail2ban/filter.d/nginx-limit-req.conf > /dev/null <<'F2BEOF'
[Definition]
failregex = limiting requests, excess:.* by zone.*client: <HOST>
ignoreregex =
EOF
# Jail
sudo tee -a /etc/fail2ban/jail.local > /dev/null <<'EOF'
[nginx-limit-req]
enabled = true
filter = nginx-limit-req
port = http,https
logpath = /var/log/nginx/*error.log
maxretry = 5
bantime = 3600
findtime = 600
EOF
sudo systemctl restart fail2ban
```
---
## 📊 الخطوة 8: المراقبة والتنبيهات
### 8.1 تثبيت Netdata (اختياري)
```bash
# Netdata للمراقبة في الوقت الفعلي
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
# الوصول: http://SERVER_IP:19999
# ⚠️ يجب تأمينه بـ password أو VPN!
# تأمين Netdata
sudo tee -a /etc/netdata/netdata.conf > /dev/null <<'EOF'
[web]
bind to = localhost
EOF
sudo systemctl restart netdata
# الآن يمكن الوصول فقط عبر SSH tunnel:
# ssh -L 19999:localhost:19999 -i ~/FORTRESS_KEYS/fortress_master -p 2200 tripzadmin@SERVER_IP
```
### 8.2 تنبيهات الأداء
```bash
sudo tee /usr/local/bin/fortress/performance_alert.sh > /dev/null <<'PERFEOF'
#!/bin/bash
# 📊 Performance Monitoring & Alerts
# حدود التنبيه
CPU_THRESHOLD=80
MEMORY_THRESHOLD=85
DISK_THRESHOLD=90
# الحالة الحالية
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
MEMORY_USAGE=$(free | grep Mem | awk '{print ($3/$2) * 100.0}' | cut -d'.' -f1)
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | cut -d'%' -f1)
# التحقق والتنبيه
if (( $(echo "$CPU_USAGE > $CPU_THRESHOLD" | bc -l) )); then
/usr/local/bin/fortress/telegram_notify.sh "⚠️ CPU مرتفع: ${CPU_USAGE}%"
fi
if [ "$MEMORY_USAGE" -gt "$MEMORY_THRESHOLD" ]; then
/usr/local/bin/fortress/telegram_notify.sh "⚠️ الذاكرة مرتفعة: ${MEMORY_USAGE}%"
fi
if [ "$DISK_USAGE" -gt "$DISK_THRESHOLD" ]; then
/usr/local/bin/fortress/telegram_notify.sh "⚠️ القرص ممتلئ: ${DISK_USAGE}%"
fi
PERFEOF
sudo chmod +x /usr/local/bin/fortress/performance_alert.sh
# جدولة الفحص (كل 30 دقيقة)
(sudo crontab -l 2>/dev/null; echo "*/30 * * * * /usr/local/bin/fortress/performance_alert.sh") | sudo crontab -
```
---
## 🧪 الخطوة 9: الاختبار النهائي
### 9.1 قائمة الفحص النهائية
```bash
sudo tee /usr/local/bin/fortress/final_test.sh > /dev/null <<'FINALTESTEOF'
#!/bin/bash
# ✅ Final Deployment Test
echo "🧪 TRIPZ FORTRESS - Final Deployment Test"
echo "════════════════════════════════════════════════"
# 1. الاتصال
echo "1⃣ فحص الاتصال:"
ping -c 2 8.8.8.8 >/dev/null && echo " ✅ Internet" || echo " ❌ Internet"
curl -s https://google.com >/dev/null && echo " ✅ HTTPS" || echo " ❌ HTTPS"
# 2. الخدمات
echo ""
echo "2⃣ الخدمات الأساسية:"
SERVICES=("nginx" "mysql" "php8.2-fpm" "sshd" "ufw" "fail2ban")
for svc in "${SERVICES[@]}"; do
systemctl is-active --quiet $svc && echo " ✅ $svc" || echo " ❌ $svc"
done
# 3. المواقع
echo ""
echo "3⃣ فحص المواقع:"
for site in myapp.com pyapp.example.com; do
STATUS=$(curl -s -o /dev/null -w "%{http_code}" https://$site 2>/dev/null || echo "000")
if [ "$STATUS" == "200" ]; then
echo " ✅ $site → $STATUS"
else
echo " ⚠️ $site → $STATUS"
fi
done
# 4. SSL
echo ""
echo "4⃣ SSL Certificates:"
sudo certbot certificates 2>/dev/null | grep -c "Certificate Name" && echo " ✅ شهادات نشطة" || echo " ⚠️ لا توجد شهادات"
# 5. قواعد البيانات
echo ""
echo "5⃣ قواعد البيانات:"
mysql -e "SHOW DATABASES;" 2>/dev/null | grep -c "app_production" && echo " ✅ app_production" || echo " ❌ app_production"
# 6. الأمان
echo ""
echo "6⃣ الطبقات الأمنية:"
systemctl is-active --quiet knockd && echo " ✅ Port Knocking" || echo " ❌ Port Knocking"
systemctl is-active --quiet endlessh && echo " ✅ Honeypot" || echo " ❌ Honeypot"
sudo fail2ban-client status sshd &>/dev/null && echo " ✅ Fail2Ban" || echo " ❌ Fail2Ban"
# 7. النسخ الاحتياطية
echo ""
echo "7⃣ النسخ الاحتياطية:"
[ -d "/backup/fortress" ] && ls /backup/fortress/*.enc &>/dev/null && echo " ✅ نسخ السيرفر" || echo " ⚠️ نسخ السيرفر"
[ -d "/backup/databases" ] && ls /backup/databases/*.enc &>/dev/null && echo " ✅ نسخ قواعد البيانات" || echo " ⚠️ نسخ قواعد البيانات"
echo ""
echo "════════════════════════════════════════════════"
echo "✅ الاختبار مكتمل!"
FINALTESTEOF
sudo chmod +x /usr/local/bin/fortress/final_test.sh
# تشغيل الاختبار
sudo /usr/local/bin/fortress/final_test.sh
```
---
## 📚 الخطوة 10: التوثيق النهائي
### 10.1 ملف معلومات التطبيقات
```bash
sudo tee /root/APPLICATIONS_INFO.txt > /dev/null <<'EOF'
════════════════════════════════════════════════════════
🚀 TRIPZ FORTRESS - معلومات التطبيقات
════════════════════════════════════════════════════════
📝 المواقع النشطة:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. myapp.com
- النوع: PHP 8.2
- الموقع: /home/myapp/htdocs/myapp.com
- قاعدة البيانات: app_production
- SSL: Let's Encrypt ✅
2. pyapp.example.com
- النوع: Python (Flask + Gunicorn)
- الموقع: /home/pyapp/app
- Socket: /home/pyapp/app.sock
- SSL: Let's Encrypt ✅
💾 قواعد البيانات:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- app_production (myapp.com)
- النسخ الاحتياطي: يومياً 3 صباحاً
- الموقع: /backup/databases/
🔧 الصيانة:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
• فحص التطبيقات: sudo /usr/local/bin/fortress/app_check.sh
• فحص الأداء: sudo /usr/local/bin/fortress/performance_alert.sh
• الاختبار الشامل: sudo /usr/local/bin/fortress/final_test.sh
• نسخة احتياطية يدوية: sudo /usr/local/bin/fortress/db_backup.sh
🔐 CloudPanel:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
الوصول: https://SERVER_IP:8443
المستخدم: admin
للأمان: استخدم /usr/local/bin/fortress/cloudpanel_access.sh
📊 المراقبة:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Netdata: http://localhost:19999 (عبر SSH tunnel فقط)
السجلات: /var/log/fortress/, /var/log/nginx/
⚠️ ملاحظات:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. تحديث SSL تلقائياً (Certbot)
2. Rate Limiting مفعّل (10 req/s)
3. ModSecurity WAF (إن فُعّل)
4. تنبيهات الأداء كل 30 دقيقة
════════════════════════════════════════════════════════
EOF
sudo cat /root/APPLICATIONS_INFO.txt
```
---
## ✅ النتيجة النهائية
الآن السيرفر:
- ✅ محمي بـ 9 طبقات أمنية
- ✅ التطبيقات منشورة ومحمية
- ✅ قواعد البيانات آمنة ومنسوخة
- ✅ SSL/TLS مفعّل وتلقائي
- ✅ مراقبة وتنبيهات نشطة
- ✅ نسخ احتياطية يومية
---
## 🆘 استكشاف الأخطاء
### مشكلة: الموقع لا يعمل (502 Bad Gateway)
```bash
# 1. فحص PHP-FPM
sudo systemctl status php8.2-fpm
sudo tail -f /var/log/php8.2-fpm.log
# 2. فحص Nginx
sudo nginx -t
sudo systemctl status nginx
# 3. فحص الصلاحيات
ls -la /home/myapp/htdocs/myapp.com/
```
### مشكلة: قاعدة البيانات لا تتصل
```bash
# 1. فحص MySQL
sudo systemctl status mysql
# 2. اختبار الاتصال
mysql -u appuser -p app_production
# 3. فحص المستخدمين
sudo mysql -e "SELECT User, Host FROM mysql.user;"
```
### مشكلة: SSL لا يعمل
```bash
# 1. فحص الشهادات
sudo certbot certificates
# 2. إعادة المحاولة
sudo certbot --nginx -d myapp.com --force-renewal
# 3. فحص Nginx
sudo nginx -t
```
---
## 📞 الدعم النهائي
إذا واجهت أي مشاكل:
1. راجع السجلات: `sudo journalctl -xe`
2. فحص الأمان: `sudo /usr/local/bin/fortress/health_check.sh`
3. فحص التطبيقات: `sudo /usr/local/bin/fortress/app_check.sh`
4. التواصل: https://tripz-egypt.com
═══════════════════════════════════════════
🎉 جميع المراحل مكتملة!
السيرفر محمي والتطبيقات جاهزة!
═══════════════════════════════════════════

338
QUICK_START_GUIDE.md Normal file
View File

@@ -0,0 +1,338 @@
# 🚀 دليل البدء السريع - TRIPZ FORTRESS
## 📋 نظرة عامة سريعة
هذا الدليل يوضح كيفية استخدام **TRIPZ FORTRESS v8.2** بشكل سريع وآمن.
---
## ⚡ البدء السريع (3 خطوات فقط!)
### الخطوة 1: تحضير اللابتوب
```bash
# على اللابتوب (Ubuntu):
cd ~
mkdir FORTRESS_KEYS
cd FORTRESS_KEYS
# توليد مفتاح SSH
ssh-keygen -t ed25519 -C "fortress-master-$(date +%Y%m%d)" -f fortress_master -N ""
# عرض المفتاح العام (ستحتاجه للسيرفر)
cat fortress_master.pub
```
### الخطوة 2: تحضير السكريبت على السيرفر
```bash
# الاتصال بالسيرفر (كـ root)
ssh root@YOUR_SERVER_IP
# تحميل السكريبت
wget https://your-domain.com/tripz_fortress_v8.2_generator.sh
# أو استخدم scp:
# scp tripz_fortress_v8.2_generator.sh root@YOUR_SERVER_IP:/root/
# منح الصلاحيات
chmod +x tripz_fortress_v8.2_generator.sh
```
### الخطوة 3: تشغيل التثبيت
```bash
# على السيرفر:
# عدّل المتغيرات في رأس السكريبت أو مررها كـ environment variables:
export SERVER_IP="194.163.xxx.xxx"
export ADMIN_USER="tripzadmin"
export SSH_PORT="2200"
export SSH_PUBLIC_KEY="ssh-ed25519 AAAA... fortress-master-20250205"
# (اختياري) تفعيل/تعطيل الميزات:
export ENABLE_HONEYPOT="true"
export ENABLE_FAKE_SERVICES="true"
export ENABLE_PORT_KNOCKING="true"
export ENABLE_FAIL2BAN="true"
export ENABLE_AUTO_BACKUP="true"
# (اختياري) تنبيهات Telegram:
export TELEGRAM_BOT_TOKEN="YOUR_BOT_TOKEN"
export TELEGRAM_CHAT_ID="YOUR_CHAT_ID"
# تشغيل التثبيت
sudo ./tripz_fortress_v8.2_generator.sh
```
---
## ✅ بعد التثبيت
### 1. اختبار الاتصال (قبل قطع الجلسة الحالية!)
```bash
# من اللابتوب - في terminal جديد:
# إذا كان Port Knocking مفعّل:
knock YOUR_SERVER_IP 7531 8642 9753 # استخدم أرقامك الفعلية
sleep 5
# الاتصال
ssh -i ~/FORTRESS_KEYS/fortress_master -p 2200 tripzadmin@YOUR_SERVER_IP
# يجب أن تدخل بنجاح بدون كلمة مرور!
```
### 2. فحص الحالة
```bash
# على السيرفر:
sudo ufw status verbose
sudo fail2ban-client status
sudo systemctl status sshd knockd fail2ban
# مراجعة ملف المعلومات
cat /root/FORTRESS_INFO.txt
```
### 3. إنشاء سكريبت الاتصال على اللابتوب
```bash
# على اللابتوب:
cat > ~/FORTRESS_KEYS/connect.sh <<'EOF'
#!/bin/bash
# 🔐 سكريبت الاتصال بالسيرفر
SERVER_IP="194.163.xxx.xxx"
SSH_PORT="2200"
ADMIN_USER="tripzadmin"
# Port Knocking (إن وُجد)
KNOCK_SEQUENCE="7531 8642 9753" # حدّث بأرقامك
echo "🚪 Knocking..."
knock $SERVER_IP $KNOCK_SEQUENCE
echo "⏳ انتظر 5 ثواني..."
sleep 5
echo "🔐 الاتصال..."
ssh -i ~/FORTRESS_KEYS/fortress_master -p $SSH_PORT $ADMIN_USER@$SERVER_IP
EOF
chmod +x ~/FORTRESS_KEYS/connect.sh
# الآن للاتصال:
~/FORTRESS_KEYS/connect.sh
```
---
## 📊 الأوامر المفيدة
### على السيرفر:
```bash
# فحص الحماية
sudo /usr/local/bin/fortress/health_check.sh # (إن وُجد)
sudo ufw status verbose
sudo fail2ban-client status sshd
# السجلات
sudo tail -f /var/log/fortress/install_*.log
sudo tail -f /var/log/knockd.log
sudo journalctl -u fail2ban -f
# النسخ الاحتياطي اليدوي
sudo /usr/local/bin/fortress/backup.sh
# فك تشفير نسخة احتياطية
# كلمة المرور: TRIPZ_<hostname>_<year>
openssl enc -d -aes-256-cbc -pbkdf2 \
-in /backup/fortress/fortress_TIMESTAMP.tar.gz.enc \
-out fortress_backup.tar.gz \
-k "TRIPZ_$(hostname)_2025"
```
### على اللابتوب:
```bash
# فحص المفاتيح
ls -la ~/FORTRESS_KEYS/
ssh-keygen -lf ~/FORTRESS_KEYS/fortress_master.pub
# نسخ ملفات إلى السيرفر
rsync -avz --progress \
-e "ssh -i ~/FORTRESS_KEYS/fortress_master -p 2200" \
/local/path/ tripzadmin@SERVER_IP:/remote/path/
# تحميل ملفات من السيرفر
rsync -avz --progress \
-e "ssh -i ~/FORTRESS_KEYS/fortress_master -p 2200" \
tripzadmin@SERVER_IP:/remote/path/ /local/path/
```
---
## 🔧 التخصيص
### تغيير منفذ SSH
```bash
# على السيرفر:
sudo nano /etc/ssh/sshd_config
# عدّل: Port 2200 → Port 3300
sudo systemctl reload sshd
# حدّث UFW (إذا لم يكن Port Knocking مفعّل)
sudo ufw delete allow 2200/tcp
sudo ufw allow 3300/tcp
```
### إضافة مفتاح SSH جديد
```bash
# على اللابتوب - توليد مفتاح جديد:
ssh-keygen -t ed25519 -C "backup-key" -f ~/FORTRESS_KEYS/backup_key
# على السيرفر - إضافة المفتاح:
echo "ssh-ed25519 AAAA... backup-key" | \
sudo tee -a /home/tripzadmin/.ssh/authorized_keys
```
### تعطيل Port Knocking مؤقتاً
```bash
# على السيرفر:
sudo systemctl stop knockd
# فتح SSH مباشرة
sudo ufw allow 2200/tcp
# لإعادة التفعيل:
sudo ufw delete allow 2200/tcp
sudo systemctl start knockd
```
---
## 🆘 حل المشاكل الشائعة
### مشكلة 1: لا أستطيع الاتصال بعد Port Knocking
**الحل:**
```bash
# على السيرفر (من console مباشرة أو من CloudPanel):
sudo /root/emergency_restore.sh
# أو يدوياً:
sudo ufw allow 2200/tcp
sudo systemctl stop knockd
```
### مشكلة 2: SSH يرفض المفتاح
**الحل:**
```bash
# تحقق من الصلاحيات على السيرفر:
sudo ls -la /home/tripzadmin/.ssh/
# يجب أن تكون:
# drwx------ (700) للمجلد
# -rw------- (600) لملف authorized_keys
# إصلاح الصلاحيات:
sudo chmod 700 /home/tripzadmin/.ssh
sudo chmod 600 /home/tripzadmin/.ssh/authorized_keys
sudo chown -R tripzadmin:tripzadmin /home/tripzadmin/.ssh
```
### مشكلة 3: Fail2Ban حظر IP الخاص بي
**الحل:**
```bash
# على السيرفر:
sudo fail2ban-client status sshd
sudo fail2ban-client set sshd unbanip YOUR_IP
# إضافة IP إلى whitelist:
sudo nano /etc/fail2ban/jail.local
# أضف تحت [DEFAULT]:
# ignoreip = 127.0.0.1/8 ::1 YOUR_IP
sudo systemctl restart fail2ban
```
### مشكلة 4: نسيت تسلسل Port Knocking
**الحل:**
```bash
# على السيرفر (من console):
sudo cat /etc/knockd.conf | grep sequence
# أو من ملف المعلومات:
sudo cat /root/FORTRESS_INFO.txt | grep "Port Knocking"
```
---
## 📚 الملفات المهمة
### على السيرفر:
- `/root/FORTRESS_INFO.txt` - معلومات كاملة
- `/var/log/fortress/` - السجلات
- `/backup/fortress/` - النسخ الاحتياطية
- `/etc/ssh/sshd_config` - تكوين SSH
- `/etc/knockd.conf` - تكوين Port Knocking
- `/etc/fail2ban/jail.local` - تكوين Fail2Ban
### على اللابتوب:
- `~/FORTRESS_KEYS/fortress_master` - المفتاح الخاص (حماية!)
- `~/FORTRESS_KEYS/fortress_master.pub` - المفتاح العام
- `~/FORTRESS_KEYS/connect.sh` - سكريبت الاتصال
- `~/.ssh/config` - تكوين SSH
---
## 🔐 أفضل الممارسات
### الأمان:
1. ✅ لا تشارك المفتاح الخاص أبداً
2. ✅ احتفظ بنسخة احتياطية مشفرة من المفاتيح
3. ✅ استخدم كلمات مرور قوية (25+ حرف) للتشفير
4. ✅ راجع السجلات دورياً
5. ✅ حدّث النظام بانتظام: `sudo apt update && sudo apt upgrade`
### النسخ الاحتياطي:
1. ✅ المفاتيح على USB مشفر
2. ✅ KeePassXC لحفظ المعلومات الحساسة
3. ✅ نسخ احتياطية تلقائية يومية
4. ✅ اختبار استعادة النسخ الاحتياطية شهرياً
### المراقبة:
1. ✅ تفعيل تنبيهات Telegram
2. ✅ فحص Fail2Ban يومياً
3. ✅ مراجعة السجلات أسبوعياً
4. ✅ اختبار الاتصال بالمفتاح الاحتياطي شهرياً
---
## 📞 الدعم
إذا واجهت مشاكل:
1. راجع السجلات: `/var/log/fortress/`
2. اقرأ `/root/FORTRESS_INFO.txt`
3. تواصل: https://tripz-egypt.com
---
## 🎯 الخطوات التالية
بعد إتمام التثبيت:
1.**المرحلة 1**: تأمين اللابتوب (مكتملة)
2.**المرحلة 2**: تأمين السيرفر (مكتملة)
3. ⏭️ **المرحلة 3**: نشر التطبيقات (راجع PHASE_3)
---
═══════════════════════════════════════════
✅ دليل البدء السريع مكتمل!
═══════════════════════════════════════════

216
config_example.sh Normal file
View File

@@ -0,0 +1,216 @@
#!/bin/bash
# ════════════════════════════════════════════════════════════════
# 🔧 TRIPZ FORTRESS v8.2 - Configuration Template
# ════════════════════════════════════════════════════════════════
# استخدم هذا الملف لتكوين التثبيت بسهولة
# انسخه، عدّل القيم، ثم: source config_example.sh && sudo ./tripz_fortress_v8.2_generator.sh
# ════════════════════════════════════════════════════════════════
# ════════════════════════════════════════════════════════════════
# ⚙️ معلومات السيرفر (REQUIRED)
# ════════════════════════════════════════════════════════════════
# عنوان IP السيرفر (مثال: 194.163.45.123)
export SERVER_IP="YOUR_SERVER_IP_HERE"
# المفتاح العام SSH (من: cat ~/FORTRESS_KEYS/fortress_master.pub)
export SSH_PUBLIC_KEY="YOUR_SSH_PUBLIC_KEY_HERE"
# اسم المستخدم الإداري (افتراضي: tripzadmin)
export ADMIN_USER="tripzadmin"
# منفذ SSH الجديد (افتراضي: 2200)
export SSH_PORT="2200"
# ════════════════════════════════════════════════════════════════
# 🛡️ الميزات الأمنية (TOGGLES)
# ════════════════════════════════════════════════════════════════
# القيم المسموحة: true أو false
# Port Knocking (باب سري للوصول)
export ENABLE_PORT_KNOCKING="true"
# Endlessh Honeypot (فخ على Port 22)
export ENABLE_HONEYPOT="true"
# Fake Services (خدمات وهمية كفخاخ)
export ENABLE_FAKE_SERVICES="true"
# Fail2Ban (حظر تلقائي للمهاجمين)
export ENABLE_FAIL2BAN="true"
# WireGuard VPN (شبكة VPN خاصة)
export ENABLE_WIREGUARD="false"
# Auto Backup (نسخ احتياطية تلقائية يومية)
export ENABLE_AUTO_BACKUP="true"
# ════════════════════════════════════════════════════════════════
# 🚪 Port Knocking Configuration (اختياري)
# ════════════════════════════════════════════════════════════════
# إذا تركت فارغة، سيتم توليدها تلقائياً
# يجب أن تكون أرقام بين 7000-9000
export KNOCK_PORT_1="" # مثال: 7531
export KNOCK_PORT_2="" # مثال: 8642
export KNOCK_PORT_3="" # مثال: 9753
# ════════════════════════════════════════════════════════════════
# 🌐 WireGuard VPN Configuration (إذا فُعّل)
# ════════════════════════════════════════════════════════════════
# شبكة VPN (افتراضي: 10.8.0.0/24)
export VPN_NETWORK="10.8.0.0/24"
# عنوان السيرفر في الشبكة (افتراضي: 10.8.0.1)
export VPN_SERVER_IP="10.8.0.1"
# ════════════════════════════════════════════════════════════════
# 📱 Telegram Notifications (اختياري)
# ════════════════════════════════════════════════════════════════
# للحصول على تنبيهات فورية عبر Telegram
# توكن البوت (من @BotFather)
export TELEGRAM_BOT_TOKEN=""
# معرف المحادثة (من @userinfobot)
export TELEGRAM_CHAT_ID=""
# ════════════════════════════════════════════════════════════════
# 📝 ملاحظات مهمة:
# ════════════════════════════════════════════════════════════════
#
# 1. SERVER_IP و SSH_PUBLIC_KEY مطلوبان - يجب ملؤهما!
#
# 2. للحصول على SSH_PUBLIC_KEY:
# cat ~/FORTRESS_KEYS/fortress_master.pub
#
# 3. Port Knocking:
# - إذا تركت فارغاً، سيتم توليد أرقام عشوائية
# - احفظ الأرقام في مكان آمن!
#
# 4. Telegram:
# - اختياري ولكن موصى به بشدة للتنبيهات
# - خطوات الإعداد في PHASE_1_LAPTOP_SETUP.md
#
# 5. WireGuard VPN:
# - معطّل افتراضياً
# - فعّله فقط إذا كنت بحاجة لشبكة VPN
#
# 6. الميزات المعطّلة:
# - يمكنك تعطيل أي ميزة بتغيير القيمة إلى false
# - لكن لا ننصح بتعطيل Fail2Ban أو Auto Backup
#
# ════════════════════════════════════════════════════════════════
# ════════════════════════════════════════════════════════════════
# ✅ Validation (اختياري - لكن مفيد!)
# ════════════════════════════════════════════════════════════════
validate_config() {
echo "🔍 التحقق من التكوين..."
# التحقق من المتطلبات
if [ -z "$SERVER_IP" ] || [ "$SERVER_IP" == "YOUR_SERVER_IP_HERE" ]; then
echo "❌ خطأ: SERVER_IP غير مكوّن!"
return 1
fi
if [ -z "$SSH_PUBLIC_KEY" ] || [ "$SSH_PUBLIC_KEY" == "YOUR_SSH_PUBLIC_KEY_HERE" ]; then
echo "❌ خطأ: SSH_PUBLIC_KEY غير مكوّن!"
return 1
fi
# التحقق من تنسيق IP
if ! [[ $SERVER_IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
echo "❌ خطأ: SERVER_IP غير صالح!"
return 1
fi
# التحقق من تنسيق SSH Key
if ! echo "$SSH_PUBLIC_KEY" | grep -qE '^(ssh-rsa|ssh-ed25519|ecdsa-sha2)'; then
echo "❌ خطأ: SSH_PUBLIC_KEY غير صالح!"
return 1
fi
echo "✅ التكوين صالح!"
echo ""
echo "📊 ملخص التكوين:"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Server IP: $SERVER_IP"
echo "Admin User: $ADMIN_USER"
echo "SSH Port: $SSH_PORT"
echo ""
echo "الميزات المفعّلة:"
[ "$ENABLE_PORT_KNOCKING" == "true" ] && echo " ✅ Port Knocking"
[ "$ENABLE_HONEYPOT" == "true" ] && echo " ✅ Honeypot"
[ "$ENABLE_FAKE_SERVICES" == "true" ] && echo " ✅ Fake Services"
[ "$ENABLE_FAIL2BAN" == "true" ] && echo " ✅ Fail2Ban"
[ "$ENABLE_WIREGUARD" == "true" ] && echo " ✅ WireGuard VPN"
[ "$ENABLE_AUTO_BACKUP" == "true" ] && echo " ✅ Auto Backup"
[ -n "$TELEGRAM_BOT_TOKEN" ] && echo " ✅ Telegram Alerts"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "✅ جاهز للتثبيت!"
echo "🚀 للمتابعة: sudo ./tripz_fortress_v8.2_generator.sh"
echo ""
return 0
}
# تشغيل التحقق تلقائياً
validate_config
# ════════════════════════════════════════════════════════════════
# 💡 أمثلة للاستخدام:
# ════════════════════════════════════════════════════════════════
#
# مثال 1: تكوين أساسي (بدون VPN أو Telegram):
# ────────────────────────────────────────────────────────────────
# export SERVER_IP="194.163.45.123"
# export SSH_PUBLIC_KEY="ssh-ed25519 AAAAC3NzaC1l... fortress-master"
# export ADMIN_USER="tripzadmin"
# export SSH_PORT="2200"
# export ENABLE_PORT_KNOCKING="true"
# export ENABLE_HONEYPOT="true"
# export ENABLE_FAKE_SERVICES="true"
# export ENABLE_FAIL2BAN="true"
# export ENABLE_WIREGUARD="false"
# export ENABLE_AUTO_BACKUP="true"
#
# مثال 2: تكوين متقدم (مع Telegram):
# ────────────────────────────────────────────────────────────────
# export SERVER_IP="194.163.45.123"
# export SSH_PUBLIC_KEY="ssh-ed25519 AAAAC3NzaC1l... fortress-master"
# export ADMIN_USER="tripzadmin"
# export SSH_PORT="2200"
# export ENABLE_PORT_KNOCKING="true"
# export ENABLE_HONEYPOT="true"
# export ENABLE_FAKE_SERVICES="true"
# export ENABLE_FAIL2BAN="true"
# export ENABLE_WIREGUARD="false"
# export ENABLE_AUTO_BACKUP="true"
# export TELEGRAM_BOT_TOKEN="123456789:ABCdefGHIjklMNOpqrsTUVwxyz"
# export TELEGRAM_CHAT_ID="987654321"
#
# مثال 3: تكوين كامل (مع VPN و Telegram):
# ────────────────────────────────────────────────────────────────
# export SERVER_IP="194.163.45.123"
# export SSH_PUBLIC_KEY="ssh-ed25519 AAAAC3NzaC1l... fortress-master"
# export ADMIN_USER="tripzadmin"
# export SSH_PORT="2200"
# export ENABLE_PORT_KNOCKING="true"
# export ENABLE_HONEYPOT="true"
# export ENABLE_FAKE_SERVICES="true"
# export ENABLE_FAIL2BAN="true"
# export ENABLE_WIREGUARD="true"
# export VPN_NETWORK="10.8.0.0/24"
# export VPN_SERVER_IP="10.8.0.1"
# export ENABLE_AUTO_BACKUP="true"
# export TELEGRAM_BOT_TOKEN="123456789:ABCdefGHIjklMNOpqrsTUVwxyz"
# export TELEGRAM_CHAT_ID="987654321"
# export KNOCK_PORT_1="7531"
# export KNOCK_PORT_2="8642"
# export KNOCK_PORT_3="9753"
#
# ════════════════════════════════════════════════════════════════

463
system_check.sh Normal file
View File

@@ -0,0 +1,463 @@
#!/bin/bash
# ════════════════════════════════════════════════════════════════
# 🔍 TRIPZ FORTRESS v8.2 - Comprehensive System Check
# ════════════════════════════════════════════════════════════════
# استخدم هذا السكريبت لفحص حالة النظام الأمني بالكامل
# ════════════════════════════════════════════════════════════════
set -euo pipefail
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
# Counters
TOTAL_CHECKS=0
PASSED_CHECKS=0
FAILED_CHECKS=0
WARNING_CHECKS=0
# Functions
check_pass() {
echo -e "${GREEN}$1${NC}"
((PASSED_CHECKS++))
((TOTAL_CHECKS++))
}
check_fail() {
echo -e "${RED}$1${NC}"
((FAILED_CHECKS++))
((TOTAL_CHECKS++))
}
check_warn() {
echo -e "${YELLOW}⚠️ $1${NC}"
((WARNING_CHECKS++))
((TOTAL_CHECKS++))
}
info() {
echo -e "${CYAN} $1${NC}"
}
section() {
echo ""
echo -e "${BLUE}════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE}$1${NC}"
echo -e "${BLUE}════════════════════════════════════════════════════════${NC}"
}
# Main
clear
cat <<'BANNER'
════════════════════════════════════════════════════════════════
🔍 TRIPZ FORTRESS v8.2 - System Health Check
════════════════════════════════════════════════════════════════
BANNER
echo ""
info "Starting comprehensive system check..."
info "Date: $(date '+%Y-%m-%d %H:%M:%S')"
info "Hostname: $(hostname)"
echo ""
# ════════════════════════════════════════════════════════════════
# 1. BASIC SYSTEM INFO
# ════════════════════════════════════════════════════════════════
section "1⃣ BASIC SYSTEM INFORMATION"
# OS Info
if [ -f /etc/os-release ]; then
OS_NAME=$(grep PRETTY_NAME /etc/os-release | cut -d'"' -f2)
info "Operating System: $OS_NAME"
check_pass "OS detected"
else
check_fail "Cannot detect OS"
fi
# Kernel
KERNEL=$(uname -r)
info "Kernel: $KERNEL"
check_pass "Kernel detected"
# Uptime
UPTIME=$(uptime -p)
info "Uptime: $UPTIME"
# Resources
MEMORY_TOTAL=$(free -h | awk '/^Mem:/ {print $2}')
MEMORY_USED=$(free -h | awk '/^Mem:/ {print $3}')
MEMORY_PERCENT=$(free | awk '/^Mem:/ {printf "%.0f", $3/$2 * 100}')
info "Memory: $MEMORY_USED / $MEMORY_TOTAL (${MEMORY_PERCENT}%)"
if [ "$MEMORY_PERCENT" -lt 80 ]; then
check_pass "Memory usage OK"
elif [ "$MEMORY_PERCENT" -lt 90 ]; then
check_warn "Memory usage high: ${MEMORY_PERCENT}%"
else
check_fail "Memory usage critical: ${MEMORY_PERCENT}%"
fi
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
DISK_USED=$(df -h / | awk 'NR==2 {print $3}')
DISK_TOTAL=$(df -h / | awk 'NR==2 {print $2}')
info "Disk: $DISK_USED / $DISK_TOTAL (${DISK_USAGE}%)"
if [ "$DISK_USAGE" -lt 80 ]; then
check_pass "Disk usage OK"
elif [ "$DISK_USAGE" -lt 90 ]; then
check_warn "Disk usage high: ${DISK_USAGE}%"
else
check_fail "Disk usage critical: ${DISK_USAGE}%"
fi
# ════════════════════════════════════════════════════════════════
# 2. NETWORK CONNECTIVITY
# ════════════════════════════════════════════════════════════════
section "2⃣ NETWORK CONNECTIVITY"
# Internet
if ping -c 2 8.8.8.8 &>/dev/null; then
check_pass "Internet connectivity"
else
check_fail "No internet connection"
fi
# DNS
if ping -c 2 google.com &>/dev/null; then
check_pass "DNS resolution"
else
check_fail "DNS resolution failed"
fi
# External IP
EXTERNAL_IP=$(curl -s ifconfig.me 2>/dev/null || echo "unknown")
info "External IP: $EXTERNAL_IP"
# ════════════════════════════════════════════════════════════════
# 3. SECURITY SERVICES
# ════════════════════════════════════════════════════════════════
section "3⃣ SECURITY SERVICES"
# SSH
if systemctl is-active --quiet sshd; then
check_pass "SSH (sshd) active"
# SSH Config
SSH_PORT=$(grep -E "^Port " /etc/ssh/sshd_config | awk '{print $2}' || echo "22")
info "SSH Port: $SSH_PORT"
if [ "$SSH_PORT" != "22" ]; then
check_pass "SSH port changed from default"
else
check_warn "SSH still on default port 22"
fi
# Password Authentication
if grep -q "^PasswordAuthentication no" /etc/ssh/sshd_config; then
check_pass "Password authentication disabled"
else
check_warn "Password authentication enabled"
fi
# Root Login
if grep -q "^PermitRootLogin no" /etc/ssh/sshd_config; then
check_pass "Root login disabled"
else
check_warn "Root login enabled"
fi
else
check_fail "SSH (sshd) not running"
fi
# UFW
if systemctl is-active --quiet ufw; then
check_pass "UFW firewall active"
UFW_STATUS=$(ufw status | head -1 | awk '{print $2}')
if [ "$UFW_STATUS" == "active" ]; then
check_pass "UFW enabled"
else
check_fail "UFW not enabled"
fi
else
check_fail "UFW not installed/running"
fi
# Fail2Ban
if systemctl is-active --quiet fail2ban 2>/dev/null; then
check_pass "Fail2Ban active"
# Banned IPs
if command -v fail2ban-client &>/dev/null; then
BANNED_COUNT=$(fail2ban-client status sshd 2>/dev/null | grep "Currently banned:" | awk '{print $4}' || echo "0")
info "Currently banned IPs: $BANNED_COUNT"
fi
else
check_warn "Fail2Ban not active (optional but recommended)"
fi
# Knockd (Port Knocking)
if systemctl is-active --quiet knockd 2>/dev/null; then
check_pass "Port Knocking (knockd) active"
if [ -f /etc/knockd.conf ]; then
KNOCK_SEQ=$(grep -A 1 "\[openSSH\]" /etc/knockd.conf | grep sequence | awk '{print $3}')
info "Knock sequence: $KNOCK_SEQ"
fi
else
check_warn "Port Knocking not active (optional)"
fi
# Endlessh (Honeypot)
if systemctl is-active --quiet endlessh 2>/dev/null; then
check_pass "Endlessh honeypot active"
else
check_warn "Endlessh honeypot not active (optional)"
fi
# Fake MySQL
if systemctl is-active --quiet fake-mysql 2>/dev/null; then
check_pass "Fake MySQL trap active"
else
check_warn "Fake MySQL trap not active (optional)"
fi
# ════════════════════════════════════════════════════════════════
# 4. SYSTEM HARDENING
# ════════════════════════════════════════════════════════════════
section "4⃣ SYSTEM HARDENING"
# sysctl checks
if grep -q "net.ipv4.tcp_syncookies = 1" /etc/sysctl.conf; then
check_pass "SYN flood protection enabled"
else
check_warn "SYN flood protection not configured"
fi
if grep -q "net.ipv4.conf.all.rp_filter = 1" /etc/sysctl.conf; then
check_pass "Reverse path filtering enabled"
else
check_warn "Reverse path filtering not configured"
fi
if grep -q "kernel.kptr_restrict = 2" /etc/sysctl.conf; then
check_pass "Kernel pointer protection enabled"
else
check_warn "Kernel pointer protection not configured"
fi
# ════════════════════════════════════════════════════════════════
# 5. USERS & AUTHENTICATION
# ════════════════════════════════════════════════════════════════
section "5⃣ USERS & AUTHENTICATION"
# Admin user
ADMIN_USER=$(grep -E "^AllowUsers" /etc/ssh/sshd_config | awk '{print $2}' || echo "unknown")
if [ "$ADMIN_USER" != "unknown" ]; then
info "Admin user: $ADMIN_USER"
check_pass "Admin user configured"
# Check sudo access
if [ -f "/etc/sudoers.d/$ADMIN_USER" ]; then
check_pass "Sudo access configured"
fi
else
check_warn "No specific admin user configured"
fi
# Check for users with UID 0 (root equivalents)
ROOT_USERS=$(awk -F: '$3 == 0 {print $1}' /etc/passwd | grep -v "^root$" | wc -l)
if [ "$ROOT_USERS" -eq 0 ]; then
check_pass "No additional UID 0 users"
else
check_warn "Found $ROOT_USERS additional UID 0 users"
fi
# ════════════════════════════════════════════════════════════════
# 6. BACKUPS
# ════════════════════════════════════════════════════════════════
section "6⃣ BACKUP SYSTEM"
# Check backup directory
if [ -d "/backup/fortress" ]; then
check_pass "Backup directory exists"
# Count backups
BACKUP_COUNT=$(ls -1 /backup/fortress/*.enc 2>/dev/null | wc -l || echo "0")
info "Backup files: $BACKUP_COUNT"
if [ "$BACKUP_COUNT" -gt 0 ]; then
check_pass "Backups found"
# Last backup
LAST_BACKUP=$(ls -t /backup/fortress/*.enc 2>/dev/null | head -1)
if [ -n "$LAST_BACKUP" ]; then
LAST_BACKUP_DATE=$(stat -c %y "$LAST_BACKUP" | cut -d' ' -f1)
info "Last backup: $LAST_BACKUP_DATE"
# Check if recent (within 2 days)
DAYS_SINCE_BACKUP=$(( ($(date +%s) - $(stat -c %Y "$LAST_BACKUP")) / 86400 ))
if [ "$DAYS_SINCE_BACKUP" -le 2 ]; then
check_pass "Recent backup available"
else
check_warn "Last backup is $DAYS_SINCE_BACKUP days old"
fi
fi
else
check_warn "No backups found"
fi
else
check_warn "Backup directory not found"
fi
# Check cron job
if crontab -l 2>/dev/null | grep -q "fortress/backup.sh"; then
check_pass "Backup cron job configured"
else
check_warn "No backup cron job found"
fi
# ════════════════════════════════════════════════════════════════
# 7. MONITORING & LOGGING
# ════════════════════════════════════════════════════════════════
section "7⃣ MONITORING & LOGGING"
# Log directory
if [ -d "/var/log/fortress" ]; then
check_pass "Fortress log directory exists"
LOG_SIZE=$(du -sh /var/log/fortress 2>/dev/null | awk '{print $1}')
info "Log directory size: $LOG_SIZE"
else
check_warn "Fortress log directory not found"
fi
# Check for large log files
LARGE_LOGS=$(find /var/log -type f -size +100M 2>/dev/null | wc -l)
if [ "$LARGE_LOGS" -gt 0 ]; then
check_warn "Found $LARGE_LOGS log files >100MB"
else
check_pass "No excessively large log files"
fi
# Telegram notifications
if [ -x "/usr/local/bin/fortress/telegram_notify.sh" ]; then
check_pass "Telegram notification script available"
else
check_warn "Telegram notifications not configured"
fi
# ════════════════════════════════════════════════════════════════
# 8. OPEN PORTS
# ════════════════════════════════════════════════════════════════
section "8⃣ OPEN PORTS"
info "Listening ports:"
ss -tuln | grep LISTEN | awk '{print " " $5}' | sort -u
# Critical ports check
CRITICAL_PORTS=("22" "80" "443")
for port in "${CRITICAL_PORTS[@]}"; do
if ss -tuln | grep -q ":$port "; then
info "Port $port is listening"
fi
done
# ════════════════════════════════════════════════════════════════
# 9. SECURITY ADVISORIES
# ════════════════════════════════════════════════════════════════
section "9⃣ SECURITY RECOMMENDATIONS"
RECOMMENDATIONS=()
# Check if running as root unnecessarily
if [ "$(id -u)" -eq 0 ]; then
RECOMMENDATIONS+=("⚠️ Don't run routine tasks as root - use sudo when needed")
fi
# Check SSH on default port
if ss -tuln | grep -q ":22 " && ! systemctl is-active --quiet endlessh; then
RECOMMENDATIONS+=("⚠️ SSH on port 22 without honeypot - consider using Port Knocking")
fi
# Check for pending updates
if command -v apt &>/dev/null; then
PENDING_UPDATES=$(apt list --upgradable 2>/dev/null | grep -c "upgradable" || echo "0")
if [ "$PENDING_UPDATES" -gt 0 ]; then
RECOMMENDATIONS+=("⚠️ $PENDING_UPDATES pending system updates - run: sudo apt update && sudo apt upgrade")
fi
fi
# Display recommendations
if [ ${#RECOMMENDATIONS[@]} -gt 0 ]; then
echo ""
for rec in "${RECOMMENDATIONS[@]}"; do
echo -e "${YELLOW}$rec${NC}"
done
else
check_pass "No critical recommendations"
fi
# ════════════════════════════════════════════════════════════════
# 10. FINAL SUMMARY
# ════════════════════════════════════════════════════════════════
section "📊 FINAL SUMMARY"
echo ""
echo -e "${CYAN}Total Checks: $TOTAL_CHECKS${NC}"
echo -e "${GREEN}Passed: $PASSED_CHECKS${NC}"
echo -e "${RED}Failed: $FAILED_CHECKS${NC}"
echo -e "${YELLOW}Warnings: $WARNING_CHECKS${NC}"
echo ""
# Calculate score
SCORE=$(( (PASSED_CHECKS * 100) / TOTAL_CHECKS ))
if [ "$SCORE" -ge 90 ]; then
echo -e "${GREEN}═══════════════════════════════════════════════════════${NC}"
echo -e "${GREEN}✅ EXCELLENT SECURITY POSTURE (Score: $SCORE%)${NC}"
echo -e "${GREEN}═══════════════════════════════════════════════════════${NC}"
elif [ "$SCORE" -ge 70 ]; then
echo -e "${YELLOW}═══════════════════════════════════════════════════════${NC}"
echo -e "${YELLOW}⚠️ GOOD SECURITY, SOME IMPROVEMENTS NEEDED (Score: $SCORE%)${NC}"
echo -e "${YELLOW}═══════════════════════════════════════════════════════${NC}"
else
echo -e "${RED}═══════════════════════════════════════════════════════${NC}"
echo -e "${RED}❌ SECURITY NEEDS ATTENTION (Score: $SCORE%)${NC}"
echo -e "${RED}═══════════════════════════════════════════════════════${NC}"
fi
echo ""
info "Check completed at: $(date '+%Y-%m-%d %H:%M:%S')"
info "For detailed logs, check: /var/log/fortress/"
echo ""
# ════════════════════════════════════════════════════════════════
# Exit with appropriate code
# ════════════════════════════════════════════════════════════════
if [ "$FAILED_CHECKS" -gt 0 ]; then
exit 1
elif [ "$WARNING_CHECKS" -gt 3 ]; then
exit 2
else
exit 0
fi

View File

@@ -0,0 +1,952 @@
#!/bin/bash
# ════════════════════════════════════════════════════════════════
# 🛡️ TRIPZ FORTRESS v8.2 - PRODUCTION-SAFE DYNAMIC GENERATOR
# ════════════════════════════════════════════════════════════════
# الإصدار: 8.2
# التاريخ: 2025-02-05
# المطوّر: TRIPZ TEAM
# الترخيص: Proprietary
# ════════════════════════════════════════════════════════════════
set -euo pipefail # Exit on error, undefined vars, pipe failures
IFS=$'\n\t' # Safe word splitting
# ════════════════════════════════════════════════════════════════
# ⚙️ CONFIGURATION SECTION - يتم ملؤها ديناميكياً
# ════════════════════════════════════════════════════════════════
# معلومات السيرفر (REQUIRED)
SERVER_IP="${SERVER_IP:-}"
ADMIN_USER="${ADMIN_USER:-tripzadmin}"
SSH_PORT="${SSH_PORT:-2200}"
SSH_PUBLIC_KEY="${SSH_PUBLIC_KEY:-}"
# Port Knocking Sequence (3 منافذ عشوائية)
KNOCK_PORT_1="${KNOCK_PORT_1:-$(shuf -i 7000-9000 -n 1)}"
KNOCK_PORT_2="${KNOCK_PORT_2:-$(shuf -i 7000-9000 -n 1)}"
KNOCK_PORT_3="${KNOCK_PORT_3:-$(shuf -i 7000-9000 -n 1)}"
# Telegram Integration (OPTIONAL)
TELEGRAM_BOT_TOKEN="${TELEGRAM_BOT_TOKEN:-}"
TELEGRAM_CHAT_ID="${TELEGRAM_CHAT_ID:-}"
# Security Features (TOGGLES)
ENABLE_HONEYPOT="${ENABLE_HONEYPOT:-true}"
ENABLE_FAKE_SERVICES="${ENABLE_FAKE_SERVICES:-true}"
ENABLE_PORT_KNOCKING="${ENABLE_PORT_KNOCKING:-true}"
ENABLE_WIREGUARD="${ENABLE_WIREGUARD:-false}"
ENABLE_FAIL2BAN="${ENABLE_FAIL2BAN:-true}"
ENABLE_AUTO_BACKUP="${ENABLE_AUTO_BACKUP:-true}"
# WireGuard Configuration (if enabled)
VPN_NETWORK="${VPN_NETWORK:-10.8.0.0/24}"
VPN_SERVER_IP="${VPN_SERVER_IP:-10.8.0.1}"
# ════════════════════════════════════════════════════════════════
# 🎨 COLORS & STYLING
# ════════════════════════════════════════════════════════════════
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
BOLD='\033[1m'
# ════════════════════════════════════════════════════════════════
# 📝 LOGGING FUNCTIONS
# ════════════════════════════════════════════════════════════════
LOG_DIR="/var/log/fortress"
LOG_FILE="${LOG_DIR}/install_$(date +%Y%m%d_%H%M%S).log"
log() {
echo -e "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $*" | tee -a "$LOG_FILE"
}
info() {
echo -e "${CYAN} $*${NC}" | tee -a "$LOG_FILE"
}
success() {
echo -e "${GREEN}$*${NC}" | tee -a "$LOG_FILE"
}
warning() {
echo -e "${YELLOW}⚠️ $*${NC}" | tee -a "$LOG_FILE"
}
error() {
echo -e "${RED}❌ ERROR: $*${NC}" | tee -a "$LOG_FILE"
return 1
}
# ════════════════════════════════════════════════════════════════
# 🔍 PRE-FLIGHT CHECKS
# ════════════════════════════════════════════════════════════════
preflight_checks() {
log "\n🔍 تشغيل الفحوصات الأولية..."
# 1. التحقق من root
if [ "$EUID" -ne 0 ]; then
error "يجب تشغيل هذا السكريبت كـ root أو باستخدام sudo"
exit 1
fi
# 2. التحقق من النظام
if ! [ -f /etc/debian_version ] && ! [ -f /etc/redhat-release ]; then
warning "نظام غير مدعوم رسمياً - قد تحدث مشاكل"
fi
# 3. التحقق من الاتصال
if ! ping -c 2 8.8.8.8 &>/dev/null; then
error "لا يوجد اتصال بالإنترنت"
exit 1
fi
# 4. التحقق من المتطلبات الأساسية
local required_vars=("SERVER_IP" "SSH_PUBLIC_KEY")
for var in "${required_vars[@]}"; do
if [ -z "${!var}" ]; then
error "المتغير $var مطلوب ولكنه فارغ!"
exit 1
fi
done
# 5. التحقق من صلاحية IP
if ! [[ $SERVER_IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
error "عنوان IP غير صالح: $SERVER_IP"
exit 1
fi
# 6. التحقق من SSH Key format
if ! echo "$SSH_PUBLIC_KEY" | grep -qE '^(ssh-rsa|ssh-ed25519|ecdsa-sha2)'; then
error "تنسيق SSH Key غير صالح"
exit 1
fi
# 7. إنشاء مجلد السجلات
mkdir -p "$LOG_DIR"
# 8. نسخة احتياطية سريعة
log "إنشاء نسخة احتياطية للملفات الحساسة..."
mkdir -p /root/backup_before_fortress_$(date +%Y%m%d)
cp -r /etc/ssh /root/backup_before_fortress_$(date +%Y%m%d)/ 2>/dev/null || true
success "✓ الفحوصات الأولية مكتملة"
}
# ════════════════════════════════════════════════════════════════
# 📦 SYSTEM PREPARATION
# ════════════════════════════════════════════════════════════════
system_preparation() {
log "\n📦 تحضير النظام..."
# تحديث النظام
info "تحديث قوائم الحزم..."
export DEBIAN_FRONTEND=noninteractive
apt-get update -qq
# تثبيت الأدوات الأساسية
info "تثبيت الأدوات الأساسية..."
apt-get install -y -qq \
curl \
wget \
git \
ufw \
fail2ban \
openssh-server \
sudo \
htop \
net-tools \
knockd \
openssl \
cron \
bc \
jq \
netcat-openbsd
success "✓ تحضير النظام مكتمل"
}
# ════════════════════════════════════════════════════════════════
# 👤 USER MANAGEMENT
# ════════════════════════════════════════════════════════════════
create_admin_user() {
log "\n👤 إنشاء المستخدم الإداري..."
# التحقق من وجود المستخدم
if id "$ADMIN_USER" &>/dev/null; then
warning "المستخدم $ADMIN_USER موجود بالفعل - سيتم تحديثه"
else
info "إنشاء المستخدم $ADMIN_USER..."
useradd -m -s /bin/bash -G sudo "$ADMIN_USER"
fi
# تعطيل كلمة المرور (سنستخدم المفاتيح فقط)
passwd -l "$ADMIN_USER"
# إعداد SSH
mkdir -p "/home/$ADMIN_USER/.ssh"
echo "$SSH_PUBLIC_KEY" > "/home/$ADMIN_USER/.ssh/authorized_keys"
chmod 700 "/home/$ADMIN_USER/.ssh"
chmod 600 "/home/$ADMIN_USER/.ssh/authorized_keys"
chown -R "$ADMIN_USER:$ADMIN_USER" "/home/$ADMIN_USER/.ssh"
# صلاحيات sudo بدون كلمة مرور
cat > /etc/sudoers.d/"$ADMIN_USER" <<EOF
# TRIPZ FORTRESS - Admin User
$ADMIN_USER ALL=(ALL) NOPASSWD:ALL
EOF
chmod 440 /etc/sudoers.d/"$ADMIN_USER"
# التحقق من صحة sudoers
visudo -c || error "خطأ في ملف sudoers!"
success "✓ المستخدم $ADMIN_USER جاهز"
}
# ════════════════════════════════════════════════════════════════
# 🔐 SSH HARDENING
# ════════════════════════════════════════════════════════════════
harden_ssh() {
log "\n🔐 تأمين SSH..."
# نسخة احتياطية
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup.$(date +%Y%m%d)
# التكوين الآمن
cat > /etc/ssh/sshd_config <<SSHEOF
# ════════════════════════════════════════
# TRIPZ FORTRESS v8.2 - SSH Configuration
# ════════════════════════════════════════
# الأساسيات
Port $SSH_PORT
Protocol 2
AddressFamily inet
ListenAddress 0.0.0.0
# المصادقة
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
# تعطيل root login
PermitRootLogin no
# المستخدمون المسموح لهم
AllowUsers $ADMIN_USER
# الأمان
X11Forwarding no
PermitUserEnvironment no
AllowAgentForwarding no
AllowTcpForwarding no
PermitTunnel no
GatewayPorts no
# الجلسات
MaxAuthTries 3
MaxSessions 2
ClientAliveInterval 300
ClientAliveCountMax 2
LoginGraceTime 30
# التشفير القوي (Modern Algorithms)
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group16-sha512
HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256
# السجلات
SyslogFacility AUTH
LogLevel VERBOSE
# Banner
Banner /etc/ssh/banner.txt
SSHEOF
# إنشاء Banner
cat > /etc/ssh/banner.txt <<'BANNEREOF'
════════════════════════════════════════════════════════
⚠️ AUTHORIZED ACCESS ONLY ⚠️
This system is protected by TRIPZ FORTRESS v8.2
All connections are monitored and logged.
Unauthorized access attempts will be prosecuted.
🛡️ Protected by 9-Layer Security System
════════════════════════════════════════════════════════
BANNEREOF
# اختبار التكوين
info "اختبار تكوين SSH..."
if ! sshd -t; then
error "تكوين SSH غير صالح!"
cp /etc/ssh/sshd_config.backup.$(date +%Y%m%d) /etc/ssh/sshd_config
exit 1
fi
# إعادة تحميل SSH (بدون قطع الاتصال!)
systemctl reload sshd
success "✓ SSH محمي (Port: $SSH_PORT)"
}
# ════════════════════════════════════════════════════════════════
# 🔥 FIREWALL CONFIGURATION
# ════════════════════════════════════════════════════════════════
configure_firewall() {
log "\n🔥 تكوين جدار الحماية..."
# السياسة الافتراضية
ufw default deny incoming
ufw default allow outgoing
# السماح بالمنافذ الأساسية
info "السماح بـ HTTP/HTTPS..."
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'
# SSH: سيتم إدارته بواسطة Port Knocking
if [ "$ENABLE_PORT_KNOCKING" == "true" ]; then
info "Port Knocking مفعّل - SSH سيُفتح عبر الطرق فقط"
else
ufw allow "$SSH_PORT/tcp" comment 'SSH Direct Access'
fi
# WireGuard VPN
if [ "$ENABLE_WIREGUARD" == "true" ]; then
ufw allow 51820/udp comment 'WireGuard VPN'
fi
# Honeypot (Port 22 للخداع)
if [ "$ENABLE_HONEYPOT" == "true" ]; then
ufw allow 22/tcp comment 'Endlessh Honeypot'
fi
# Fake Services
if [ "$ENABLE_FAKE_SERVICES" == "true" ]; then
ufw allow 3306/tcp comment 'Fake MySQL Trap'
fi
# تفعيل UFW
info "تفعيل جدار الحماية..."
echo "y" | ufw enable
# عرض الحالة
ufw status verbose | head -20
success "✓ جدار الحماية نشط"
}
# ════════════════════════════════════════════════════════════════
# 🚫 FAIL2BAN SETUP
# ════════════════════════════════════════════════════════════════
setup_fail2ban() {
if [ "$ENABLE_FAIL2BAN" != "true" ]; then
warning "Fail2Ban معطّل - تخطي..."
return 0
fi
log "\n🚫 تكوين Fail2Ban..."
# التكوين الرئيسي
cat > /etc/fail2ban/jail.local <<F2BEOF
[DEFAULT]
# الإعدادات العامة
bantime = 3600
findtime = 600
maxretry = 3
destemail = root@localhost
sendername = TRIPZ-FORTRESS
action = %(action_mwl)s
# Whitelist
ignoreip = 127.0.0.1/8 ::1
# ══════════════════════════════════════
# SSH Protection (Progressive)
# ══════════════════════════════════════
[sshd]
enabled = true
port = $SSH_PORT
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 7200
findtime = 600
[sshd-aggressive]
enabled = true
port = $SSH_PORT
filter = sshd
logpath = /var/log/auth.log
maxretry = 2
bantime = 86400
findtime = 300
# ══════════════════════════════════════
# Nginx Protection
# ══════════════════════════════════════
[nginx-http-auth]
enabled = true
port = 80,443
logpath = /var/log/nginx/error.log
[nginx-noscript]
enabled = true
port = 80,443
logpath = /var/log/nginx/access.log
[nginx-badbots]
enabled = true
port = 80,443
logpath = /var/log/nginx/access.log
F2BEOF
# تفعيل وبدء
systemctl enable fail2ban
systemctl restart fail2ban
# التحقق
sleep 2
if systemctl is-active --quiet fail2ban; then
success "✓ Fail2Ban نشط"
else
warning "Fail2Ban لم يبدأ - راجع السجلات"
fi
}
# ════════════════════════════════════════════════════════════════
# 🚪 PORT KNOCKING
# ════════════════════════════════════════════════════════════════
setup_port_knocking() {
if [ "$ENABLE_PORT_KNOCKING" != "true" ]; then
warning "Port Knocking معطّل - تخطي..."
return 0
fi
log "\n🚪 إعداد Port Knocking..."
info "تسلسل الطرق: $KNOCK_PORT_1, $KNOCK_PORT_2, $KNOCK_PORT_3"
# تكوين knockd
cat > /etc/knockd.conf <<KNOCKEOF
[options]
UseSyslog
LogFile = /var/log/knockd.log
[openSSH]
sequence = $KNOCK_PORT_1,$KNOCK_PORT_2,$KNOCK_PORT_3
seq_timeout = 15
command = /usr/sbin/ufw allow from %IP% to any port $SSH_PORT proto tcp
tcpflags = syn
[closeSSH]
sequence = $KNOCK_PORT_3,$KNOCK_PORT_2,$KNOCK_PORT_1
seq_timeout = 15
command = /usr/sbin/ufw delete allow from %IP% to any port $SSH_PORT proto tcp
tcpflags = syn
KNOCKEOF
# تفعيل knockd
sed -i 's/START_KNOCKD=0/START_KNOCKD=1/' /etc/default/knockd
systemctl enable knockd
systemctl restart knockd
# التحقق
if systemctl is-active --quiet knockd; then
success "✓ Port Knocking نشط"
else
error "فشل بدء knockd!"
fi
}
# ════════════════════════════════════════════════════════════════
# 🎣 HONEYPOT (Endlessh)
# ════════════════════════════════════════════════════════════════
setup_honeypot() {
if [ "$ENABLE_HONEYPOT" != "true" ]; then
warning "Honeypot معطّل - تخطي..."
return 0
fi
log "\n🎣 إعداد Honeypot (Endlessh)..."
# التثبيت من المصدر
cd /opt
if [ ! -d "endlessh" ]; then
git clone --depth=1 https://github.com/skeeto/endlessh
fi
cd endlessh
make
cp endlessh /usr/local/bin/
# التكوين
mkdir -p /etc/endlessh
cat > /etc/endlessh/config <<'ENDLESSHEOF'
Port 22
Delay 10000
MaxLineLength 32
MaxClients 4096
LogLevel 1
ENDLESSHEOF
# Systemd service
cat > /etc/systemd/system/endlessh.service <<'SERVICEEOF'
[Unit]
Description=Endlessh SSH Tarpit
After=network.target
[Service]
Type=simple
User=nobody
ExecStart=/usr/local/bin/endlessh -c /etc/endlessh/config
Restart=always
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
SERVICEEOF
systemctl daemon-reload
systemctl enable endlessh
systemctl start endlessh
success "✓ Endlessh Honeypot نشط (Port 22)"
}
# ════════════════════════════════════════════════════════════════
# 🎭 FAKE SERVICES
# ════════════════════════════════════════════════════════════════
setup_fake_services() {
if [ "$ENABLE_FAKE_SERVICES" != "true" ]; then
warning "Fake Services معطّل - تخطي..."
return 0
fi
log "\n🎭 إعداد Fake MySQL..."
# سكريبت Fake MySQL
cat > /usr/local/bin/fake-mysql.sh <<'FAKEMYSQLEOF'
#!/bin/bash
LOG_FILE="/var/log/fortress/fake-mysql.log"
PORT=3306
mkdir -p /var/log/fortress
while true; do
nc -l -p $PORT -k 2>&1 | while read line; do
echo "$(date '+%Y-%m-%d %H:%M:%S') - MySQL probe: ${line:0:100}" >> "$LOG_FILE"
echo -e "\x4a\x00\x00\x00\x0a\x35\x2e\x37\x2e\x33\x33"
sleep 2
done
done
FAKEMYSQLEOF
chmod +x /usr/local/bin/fake-mysql.sh
# Systemd service
cat > /etc/systemd/system/fake-mysql.service <<'EOF'
[Unit]
Description=Fake MySQL Honeypot
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/fake-mysql.sh
Restart=always
User=nobody
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable fake-mysql
systemctl start fake-mysql
success "✓ Fake MySQL نشط (Port 3306)"
}
# ════════════════════════════════════════════════════════════════
# ⚡ SYSTEM OPTIMIZATION
# ════════════════════════════════════════════════════════════════
optimize_system() {
log "\n⚡ تحسينات النظام..."
# Kernel hardening
cat >> /etc/sysctl.conf <<'SYSCTLEOF'
# ════════════════════════════════════════
# TRIPZ FORTRESS v8.2 - Kernel Hardening
# ════════════════════════════════════════
# SYN flood protection
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
# TCP hardening
net.ipv4.tcp_rfc1337 = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# IP spoofing protection
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# ICMP protection
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Performance
net.core.netdev_max_backlog = 2048
net.core.somaxconn = 1024
# TCP BBR
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
# Security
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1
SYSCTLEOF
# تطبيق التعديلات
sysctl -p || warning "بعض إعدادات sysctl غير مدعومة"
success "✓ تحسينات النظام مطبّقة"
}
# ════════════════════════════════════════════════════════════════
# 💾 AUTO BACKUP SYSTEM
# ════════════════════════════════════════════════════════════════
setup_auto_backup() {
if [ "$ENABLE_AUTO_BACKUP" != "true" ]; then
warning "Auto Backup معطّل - تخطي..."
return 0
fi
log "\n💾 إعداد النسخ الاحتياطي التلقائي..."
mkdir -p /usr/local/bin/fortress
mkdir -p /backup/fortress
# سكريبت النسخ الاحتياطي
cat > /usr/local/bin/fortress/backup.sh <<'BACKUPEOF'
#!/bin/bash
BACKUP_DIR="/backup/fortress"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
TEMP_DIR="/tmp/fortress_backup_$TIMESTAMP"
BACKUP_FILE="${BACKUP_DIR}/fortress_${TIMESTAMP}.tar.gz"
ENCRYPTED_FILE="${BACKUP_FILE}.enc"
RETENTION_DAYS=30
mkdir -p "$TEMP_DIR"
# نسخ الملفات المهمة
cp -r /etc/ssh "$TEMP_DIR/" 2>/dev/null
cp -r /etc/fail2ban "$TEMP_DIR/" 2>/dev/null
cp -r /etc/ufw "$TEMP_DIR/" 2>/dev/null
cp /etc/knockd.conf "$TEMP_DIR/" 2>/dev/null
# ضغط
tar -czf "$BACKUP_FILE" -C /tmp "$(basename $TEMP_DIR)"
# تشفير AES-256
BACKUP_PASSWORD="TRIPZ_$(hostname)_$(date +%Y)"
openssl enc -aes-256-cbc -salt -pbkdf2 -in "$BACKUP_FILE" -out "$ENCRYPTED_FILE" -k "$BACKUP_PASSWORD"
# حذف غير المشفر
rm -f "$BACKUP_FILE"
rm -rf "$TEMP_DIR"
# تطبيق سياسة الاحتفاظ
find "$BACKUP_DIR" -name "fortress_*.tar.gz.enc" -mtime +$RETENTION_DAYS -delete
echo "✅ نسخة احتياطية: $ENCRYPTED_FILE"
echo "🔑 كلمة فك التشفير: $BACKUP_PASSWORD"
BACKUPEOF
chmod +x /usr/local/bin/fortress/backup.sh
# جدولة cron (يومياً 2 صباحاً)
(crontab -l 2>/dev/null; echo "0 2 * * * /usr/local/bin/fortress/backup.sh >> ${LOG_DIR}/backup.log 2>&1") | crontab -
success "✓ النسخ الاحتياطي التلقائي مجدول"
}
# ════════════════════════════════════════════════════════════════
# 📱 TELEGRAM NOTIFICATIONS
# ════════════════════════════════════════════════════════════════
setup_telegram_alerts() {
if [ -z "$TELEGRAM_BOT_TOKEN" ] || [ -z "$TELEGRAM_CHAT_ID" ]; then
warning "Telegram غير مكوّن - تخطي التنبيهات..."
return 0
fi
log "\n📱 إعداد تنبيهات Telegram..."
# سكريبت الإرسال
cat > /usr/local/bin/fortress/telegram_notify.sh <<TELEGRAMEOF
#!/bin/bash
TELEGRAM_BOT_TOKEN="$TELEGRAM_BOT_TOKEN"
TELEGRAM_CHAT_ID="$TELEGRAM_CHAT_ID"
MESSAGE=\$1
if [ -z "\$MESSAGE" ]; then
echo "Usage: \$0 'message'"
exit 1
fi
curl -s -X POST "https://api.telegram.org/bot\${TELEGRAM_BOT_TOKEN}/sendMessage" \\
-d chat_id="\${TELEGRAM_CHAT_ID}" \\
-d text="🛡️ FORTRESS ALERT
🖥️ Server: \$(hostname)
📍 IP: \$(curl -s ifconfig.me)
🕐 Time: \$(date '+%Y-%m-%d %H:%M:%S')
📨 \$MESSAGE" \\
-d parse_mode="HTML" > /dev/null
echo "✅ تم إرسال التنبيه"
TELEGRAMEOF
chmod +x /usr/local/bin/fortress/telegram_notify.sh
# اختبار
/usr/local/bin/fortress/telegram_notify.sh "✅ تم تثبيت TRIPZ FORTRESS v8.2 بنجاح!"
success "✓ تنبيهات Telegram جاهزة"
}
# ════════════════════════════════════════════════════════════════
# ✅ FINAL VERIFICATION
# ════════════════════════════════════════════════════════════════
final_verification() {
log "\n✅ التحقق النهائي..."
SERVICES_OK=0
SERVICES_FAILED=0
check_service() {
if systemctl is-active --quiet "$1"; then
success "$1"
((SERVICES_OK++))
else
warning "$1"
((SERVICES_FAILED++))
fi
}
info "فحص الخدمات..."
check_service "sshd"
check_service "ufw"
[ "$ENABLE_FAIL2BAN" == "true" ] && check_service "fail2ban"
[ "$ENABLE_PORT_KNOCKING" == "true" ] && check_service "knockd"
[ "$ENABLE_HONEYPOT" == "true" ] && check_service "endlessh"
[ "$ENABLE_FAKE_SERVICES" == "true" ] && check_service "fake-mysql"
log "\nالخدمات النشطة: $SERVICES_OK"
log "الخدمات الفاشلة: $SERVICES_FAILED"
}
# ════════════════════════════════════════════════════════════════
# 📝 GENERATE INFO FILE
# ════════════════════════════════════════════════════════════════
generate_info_file() {
log "\n📝 إنشاء ملف المعلومات..."
cat > /root/FORTRESS_INFO.txt <<INFOEOF
════════════════════════════════════════════════════════
🛡️ TRIPZ FORTRESS v8.2 - معلومات السيرفر
════════════════════════════════════════════════════════
تاريخ التثبيت: $(date '+%Y-%m-%d %H:%M:%S')
السيرفر: $(hostname)
IP: $(curl -s ifconfig.me 2>/dev/null || echo "غير متاح")
🔐 معلومات الأمان:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
المستخدم الإداري: $ADMIN_USER
منفذ SSH: $SSH_PORT
Port Knocking: $KNOCK_PORT_1, $KNOCK_PORT_2, $KNOCK_PORT_3
🛡️ الطبقات الأمنية النشطة:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ SSH Key-Only Authentication
✅ UFW Firewall
$([ "$ENABLE_FAIL2BAN" == "true" ] && echo "✅ Fail2Ban Progressive Blocking" || echo "⊘ Fail2Ban (معطّل)")
$([ "$ENABLE_PORT_KNOCKING" == "true" ] && echo "✅ Port Knocking" || echo "⊘ Port Knocking (معطّل)")
$([ "$ENABLE_HONEYPOT" == "true" ] && echo "✅ Endlessh Honeypot (Port 22)" || echo "⊘ Honeypot (معطّل)")
$([ "$ENABLE_FAKE_SERVICES" == "true" ] && echo "✅ Fake MySQL (Port 3306)" || echo "⊘ Fake Services (معطّل)")
✅ Kernel Hardening
$([ "$ENABLE_AUTO_BACKUP" == "true" ] && echo "✅ Encrypted Auto Backups" || echo "⊘ Auto Backup (معطّل)")
$([ -n "$TELEGRAM_BOT_TOKEN" ] && echo "✅ Telegram Alerts" || echo "⊘ Telegram (غير مكوّن)")
🔧 أوامر مفيدة:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
• فحص UFW: sudo ufw status verbose
• فحص Fail2Ban: sudo fail2ban-client status
• سجل Knockd: sudo tail -f /var/log/knockd.log
• نسخة احتياطية يدوية: sudo /usr/local/bin/fortress/backup.sh
📁 الملفات المهمة:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
• السجلات: $LOG_DIR/
• النسخ الاحتياطية: /backup/fortress/
• التكوينات: /etc/ssh/, /etc/fail2ban/
⚠️ للاتصال بالسيرفر:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
$(if [ "$ENABLE_PORT_KNOCKING" == "true" ]; then
echo "1. knock $SERVER_IP $KNOCK_PORT_1 $KNOCK_PORT_2 $KNOCK_PORT_3"
echo "2. ssh -p $SSH_PORT $ADMIN_USER@$SERVER_IP"
else
echo "ssh -p $SSH_PORT $ADMIN_USER@$SERVER_IP"
fi)
📞 الدعم:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
https://tripz-egypt.com
[email protected]
════════════════════════════════════════════════════════
✅ السيرفر محمي بالكامل!
════════════════════════════════════════════════════════
INFOEOF
chmod 600 /root/FORTRESS_INFO.txt
success "✓ ملف المعلومات: /root/FORTRESS_INFO.txt"
}
# ════════════════════════════════════════════════════════════════
# 🎯 MAIN INSTALLATION FLOW
# ════════════════════════════════════════════════════════════════
main() {
clear
cat <<'BANNER'
════════════════════════════════════════════════════════════════
████████╗██████╗ ██╗██████╗ ███████╗
╚══██╔══╝██╔══██╗██║██╔══██╗╚══███╔╝
██║ ██████╔╝██║██████╔╝ ███╔╝
██║ ██╔══██╗██║██╔═══╝ ███╔╝
██║ ██║ ██║██║██║ ███████╗
╚═╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚══════╝
███████╗ ██████╗ ██████╗ ████████╗██████╗ ███████╗███████╗
██╔════╝██╔═══██╗██╔══██╗╚══██╔══╝██╔══██╗██╔════╝██╔════╝
█████╗ ██║ ██║██████╔╝ ██║ ██████╔╝█████╗ ███████╗
██╔══╝ ██║ ██║██╔══██╗ ██║ ██╔══██╗██╔══╝ ╚════██║
██║ ╚██████╔╝██║ ██║ ██║ ██║ ██║███████╗███████║
╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝
🛡️ v8.2 - PRODUCTION-SAFE EDITION
9-Layer Security System | Enterprise Ready
════════════════════════════════════════════════════════════════
BANNER
log "\n🚀 بدء التثبيت..."
log "الإصدار: 8.2"
log "التاريخ: $(date '+%Y-%m-%d %H:%M:%S')"
log "════════════════════════════════════════════════════════════════\n"
# تنفيذ المراحل
preflight_checks
system_preparation
create_admin_user
harden_ssh
configure_firewall
setup_fail2ban
setup_port_knocking
setup_honeypot
setup_fake_services
optimize_system
setup_auto_backup
setup_telegram_alerts
final_verification
generate_info_file
# النتيجة النهائية
log "\n════════════════════════════════════════════════════════════════"
success "🎉 اكتمل تثبيت TRIPZ FORTRESS v8.2!"
log "════════════════════════════════════════════════════════════════\n"
cat <<FINALEOF
╔══════════════════════════════════════════════════════════════════╗
║ 🔐 TRIPZ FORTRESS v8.2 🔐 ║
║ PRODUCTION-SAFE EDITION ║
╠══════════════════════════════════════════════════════════════════╣
║ ║
║ ✅ التثبيت مكتمل بنجاح! ║
║ ║
║ 📊 معلومات الاتصال: ║
║ • السيرفر: $SERVER_IP ║
║ • المستخدم: $ADMIN_USER ║
║ • منفذ SSH: $SSH_PORT ║
║ ║
$(if [ "$ENABLE_PORT_KNOCKING" == "true" ]; then
cat <<KNOCKEOF
║ 🚪 Port Knocking مفعّل: ║
║ • knock $SERVER_IP $KNOCK_PORT_1 $KNOCK_PORT_2 $KNOCK_PORT_3 ║
KNOCKEOF
fi)
║ ║
║ ⚠️ التحذيرات المهمة: ║
║ 1. اختبر الاتصال قبل قطع الجلسة الحالية! ║
║ 2. احفظ معلومات Port Knocking في مكان آمن ║
║ 3. راجع: /root/FORTRESS_INFO.txt ║
║ 4. السجلات: $LOG_FILE ║
║ ║
╚══════════════════════════════════════════════════════════════════╝
FINALEOF
warning "\n⚠ لاختبار الاتصال، افتح terminal جديد وجرّب:"
if [ "$ENABLE_PORT_KNOCKING" == "true" ]; then
echo "knock $SERVER_IP $KNOCK_PORT_1 $KNOCK_PORT_2 $KNOCK_PORT_3"
fi
echo "ssh -p $SSH_PORT $ADMIN_USER@$SERVER_IP"
log "\n✅ التثبيت مكتمل - السيرفر الآن محمي!"
}
# ════════════════════════════════════════════════════════════════
# 🚀 RUN
# ════════════════════════════════════════════════════════════════
main "$@"