خب... تا اینجای کار با روتینگ پروتکل ها آشنا شدیم. فقط روتینگ پروتکل EIGRP موند که من مفصل درCCNP توضیح خواهم داد . حال نوبت به کنترل ترافیک شبکه و تعیین مجوز های دسترسی برای ترافیک هاست. مثلا آیا شبکه 10.10.10.2 اجازه دارد برای ما ترافیک بفرستد یا خیر؟  با من همراه شوید...

Access-List

ما در Access List ها یاد میگیریم چطور ترافیک شبکه را مدیریت کنیم و اعمال فیلترینگ داشته باشیم... ما میتونیم با استفاده از Access List برای یک روتر تعریف کنیم چه ترافیک هایی اجازه ورود به روتر و چه ترافیک هایی اجازه خروج از روتر را دارند.

Access-List ها به دو صورت قابل پیاده سازی هستند:

الف : Standard Access-List

ب: Extended Access-List

ابتدا ما در مورد Standard Access List صحبت می کنیم.

Standard Access-List

خصوصیات Access List های استاندارد:

- این نوع Access-List این اجازه را به ما می دهد که در لایه سه (لایه نتورک) برحسب Logical Address ها (همون آدرس IP) اعمال فیلترینگ داشته باشیم.

- برای متمایز کردن Access-List های استاندارد از همدیگر از یک رینج عدد استفاده می کنیم. رینج عددی که برای این Access-List ها در نظر گرفته شده از 1 تا 99 هست.

نکته : چون Range این اعداد کم بود، از IOS ورژن 11.2 به بعد رینج عددی 1300 تا 1999را برایAccess List استاندارد اضافه کردند. یعنی با این اعداد هر Access Listی نوشته شود، هم مشخص می کند چه نوع Access List هست (چون بین 1300 تا 1999 هست پس Access List استاندارد هست)، هم اینکه این عدد،اسم آن Access-List به حساب می آید.

- Access- List های استاندارد بنابر Source  قابل تعریف هستند  نه بنابر Destination.

و اما نحوه پیاده سازی Access-List Standard به چه صورت هست؟

فرض کنید نمی خواهیم نتورک 192.168.10.10  به شبکه 172.16.0.0 دسترسی داشته باشد. برای این کار می خواهیم از access-list استاندارد استفاده کنیم.

جهت این کار در محیط کانفیگ ترمینال دستوری هست به نام Access-list .

پس از تایپ این دستور از ما می خواهد که شماره آن را مشخص کنیم . خب چون ما می خواهیم اکسس لیست استاندارد تعریف کنیم پس باید بین رینج 1 تا 99 بگذاریم. همینطور میتونیم بین رینج 1300 تا 1999 نیز بگذاریم.

حال بعنوان مثال 1 را انتخاب می کنیم که مشخص کنیم که می خواهیم اکسس لیست استاندارد تعریف کنیم.

پس از تایپ عدد 1 اگر کلیدهای Shift  و ؟ را بگیریم، به ما می گوید که سه گزینه را می توانیم انتخاب کنیم

1. deny : بواسطه این دستور ما جلوی دسترسی را می گیریم.

2. Permit: بواسطه این دستور ما اجازه دسترسی می دهیم.

3. Remark : بواسطه این دستور ما می تونیم description یا توضیح بنویسیم. یعنی بعنوان مثال بنویسم این اکسس لیست به شماره یک از دسترسی فلان شبکه جلوگیری می کند.

خب ما اینجا Deny را انتخاب می کنیم. سپس مجددا کلیدهای Shift و علامت سوال را می گیریم. حال مجددا سه گزینه در جلوی راه ما قرار می گیرد.

1. Hostname : می توانیم از دسترسی یک نتورک جلوگیری به عمل آوریم . مثلا می توانیم بگوییم کلا نتورک192.168.10.0 نتواند به آدرس شبکه 172.16.0.0 دسترسی داشته باشد. البته بعد از تایپ نتورک باید wildcard را هم مشخص کنیم. داستان اینکه wildcard چیست را در اینجا مفصل تعریف کرده ام میتونید مراجعه کنید.  بعد از تعریف wildcard اگر مجددا Shift و ؟ بگیریم دو گزینه log و را می بینیم. اولی می گوید که اگر می خواهی که هروقت کسی را رد کردم برایت لاگ بیندازم . که برای این کار فقط کافی است کلمه log را انتهای دستور بیاوریم و دومی هم که می گوید می توانی اینتر هم بزنی .پس دستور کلی به صورت زیر شد:

Router-1(config)#access-list 1 deny 192.168.10.0 0.0.0.255 log

2. Any اگر بخواهیم از دسترسی همه به شبکه خاصی جلوگیری کنیم.

3. Host: اگر بخواهیم از دسترسی یک نفر یا یک هاست مشخص جلوگیری کنیم از این دستور استفاده می کنیم.

همانطور که در بالا مشاهده کردید ، این اکسس لیست یعنی Access-List Standard بر اساس source هست، یعنی ما به آن آدرس مقصد ندادیم و فقط گفتیم که فلان آدرس در این روتر اجازه دسترسی ندارد. حالا به کجا اجازه دسترسی ندارد را دیگر تعریف نمی کنیم.

نکته مهمی که در اینجا باید توجه داشته باشید این هست که نوشتن Access-List به خودی خود کاری انجام نمی دهدو بعبارتی نوشتن یک قانون هست، برای پیاده سازی آن باید حتما شماره اکسس لیست نوشته شده را به یکی از اینترفیس ها Assign کنیم.بعنوان مثال در مثال بالا به یکی از اینترفیس ها بگیم که اگر آدرس 192.168.10.0اومد جلوش رو بگیر.

اما نحوه Assign کردن یک Access-List به یک اینترفیس چگونه است؟

1. وارد اینترفیس مورد نظر می شویم. بعنوان مثال وارد اینترفیس serial 0/0 می شویم.

2. حال از دستور  زیر استفاده می کنیم.

R-1(config-if)# Ip access-group

اگر در اینجا shift  و ؟ بگیریم به ما می گوید که از کدام اکسس لیست ها می خواهی استفاده کنی که ما در مثال بالا اکسس لیست به شماره یک را تعریف کردیم.

پس تا اینجا شد :

R-1(config-if)# Ip access-group 1

حال مجدد shift  و علامت سوال می گیریم. از ما می پرسد in یا out . یعنی موقع ورود عمل کند یا موقع خروج؟ یعنی از ورد پکت هایی که آدرس source  آنها 192.168.10.0 هست جلوگیری کنم یا از خروج پکت هایی که آدرسsource آنها 192.168.10.0 هست؟ بسته به نیاز یکی از کلمه های in یا out را انتخاب می کنیم. و دستور کلی به صورت زیر می شود:

R-1(config-if)# Ip access-group 1 in

حال پکتی که آدرس سورسش 192.168.10.0 باشد، بخواهد به اینترفیس serial 0/0 این روتر وارد شود از ورودش جلوگیری به عمل می آید.یعنی کلا پکت از طرف آن آدرس نتورک این روتر دریافت نمی کند  و همه را drop می کند.

چند قانون

1. با یک شماره Access لیست می توانیم بی نهایت قانون تعریف کنیم.

2. به هر اینترفیس فقط می توان یک شماره Access-list  ورود اختصاص داد یا اصطلاحا Assign کرد ویک اکسس لیست خروج و اگر دو تا اکسس لیست assign کنیم اکسس لیست جدد بر روی قبلی overwrite و جایگزین می شود. دقت کنید که روی In و Out یک اینترفیس هرکدام می توان یک اکسس لیست اختصاص داد.

3. در IOS های قبل از 12.1 می توانستیم In و Out را مشخص نکنیم. که به طور پیش فرض Out در نظر می گرفت.

4. ترتیب نوشتن Access لیست ها مهم است(مخصوصا روی IOS های قدیمی). وقتی ترافیکی می آید روتر به داخل اکسس لیست می رود و هرجا ترافیک با اکسس لیست match شود (مثلا گفته باشد که ترافیک را deny کن و از ورودش جلوگیری کن) دیگر سراغ اکسس لیست های بعدی نمی رود و همون جا ترافیک را Deny می کند.

4.هر اکسس لیستی که نوشته می شود یک خط هم به آخر آن اضافه می شود که عبارت است از :

Router-1(config)#access-list deny any

این خط در انتهای هر شماره اکسس لیست وجود دارد و به صورت transparent و نامرئی وجود دارد که دیده نمی شود و همه را deny می کند.مثلا اگر دستور زیر را نوشته باشیم که فقط یک هاست را deny کنیم:

Router-1(config)#access-list 1 deny host 192.168.10.10 log

آن خط  بالا هم زیر آن قرار می گیرد و همه را deny می کند. یعنی اگر 192.168.10.11 هم بیاید باز deny می شود در صورتی که ما آن را نگفته بودیم

جهت حل این مشکل کافی است آخر دستوری که می دهیم دستور زیر را بدهیم:

Router-1(config)#access-list 1 permit any

تمام.

Access-List Extended

خصوصیات Access-List Extended:

-          قابل پیاده سازی در لایه 3 و لایه 4 می باشد. (یعنی هم بر اساس Logical Address و هم بر اساس Prot Number یا شماره پورت ها می توانیم اعمال محدودیت داشته باشیم)

-   رینج عددی اکسس لیست های extended از 100 تا 199  هست و در IOS های 12.1 به بعد رینج عددی 2000 تا2699 به بعد نیز اضافه شده اند.

-   این نوع از اکسس لیست هم بنا بر Source و هم بنابر Destination عمل می کنند.

حال باهم به بررسی یک مثال می پردازیم:

فرض بگیرید یک Access-List می خواهیم بنویسیم و جلوی دسترسی 192.168.10.10 را به آدرس 172.16.0.10بگیریم:

ابتدا قانون کلی را تعریف می کنیم و سپس آن اکسس لیست را به اینترفیس Assign می کنیم.

Router-1(config)#access-list 100 deny

اگر Shift و علامت سوال بگیریم از ما می پرسد که بر حسب IP می خواهی ببندی یعنی همان Logical Address یا برحسب پروتکل؟ بعنوان مثال ما Ip را می زنیم:

Router-1(config)#access-list 100 deny  IP

حال اگر Shift و علامت سوال را بگیریم  از ما Source Address را می پرسد: سه گزینه زیر را در اختیار ما قرار می دهد:

1. Source Address: که ما در اینجا آدرس سورس را 192.168.10.10 میگذاریم

2. Any Source Host:

3. A single Source Host:

دو گزینه دیگر هم که در قبل توضیح داده شود و مشخص است.خب تا اینجا دستور به صورت زیر است:

Router-1(config)#access-list 100 deny  IP  host 192.168.10.10

مجدد Shift  و علامت سوال می گیریم، باز سه گزینه اما این بار برای Destination و مقصد در اختیار ما قرار می دهد:

که طبق سناریو ما باید مجدد در این جا host را انتخاب کنیم  و آدرس مقصد را 172.16.0.10 بدهیم و درپایان از آن بخواهیم که لاگ عملکرد هم برای ما بیندازد.

دستور پایانی به صورت زیر می شود:

Router-1(config)#access-list 100 deny  IP  host 192.168.10.10 host 172.16.0.10 log

خب. به همین سادگی ما یک اکسس لیست extended نوشتیم که از دسترسی آی پی آدرس 192.168.10.10  به آدرس 172.16.0.10 جلوگیری می کرد.

یک نکته را دقت داشته باشید بهترین جا برای Assign کردن یک اکسس لیست Extended نزدیک ترین جا بهSource هست .چون مبدا و مقصد مشخص است ، ترافیک بیخود در شبکه در گردش نباشد و  اگر به مقصد خاصی است به جای اینکه در مقصد drop شود همان در مبدا drop اش می کنیم که بیخود ترافیک در شبکه در جریان نیوفتد و بار را زیاد نکند.

برعکس بهترین جا برای Assign کردن یک اکسس لیست استاندارد نزدیک ترین جا به Destination هست .

حال چگونه یک اکسس لیست Extended بنویسیم بر اساس پورت بنویسیم؟(لایه چهارم)

حال فرض بگیریم که بخواهیم جلوی دسترسی آی پی آدرس 192.168.10.10 را به صفحات وب 172.16.0.1 بگیریم یعنی پورت 80 آنرا ببندیم.

جهت این کار کافی است دستور زیر را تایپ کنیم:

Router-1(config)#access-list 100 deny  tcp  host 192.168.10.10 host 172.16.0.10 eq 80

همانطور که می بینید در دستور بالا به جای IP از پروتکل TCP استفاده کردیم. Source و Destination را مشخص کردیم و در پایان با استفاده از دستور EQ یک شماره پورت را مشخص کنیم. یعنی بگیم فقط پورت 80  را denyکن.

نکات!

اگر بخواهیم بگیم که به هیچ چیز دسترسی نداشته باشد و فقط به پورت 80 دسترسی داشته باشد کافی است به جای eq کلمه neq را به کار ببریم.

Router-1(config)#access-list 100 deny  tcp  host 192.168.10.10 host 172.16.0.10 neq 80

اگر بخواهیم بگیم که یک رینج پورت را ببندیم به جای EQ از  دستور Range  استفاده می کنیم . مثلا از رینج 80 تا 100

Router-1(config)#access-list 100 deny  tcp  host 192.168.10.10 host 172.16.0.10 range 80 100

اگر بخواهیم از یک پورت به بعد را ببندیم می توانیم به جای eq از gt استفاده کنیم و همینطور بخواهیم از یک پورت به پایین را ببندیم به جای eq از lt استفاده می کنیم.

یک تمرین:

اگر بخواهیم فقط آی پی آدرس 192.168.10.10 اجازه داشته باشد به روتر R-1 از طریق پورت کنسول دسترسی داشته باشد چه Access-list ی باید بنویسیم؟

سه خط دستور بیشتر نیاز ندارد. هر سه خط هم در روتر r-1 نوشته می شود . دقت کنید:

R-1(config)#access-list 1 permit 192.168.10.10

R-1(config)#line vty 0

R-1(config-line)#access-class 1 in

همانطور که می بینید ما حتی می توانیم بر روی پورت کنسول هم اکسس لیست بنویسیم. فقط تنها تفاوتش این هست که برای Assign کردن باید به جای استفاده از دستور Access-group از دستور Access-class استفاده کنیم.

خب مبحث آخر هم مطرح کنم و جلسه امروز تمام

چطور به اکسس لیست ها نام اختصاص دهیم؟

ما در نوشتن اکسس لیست ها باعدد یک سری محدودیت ها داشتیم:

اول اینکه تعدادش محدود بود و دوم اینکه اگر چندتا اکسس لیست بنویسیم و بهش عدد اختصاص بدیم دیگه شناسایی اینکه کدوم عدد کدوم اکسس لیست بود سخت می شه.

سیسکو از IOS های 12.1 به بعد گفت می توانید اکسس لیست ها را با اسم تعریف کنید و استفاده کنید. دیگه هم محدودیت در تعداد اکسس لیست ها برطرف میشه و هم شناسایی اکسس لیست ها بسیار ساده تر میشه. اما چطور این کار را انجام دهیم؟

R-1(config)#ip access-list standard cisco

حالا وارد اکسس لیست استاندارد میشیم و داخلش می تونیم به سادگی قوانین رو بنویسیم . مثلا:

R-1(config-std-nacl)# permit host 192.168.10.10 log

همینطور اگر بخواهیم اکسس لیست extended تعریف کنیم به صورت زیر عمل می کنیم:

R-1(config)#ip access-list extended cisco

به همین سادگی ما اکسس لیست را با نام تعریف کردیم.

نکته آخر اینکه اگر بخواهیم اکسس لیست را برداریم کافی است مثل همیشه از no قبل از دستور استفاده کنیم. یعنی بنویسیم

R-1(config)#No access-list 1

خب امیدوارم جلسه امروز براتون مفید واقع شده باشد. موفق باشید.