مجموعات الأمان
ما هي مجموعة الأمان؟
مجموعة الأمان (SG) هي جدار ناري افتراضي يتحكم في حركة المرور الواردة والصادرة من مثيلات EC2 الخاصة بك. إنها خط الدفاع الأول لتأمين موارد AWS الخاصة بك.
┌─────────────────────────────────────────────────────────────┐
│ SECURITY GROUP │
├─────────────────────────────────────────────────────────────┤
│ │
│ Internet │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ SECURITY GROUP │ │
│ │ (Pare-feu au niveau instance) │ │
│ │ │ │
│ │ RÈGLES ENTRANTES (Inbound) │ │
│ │ ┌─────────────────────────────────────────┐ │ │
│ │ │ Port 22 (SSH) ← Admin uniquement │ │ │
│ │ │ Port 80 (HTTP) ← Tout le monde │ │ │
│ │ │ Port 443 (HTTPS) ← Tout le monde │ │ │
│ │ └─────────────────────────────────────────┘ │ │
│ │ │ │
│ │ RÈGLES SORTANTES (Outbound) │ │
│ │ ┌─────────────────────────────────────────┐ │ │
│ │ │ Tout le trafic → Autorisé par défaut │ │ │
│ │ └─────────────────────────────────────────┘ │ │
│ │ │ │
│ └──────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────┐ │
│ │ Instance EC2 │ │
│ └───────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
الخصائص الرئيسية
1. Stateful (حفظ الحالة)
┌─────────────────────────────────────────────────────────────┐
│ STATEFUL │
├─────────────────────────────────────────────────────────────┤
│ │
│ Si une connexion ENTRANTE est autorisée, │
│ la réponse SORTANTE est automatiquement autorisée. │
│ │
│ Exemple : │
│ ┌─────────┐ ┌─────────────┐ │
│ │ Client │ ──── Requête HTTP ────► │ EC2 │ │
│ │ │ (Port 80) │ (SG) │ │
│ │ │ ◄─── Réponse ──────── │ │ │
│ └─────────┘ (Automatique) └─────────────┘ │
│ │
│ Vous n'avez PAS besoin de créer une règle sortante │
│ pour la réponse ! │
│ │
└─────────────────────────────────────────────────────────────┘
2. Deny par Défaut (Inbound)
Par défaut :
• INBOUND : Tout est BLOQUÉ ❌
• OUTBOUND : Tout est AUTORISÉ ✅
Vous devez explicitement autoriser le trafic entrant.
3. Règles ALLOW Uniquement
Security Groups = Règles ALLOW seulement
✅ Vous POUVEZ : Autoriser SSH depuis 10.0.0.0/8
❌ Vous ne POUVEZ PAS : Bloquer une IP spécifique
Pour bloquer des IP → Utilisez les NACLs (niveau VPC)
هيكل القاعدة
┌─────────────────────────────────────────────────────────────┐
│ STRUCTURE D'UNE RÈGLE │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────┬───────────┬─────────────┬───────────────┐ │
│ │ Type │ Protocole │ Port │ Source │ │
│ ├────────────┼───────────┼─────────────┼───────────────┤ │
│ │ SSH │ TCP │ 22 │ 203.0.113.0/24│ │
│ │ HTTP │ TCP │ 80 │ 0.0.0.0/0 │ │
│ │ HTTPS │ TCP │ 443 │ 0.0.0.0/0 │ │
│ │ Custom │ TCP │ 3306 │ sg-xxxxx │ │
│ │ All ICMP │ ICMP │ All │ 10.0.0.0/16 │ │
│ └────────────┴───────────┴─────────────┴───────────────┘ │
│ │
│ Source peut être : │
│ • CIDR : 0.0.0.0/0 (tout), 10.0.0.0/8 (privé) │
│ • Security Group : sg-xxxxxxxx │
│ • Prefix List : pl-xxxxxxxx │
│ │
└─────────────────────────────────────────────────────────────┘
المصادر الشائعة
ترميز CIDR
┌─────────────────────────────────────────────────────────────┐
│ NOTATION CIDR │
├─────────────────────────────────────────────────────────────┤
│ │
│ 0.0.0.0/0 = Tout Internet (ATTENTION !) │
│ ::/0 = Tout IPv6 │
│ │
│ 10.0.0.0/8 = Réseau privé classe A │
│ 172.16.0.0/12 = Réseau privé classe B │
│ 192.168.0.0/16 = Réseau privé classe C │
│ │
│ 203.0.113.25/32 = Une seule IP (votre bureau) │
│ 10.0.1.0/24 = 256 adresses (un subnet) │
│ │
│ Le /XX indique combien de bits sont fixes : │
│ /32 = 1 IP, /24 = 256 IPs, /16 = 65536 IPs, /0 = tout │
│ │
└─────────────────────────────────────────────────────────────┘
الإشارة إلى مجموعة أمان أخرى
┌─────────────────────────────────────────────────────────────┐
│ RÉFÉRENCE ENTRE SECURITY GROUPS │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ sg-web │ │ sg-database │ │
│ │ │ │ │ │
│ │ Inbound: │ │ Inbound: │ │
│ │ HTTP 80 0.0.0.0/0 │ MySQL 3306 │ │
│ │ │ │ Source: sg-web │◄─────┐ │
│ │ │ │ │ │ │
│ │ ┌──────────┐ │ │ ┌──────────┐ │ │ │
│ │ │ Web App │──┼─────────┼─►│ MySQL │ │ │ │
│ │ └──────────┘ │ │ └──────────┘ │ │ │
│ │ │ │ │ │ │
│ └─────────────────┘ └─────────────────┘ │ │
│ │ │
│ Seules les instances dans sg-web peuvent accéder ─────┘ │
│ à MySQL. Pas besoin de gérer les IPs ! │
│ │
└─────────────────────────────────────────────────────────────┘
نصيحة
قم بالإشارة إلى مجموعات الأمان بدلاً من عناوين IP عندما يكون ذلك ممكنًا. إنه أكثر ديناميكية وأكثر أمانًا!
المنافذ الشائعة
| Port | Service | Quand l'ouvrir |
|---|---|---|
| 22 | SSH | وصول الإدارة (تقييد إلى عنوان IP الخاص بك) |
| 80 | HTTP | مواقع الويب العامة |
| 443 | HTTPS | مواقع الويب الآمنة |
| 3306 | MySQL | قاعدة بيانات (داخلي فقط) |
| 5432 | PostgreSQL | قاعدة بيانات (داخلي فقط) |
| 3389 | RDP | سطح المكتب البعيد لنظام Windows |
| 8080 | HTTP Alt | التطبيقات، Tomcat |
| 27017 | MongoDB | قاعدة بيانات (داخلي فقط) |
أمثلة على التكوين
خادم ويب عام
┌─────────────────────────────────────────────────────────────┐
│ SG : sg-webserver-public │
├─────────────────────────────────────────────────────────────┤
│ │
│ INBOUND RULES : │
│ ┌──────────┬──────────┬──────────┬─────────────────────┐ │
│ │ Type │ Protocol │ Port │ Source │ │
│ ├──────────┼──────────┼──────────┼─────────────────────┤ │
│ │ HTTP │ TCP │ 80 │ 0.0.0.0/0 │ │
│ │ HTTPS │ TCP │ 443 │ 0.0.0.0/0 │ │
│ │ SSH │ TCP │ 22 │ 203.0.113.50/32 │ │
│ └──────────┴──────────┴──────────┴─────────────────────┘ │
│ │
│ OUTBOUND RULES : │
│ ┌──────────┬──────────┬──────────┬─────────────────────┐ │
│ │ All │ All │ All │ 0.0.0.0/0 │ │
│ └──────────┴──────────┴──────────┴─────────────────────┘ │
│ │
│ ⚠️ SSH restreint à l'IP du bureau (203.0.113.50) │
│ │
└─────────────────────────────────────────────────────────────┘
قاعدة بيانات (داخلية)
┌─────────────────────────────────────────────────────────────┐
│ SG : sg-database-private │
├─────────────────────────────────────────────────────────────┤
│ │
│ INBOUND RULES : │
│ ┌──────────┬──────────┬──────────┬─────────────────────┐ │
│ │ Type │ Protocol │ Port │ Source │ │
│ ├──────────┼──────────┼──────────┼─────────────────────┤ │
│ │ MySQL │ TCP │ 3306 │ sg-webserver │ │
│ └──────────┴──────────┴──────────┴─────────────────────┘ │
│ │
│ OUTBOUND RULES : │
│ ┌──────────┬──────────┬──────────┬─────────────────────┐ │
│ │ All │ All │ All │ 0.0.0.0/0 │ │
│ └──────────┴──────────┴──────────┴─────────────────────┘ │
│ │
│ ✅ Seulement accessible depuis le SG des serveurs web │
│ ❌ Pas d'accès direct depuis Internet │
│ │
└─────────────────────────────────────────────────────────────┘
الأخطاء الشائعة
1. SSH مفتوح للجميع ❌
MAUVAIS :
SSH (22) - Source: 0.0.0.0/0
↓
⚠️ N'importe qui peut tenter de se connecter !
Attaques brute-force garanties.
BON :
SSH (22) - Source: 203.0.113.50/32 (votre IP)
ou
SSH (22) - Source: 10.0.0.0/8 (réseau privé + VPN)
2. قاعدة بيانات مكشوفة ❌
MAUVAIS :
MySQL (3306) - Source: 0.0.0.0/0
↓
⚠️ Base de données accessible publiquement !
Risque majeur de sécurité.
BON :
MySQL (3306) - Source: sg-application
↓
✅ Seulement accessible depuis les serveurs d'application
3. الكثير من القواعد ❌
MAUVAIS :
Un SG avec 50 règles différentes
↓
⚠️ Difficile à auditer et maintenir
Risque d'erreurs
BON :
Plusieurs SG avec des rôles clairs :
- sg-web-public (HTTP/HTTPS)
- sg-admin (SSH/RDP)
- sg-database (MySQL interne)
الممارسات الجيدة
1. مبدأ الأقل امتيازًا
N'autorisez QUE ce qui est nécessaire.
✅ Bon : Port 443 depuis 0.0.0.0/0 (HTTPS public requis)
❌ Mauvais : Tous les ports depuis 0.0.0.0/0
2. استخدم أسماء وصفية
Noms recommandés :
• sg-web-public-prod
• sg-database-internal-prod
• sg-admin-ssh-restricted
• sg-loadbalancer-public
3. وثق قواعدك
Ajoutez des descriptions à chaque règle :
Port 443 - "HTTPS public pour le site web"
Port 22 - "SSH admin depuis bureau Paris uniquement"
Port 3306 - "MySQL pour backend uniquement"
4. قم بالمراجعة بانتظام
Questions à se poser :
• Y a-t-il des règles avec 0.0.0.0/0 non nécessaires ?
• Des ports de BDD sont-ils exposés publiquement ?
• Les règles SSH sont-elles trop permissives ?
• Y a-t-il des règles obsolètes ?
Security Group مقابل NACL
┌─────────────────────────────────────────────────────────────┐
│ SECURITY GROUP vs NACL │
├─────────────────────────────────────────────────────────────┤
│ │
│ Critère Security Group NACL │
│ ────────────────────────────────────────────────────── │
│ Niveau Instance Subnet │
│ État Stateful Stateless │
│ Règles ALLOW seulement ALLOW et DENY │
│ Évaluation Toutes les règles Ordre de priorité │
│ Défaut Deny entrant Allow tout │
│ Changement Immédiat Immédiat │
│ │
│ Utilisez SG pour : Contrôle fin par instance │
│ Utilisez NACL pour : Bloquer des IPs, défense en profondeur│
│ │
└─────────────────────────────────────────────────────────────┘
ملخص
| Concept | Description |
|---|---|
| Security Group | Pare-feu niveau instance |
| Stateful | Réponses automatiquement autorisées |
| Inbound | Bloqué par défaut |
| Outbound | Autorisé par défaut |
| ALLOW only | Pas de règles DENY |
| Référence SG | Utiliser un SG comme source |
اختبار التحقق
- ماذا يعني "stateful" بالنسبة لمجموعة الأمان؟
- ما هي السياسة الافتراضية لحركة المرور الواردة؟
- هل يمكن حظر عنوان IP محدد باستخدام مجموعة الأمان؟
- ماذا يعني 0.0.0.0/0 كمصدر؟
- لماذا تشير إلى SG بدلاً من IP؟
- ما هو المنفذ الافتراضي لـ SSH؟
القسم التالي: مختبر: بنية EC2