مجموعات الأمان وقوائم التحكم في الشبكة
مجموعات الأمان وقوائم التحكم في الشبكة
توفر AWS طبقتين متكاملتين من الجدار الناري: مجموعات الأمان (Security Groups) وقوائم التحكم في الوصول للشبكة (NACLs). فهم الفارق الدقيق بينهما — التصفية ذات الحالة مقابل عديمة الحالة، وأين يُطبَّق كل منهما، وكيف يتكاملان — يمثّل أحد أكثر الفجوات شيوعًا في الحوادث الإنتاجية على AWS. أتقن هذا النموذج ولن تتساءل مرةً أخرى لماذا منفذٌ مفتوح بشكل غامض أو لماذا لا تعمل قاعدة السماح.
التصفية ذات الحالة مقابل عديمة الحالة
الفارق الجوهري الوحيد هو تتبع الاتصال.
مجموعات الأمان ذات حالة (Stateful). عندما تسمح بحركة TCP/443 الواردة، تسمح المجموعة تلقائيًا بحركة المرور العائدة (حزم الاستجابة) حتى دون وجود قاعدة صريحة للحركة الصادرة. يتولى جدول تتبع الاتصال هذا الأمر. والنتيجة العملية: تكتب أقل عدد من القواعد، وتعبّر عن النية لا عن ميكانيكيات الحزم.
قوائم NACL عديمة الحالة (Stateless). تقيّم كل حزمة بشكل مستقل دون ذاكرة للحزم السابقة. إذا سمحت بحركة TCP/443 الواردة، يجب أن تسمح صراحةً بحركة TCP الصادرة ضمن نطاق المنافذ المؤقتة (1024–65535) لكي تخرج الاستجابات من الشبكة الفرعية. نسيان هذا هو الخطأ الأول في إعداد NACL في الإنتاج.
بنية الأمان المتعددة الطبقات
يوضح الرسم البياني أدناه كيف تتكدس الطبقتان في تطبيق ثلاثي الطبقات نموذجي داخل VPC.
قواعد مجموعات الأمان بعمق
مجموعات الأمان تعمل بنظام السماح فقط — لا يوجد رفض صريح. يُرفض كل حركة المرور الواردة افتراضيًا؛ يُسمح بكل حركة المرور الصادرة افتراضيًا. يمكن للقواعد الإشارة إلى معرفات مجموعات أمان أخرى بدلًا من نطاقات CIDR، وهو النمط المعياري في AWS للتحكم في حركة المرور الداخلية بين الخدمات.
sg-app في قواعد الوارد لـ sg-db، يُسمح تلقائيًا لأي نسخة جديدة تنضم إلى sg-app — لن تضطر أبدًا لتتبع نطاقات الشبكة الفرعية عند التوسع. هذا النمط هو المعيار على نطاق الإنتاج.
قواعد NACL بعمق
تعالج قوائم NACL القواعد بترتيب رقمي تصاعدي وتتوقف عند أول تطابق (مثل قوائم ACL في الموجّهات التقليدية). يوجد دائمًا رفض ضمني * DENY ALL في النهاية. الأرقام تصل إلى 32766؛ العرف هو مضاعفات 100 لإتاحة إدراج قواعد لاحقًا. كل قائمة NACL مرتبطة بشبكة فرعية واحدة أو أكثر.
متى تستخدم كل طبقة
في حساب AWS مُصمَّم جيدًا، كلا الطبقتين تعملان في آنٍ واحد لكنهما تخدمان أغراضًا مختلفة:
- مجموعات الأمان — التحكم الأساسي الدقيق. استخدم مراجع معرفات SG لكل حركة المرور الداخلية. طبّق أقل صلاحية للخروج (قيّد الحركة الصادرة بالمنافذ والوجهة). راجع بقاعدة AWS Config:
restricted-sshوvpc-sg-open-only-to-authorized-ports. - قوائم NACL — حاجز احتياطي خشن على مستوى الشبكة الفرعية. استخدمها لفرض سياسات تنظيمية صارمة: حجب CIDR بأكمله تعرّض للاختراق، أو ضمان أن الشبكة الفرعية لقاعدة البيانات لا تتواصل أبدًا مع الإنترنت، أو رفض صريح لنطاق مشبوه حتى لو أُضيفت قاعدة SG عن طريق الخطأ. كثير من الفرق تشغّل قوائم NACL بإعداد "السماح للجميع" (الافتراضي) وتشدّدها فقط للامتثال أو الاستجابة للحوادث.
تقييم القواعد: مسار حركة المرور
لحزمة تنتقل من الإنترنت إلى نسخة RDS، ترتيب التقييم هو:
- يوجّه IGW الحزمة إلى داخل VPC.
- NACL-Public (وارد) — هل TCP/443 مسموح به واردًا للشبكة العامة؟ نعم → متابعة.
- sg-alb (وارد) — هل TCP/443 مسموح به لهذه الواجهة؟ نعم → يستقبل ALB الحزمة.
- ALB يُنهي TLS ويفتح اتصال TCP جديد لطبقة التطبيق.
- NACL-Public (صادر) — هل TCP/8080 مسموح به صادرًا من الشبكة العامة؟ (عديم الحالة — يجب أن يكون صريحًا) → نعم → متابعة.
- NACL-Private (وارد) — هل TCP/8080 من 10.0.1.0/24 مسموح به واردًا؟ نعم → متابعة.
- sg-app (وارد) — هل TCP/8080 من sg-alb مسموح به؟ نعم → يستقبل التطبيق الطلب.
كل اتجاه عند كل حدود هو فحص مستقل. إحصاء خطوة واحدة بشكل خاطئ هو السبب في أن "فتحت المنفذ لكنه لا يزال لا يعمل" هي تذكرة الدعم الأكثر شيوعًا على AWS.
أفضل الممارسات الإنتاجية
- سمِّ كل مجموعة أمان بتسمية واضحة:
sg-{env}-{tier}، مثلsg-prod-app. المجموعات غير المسماة كابوس للامتثال. - لا تستخدم
0.0.0.0/0في قواعد الوارد لمجموعات الأمان إلا لموازنات التحميل العامة (المنفذ 443/80 فقط). - فعّل سجلات تدفق VPC (الإجراء: الكل) على كل VPC إنتاجي. تسجّل سجلات التدفق قرارات NACL/SG وهي أساسية للتحقيق الجنائي. أرسلها إلى CloudWatch Logs أو S3، ثم استعلم عبر Athena.
- استخدم AWS Network Firewall أو Gateway Load Balancer مع نظام كشف تسلل خارجي عندما تحتاج فحص الحزم بعمق أو حجبًا جغرافيًا يتجاوز قدرات قوائم NACL.
- شغّل دوريًا الأمر التالي في كل منطقة لاكتشاف مجموعات الأمان ذات الصلاحيات المفرطة.