Files
servers_security_sys/PHASE_2_SERVER_HARDENING.md
2026-02-05 13:22:27 +03:00

1052 lines
30 KiB
Markdown

# 🛡️ المرحلة 2: تأمين السيرفر (Server Hardening)
## 📋 نظرة عامة
هذه المرحلة تحوّل السيرفر إلى **قلعة منيعة** مع 9 طبقات حماية.
⚠️ **تحذير مهم**: اتبع الترتيب بالضبط لتجنب قطع الاتصال!
---
## 🚀 المتطلبات الأولية
```bash
# ✅ قبل البدء، تأكد من:
# 1. اللابتوب جاهز (المرحلة 1 مكتملة)
# 2. لديك المفتاح العام: cat ~/FORTRESS_KEYS/fortress_master.pub
# 3. اتصال SSH حالي بالسيرفر كـ root
# 4. عنوان IP السيرفر معروف
# 5. CloudPanel مثبت (إن وجد)
```
---
## 📦 الخطوة 0: الفحوصات الأولية (Pre-flight)
### 0.1 الاتصال الأولي بالسيرفر
```bash
# من اللابتوب - الاتصال الأول (كـ root عبر password)
ssh root@194.163.xxx.xxx
# بعد الدخول، نفذ:
```
### 0.2 سكريبت الفحص الأولي
```bash
cat > /tmp/preflight_check.sh <<'EOF'
#!/bin/bash
# 🔍 فحص ما قبل التثبيت
echo "🔍 TRIPZ FORTRESS - Pre-flight Check"
echo "════════════════════════════════════"
# معلومات النظام
echo "📊 معلومات النظام:"
echo " OS: $(cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2)"
echo " Kernel: $(uname -r)"
echo " RAM: $(free -h | awk '/^Mem:/ {print $2}')"
echo " Disk: $(df -h / | awk 'NR==2 {print $2}')"
echo ""
# التحقق من الاتصال
echo "🌐 التحقق من الاتصال:"
ping -c 2 8.8.8.8 >/dev/null 2>&1 && echo " ✅ Internet OK" || echo " ❌ No Internet!"
ping -c 2 google.com >/dev/null 2>&1 && echo " ✅ DNS OK" || echo " ❌ DNS Failed!"
echo ""
# المنافذ المفتوحة حالياً
echo "🔓 المنافذ المفتوحة حالياً:"
ss -tuln | grep LISTEN | awk '{print " " $5}' | sort -u
echo ""
# الخدمات الحالية
echo "🔧 الخدمات النشطة:"
systemctl list-units --type=service --state=running | grep -E "ssh|mysql|nginx|apache" | awk '{print " " $1}'
echo ""
# CloudPanel Check
if [ -d "/usr/local/cloudpanel" ]; then
echo "☁️ CloudPanel: ✅ مثبت"
echo " الإصدار: $(cat /usr/local/cloudpanel/version 2>/dev/null || echo 'غير معروف')"
else
echo "☁️ CloudPanel: ❌ غير مثبت"
fi
echo ""
# المستخدمين الحاليين
echo "👥 المستخدمين (UID >= 1000):"
awk -F: '$3 >= 1000 && $1 != "nobody" {print " " $1 " (UID: " $3 ")"}' /etc/passwd
echo ""
# تحذيرات
echo "⚠️ تحذيرات:"
[ "$(id -u)" -ne 0 ] && echo " ⚠️ يجب التشغيل كـ root!" || echo " ✅ Running as root"
[ -z "$SSH_CONNECTION" ] && echo " ⚠️ ليس عبر SSH!" || echo " ✅ Connected via SSH"
echo ""
echo "════════════════════════════════════"
echo "✅ الفحص مكتمل - جاهز للتثبيت"
EOF
chmod +x /tmp/preflight_check.sh
/tmp/preflight_check.sh
```
### 0.3 نسخة احتياطية سريعة (قبل التعديل)
```bash
# نسخة احتياطية للملفات الحساسة
mkdir -p /root/backup_before_fortress
cp -r /etc/ssh /root/backup_before_fortress/
cp /etc/sudoers /root/backup_before_fortress/ 2>/dev/null
[ -d /etc/nginx ] && cp -r /etc/nginx /root/backup_before_fortress/
[ -d /usr/local/cloudpanel ] && cp /usr/local/cloudpanel/version /root/backup_before_fortress/
echo "✅ نسخة احتياطية محفوظة في /root/backup_before_fortress"
```
---
## 👤 الخطوة 1: إنشاء المستخدم الإداري (tripzadmin)
### 1.1 إنشاء المستخدم
```bash
# إنشاء مستخدم إداري جديد
useradd -m -s /bin/bash -G sudo tripzadmin
# تعطيل كلمة المرور (سنستخدم المفاتيح فقط)
passwd -l tripzadmin
# تأكيد الإنشاء
id tripzadmin
# يجب أن ترى: uid=1000(tripzadmin) gid=1000(tripzadmin) groups=1000(tripzadmin),27(sudo)
```
### 1.2 إعداد SSH للمستخدم
```bash
# إنشاء مجلد SSH
mkdir -p /home/tripzadmin/.ssh
chmod 700 /home/tripzadmin/.ssh
# ⚠️ هنا: الصق المفتاح العام من اللابتوب!
# (من اللابتوب: cat ~/FORTRESS_KEYS/fortress_master.pub)
cat > /home/tripzadmin/.ssh/authorized_keys <<'SSHKEYEOF'
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... fortress-master-20250205
SSHKEYEOF
# تعيين الصلاحيات
chmod 600 /home/tripzadmin/.ssh/authorized_keys
chown -R tripzadmin:tripzadmin /home/tripzadmin/.ssh
# التحقق
ls -la /home/tripzadmin/.ssh/
```
### 1.3 إعطاء صلاحيات sudo بدون كلمة مرور
```bash
# للمستخدم الإداري فقط (لسهولة الإدارة)
cat > /etc/sudoers.d/tripzadmin <<'EOF'
# TRIPZ FORTRESS - Admin User
tripzadmin ALL=(ALL) NOPASSWD:ALL
# تعطيل صلاحيات sudo عن باقي المستخدمين لاحقاً
EOF
chmod 440 /etc/sudoers.d/tripzadmin
# التحقق من صحة التكوين
visudo -c
```
---
## 🧪 الخطوة 2: اختبار الاتصال (قبل قطع root!)
### 2.1 فتح جلسة SSH ثانية (CRITICAL!)
```bash
# ⚠️ من اللابتوب - افتح نافذة terminal ثانية:
ssh -i ~/FORTRESS_KEYS/fortress_master tripzadmin@194.163.xxx.xxx
# يجب أن تدخل بنجاح بدون كلمة مرور!
# إذا فشلت، لا تكمل! راجع الخطوة 1
# بعد الدخول، نفذ:
whoami # يجب أن يظهر: tripzadmin
sudo whoami # يجب أن يظهر: root (بدون طلب كلمة مرور)
```
### 2.2 إنشاء سكريبت الطوارئ
```bash
# من الجلسة الجديدة (tripzadmin):
sudo cat > /root/emergency_restore.sh <<'EOF'
#!/bin/bash
# 🆘 سكريبت الطوارئ - استعادة الوصول
echo "🆘 EMERGENCY RESTORE MODE"
echo "════════════════════════════════"
# استعادة SSH القديم
if [ -d /root/backup_before_fortress ]; then
echo "♻️ استعادة تكوين SSH القديم..."
cp -r /root/backup_before_fortress/ssh/* /etc/ssh/
systemctl restart sshd
echo "✅ SSH مستعاد"
fi
# إعادة فتح منفذ 22
ufw allow 22/tcp
echo "✅ منفذ 22 مفتوح"
# السماح بـ root login (مؤقت)
sed -i 's/PermitRootLogin no/PermitRootLogin yes/' /etc/ssh/sshd_config
systemctl restart sshd
echo "✅ Root login مفعّل"
echo "════════════════════════════════"
echo "✅ يمكنك الآن الاتصال كـ root"
EOF
sudo chmod +x /root/emergency_restore.sh
```
---
## 🔐 الخطوة 3: تأمين SSH (خطوة حساسة!)
### 3.1 تكوين SSH الآمن
```bash
# من جلسة tripzadmin:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
# التكوين الجديد
sudo tee /etc/ssh/sshd_config > /dev/null <<'SSHDEOF'
# ════════════════════════════════════════
# TRIPZ FORTRESS - SSH Hardened Config
# ════════════════════════════════════════
# المنفذ الجديد (سيتم تغييره لاحقاً)
Port 22
# البروتوكول
Protocol 2
# الاستماع
AddressFamily inet
ListenAddress 0.0.0.0
# المفاتيح فقط
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
# تعطيل root login المباشر
PermitRootLogin no
# المستخدمين المسموح لهم
AllowUsers tripzadmin
# الأمان
X11Forwarding no
PermitUserEnvironment no
AllowAgentForwarding no
AllowTcpForwarding no
PermitTunnel no
# الجلسات
MaxAuthTries 3
MaxSessions 2
ClientAliveInterval 300
ClientAliveCountMax 2
LoginGraceTime 30
# التشفير القوي
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
# اللوق
SyslogFacility AUTH
LogLevel VERBOSE
# Banner (اختياري)
Banner /etc/ssh/banner.txt
SSHDEOF
# إنشاء banner تحذيري
sudo tee /etc/ssh/banner.txt > /dev/null <<'EOF'
════════════════════════════════════════════════════════
⚠️ AUTHORIZED ACCESS ONLY ⚠️
This system is protected by TRIPZ FORTRESS v8.1
All connections are monitored and logged.
Unauthorized access attempts will be prosecuted.
🛡️ Protected by 9-Layer Security System
════════════════════════════════════════════════════════
EOF
```
### 3.2 اختبار التكوين (قبل التطبيق!)
```bash
# التحقق من صحة التكوين
sudo sshd -t
# يجب ألا ترى أي أخطاء!
# إذا رأيت أخطاء، لا تكمل!
```
### 3.3 إعادة تشغيل SSH بأمان
```bash
# ⚠️ الطريقة الآمنة (لا تستخدم restart!)
sudo systemctl reload sshd
# التحقق من حالة الخدمة
sudo systemctl status sshd | grep Active
# يجب أن ترى: Active: active (running)
```
### 3.4 اختبار نهائي (من اللابتوب)
```bash
# افتح terminal ثالث من اللابتوب:
ssh -i ~/FORTRESS_KEYS/fortress_master tripzadmin@194.163.xxx.xxx
# يجب أن تدخل بنجاح!
# إذا نجح، أغلق الجلسات القديمة واستمر من الجلسة الجديدة
```
---
## 🔥 الخطوة 4: تثبيت وتكوين UFW (Firewall)
### 4.1 تثبيت UFW
```bash
sudo apt update
sudo apt install -y ufw
# عدم التفعيل بعد! (سنضبطه أولاً)
```
### 4.2 تكوين القواعد الأساسية
```bash
# السياسة الافتراضية
sudo ufw default deny incoming
sudo ufw default allow outgoing
# السماح بـ SSH الحالي (منفذ 22 حالياً)
sudo ufw allow 22/tcp comment 'SSH Temporary'
# HTTP و HTTPS (للتطبيقات)
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
# CloudPanel (إن وجد)
if [ -d "/usr/local/cloudpanel" ]; then
sudo ufw allow 8443/tcp comment 'CloudPanel'
fi
# معاينة القواعد قبل التفعيل
sudo ufw show added
```
### 4.3 تفعيل UFW
```bash
# ⚠️ تأكد من وجود قاعدة SSH!
sudo ufw enable
# التحقق
sudo ufw status verbose
```
---
## 🎯 الخطوة 5: تثبيت Fail2Ban (الحماية من Brute-Force)
### 5.1 التثبيت
```bash
sudo apt install -y fail2ban
```
### 5.2 التكوين المحسّن
```bash
# التكوين الرئيسي
sudo tee /etc/fail2ban/jail.local > /dev/null <<'JAILEOF'
[DEFAULT]
# الإعدادات العامة
bantime = 3600
findtime = 600
maxretry = 3
destemail = your-email@example.com
sendername = TRIPZ-FORTRESS-ALERT
action = %(action_mwl)s
# Whitelist (عنوان IP الخاص بك)
ignoreip = 127.0.0.1/8 ::1
# ══════════════════════════════════════
# SSH Protection (الأهم!)
# ══════════════════════════════════════
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 7200
findtime = 600
# حماية أقوى ضد SSH brute-force
[sshd-aggressive]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 2
bantime = 86400
findtime = 300
# ══════════════════════════════════════
# Web Protection (لـ CloudPanel / Nginx)
# ══════════════════════════════════════
[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
[nginx-noproxy]
enabled = true
port = 80,443
logpath = /var/log/nginx/access.log
JAILEOF
```
### 5.3 فلتر SSH مخصص (اختياري)
```bash
sudo tee /etc/fail2ban/filter.d/sshd-custom.conf > /dev/null <<'EOF'
# Custom SSH filter for more aggressive detection
[Definition]
failregex = ^%(__prefix_line)s(?:error: PAM: )?[aA]uthentication (?:failure|error|failed) for .* from <HOST>( via \S+)?\s*$
^%(__prefix_line)s(?:error: PAM: )?User not known to the underlying authentication module for .* from <HOST>\s*$
^%(__prefix_line)sFailed (?:password|publickey) for .* from <HOST>(?: port \d*)?(?: ssh\d*)?$
^%(__prefix_line)sROOT LOGIN REFUSED.* FROM <HOST>\s*$
^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>\s*$
ignoreregex =
EOF
```
### 5.4 تفعيل Fail2Ban
```bash
# تفعيل وبدء الخدمة
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# التحقق من الحالة
sudo fail2ban-client status
# مراقبة سجل SSH
sudo fail2ban-client status sshd
```
---
## 🚪 الخطوة 6: Port Knocking (الطبقة السرية)
### 6.1 تثبيت Knockd
```bash
sudo apt install -y knockd
```
### 6.2 اختيار تسلسل الطرق
```bash
# اختر 3 منافذ عشوائية (ليست مستخدمة)
# مثال: 7531, 8642, 9753
# احفظها في مكان آمن!
KNOCK1=7531
KNOCK2=8642
KNOCK3=9753
```
### 6.3 تكوين Knockd
```bash
sudo tee /etc/knockd.conf > /dev/null <<EOF
[options]
UseSyslog
LogFile = /var/log/knockd.log
[openSSH]
sequence = $KNOCK1,$KNOCK2,$KNOCK3
seq_timeout = 15
command = /usr/sbin/ufw allow from %IP% to any port 22 proto tcp
tcpflags = syn
[closeSSH]
sequence = $KNOCK3,$KNOCK2,$KNOCK1
seq_timeout = 15
command = /usr/sbin/ufw delete allow from %IP% to any port 22 proto tcp
tcpflags = syn
EOF
```
### 6.4 تفعيل Knockd
```bash
# تحرير ملف التكوين الرئيسي
sudo sed -i 's/START_KNOCKD=0/START_KNOCKD=1/' /etc/default/knockd
# بدء الخدمة
sudo systemctl enable knockd
sudo systemctl start knockd
# التحقق
sudo systemctl status knockd
```
### 6.5 تطبيق Port Knocking على UFW
```bash
# ⚠️ خطوة حساسة: إغلاق منفذ SSH للجميع
sudo ufw delete allow 22/tcp
# الآن SSH مغلق! يجب استخدام knock للفتح
# ⚠️ قبل قطع الاتصال، اختبر من اللابتوب!
```
---
## 🧪 الخطوة 7: اختبار Port Knocking
### 7.1 من اللابتوب (في terminal منفصل)
```bash
# حدّث سكريبت knock بالتسلسل الصحيح
vim ~/FORTRESS_KEYS/knock.sh
# عدّل السطر:
KNOCK_SEQUENCE="7531 8642 9753" # استخدم أرقامك
# احفظ
# اختبر:
~/FORTRESS_KEYS/knock.sh 194.163.xxx.xxx
```
### 7.2 من السيرفر (مراقبة)
```bash
# في الجلسة المفتوحة، راقب السجل:
sudo tail -f /var/log/knockd.log
# يجب أن ترى رسائل الطرقات الصحيحة
```
---
## 🎣 الخطوة 8: Honeypot (Endlessh)
### 8.1 تثبيت Endlessh
```bash
sudo apt install -y git golang-go
cd /opt
sudo git clone https://github.com/skeeto/endlessh
cd endlessh
sudo make
# نسخ البرنامج
sudo cp endlessh /usr/local/bin/
```
### 8.2 تكوين Endlessh
```bash
# التكوين
sudo mkdir -p /etc/endlessh
sudo tee /etc/endlessh/config > /dev/null <<'EOF'
# Port to bind (standard SSH port to trap bots)
Port 22
# Delay between lines (milliseconds)
Delay 10000
# Maximum line length
MaxLineLength 32
# Maximum number of clients
MaxClients 4096
# Log level
LogLevel 1
EOF
```
### 8.3 Systemd Service
```bash
sudo tee /etc/systemd/system/endlessh.service > /dev/null <<'EOF'
[Unit]
Description=Endlessh SSH Tarpit
After=network.target
[Service]
Type=simple
User=nobody
ExecStart=/usr/local/bin/endlessh -c /etc/endlessh/config
Restart=always
# Hardening
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
EOF
# تفعيل
sudo systemctl daemon-reload
sudo systemctl enable endlessh
sudo systemctl start endlessh
# التحقق
sudo systemctl status endlessh
```
---
## 🎭 الخطوة 9: Fake Services (MySQL Trap)
### 9.1 سكريبت Fake MySQL
```bash
sudo tee /usr/local/bin/fake-mysql.sh > /dev/null <<'FAKEMYSQLEOF'
#!/bin/bash
# 🎭 Fake MySQL Service - Honeypot Trap
LOG_FILE="/var/log/fortress/fake-mysql.log"
PORT=3306
mkdir -p /var/log/fortress
echo "$(date '+%Y-%m-%d %H:%M:%S') - Fake MySQL started on port $PORT" >> "$LOG_FILE"
# Listen and log
while true; do
nc -l -p $PORT -k 2>&1 | while read line; do
ATTACKER_IP=$(echo $line | grep -oE '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' | head -1)
echo "$(date '+%Y-%m-%d %H:%M:%S') - MySQL probe from: $ATTACKER_IP" >> "$LOG_FILE"
# رسالة مضللة
echo -e "\x4a\x00\x00\x00\x0a\x35\x2e\x37\x2e\x33\x33" # MySQL handshake
sleep 2
done
done
FAKEMYSQLEOF
sudo chmod +x /usr/local/bin/fake-mysql.sh
```
### 9.2 Systemd Service
```bash
sudo tee /etc/systemd/system/fake-mysql.service > /dev/null <<'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
sudo systemctl daemon-reload
sudo systemctl enable fake-mysql
sudo systemctl start fake-mysql
# السماح في UFW
sudo ufw allow 3306/tcp comment 'Fake MySQL Trap'
```
---
## 🔧 الخطوة 10: تحسينات النظام (Kernel Hardening)
### 10.1 Sysctl Hardening
```bash
sudo tee -a /etc/sysctl.conf > /dev/null <<'SYSCTLEOF'
# ════════════════════════════════════════
# TRIPZ FORTRESS - 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
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0
# ICMP protection
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.icmp_echo_ignore_all = 0
# Network performance
net.core.netdev_max_backlog = 2048
net.core.somaxconn = 1024
# TCP BBR (للأداء)
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
# File system protection
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
# Kernel pointers (security)
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1
SYSCTLEOF
# تطبيق التعديلات
sudo sysctl -p
```
---
## 💾 الخطوة 11: النسخ الاحتياطي التلقائي
### 11.1 سكريبت النسخ الاحتياطي
```bash
sudo mkdir -p /usr/local/bin/fortress
sudo mkdir -p /backup/fortress
sudo tee /usr/local/bin/fortress/backup.sh > /dev/null <<'BACKUPEOF'
#!/bin/bash
# ════════════════════════════════════════
# TRIPZ FORTRESS - Encrypted Backup
# ════════════════════════════════════════
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
cp /root/FORTRESS_INFO.txt "$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"
# تطبيق سياسة الاحتفاظ (30 يوم)
find "$BACKUP_DIR" -name "fortress_*.tar.gz.enc" -mtime +$RETENTION_DAYS -delete
echo "✅ النسخة الاحتياطية: $ENCRYPTED_FILE"
echo "🔑 كلمة فك التشفير: $BACKUP_PASSWORD"
# تنبيه Telegram (إن وُجد)
if [ -x /usr/local/bin/fortress/telegram_notify.sh ]; then
/usr/local/bin/fortress/telegram_notify.sh "✅ نسخة احتياطية جديدة: $(basename $ENCRYPTED_FILE)"
fi
BACKUPEOF
sudo chmod +x /usr/local/bin/fortress/backup.sh
```
### 11.2 جدولة النسخ الاحتياطي (Cron)
```bash
# إضافة مهمة cron (يومياً 2 صباحاً)
(sudo crontab -l 2>/dev/null; echo "0 2 * * * /usr/local/bin/fortress/backup.sh >> /var/log/fortress/backup.log 2>&1") | sudo crontab -
# التحقق
sudo crontab -l | grep backup
```
---
## 📊 الخطوة 12: المراقبة والتنبيهات (Monitoring)
### 12.1 تثبيت أدوات المراقبة
```bash
sudo apt install -y htop iotop nethogs
```
### 12.2 سكريبت تنبيهات Telegram
```bash
sudo tee /usr/local/bin/fortress/telegram_notify.sh > /dev/null <<'TELEGRAMEOF'
#!/bin/bash
# 📱 Telegram Notification System
TELEGRAM_BOT_TOKEN="YOUR_BOT_TOKEN_HERE"
TELEGRAM_CHAT_ID="YOUR_CHAT_ID_HERE"
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)
🕐 Time: $(date '+%Y-%m-%d %H:%M:%S')
📨 Message:
$MESSAGE" \
-d parse_mode="HTML" > /dev/null
if [ $? -eq 0 ]; then
echo "✅ تم إرسال التنبيه"
else
echo "❌ فشل إرسال التنبيه"
fi
TELEGRAMEOF
sudo chmod +x /usr/local/bin/fortress/telegram_notify.sh
# ⚠️ لا تنسى تحديث TOKEN و CHAT_ID!
```
### 12.3 تنبيهات تلقائية (Fail2Ban)
```bash
# تكوين Fail2Ban لإرسال تنبيهات
sudo tee /etc/fail2ban/action.d/telegram.conf > /dev/null <<'EOF'
[Definition]
actionstart = /usr/local/bin/fortress/telegram_notify.sh "🟢 Fail2Ban بدأ"
actionstop = /usr/local/bin/fortress/telegram_notify.sh "🔴 Fail2Ban توقف"
actionban = /usr/local/bin/fortress/telegram_notify.sh "🚫 حظر IP: <ip> (Jail: <name>)"
actionunban = /usr/local/bin/fortress/telegram_notify.sh "✅ إلغاء حظر IP: <ip>"
EOF
# تفعيل في jail.local
sudo sed -i 's/action = %(action_mwl)s/action = %(action_mwl)s\n telegram/' /etc/fail2ban/jail.local
sudo systemctl restart fail2ban
```
---
## 📝 الخطوة 13: التوثيق وملف المعلومات
### 13.1 إنشاء ملف معلومات السيرفر
```bash
sudo tee /root/FORTRESS_INFO.txt > /dev/null <<EOF
════════════════════════════════════════════════════════
🛡️ TRIPZ FORTRESS v8.1 - Server Information
════════════════════════════════════════════════════════
تاريخ التثبيت: $(date '+%Y-%m-%d %H:%M:%S')
السيرفر: $(hostname)
IP: $(curl -s ifconfig.me)
🔐 معلومات الأمان:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
المستخدم الإداري: tripzadmin
منفذ SSH: 22 (محمي بـ Port Knocking)
تسلسل Knocking: $KNOCK1, $KNOCK2, $KNOCK3
🛡️ الطبقات الأمنية النشطة:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ Layer 1: SSH Key-Only Authentication
✅ Layer 2: UFW Firewall
✅ Layer 3: Fail2Ban Progressive Blocking
✅ Layer 4: Port Knocking
✅ Layer 5: Endlessh Honeypot (Port 22)
✅ Layer 6: Fake MySQL Service (Port 3306)
✅ Layer 7: Kernel Hardening
✅ Layer 8: Encrypted Backups
✅ Layer 9: Telegram Alerts
🔧 أوامر مفيدة:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
• فحص UFW: sudo ufw status verbose
• فحص Fail2Ban: sudo fail2ban-client status
• حظر Fail2Ban: sudo fail2ban-client status sshd
• سجل Knockd: sudo tail -f /var/log/knockd.log
• سجل Endlessh: sudo journalctl -u endlessh -f
• نسخ احتياطي يدوي: sudo /usr/local/bin/fortress/backup.sh
📁 الملفات المهمة:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
• السجلات: /var/log/fortress/
• النسخ الاحتياطية: /backup/fortress/
• التكوينات: /etc/ssh/, /etc/fail2ban/, /etc/ufw/
⚠️ ملاحظات مهمة:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. للاتصال: استخدم knock قبل SSH
2. النسخ الاحتياطية مشفرة بـ AES-256
3. الاحتفاظ بآخر 30 يوم فقط
4. تنبيهات Telegram مفعّلة
📞 الدعم:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
https://tripz-egypt.com
[email protected]
════════════════════════════════════════════════════════
✅ السيرفر محمي بالكامل!
════════════════════════════════════════════════════════
EOF
# عرض الملف
sudo cat /root/FORTRESS_INFO.txt
```
---
## ✅ الخطوة 14: الفحوصات النهائية
### 14.1 سكريبت الفحص الشامل
```bash
sudo tee /usr/local/bin/fortress/health_check.sh > /dev/null <<'HEALTHEOF'
#!/bin/bash
# 🔍 TRIPZ FORTRESS - Health Check
echo "🔍 TRIPZ FORTRESS Health Check"
echo "════════════════════════════════════════════════"
# الخدمات
echo "🔧 الخدمات:"
services=("sshd" "ufw" "fail2ban" "knockd" "endlessh" "fake-mysql")
for svc in "${services[@]}"; do
if systemctl is-active --quiet "$svc" 2>/dev/null; then
echo " ✅ $svc نشط"
else
echo " ❌ $svc متوقف!"
fi
done
# UFW Status
echo ""
echo "🛡️ جدار الحماية:"
sudo ufw status | grep -E "Status:|22/tcp|80/tcp|443/tcp" | sed 's/^/ /'
# Fail2Ban Status
echo ""
echo "🚫 Fail2Ban:"
BANNED=$(sudo fail2ban-client status sshd 2>/dev/null | grep "Banned:" | awk '{print $NF}')
echo " محظورون حالياً: $BANNED"
# Disk Space
echo ""
echo "💾 مساحة القرص:"
df -h / | awk 'NR==2 {print " المستخدم: " $3 " / " $2 " (" $5 ")"}'
# الذاكرة
echo ""
echo "🧠 الذاكرة:"
free -h | awk 'NR==2 {print " المستخدم: " $3 " / " $2}'
# آخر نسخة احتياطية
echo ""
echo "💾 آخر نسخة احتياطية:"
LAST_BACKUP=$(ls -t /backup/fortress/*.enc 2>/dev/null | head -1)
if [ -n "$LAST_BACKUP" ]; then
echo " ✅ $(basename $LAST_BACKUP)"
echo " 📅 $(stat -c %y "$LAST_BACKUP" | cut -d'.' -f1)"
else
echo " ⚠️ لا توجد نسخ احتياطية"
fi
echo ""
echo "════════════════════════════════════════════════"
echo "✅ الفحص مكتمل"
HEALTHEOF
sudo chmod +x /usr/local/bin/fortress/health_check.sh
# تشغيل الفحص
sudo /usr/local/bin/fortress/health_check.sh
```
---
## 🎉 النتيجة النهائية
```bash
# الآن السيرفر:
# ✅ محمي بـ 9 طبقات أمنية
# ✅ Port Knocking مفعّل
# ✅ Honeypots نشطة
# ✅ نسخ احتياطية تلقائية
# ✅ تنبيهات Telegram
# ✅ Fail2Ban Progressive
# ✅ SSH محمي بالكامل
```
---
## 🆘 استكشاف الأخطاء
### مشكلة: لا أستطيع الاتصال بعد Port Knocking
```bash
# من السيرفر (إن كان لديك وصول):
sudo /root/emergency_restore.sh
# من CloudPanel (إن وُجد):
# استخدم Terminal من الواجهة
```
### مشكلة: Fail2Ban حظرني!
```bash
# إلغاء الحظر
sudo fail2ban-client set sshd unbanip YOUR_IP
```
### مشكلة: نسيت تسلسل Knocking
```bash
# من السيرفر:
sudo cat /etc/knockd.conf | grep sequence
```
---
## 📚 المرحلة التالية
بعد إتمام هذه المرحلة بنجاح، انتقل إلى:
📄 **PHASE_3_APPLICATION_DEPLOYMENT.md**
═══════════════════════════════════════════
✅ المرحلة 2 مكتملة - السيرفر محمي!
═══════════════════════════════════════════