ACL

ACL

آشنایی با مفهوم ACL

لیست های دسترسی مجاز (یا Access Control List) یکسری قانون بوده که با استفاده از آنها می توان پکت های تبادل شده در روتر را مورد بررسی و نظارت قرار داد. به عنوان مثال با استفاده از ACL میتوان مشخص کرد تا تنها پکت هایی به سمت شبکه وارد شوند که دارای آدرس مبدا و یا آدرس پورت خاصی باشند. ACLها بیشتر شبیه به دستورات شرطی بوده که با استفاده از آنها می توان یکسری تصمیمات خاصی را برای پکت ها اتخاذ نمود.
به عنوان مثال می توان مشخص کرد که اگر پکت هایی با آدرس مبدا 45.70.48.118 به سمت شبکه شما ارسال شد، آنها را Drop کرد و درغیر اینصورت اجازه ارسال و دریافت به پکتها داده شود.

به بیانی دیگر ACLها همانند یک صافی عمل کرده و تنها پکت هایی از این صافی ها عبور میکنند که دارای یکسری شرایط خاص باشند.

در هنگامی که پکت ها با ACLها مقایسه میشوند، سه موضوع توسط روتر بررسی می شود:

۱. پکت ها با تک تک رول ها به صورت ترتیبی مقایسه میشوند.

۲. پکت ها تا زمانی با رول ها مقایسه میشوند که با یکی از آنها مطابقت پیدا کند. توجه داشته باشید که به محض برقراری شرط، عملیات مقایسه با سایر رول ها متوقف خواهد شد.

۳. در انتهای هر ACL یک دستور Drop به صورت انتزاعی قرار دارد و باعث می شود تا اگر که هیچ یک از رول های ACL با پکت مطابقت پیدا نکند، پکت Drop شود.


پیکربندی ACL

Acl3

فرض کنید قصد داریم دسترسی به web را برای user1 مسدود کنیم : به ترتیب زیر ترافیک tcp مربوط به پورت 80 را از مبدا 1.1.1.10 به مقصد web server مسدود می کنیم :

soodar1(config)# ip access-list test deny tcp 1.1.1.10/32 2.1.1.10/24  eq 80
soodar1(config)# ip access-list test permit any any

اعمال ACL در اینترفیس

هنگامی که یک ACL در روتر تعریف شد، هیچ فیلتری برروی پکتها اعمال نمی شود تا زمانی که ACLها برروی پورت های روتر اعمال شود و اینکه مشخص گردد که ACLها برروی ترافیک های خروجی و یا ورودی اعمال گردند. پس با توجه به این موضوع مسیر جریان های هر اینترفیس، به دو دسته تقسیم می شود که شامل:

ترافیک های لبه ورودی (یا Inbound): در این حالت روتر قبل از اینکه اقدام به مسیریابی پکت ها کند، شرط های ACL را مورد بررسی قرار می دهد و در صورتی که شرایط مشخص شده در ACL برقرار گردید، عملیات مسیریابی پکت ها صورت میپذیرد.

ترافیک های لبه خروجی (یا Outbound): در این حالت روتر بعد از اینکه عملیات مربوط به مسیریابی پکت را انجام داد، قبل از اینکه پکت به سمت خارج هدایت شود، شرط های ACL را مورد بررسی قرار میدهد و در صورتی که شرایط مشخص شده در ACL برقرار گردید، عملیات مسیریابی پکت ها صورت میپذیرد.
حال با اعمال ACl در اینترفیس در جهت inbound محدودیت مورد نظر برای user1 اعمال می شود و کلیه بسته های tcp با پورت 80 را به مقصد server حذف می کند .

soodar1(config)# int ge2
soodar1(config-if)# ip access-group test in

مشاهده ACL

1. مشاهده یک ACL خاص

با دستور زیر می توان رول های اضافه شده در هر acl را مشاهده کرد :

soodar1(config)# show ip access-list test 
soodar1# show ip access-list test 
IP access list test
     10 deny   icmp 1.1.1.10/32 le 65535 2.1.1.0/24 le 65535
     20 permit any any


2. مشاهده تمامی ACL ها

اگر نام ACL را مشخص نکنید تمام ACL های موجود (IPv6 یا IPv4) در روتر را می توانید مشاهده کنید که البته ما در اینجا فقط یک ACL داریم و خروجی هر دو حالت نمایش تفاوتی ندارد:

soodar1# show ip access-list
IP access list test
     10 deny   icmp 1.1.1.10/32 le 65535 2.1.1.0/24 le 65535
     20 permit any any


بررسی عملکرد ACL

شرایط زیر پس از اعمال ACL در اینترفیس باید در شبکه برقرار باشد :

  1. نباید user1 به web server وصل شود .

  2. کاربر user2 باید بتواند به web server وصل شود .

  3. کاربر user1 باید بتواند web server را ping کند .


حذف ACL

حال یک acl دیگر را امتحان می‌کنیم ابتدا acl قبلی را حذف می‌کنیم :

soodar1(config)# no ip access-list test

مثالی دیگر

در acl جدید ارتباط ssh به web servre را می بندیم و فقط به user2 اجازه می دهیم که بتواند ssh بزند :

soodar1(config)# ip access-list test
soodar1(config-nacl)# 1 permit tcp 2.1.1.10/32 eq 22 1.1.1.10/32
soodar1(config-nacl)# 23 permit tcp 1.1.1.20/32 eq 22 2.1.1.10/32 
soodar1(config-nacl)# permit any any 
soodar1(config-nacl)# do sh ip access-list test
IP access list test
      1 permit   tcp 2.1.1.10/32 eq 22 1.1.1.10/32 le 65535 tcp-flag-mask 0 tcp-flag-value 0
      23 permit   tcp 1.1.1.10/32 eq 22 2.1.1.10/32 le 65535 tcp-flag-mask 0 tcp-flag-value 0
     33 permit any any

توجه شود برای باز کردن ارتباط ssh برای user2 باید از دو طرف این ارتباط باز شود و 2 رول اضافه شود . در بخش استفاده از نام سرویس و پروتکل راحت تر می توانید این کار را تنها با نام سرویس انجام دهید .

IPv6 ACl

مانند دیگر ویژگی های روتر سودار IPv6 نیز در ACL پشتیبانی می شود و شما می توانید ترافیک شبکه IPv6 خود را نیز با استفاده از ACL ها مدیریت کنید . در مثال زیر نمونه ای از تنظیم یک ACL در IPv6 را مشاهده می کنید :

soodar1(config)# ipv6 access-list testipv6
soodar1(config-ipv6-acl)# 1 deny tcp any 2001:1:2::2/64 eq 80
soodar1(config-ipv6-acl)# permit any any
soodar1(config-ipv6-acl)# do sh ipv6  access-list
IPv6  access list testipv6
     1 deny   tcp any le 65535 2001:1:2::/64 eq 80 tcp-flag-mask 0 tcp-flag-value 0
     11 permit any any

ACL با نام سرویس

در روتر سودار برای راحتی کار ادمین برخی از سرویس های پرکاربرد و به عبارت دیگر پروتکل های پرکاربرد را می توان به راحتی و تنها با استفاده از نام پروتکل در ACL استفاده کرد و ترافیک ها مربوط به آن پروتکل را برای کاربر و یا شبکه خاصی محدود کرد .

برای مثال اگر بخواهیم همان محدودیتی که برای ترافیک tcp با پورت 80 برای user1 در نمونه های قبلی اعمال کردیم را با استفاده از نام سرویس محدود کنیم کافی است پروتکل http را برای user1 ببندیم :

soodar1(config)# ip access-list denyhttp
soodar1(config-ipv6-acl)# 10 deny http 1.1.1.10/32 2.1.1.10/24
soodar1(config-ipv6-acl)# permit any any
soodar1(config-nacl)# do sh ip access-list 
IP access list denyhttp
     10 deny   tcp 1.1.1.10/32 eq 80 2.1.1.0/24 le 65535 tcp-flag-mask 0 tcp-flag-value 0
     11 deny   tcp 1.1.1.10/32 le 65535 2.1.1.0/24 eq 80 tcp-flag-mask 0 tcp-flag-value 0
     21 permit any any

  • توجه شود در زمان استفاده از نام پروتکل در ACL باید index بعدی رولی که اضافه می کنیم خالی باشد و هیچ رول دیگری وجود نداشته باشد . به طور نمونه در این مثال ما از index شماره 10 استفاده کرده ایم و باید در index شماره 11 هیچ رولی نداشته باشیم . بدین علت این شرایط باید رعایت شود که یک رول برای مسیر کلاینت به سرور و یک رول برای مسیر سرور به کلاینت در ACL اضافه می شود .
  • همان طور که در sh ip access-list می بینید 2 رول برای http اضافه شده است .


چند نکته

  • ACLها را به نحوی تعریف کنید که فیلترهای کلی در ابتدای لیست قرار داشته باشند و فیلترهای جزئی در انتهای لیست.

  • در صورتی که در اتنهای ACL از دستور permit any استفاده نشود و پکت ها با شرط های مشخص شده مطابقت نداشته باشد، پکت دور ریخته (Drop) خواهد شد.

  • ACLها تنها به ترافیک هایی اعمال خواهد شد که از روتر عبور میکنند، پس درنتیجه ترافیک هایی که از روتر تولید و ارسال می شوند با ACLها محدود نخواهند شد.


فعال کردن log های ACL

با دستور زیر می توانید Log های مربوط به acl را فعال کنید:

soodar1# debug acl event

resequence کردن

اگر بخواهید شماره تمامی رول های تنظیم شده در یک acl را مجددا تنظیم کنید باید از resequence استفاده کنید :

ip access-list resequence ACL4 (1-2147483647) (1-32765)

که در آن ACL4 نام acl ، شماره اول شماره شروع و شماره دوم گام های افزایش است .