ACL(Access Control Lists)
ACLجریان ترافیک را کنترل میکنند و می توانند از ترافیک های ناخواسته از یک منبع خاص به سوی یک مقصد مشخص جلو گیری کنند.
م توان برای یک روتر تعریف کرد چه ترافیک هایی اجازه ورود دارند و چه ترافیکهایی اجازه خروج دارند.
ACLها به دو صورت است:
Standard
Extended
Aclها را با یک سرس اعداد از هم متمایز می کنند:
برای standardها از 1 تا 99 و همچنین از 1300 تا 1999
برای extendedها از 100 تا 199 و همچنین از 2000 تا 2699
Aclهای standardفقط بر اساس سورس آدرس تصمیم می گیرند اما در extended
هم براساس سورس و هم بر اساس مقصد (destination) و نوع پروکل ارتباطی
می تواند تصمیم بگیرد.
برای یک interfaceدو نوع ترافیک وجود دارد in ,out
فرض کنید نمی خواهیم شبکه 192.168.10.10 به شبکه 172.16.0.0 دسترسی
داشته باشد.
برای این کار به محیط global configurationمی ریم دستور زیر رو می زنیم:
Acess-list 1
عدد واردشده می تواند بین 1 تا 99 یا 1300 تا 1999 باشد
Deny::با این دستور ما جلوی عبور ترافیک را می گیریم.
Permit:با این دستور ما اجازه عبور ترافیک را می گیریم.
در اینجا ما از denyاستفاده می کنیم.
ACCESS-LIST 1 DENY
در این مرحله ما سه انتخاب داریم:
1-وارد کردن آدرس شبکه با subnet maskآن برای جلوگیری از دسترسی این شبکه به شبکه ما.
2-any به این معنی که جلوی تمامی ترافیکها را بگیر
3-host به این معنی که از دسترسی یک هاست خاص جلوگیری کن.
ما در اینجا hostرو انتخاب می کنیم:
Access-list 1 deny host 192.168.1.5
دستور بالا از دسترسی هاست 192.168.1.5 به شبکه ما جلو گیری میکند.
خب حالا نوبت این هست که بگوییم جلوی ترافیک های ورودی یا خروجی کدامinterfaceرا بگیریم.گفتیم دو حالت در interfaceها داریم in , oute.
ما باید بگوییم جلوی ترافیک های ورودی را بگیرد یا خروجی
این نکته رو داشته باشید که بهترین جا برای اختصاص دادن یک Aclاستاندارد نزدیک ترین جا به مقصد است.
برای اختصاص دادن aclبه interface ها یا اصطلاحا assign کردن یک aclازدستور
زیر استفاده می کنیم.
Router(config)#int fa0/0
Router(config-if)#ip access-group 1 in
خب تمام شد اما بیاد داشته باشد بعضی مواقع اتفاق می افتد که شما یکaclنوشته اید که جلو دسترسی بعضی از هاستها را بگیرد اما می بینید که جلوی دسترس همه را گرفته یعنی همه ترافیک راdenyمی کند.چاره این کا دستور زیر هست :
Permit any
برای نوشتن aclمیتواتیم از روش زیر نیز استفاده کنیم:
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#ip access-list standard ?
<1-99> Standard IP access-list number
WORD Access-list name
Router(config)#ip access-list standard 50
Router(config-std-nacl)#deny host 192.168.1.50
Router(config-std-nacl)#permit any an
در این حالت خط فر مان به شکل رو به رو در می آید:
Router(config-std-nacl(
چند قانون مهم در acl :
1-با یک شماره aclمی توانیم بی نهایت قانون تعریف کنیم یعنی :
deny host 192.168.1.50
deny host 192.168.1.51
deny host 192.168.1.52
permit any
2-به هر interfaceفقط میتوان یک شماره access-listورودی اختصاص داد و یک access-listخروجی .در صورت اختصاص دو aclدومی بر روی اولی over writeمی شود.
3-ترتیب نوشتن aclها مهم است .وقتی ترافیکی می آید روتر به aclمراجعه می کند و هر جا ترافیک با acl ما match شود(مثلا گفته باشیم ترافیک را Denyکن) دیگر سراغ aclهای بعدی نمیرود و ترافیک را deny می کند.
4- هر access-listکه نوشته میشود یک خط به انتهای آن اضافه میشود :
Deny any
این خط در انتهای هر aclوجود دارد و به صورت trance parentیا نامرئی است.
مثلا اگر دستور زیر را نوشته باشیم که فقط یک هاست را denyکند:
Access-list 1 deny host 192.168.1.5
اگر 192.168.1.6 هم بیاید باز هم denyمیشود:
برای رفع ان از دستور زیر استفاده می کنیم:
Access-list 1 permit any
Access-list extended
قابل پیاده سازی در لایه 3و4 می باشد.
یعنی هم بر اساس ipهم بر اساس port
رنج اعداد آن 100 تا 199 و 2000 تا 2699
برای شروع ما قصد داریم که جلوی دسترسی 192.168.1.10 به 172.17.1.10 را بگیریم.
Ip access-list extended 100
Deny ip host 192.168.1.10 host 172.17.1.10
Int fa 0/0
Ip access-group 100 in
نکته:
بهترین محل برای Assignکردن یک acl extendedنزدیک ترین جا به sourceاست چون مبدا و
مقصد مشخص است .
برعکس بهترین جا برای Assignکردن یک Aclاستاندارد نزدیک ترین جا به مقصد است.
نوشتن Aclبر اساس port
خب حالا در نظر بکیرید که می خواهیم جلوی دسترسی آدرس 192.168.1.10 را
به وب سرور بگیریم.
Ip access-list extended 101
Deny tcp host 192.168.1.10 host 172.17.1.10 eq 80
Permit tcp any any eq 80
که در اینجا 172.17.1.10 ادرس وب سرور ماست.
در اینجا ما به جای ipاز tcp استفاده کردیم و می خواهیم ترافیک را بر اساس port
ها فیلتر کنیم.
Eqبه معنی برابر بودن است .یعنی اگر درخواست رسیده برابر با پورت 80 یا www
بود ترافیک را Deny کن.
و در آخر هم گفتیم به هر کس که در خواست پورت 80 را داد اجازه بده.
درا ینجا اگر بخواهیم بگوییم به هیچ چیزی دسترسی نداشته باشد و فقط به پورت
80 دسترسی داشته باشد کافی است به جای eqاز neqاستفاده کنیم.
اگر بخواهیم که یک رنج پورت را ببندیم به جای eq از rangeاستفاده می کنیم مثلاک
Range 21 80
اگر بخواهیم از یک پورت به بعد را ببندیم می توانیم به جای Eqاز qtاستفاده کنیم.
اگر بخواهیم از یک پورت به پایین را ببندیم به جای qtهز it استفاده می کنیم.
محدود کردن دسترسی از طریق telnet توسط acl
کار زیاد سختی نیست شما بعد از ایجاد نام کاربری و رمز عبور در روتر Aclهای مورد
نظر رو می نویسید و بعد با دستود ip access-classاون رو به telnetنصبت میدیم.
Ip access-list standard 1
Permit host 192.168.1.10
Den any
Line vty 0
Ip access-class 1 in