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

30 KiB

🛡️ المرحلة 2: تأمين السيرفر (Server Hardening)

📋 نظرة عامة

هذه المرحلة تحوّل السيرفر إلى قلعة منيعة مع 9 طبقات حماية.

⚠️ تحذير مهم: اتبع الترتيب بالضبط لتجنب قطع الاتصال!


🚀 المتطلبات الأولية

# ✅ قبل البدء، تأكد من:
# 1. اللابتوب جاهز (المرحلة 1 مكتملة)
# 2. لديك المفتاح العام: cat ~/FORTRESS_KEYS/fortress_master.pub
# 3. اتصال SSH حالي بالسيرفر كـ root
# 4. عنوان IP السيرفر معروف
# 5. CloudPanel مثبت (إن وجد)

📦 الخطوة 0: الفحوصات الأولية (Pre-flight)

0.1 الاتصال الأولي بالسيرفر

# من اللابتوب - الاتصال الأول (كـ root عبر password)
ssh root@194.163.xxx.xxx

# بعد الدخول، نفذ:

0.2 سكريبت الفحص الأولي

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 نسخة احتياطية سريعة (قبل التعديل)

# نسخة احتياطية للملفات الحساسة
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 إنشاء المستخدم

# إنشاء مستخدم إداري جديد
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 للمستخدم

# إنشاء مجلد 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 بدون كلمة مرور

# للمستخدم الإداري فقط (لسهولة الإدارة)
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!)

# ⚠️ من اللابتوب - افتح نافذة terminal ثانية:
ssh -i ~/FORTRESS_KEYS/fortress_master tripzadmin@194.163.xxx.xxx

# يجب أن تدخل بنجاح بدون كلمة مرور!
# إذا فشلت، لا تكمل! راجع الخطوة 1

# بعد الدخول، نفذ:
whoami  # يجب أن يظهر: tripzadmin
sudo whoami  # يجب أن يظهر: root (بدون طلب كلمة مرور)

2.2 إنشاء سكريبت الطوارئ

# من الجلسة الجديدة (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 الآمن

# من جلسة 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 اختبار التكوين (قبل التطبيق!)

# التحقق من صحة التكوين
sudo sshd -t

# يجب ألا ترى أي أخطاء!
# إذا رأيت أخطاء، لا تكمل!

3.3 إعادة تشغيل SSH بأمان

# ⚠️ الطريقة الآمنة (لا تستخدم restart!)
sudo systemctl reload sshd

# التحقق من حالة الخدمة
sudo systemctl status sshd | grep Active
# يجب أن ترى: Active: active (running)

3.4 اختبار نهائي (من اللابتوب)

# افتح terminal ثالث من اللابتوب:
ssh -i ~/FORTRESS_KEYS/fortress_master tripzadmin@194.163.xxx.xxx

# يجب أن تدخل بنجاح!
# إذا نجح، أغلق الجلسات القديمة واستمر من الجلسة الجديدة

🔥 الخطوة 4: تثبيت وتكوين UFW (Firewall)

4.1 تثبيت UFW

sudo apt update
sudo apt install -y ufw

# عدم التفعيل بعد! (سنضبطه أولاً)

4.2 تكوين القواعد الأساسية

# السياسة الافتراضية
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

# ⚠️ تأكد من وجود قاعدة SSH!
sudo ufw enable

# التحقق
sudo ufw status verbose

🎯 الخطوة 5: تثبيت Fail2Ban (الحماية من Brute-Force)

5.1 التثبيت

sudo apt install -y fail2ban

5.2 التكوين المحسّن

# التكوين الرئيسي
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 مخصص (اختياري)

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

# تفعيل وبدء الخدمة
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

# التحقق من الحالة
sudo fail2ban-client status

# مراقبة سجل SSH
sudo fail2ban-client status sshd

🚪 الخطوة 6: Port Knocking (الطبقة السرية)

6.1 تثبيت Knockd

sudo apt install -y knockd

6.2 اختيار تسلسل الطرق

# اختر 3 منافذ عشوائية (ليست مستخدمة)
# مثال: 7531, 8642, 9753
# احفظها في مكان آمن!

KNOCK1=7531
KNOCK2=8642
KNOCK3=9753

6.3 تكوين Knockd

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

# تحرير ملف التكوين الرئيسي
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

# ⚠️ خطوة حساسة: إغلاق منفذ SSH للجميع
sudo ufw delete allow 22/tcp

# الآن SSH مغلق! يجب استخدام knock للفتح

# ⚠️ قبل قطع الاتصال، اختبر من اللابتوب!

🧪 الخطوة 7: اختبار Port Knocking

7.1 من اللابتوب (في terminal منفصل)

# حدّث سكريبت knock بالتسلسل الصحيح
vim ~/FORTRESS_KEYS/knock.sh

# عدّل السطر:
KNOCK_SEQUENCE="7531 8642 9753"  # استخدم أرقامك

# احفظ

# اختبر:
~/FORTRESS_KEYS/knock.sh 194.163.xxx.xxx

7.2 من السيرفر (مراقبة)

# في الجلسة المفتوحة، راقب السجل:
sudo tail -f /var/log/knockd.log

# يجب أن ترى رسائل الطرقات الصحيحة

🎣 الخطوة 8: Honeypot (Endlessh)

8.1 تثبيت Endlessh

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

# التكوين
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

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

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

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

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 سكريبت النسخ الاحتياطي

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)

# إضافة مهمة 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 تثبيت أدوات المراقبة

sudo apt install -y htop iotop nethogs

12.2 سكريبت تنبيهات Telegram

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)

# تكوين 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 إنشاء ملف معلومات السيرفر

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 سكريبت الفحص الشامل

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

🎉 النتيجة النهائية

# الآن السيرفر:
# ✅ محمي بـ 9 طبقات أمنية
# ✅ Port Knocking مفعّل
# ✅ Honeypots نشطة
# ✅ نسخ احتياطية تلقائية
# ✅ تنبيهات Telegram
# ✅ Fail2Ban Progressive
# ✅ SSH محمي بالكامل

🆘 استكشاف الأخطاء

مشكلة: لا أستطيع الاتصال بعد Port Knocking

# من السيرفر (إن كان لديك وصول):
sudo /root/emergency_restore.sh

# من CloudPanel (إن وُجد):
# استخدم Terminal من الواجهة

مشكلة: Fail2Ban حظرني!

# إلغاء الحظر
sudo fail2ban-client set sshd unbanip YOUR_IP

مشكلة: نسيت تسلسل Knocking

# من السيرفر:
sudo cat /etc/knockd.conf | grep sequence

📚 المرحلة التالية

بعد إتمام هذه المرحلة بنجاح، انتقل إلى: 📄 PHASE_3_APPLICATION_DEPLOYMENT.md

═══════════════════════════════════════════ المرحلة 2 مكتملة - السيرفر محمي! ═══════════════════════════════════════════