مقال : مدخل إلى ACL – Access Control Lists
ما هي الـ(Access Control Lists (ACLs:
* هي من أبسط أدوات الحماية وتستخدم للتحكم بمنع أو السماح بمرور البيانات (Traffics) من وإلى أجهزة الشبكة كالـRouters والـFirewalls بناءً على مجموعة من المعايير كتحقيق شرط توافق الـIP المرسل أو توافقها مع إغلاق أو السماح لـPort معين أو تطبيق المنع والسماح ضمن أوقات معينة خلال الأسبوع.
* الـACL تجعل الـRouter يقوم بتجاهل وفلترة حزم البيانات (Packets) حسب مجموعة من المعايير التي يحددها مدير الشبكة ومنها:
– منع القراصنة من الدخول للشبكة.
– وعدم السماح للموظفين من استخدام بعض أجزاء النظام وغيرها.
* يمكن استخدام الـACL ضمن الـFirewall Router الذي يقع بين الشبكة الداخلية والشبكة الخارجية التي يمكن أن تكون الإنترنت أو يمكن استخدامها ضمن الـRouter الموجود بين طرفي شبكتين داخليتين للتحكم بمرور الـTraffic لأجزاء معينة من هاتين الشبكتين.
* لإنشاء الـACL فسطر الأوامر يبدأ بـaccess-list وتتبعها أما كلمة السماح (Permit) (تعني السماح بمرور البيانات بدون فلترة) أو المنع (Deny) (تعني فلترة البيانات قبل عبورها جهاز الـRouter).
* الـACL تتكون من سطر على الأقل أو أكثر تسمى بالـ(Access Control Entries) يحدد السماح أو المنع للـTraffics بالمرور عبر الجهاز ويمكن أن تحدد لبورت معين (Port=80) أو الـIP المرسل لحزم البيانات المعروفة بالـPackets (Source IP) والـIP المستقبل (Destination IP).
* ترتيب الـACE مهم جدًا فعندما تدخل الـPacket المنفذ وتكون هنالك ACL مطبقة فالـPacket تقارن مع أول سطر وعندما لا يحصل تطابق عندئذ تقارن مع السطر الثاني وهكذا حيث أن الـRouter يقوم باختيار وتنفيذ ACL من الأعلى إلى الأسفل حيث أنه إذا أنشئت ACE معينة في البداية لتسمح لكل الـTraffics بالمرور فإنه لن يتم التحقق من أي أوامر منع بعدها إن وجدت.
#access-list 1 permit any
#access-list 1 deny 50.0.0.2 0.0.0.255
#access-list 2 deny 50.0.0.2 0.0.0.255
#access-list 2 permit any
– في الـACL 1 يتم أولاً السماح للكل بالدخول ومن ثم منع IP معين وهذا خطأ لأنه لن يتم النظر للسطر الثاني بعد السماح للكل بالدخول.
– في الـACL 2 تم منع جهاز معين بالدخول ومن ثم السماح للبقية وهذا هو الصحيح.
* للـACLs أوامر منع ضمنية في النهاية، لهذا فالتصريح للسماح بدخول مستخدم معين للشبكة شرط ضروري وإلا لن يتم السماح له.
#access-list 1 permit host 10.0.0.1
بعد هذا الأمر سوف يسمح لصاحب رقم الـIP هذا بالمرور وإغلاق الباقين حتى لو لم نصرح بهذا.
* إذا تريد لكل المستخدمين بالدخول للشبكة ما عدا مستخدمين فيجب أن تمنع هذين المستخدمين ألاً ثم السماح للجميع بالدخول للشبكة.
أنواع الـACL:
* يوجد أنواع مختلفة للـACLs ومنها: Time-Based، Named، Extended، Standard.
* بالنسبة لنطاق الأرقام المستخدمين للـStandard ACL فهو من {99-1} وهناك نطاق مضاف للمجموعة الأولى وهو {1999-1300} والسبب وراء إضافة النطاق الثاني هو أن سيسكو لم تتوقع أن نحتاج لكل هذه الكمية يومًا ما والأمر ينطبق أيضًا على Extended ACL فالنطاق هو {199-100} والنطاق الثاني {2699-2000}.
* الـWildcard Mask يقوم بتحديد قسم الـNetwork الذي يجب والذي لا يجب أن يطابق الـACL وهو عكس رقم الـMask فرقم 255 يعني عدم التدقيق X والـ0 تعني التدقيق ويجب تطابق القسم المقابل له في رقم الشبكة عند الفلترة كمثال 0.0.0.255 –> 192.168.1.X فهنا رقم الشبكة 192.168.1 سوف يسمح أو يمنع بغض النظر عن القسم الأخير.
0 | 1 | 168 | 192 |
255 | 0 | 0 | 0 |
وأمثلة للتوضيح:
0.0.0.0 | الـIP بالكامل يجب أن يتطابق وتستبدل الأصفار بكلمة host |
0.0.0.255 | أول ثلاث خانات يجب أن تتطابق |
0.0.255.255 | أول خانتين يجب أن تتطابق |
الـStandard ACLs:
* هذا النوع تتم فلترة البيانات فيه حسب رقم IP للجهاز المرسل Source IP فقط ولا يوجد أي اعتبار للـIP المستقبل أو مطابقة Protocol ما.. إلخ… وعند الرغبة بإضافة ACE أخرى نكتب الأمر #access-list ومتبوعًا بنفس اسم الـACL.
* والشكل العام:
#access-list access-list-number {permit | deny} source {source-mask}
* رقم الـACL يتراوح بين {1-99}-{1300-1999}.
– عند كتابة الرقم 1 فهذا معناه أن الـACL ستكون من نوع Standard وبعد ذلك يتم يتحديد بالسماح والمنع للـIP.
– بعد كتابة رقم الـIP سيتم كتابة رقم Wildcard Mask وباختياري لـ0.0.0.0 هنا اسمح لهذا الجهاز بالكامل بالدخول.
– وبالإمكان إضافة log بنهاية السطر وهي لمعرفة كم من البيانات التي تم تطبيق الشروط عليها.
– أيضًا كلمة Any فتعني الـWildcard Mask التالي وهو 255.255.255.255 فعند إضافة كلمة السماح وتتبعها any فتعني السماح للجميع بالدخول لا يتم النظر إلى أي سطر بعدها يحتوي Deny أبدًا.
– يمكن استبدال 0.0.0.0 بكلمة host بشرط وضعها قبل رقم الـIP وهنا ACL 2، ACL 1 تقومان بنفس المهمة وهي السماح للـ100.0.0.1 بالدخول.
* وصلنا للنقطة الأهم وهي بعد كتابة أسطر ACL كلها يجب تفعيلها على منفذ الـRouter المناسب لكي تعمل وغالبًا ما يتم نسيان هذا الأمر بعد التفكير الشديد برقم الـIP والـWildcard Mask واختيار الـProtocol. وهنا تم اختيار المنفذ ثم كتابة أمر #ip access-group ونختار اسم الـACL التي انشأناها ثم نقوم بتحديد in أو out وتعني بأن الـACL يجب أن تطبق على الـPackets القادمة للـRouter أو الخارجة منه.
مثال:
#access-list 5 deny 10.3.1.2 0.0.0.0
وهذا معناه أن جهاز الـRouter سوف يقوم بمنع البيانات القادمة من الجهاز 10.3.1.2
ويجب أن لا ننسى بالسماح للبيانات الأخرى بالدخول عبر الأمر
#access-list 5 permit any
وهنا كلمة any تعني الجميع (فعليًا تعني الأجهزة المتبقية بعد عملية الفلترة).
مثال تطبيقي:
في هذا المثال لدينا جهازي Rs وشبتكين من نوع loopback (هي شبكة وهمية) وشبكة 192.168.1.0 وبعد إعطاء الـStatic Route لكلا الـRouters لتحقيق التواصل بينهما، نقوم بالسماح لـR1 باستقبال الـTraffic من شبكة 192.168.1.0 عبر المنفذ f0/0 وحجب شبكة 2.2.2.2
#access-list 10 permit 192.168.1.0 0.0.0.255
قمنا بتسمية الـACL والسماح للشبكة 192.168.1.0
نقوم بتفعيل الـACL على المنفذ الخاص بـR1 وذلك لتطبيقها فعليًا وهذا أمر ضروري ونحدد أن جهة دخول البيانات هي باتجاه منفذ f0/0 أي in
#int f0/0
#ip access-group in
واقعيًا بعد الأمر
#access-list 10 permit 192.168.1.0 0.0.0.255
هناك أمر منع ضمني ومن خلاله سوف تمنع الشبكة 2.2.2.2 من العبول للـR1 دون الحاجة لكتابة أمر خاص بذلك والشبكات الباقية من جهة المنفذ f0/0 تمنع من العبور ما عدا الشبكة 192.168.1.0
الـExtended ACL:
* في هذا النوع تتم فلترة البيانات حسب الـIP المرسل والـIP المستقبل وحسب رقم الـPort وحسب ونوعية الـProtocol.
وهي فعالة بشكل أكبر وأكثر مرونة من النوع السابق.
والشكل العام لها:
#access-list access-list-number [permit | deny] protocol source {source mask} destination {destination mask} [eq destination-port]
* رقم الـACL يتراوح بين {2699-2000}-{199-100}
مثال توضيحي:
في الـTopology هذه نريد منع جهاز الكمبيوتر من تصفح الإنترنت من الـWeb Server (192.168.2.2).
لتطبيق هذا الشرط يجب استخدام Extended ACL لتنفيذ الأمر لأنه يجب تحديد كلاً من الـIP المصدر وصاحب الـIP النهائي والـProtocol المستخدم.
الإعدادات سوف تكون في R1 حيث أنه يجب عليه منع جهاز الكمبيوتر من الوصول للـWeb Server.
#access-list 100 deny tcp host 192.168.1.2 host 192.168.2.2 eq 80
بتحديد رقم الـACL لمئة فهذا مباشرة يعني أن الـACL المستخدمة هي من نوع Extended
وبعد تحديد الـIP يجب وضع الـWild Mask أو كلمة host
وهذا ينطبق أيضًا على الـIP Destination (Server).
والـProtocol المستخدم في هذه الحالة هو الـTCP
والكلمة المعرفة eq تعني مطابقة هذه الأوامر مع الـPort المحدد
وفي مثالنا تعني أن الجهاز الذي يريد أن يتصل بالسيرفر عبر هذا الـPort=80 المستخدم للوصول لصفحات الإنترنت http يجب منعه.
#access-list 100 permit ip any any
هذا الأمر ضروري للسماح للبقية بالاتصال بالسيرفر وطلب الإنترنت.
* ولتفعيل الـACL نقوم بتطبيقها مباشرة على منفذ الـR المقابل لجهاز الكمبيوتر.
#int f0/0
#ip access-group 100 in
الـTime-Based ACL:
وهي تفيد في فلترة البيانات ثم تطبيق permit أو deny عليها خلال يوم معين أو ساعة معينة، مثل عندما يريد مدير الشبكة منع التصفح لبعض الـServers خلال ساعات العمل.
ولتطبيق هذا النوع الشبيه بالـExtended ACL نقوم بالخطوات التالية:
- نقوم بتحديد الوقت الزمني عندما يجب للـACL أن تطبق.
- نقوم بكتابة أمر الـACL ونضيف في نهايته الوقت الذي حددناه.
- وبالطبع تطبيق الـACL على المنفذ المناسب.
مثال توضيحي:
في هذا المثال نريد أن يتصل جهاز الـPC بجهاز الـServer بأيام الأسبوع كلها ما عدا السبت والأحد من الساعة 12 ظهرًا إلى الساعة 8:45 مساءً.
كل الأوامر سوف تكون في R1 حيث أنه هو الذي يجب عليه تطبيق الـACL بشكل دوري.
أولاً نقوم بتعيين الوقت المطلوب بالأمر:
#time-range
وبعدها نقوم بكتابة أي شيء كاسم WEEKDAYS
وأمر Periodic تعني تنفيذ الأمر بشكل دوري حسب المتفق عليه.
“يمكننا استخدام الأمر absolute بدلاً من Periodic وهنا يعين الوقت الذي سوف يتم فيه تطبيق الـACL”
ونقوم بتعيين كل أيام العمل وهي Weekdays التي لا تتضمن يومي السبت والأحد ونقوم باختيار أوقات السماح.
ثم نقوم بكتابة أمر الـACL ومنع صاحب الـIP المحدد من الوصول للـServer.
ونقوم بوضع Time-Range التي حددناها في نهاية أمر ACL ونقوم بتفعيلها على المنفذ المواجه للـPC.
هنا قمت بعمل Ping والتحقق من وجود اتصال بين الـPC وبين الـServer ويشير الوقت إلى الساعة 8:43 أي قبل الموعد المطلوب.
وبعد الساعة 18:45 لم يعد يمكنني أن أتصل بالـServer أبدًا ليوم الغد الساعة 12:00 ظهرًا.
الـNamed ACL:
* نقوم باستخدام هذا النوع للتغلب على محدودية أرقام المجالات للـStandard & Extended وذلك باستخدام الكلمات بدلاً من الأرقام.
* هناك اختلاف بإنشائها عن الطرق السابقة حيث أنه بعد كتابة أمر access-list لا يوجد أي شيء يدل على اسم.
* هنا نقوم بإضافة IP في البداية ثم Access-list ومن ثم تحديد نوع الـACL وبعدها كما هو واضح نقوم بكتابة اسم الـACL.
* ثم ندخل قسم الـ(config-std-nacl)# نقوم بنمع أو السماح للـIP المطلوب ومن ثم تطبيقها على المنفذ المناسب.
بهذا نكون قد انتهينا من هذا المقال وإن شاء الله نلتقي في مقالات أخرى 🙂
we can bypass the access-list that block ping (ICMP) using covert channel attack
مشكور جدا
تطوير مواقع . برمجة . شبكات . حماية .هاكر
رائع …..
لو سمحت هل يمكن لل اكسيز ليست ان تسمح بإرسال رسائل من جهاز شبكة الفرعي الى جهاز شبكة الرئيسي ولو وجد ارجو كتابة مقال على ذلك ف أنا بحاجة إليه وضروري وشكرا وان لم يوجد اريد بعض البروتوكولات التي تستطيع فعل ذات الشيء
رااااااااائع
رائع …..
لو سمحت هل يمكن لل اكسيز ليست ان تسمح بإرسال رسائل من جهاز شبكة الفرعي الى جهاز شبكة الرئيسي ولو وجد ارجو كتابة مقال على ذلك ف أنا بحاجة إليه وضروري وشكرا وان لم يوجد اريد بعض البروتوكولات التي تستطيع فعل ذات الشيء
حقيقي الله يسعدك على مجهودك الرائع