2026-02-05/1
This commit is contained in:
557
PHASE_1_LAPTOP_SETUP.md
Normal file
557
PHASE_1_LAPTOP_SETUP.md
Normal 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
1051
PHASE_2_SERVER_HARDENING.md
Normal file
File diff suppressed because it is too large
Load Diff
822
PHASE_3_APPLICATION_DEPLOYMENT.md
Normal file
822
PHASE_3_APPLICATION_DEPLOYMENT.md
Normal 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
338
QUICK_START_GUIDE.md
Normal 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
216
config_example.sh
Normal 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
463
system_check.sh
Normal 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
|
||||||
952
tripz_fortress_v8.2_generator.sh
Normal file
952
tripz_fortress_v8.2_generator.sh
Normal 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 "$@"
|
||||||
Reference in New Issue
Block a user