add the main file structure requirements

هذا الالتزام موجود في:
2026-07-26 22:46:15 +03:00
التزام 8bde42182e
20 ملفات معدلة مع 4613 إضافات و0 حذوفات

عرض الملف

@@ -0,0 +1,182 @@
#!/bin/bash
# فحص أمني تلقائي لتطبيق منشور على غيمة (ghaymah.systems)
# يفحص: المنافذ، SSL، الصلاحيات
DOMAIN="${1:-myapp.ghaymah.systems}"
echo "╔════════════════════════════════════════════════════════════╗"
echo "║ فحص أمني تلقائي لتطبيق على غيمة ║"
echo "║ Target: $DOMAIN"
echo "╚════════════════════════════════════════════════════════════╝"
PASS=0
WARN=0
FAIL=0
# دالة للطباعة الملونة
print_result() {
case $1 in
"pass") echo -e "✅ \e[32m$2\e[0m"; ((PASS++));;
"warn") echo -e "⚠️ \e[33m$2\e[0m"; ((WARN++));;
"fail") echo -e "❌ \e[31m$2\e[0m"; ((FAIL++));;
esac
}
# ═══════════════════════════════════════════════════════════════
# 1. فحص المنافذ المفتوحة
# ═══════════════════════════════════════════════════════════════
echo -e "\n━━━ [1/3] فحص المنافذ ━━━"
check_port() {
local port=$1
local expected=$2
timeout 2 bash -c "echo >/dev/tcp/$DOMAIN/$port" 2>/dev/null
local result=$?
if [ $result -eq 0 ]; then
if [ "$expected" = "open" ]; then
print_result "pass" "المنفذ $port مفتوح (متوقع)"
else
print_result "fail" "المنفذ $port مفتوح (يجب أن يكون مغلقاً!)"
fi
else
if [ "$expected" = "closed" ]; then
print_result "pass" "المنفذ $port مغلق (آمن)"
else
print_result "warn" "المنفذ $port مغلق (قد يكون مشكلة)"
fi
fi
}
# المنافذ المتوقع أن تكون مفتوحة
check_port 80 "open"
check_port 443 "open"
# المنافذ التي يجب أن تكون مغلقة (قواعد البيانات)
check_port 22 "closed" # SSH
check_port 3306 "closed" # MySQL
check_port 5432 "closed" # PostgreSQL
check_port 6379 "closed" # Redis
check_port 27017 "closed" # MongoDB
# ═══════════════════════════════════════════════════════════════
# 2. فحص شهادة SSL
# ═══════════════════════════════════════════════════════════════
echo -e "\n━━━ [2/3] فحص شهادة SSL ━━━"
ssl_info=$(echo | openssl s_client -servername "$DOMAIN" -connect "$DOMAIN:443" 2>/dev/null)
if [ -z "$ssl_info" ]; then
print_result "fail" "لا يمكن الاتصال بـ SSL"
else
# التحقق من صحة الشهادة
verify_result=$(echo "$ssl_info" | grep "Verify return code")
if echo "$verify_result" | grep -q "0 (ok)"; then
print_result "pass" "شهادة SSL صالحة"
else
print_result "fail" "شهادة SSL غير صالحة: $verify_result"
fi
# تاريخ انتهاء الشهادة
expiry=$(echo "$ssl_info" | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
if [ -n "$expiry" ]; then
expiry_epoch=$(date -d "$expiry" +%s 2>/dev/null)
now_epoch=$(date +%s)
days_left=$(( (expiry_epoch - now_epoch) / 86400 ))
if [ $days_left -gt 30 ]; then
print_result "pass" "الشهادة صالحة لـ $days_left يوم"
elif [ $days_left -gt 7 ]; then
print_result "warn" "الشهادة تنتهي خلال $days_left يوم"
else
print_result "fail" "الشهادة تنتهي خلال $days_left يوم فقط!"
fi
fi
# إصدار TLS
tls_version=$(echo "$ssl_info" | grep "Protocol" | awk '{print $3}')
if [[ "$tls_version" == "TLSv1.3" ]]; then
print_result "pass" "يستخدم TLS 1.3 (الأحدث)"
elif [[ "$tls_version" == "TLSv1.2" ]]; then
print_result "pass" "يستخدم TLS 1.2 (مقبول)"
else
print_result "warn" "يستخدم $tls_version (قديم)"
fi
fi
# ═══════════════════════════════════════════════════════════════
# 3. فحص Security Headers
# ═══════════════════════════════════════════════════════════════
echo -e "\n━━━ [3/3] فحص Security Headers ━━━"
headers=$(curl -sI "https://$DOMAIN" 2>/dev/null)
if [ -z "$headers" ]; then
print_result "fail" "لا يمكن جلب الـ headers"
else
# Strict-Transport-Security
if echo "$headers" | grep -qi "Strict-Transport-Security"; then
print_result "pass" "HSTS مفعّل"
else
print_result "warn" "HSTS غير مفعّل"
fi
# X-Content-Type-Options
if echo "$headers" | grep -qi "X-Content-Type-Options"; then
print_result "pass" "X-Content-Type-Options موجود"
else
print_result "warn" "X-Content-Type-Options غير موجود"
fi
# X-Frame-Options
if echo "$headers" | grep -qi "X-Frame-Options"; then
print_result "pass" "X-Frame-Options موجود (حماية من Clickjacking)"
else
print_result "warn" "X-Frame-Options غير موجود"
fi
# Content-Security-Policy
if echo "$headers" | grep -qi "Content-Security-Policy"; then
print_result "pass" "CSP مفعّل"
else
print_result "warn" "CSP غير مفعّل"
fi
# X-Powered-By (يجب أن يكون مخفياً)
if echo "$headers" | grep -qi "X-Powered-By"; then
powered_by=$(echo "$headers" | grep -i "X-Powered-By")
print_result "fail" "X-Powered-By مكشوف: $powered_by"
else
print_result "pass" "X-Powered-By مخفي (آمن)"
fi
# Server header
if echo "$headers" | grep -qi "^Server:"; then
server=$(echo "$headers" | grep -i "^Server:" | head -1)
print_result "warn" "Server header مكشوف: $server"
else
print_result "pass" "Server header مخفي"
fi
fi
# ═══════════════════════════════════════════════════════════════
# ملخص النتائج
# ═══════════════════════════════════════════════════════════════
echo -e "\n╔════════════════════════════════════════════════════════════╗"
echo "║ ملخص الفحص ║"
echo "╠════════════════════════════════════════════════════════════╣"
echo -e "║ ✅ نجح: $PASS "
echo -e "║ ⚠️ تحذير: $WARN "
echo -e "║ ❌ فشل: $FAIL "
echo "╚════════════════════════════════════════════════════════════╝"
# Exit code based on failures
if [ $FAIL -gt 0 ]; then
echo -e "\n⛔ يوجد مشاكل أمنية يجب معالجتها!"
exit 1
elif [ $WARN -gt 0 ]; then
echo -e "\n⚡ يوجد تحذيرات يُنصح بمراجعتها"
exit 0
else
echo -e "\n🎉 جميع الفحوصات ناجحة!"
exit 0
fi

عرض الملف

@@ -0,0 +1,120 @@
# قائمة تدقيق أمني لتطبيق على منصة غيمة (ghaymah.systems)
## قائمة من 15 بنداً للتدقيق الأمني
| # | البند | الفئة | الأولوية |
|---|-------|-------|----------|
| 1 | التحقق من تفعيل شهادة SSL التلقائية من غيمة | Data | عالية |
| 2 | تشفير البيانات في PostgreSQL المُدارة (Encryption at Rest) | Data | عالية |
| 3 | تشفير اتصالات Redis/Valkey | Data | متوسطة |
| 4 | مراجعة صلاحيات الوصول للـ Git Repository المرتبط بالنشر | IAM | عالية |
| 5 | تفعيل MFA على حساب غيمة (deploy.ghaymah.systems) | IAM | عالية |
| 6 | فحص Docker Images المستخدمة من الثغرات (Trivy/Snyk) | Container Security | عالية |
| 7 | عدم تشغيل الحاويات بصلاحيات root | Container Security | عالية |
| 8 | تقييد المنافذ المفتوحة (فقط 80/443) | Network | عالية |
| 9 | تكوين Network Policies بين الخدمات | Network | متوسطة |
| 10 | الحماية من SQL Injection | OWASP | عالية |
| 11 | الحماية من XSS وتفعيل CSP Headers | OWASP | عالية |
| 12 | تفعيل Rate Limiting على APIs | OWASP | عالية |
| 13 | إخفاء Server Headers (X-Powered-By) | OWASP | متوسطة |
| 14 | التحقق من تفعيل النسخ الاحتياطي التلقائي | Data | عالية |
| 15 | مراجعة سجلات المراقبة والتنبيهات | Data | متوسطة |
---
## شرح تطبيق كل بند على منصة غيمة تحديداً
### 1. SSL التلقائية
غيمة توفر شهادة SSL تلقائية لجميع الخطط. للتحقق:
- تأكد من أن الدومين يعمل على HTTPS فقط
- أضف redirect من HTTP إلى HTTPS
- تحقق من صلاحية الشهادة عبر المتصفح
### 2. PostgreSQL المُدارة
- تفعيل خيار "اتصالات مشفّرة" في إعدادات قاعدة البيانات
- استخدام SSL mode في connection string:
```
postgresql://user:pass@host:5432/db?sslmode=require
```
### 3. Redis/Valkey
- استخدام الاتصال المشفر الافتراضي من غيمة
- التأكد من أن Redis غير مكشوف للإنترنت
### 4. Git Repository
- مراجعة من لديه صلاحية push على الـ repo
- تفعيل branch protection على main/master
- استخدام deploy keys بدلاً من personal tokens
### 5. MFA
- تفعيله من إعدادات حساب غيمة
- استخدام تطبيق authenticator (Google/Microsoft)
### 6. Container Scanning
إضافة في CI/CD pipeline:
```yaml
- name: Scan image
run: trivy image myapp:latest --severity HIGH,CRITICAL
```
### 7. Non-root Containers
في Dockerfile:
```dockerfile
USER nonroot:nonroot
# أو
USER 1000:1000
```
### 8. المنافذ
- غيمة تدير هذا تلقائياً
- تأكد من عدم expose منافذ إضافية في Dockerfile
- لا تستخدم `EXPOSE` لمنافذ حساسة
### 9. Network Policies
- فصل PostgreSQL عن الإنترنت العام (internal only)
- السماح فقط للـ backend بالوصول لقاعدة البيانات
### 10. SQL Injection
- استخدام ORM (Prisma, Sequelize, SQLAlchemy)
- أو Prepared Statements:
```javascript
db.query('SELECT * FROM users WHERE id = $1', [userId])
```
### 11. XSS/CSP
إضافة headers في التطبيق:
```javascript
app.use(helmet({
contentSecurityPolicy: {
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'"]
}
}
}));
```
### 12. Rate Limiting
```javascript
const rateLimit = require('express-rate-limit');
app.use('/api/login', rateLimit({
windowMs: 15 * 60 * 1000,
max: 5
}));
```
### 13. Server Headers
```javascript
app.disable('x-powered-by');
// أو استخدام helmet
app.use(helmet.hidePoweredBy());
```
### 14. النسخ الاحتياطي
- خطة g4.medium: نسخ يومي
- خطة g5.large: نسخ كل ساعة
- تحقق من إعدادات النسخ في لوحة التحكم
### 15. المراقبة
- استخدام أدوات الذكاء الاصطناعي والمراقبة المتوفرة في غيمة
- إعداد تنبيهات للأحداث المشبوهة