الأمن السيبراني

قوائم ACL القياسيّة والممتدّة : تَمارين نَموذج CCNA على Cisco

7 دقائق للقراءة

قوائم التّحكّم بالوصول Access Control Lists (ACL) هي أداة أساسيّة لِتَصفية حركة المرور على مُوجّهات سيسكو. تَعمل بمبدأ بسيط : قائمة من قواعد تُقارَن بالحزم العابرة، أوّل قاعدة مُطابِقَة تُحدّد المصير (permit أو deny). توجد فئتان رئيسيّتان : ACL القياسيّة (Standard) تُصفّي بناءً على عُنوان المَصدر فقط، أرقامها 1-99 و1300-1999. ACL الممتدّة (Extended) تُصفّي بناءً على المَصدر، الوجهة، البروتوكول، المنفذ — أرقامها 100-199 و2000-2699. هذا الدّرس يَستعرض كلا النّوعيْن بأمثلة عمليّة تَظهر بِشكل مُتكرّر في امتحان CCNA 200-301.

المتطلّبات

  • Cisco Packet Tracer (انظر إقامة مختبر CCNA)
  • فَهم أساسي للتّوجيه (انظر OSPFv2)
  • إلمام بِبروتوكولات الطّبقة الرّابعة (TCP، UDP، ICMP)
  • الوقت المُقدّر : 75 دقيقة

الخطوة 1 — مَفهوم Wildcard Mask

ACL تَستخدم wildcard mask (عَكس subnet mask) لِتَحديد نَطاق العَناوين. الـ 0 يَعني « يَجب أن يَتطابق هذا البِت »، الـ 1 يَعني « أيّ بِت يَعمل ». أمثلة :

# wildcard 0.0.0.0       = host single (تَطابق دقيق)
# wildcard 0.0.0.255     = /24 subnet كاملة
# wildcard 0.0.0.3       = /30 (أربعة عَناوين)
# wildcard 0.0.255.255   = /16 subnet كاملة
# wildcard 255.255.255.255 = أيّ عُنوان (any)

# لِحساب wildcard من subnet mask :
# 255.255.255.0  → 0.0.0.255
# 255.255.255.248 → 0.0.0.7
# 255.255.0.0    → 0.0.255.255

# اختصارات IOS مفيدة :
# host 192.168.1.10  ≡  192.168.1.10 0.0.0.0
# any                ≡  0.0.0.0 255.255.255.255

الخطأ الأكثر شيوعاً للمُبتدئين : خَلط wildcard مع subnet mask. التّمييز : wildcard في ACL والـ network الخاصّة بـ OSPF، بينما subnet mask على واجهات IP. ممارسة : احسب wildcard لكلّ subnet في توبولوجيّتك قبل البَدء في ACL.

الخطوة 2 — ACL القياسيّة (Standard)

ACL القياسيّة تَستخدم رقماً بيْن 1 و99 (أو 1300-1999) وتُصفّي بناءً على عُنوان المَصدر فقط. تُوضَع قَريباً من الوجهة لِمَنع حركة المرور غير المرغوب بها من بَلوغها.

# سيناريو : مَنع شبكة المبيعات (192.168.20.0/24)
# من الوصول إلى خادم HR (192.168.10.50)
# باقي الشّبكات يُسمح لها

# على المُوجّه القريب من الخادم
R1(config)#access-list 10 deny 192.168.20.0 0.0.0.255
R1(config)#access-list 10 permit any

# تَطبيق ACL على الواجهة (in : على الحزم القادمة، out : على الحزم الخارجة)
R1(config)#interface gigabitEthernet 0/0
R1(config-if)#ip access-group 10 out

# تَحقّق
R1#show access-lists
# Standard IP access list 10
#     10 deny   192.168.20.0 0.0.0.255 (5 matches)
#     20 permit any (124 matches)

R1#show ip interface gigabitEthernet 0/0 | include access list

القاعدة الذّهبيّة في ACL القياسيّة : قَريب من الوجهة. لماذا ؟ لأنّ ACL القياسيّة لا تَعرف الوجهة، فإذا وُضعت قَريباً من المَصدر، قد تَمنع حركة المرور المُسموح بها إلى وَجهات أخرى. ACL الممتدّة أفضل وَضعها قَريباً من المَصدر (لِتَوفير عبور الشّبكة).

الخطوة 3 — ACL الممتدّة (Extended)

ACL الممتدّة تُصفّي بناءً على المَصدر، الوجهة، البروتوكول، المَنفذ. أرقامها 100-199 (أو 2000-2699). تُتيح تحكّماً دقيقاً.

# سيناريو : السّماح فقط بِـ HTTP و HTTPS من شبكة الزّبائن
# إلى خادم الويب (192.168.100.10)، مَنع أيّ شيء آخر

# الصّيغة العامّة :
# access-list NUM {permit|deny} PROTOCOL SRC SRC_WC DST DST_WC [eq PORT]

R1(config)#access-list 100 permit tcp 192.168.1.0 0.0.0.255 host 192.168.100.10 eq 80
R1(config)#access-list 100 permit tcp 192.168.1.0 0.0.0.255 host 192.168.100.10 eq 443
R1(config)#access-list 100 permit icmp 192.168.1.0 0.0.0.255 host 192.168.100.10 echo
R1(config)#access-list 100 deny ip any any

# تَطبيق ACL قَريباً من المَصدر
R1(config)#interface gigabitEthernet 0/0
R1(config-if)#ip access-group 100 in

# تَحقّق
R1#show access-lists 100
# Extended IP access list 100
#     10 permit tcp 192.168.1.0 0.0.0.255 host 192.168.100.10 eq www (45 matches)
#     20 permit tcp 192.168.1.0 0.0.0.255 host 192.168.100.10 eq 443 (38 matches)
#     30 permit icmp 192.168.1.0 0.0.0.255 host 192.168.100.10 echo (2 matches)
#     40 deny ip any any (7 matches)

لاحظ eq 80 و eq 443 : تَصفية بِالمَنفذ الوجهة. IOS يَعرض www بَدلاً من 80 لأنّه يَعرف الأسماء القياسيّة. أرقام أخرى شائعة : 22 (SSH)، 23 (Telnet)، 25 (SMTP)، 53 (DNS)، 110 (POP3)، 143 (IMAP)، 3389 (RDP). للمَنفذ المَصدر، تَكون eq أو gt أو lt بعد عُنوان المَصدر مباشرةً (قبل عُنوان الوجهة).

الخطوة 4 — Named ACL (أسماء بدل أرقام)

يَدعم IOS الحديث ACL بِأسماء بدل أرقام، أَوضح وأَسهل في الإدارة. الصّيغة تُشبه router ospf.

# named ACL ممتدّة
R1(config)#ip access-list extended BLOCK_TELNET
R1(config-ext-nacl)#deny tcp any any eq 23
R1(config-ext-nacl)#permit ip any any
R1(config-ext-nacl)#exit

R1(config)#interface gigabitEthernet 0/1
R1(config-if)#ip access-group BLOCK_TELNET in

# named ACL تَدعم التّعديل بِأرقام السّطور (sequence numbers)
R1(config)#ip access-list extended BLOCK_TELNET
R1(config-ext-nacl)#5 permit tcp host 192.168.1.10 any eq 23  # استثناء قبل deny
R1(config-ext-nacl)#exit

R1#show access-lists BLOCK_TELNET
# Extended IP access list BLOCK_TELNET
#     5 permit tcp host 192.168.1.10 any eq telnet (0 matches)
#     10 deny tcp any any eq telnet (15 matches)
#     20 permit ip any any (340 matches)

في ACL بِأرقام تقليديّة، إضافة سَطر يُلحَق دائماً في النّهاية، مَعَ صعوبة في الإدراج المُسبَق. ACL بِأسماء تَسمح بِإدراج سَطر بِرقم محدّد (5 permit ...) لتَخصيص استثناء قبل قاعدة deny.

الخطوة 5 — ترتيب القواعد مهمّ (Top-down evaluation)

ACL تُقَيَّم من أعلى إلى أسفل، أوّل قاعدة مُطابِقَة تُحدّد المصير. القاعدة الضمنيّة في الأسفل هي deny ip any any غير المَرئيّة. إذا لم تَكتب permit ip any any صراحةً، كلّ ما لا يُطابِق قاعدة سابقة سَيُحجَب.

# مثال خاطئ — منع كلّ شيء بِالخَطأ
R1(config)#access-list 50 deny any
R1(config)#access-list 50 permit 192.168.1.10

# القاعدة الأولى deny any تُطبّق على كلّ شيء قبل القاعدة الثّانية !
# النّتيجة : 192.168.1.10 محجوب أيضاً
# الصّحيح :
R1(config)#access-list 50 permit host 192.168.1.10
R1(config)#access-list 50 deny any

# قاعدة عامّة : الأكثر تَخصيصاً أوّلاً، الأكثر عموميّة في النّهاية

هذا أحد أكثر الأخطاء شيوعاً في أسئلة CCNA من نمط Troubleshoot. عند رؤية ACL، اِقرأها من أعلى إلى أسفل، توقّف عند أوّل تَطابق. إذا لم تَجد تطابقاً، طَبّق deny ضمنيّ.

الخطوة 6 — ACL لِحماية vty (Telnet/SSH)

تَطبيق مُهمّ : تَقييد من يَستطيع الوصول إلى المُوجّه عبر Telnet أو SSH. تُطَبَّق على line vty بدل واجهة.

# السّماح فقط بِشبكة الإدارة (10.0.0.0/24) بالوصول إلى vty
R1(config)#access-list 5 permit 10.0.0.0 0.0.0.255
R1(config)#access-list 5 deny any log

R1(config)#line vty 0 15
R1(config-line)#access-class 5 in
R1(config-line)#login local
R1(config-line)#transport input ssh

# تَحقّق
R1#show access-lists 5
# Standard IP access list 5
#     10 permit 10.0.0.0, wildcard bits 0.0.0.255 (5 matches)
#     20 deny any log (3 matches)

الفرق المُهمّ : access-class (لـ vty) بدلاً من access-group (لـ واجهة). الخيار log في deny يَكتب سَطراً في syslog كلّ مرّة يَتمّ فيها رفض. مفيد لاكتشاف محاولات الاختراق.

الخطوة 7 — تَمارين نَمذجة الامتحان

في امتحان CCNA، تَظهر أسئلة ACL في ثلاثة أنماط : كتابة ACL لِتَحقيق هَدف، قراءة ACL وتَحديد ما تُطبّقه، اكتشاف خطأ في ACL مُعدّ. لنُتَدرّب على الثلاثة.

# تمرين 1 : امنع شبكة 172.16.0.0/16 من ping إلى أيّ مَكان
# باستثناء خادم 172.30.5.10، اِسمح بالباقي
R1(config)#access-list 110 permit icmp 172.16.0.0 0.0.255.255 host 172.30.5.10
R1(config)#access-list 110 deny icmp 172.16.0.0 0.0.255.255 any
R1(config)#access-list 110 permit ip any any

# تمرين 2 : اقرأ هذه القاعدة وحدّد ما تُطبّقه
# access-list 105 permit tcp 192.168.1.0 0.0.0.255 host 10.1.1.5 eq 22
# الجواب : السّماح بـ SSH من شبكة 192.168.1.0/24 إلى 10.1.1.5

# تمرين 3 : اِكتشف الخطأ
# access-list 120 permit tcp any host 192.168.50.10 eq www
# access-list 120 deny tcp 192.168.20.0 0.0.0.255 host 192.168.50.10
# الخطأ : القاعدة الثّانية لا تَعمل لأنّ الأولى تُسمح بِكلّ شيء (any) لـ HTTP
# يَجب وَضع deny قبل permit الأكثر عمومًا

الأخطاء الشّائعة

الخطأ السّبب الحلّ
ACL تَحجب كلّ شيء بِشكل غير مَقصود نسيان permit ip any any في النّهاية دائماً أَضِف قاعدة permit explicit في النّهاية
قاعدة لا تَنطبق قاعدة سابقة أكثر عمومًا أعِد ترتيب من الأكثر تَخصيصاً إلى الأقلّ
ACL مُطبَّقة لكنّها لا تَفعل شيئاً تَطبيق بـ in بَدل out أو عَكس ذلك تَخيّل مُسار الحزمة وحَدّد الاتّجاه الصّحيح
wildcard خاطئ خَلط مع subnet mask wildcard = 255.255.255.255 – subnet mask
Telnet مَحجوب لكنّ SSH أيضاً قاعدة عامّة على المَنفذ 22 و 23 اِستخدم قاعدتيْن مُنفصلتيْن، أو حدّد المَنفذ بِدقّة
التّعديل يَنسخ عبر الإصدارات numbered ACL لا تُحرَّر سَطراً سَطراً اِستخدم named ACL لِسهولة التّعديل

أسئلة شائعة

أيّ ACL أَسرع، Standard أو Extended ؟
Standard أَسرع قليلاً (تَفحص فقط المَصدر) لكنّ الفرق غير ملموس. اختر بِناءً على الحاجة لا الأداء.

كم ACL يُمكن تَطبيقها على واجهة ؟
واحدة فقط لكلّ اتّجاه (in واحدة، out واحدة، IPv4، IPv6 منفصلة). إذا احتجت أكثر، اِدمج القواعد في ACL واحدة.

هل يُمكن استخدام ACL لـ DHCP أو DNS ؟
نعم، تَستخدم نفس الصّيغة (eq 67 لـ DHCP server، eq 53 لـ DNS). تَذكّر : DHCP يَستخدم UDP، DNS يَستخدم UDP+TCP.

الفرق بيْن established و ack في ACL ؟
established يَسمح بِالحزم التي تَنتمي إلى جلسة TCP موجودة (ACK أو RST set). مفيد لـ stateless filtering. CCNA يَختبر هذا المفهوم بِشكل دائم.

ACL أم Firewall ؟
ACL على المُوجّهات للحماية الأساسيّة (تَصفية على الطّبقة 3 و 4). Firewall (مثل Cisco ASA) للأمن المتقدّم مع stateful inspection و DPI.

للتّعمّق

بعد إتقان ACL، الخطوة المنطقيّة هي تَعلّم DHCP، DNS و NAT/PAT على مُوجّه سيسكو — الخدمات التي ACL غالباً ما تَحميها. للنّظرة الشّاملة، انظر الدّليل الرّئيسي CCNA.

مصادر ومراجع

مقالات ذات صلة

Sponsoriser ce contenu

Cet emplacement est à vous

Position premium en fin d'article — c'est l'instant où les lecteurs sont le plus engagés. Réservez cet espace pour votre marque, votre formation ou votre offre.

Recevoir nos tarifs
Publicité