عاطفه حسین زاده
متخصص شبکه های سیسکو

آموزش انواع ACL یا Access List در سیسکو به همراه راه اندازی

در این مقاله به طور جامع در خصوص Access List ها، قوانین موجود در تعریف ACLها، انواع Wildcard Mask می پردازیم. در مقالات بعدی در خصوص پیکربندی انواع ACLها و سناریوهای مختلف پیکربندی ACL صحبت خواهیم کرد. به طور پیش فرض بعد از اینکه روترها شروع به کار می کنند، تمامی پیامها قادر به عبور از یک اینترفیس به اینترفیس های دیگر خواهند بود.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

اما شرایطی پیش خواهد آمد که شما برای مقاصد مختلف، چه مباحث امنیتی شبکه و چه سیاستهای کلی که در پیش گرفته شده اند، نیاز به اعمال محدودیت در انتقال ترافیک شبکه خواهیم داشت. سیسکو ما را قادر می سازد که در شرایط گفته شده، عبور ترافیک شبکه از یک اینترفیس به اینترفیس های دیگر را کنترل کنیم. ACLها یکی از خصوصیات قدرتمند IOS می باشند که سیسکو در کنار IP، پروتکل های دیگری را نیز مانند DECnet، XNS، Apple Talk، IPX برای استفاده از ACL پشتیبانی می کند.

Access List یا همان ACL در حقیقت روشی برای فیلتر کردن ترافیک خروجی و ورودی بر روی اینترفیس های روتر می باشد، به صورت پیش فرض همه ترافیک قابلیت ورود و خروج از همه اینترفیس های روتر را خواهند داشت که شما با استفاده از توانمندی ACLها می توانید ورود و خروج ترافیک را براساس قوانین و پروتکل های خاص فیلتر نمائید.

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

کاربرد ACL در تجهیزات سیسکو چیست؟

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

  • محدود کردن دسترسی از طریق VTY TELNET
  • فیلتر کردن اطلاعات routing
  • اولویت بندی ترافیک مربوط به WAN
  • تغییر پارامتر Administrative distance
  • برقراری تماس های تلفنی (DDR (Dial-Demand Routing

ACLها در global configuration mode ایجاد شده و سپس آنها را باید فعال نمود. برای کنترل ترافیک انتقالی از راه اینترفیس ها، ACLها را باید روی اینترفیس موردنظر فعال نماییم. در هنگام فعال نمودن ACLهای ایجاد شده باید نوع ترافیکی را که تحت تاثیر قرار خواهد گرفت را مشخص نماییم. ترافیک عبوری را میتوان در دو گروه عمده قرار داد:

  • ترافیک ورودی یا Inbound
  • ترافیک خروجی یا Outbound

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

برای مثال اگر از دستورات ping و یا traceroute در روی روتر استفاده کرده و یا اقدام به برقراری ارتباط telnet از روتر خود به سمت دستگاههای دیگر نماییم، نمی توان این ترافیک ها را به وسیله ACLها فیلترگذاری کرد. اما اگر روتر دیگری اقدام به ping کردن و یا برقراری ارتباط telnet با روتر ما نماید و یا از طریق روتر ما، دستگاه دیگری را هدف قرار دهد، می توان از ACL بهره برد.

چه قوانینی برای تعریف ACL ها در سیسکو وجود دارد؟

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

  • براساس Source IP Address یا آدرس فرستنده
  • براساس Destination IP Address یا آدرس مقصد یا گیرنده
  • براساس شماره پورت خاص
  • براساس پروتکل های UDP و TCP
  • براساس یکسری از پروتکلهای شبکه مانند ICMP، OSPF، EIGRP، IGMP و ...

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

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

برای مثال اگر دو قانون برای دسترسی به یک دستگاه، که یکی اجازه عبور را داده و یکی نداده در جدول موجود باشند، قانونی را که در اول نوشته شده باشد اجرا شده و از دیگری صرف نظر خواهد شد.برای همین هم در هنگام نوشتن قانون ها موارد اختصاصی تر را باید در اول نوشته و موارد عمومی تر را در آخر لیست قرار دهیم. برای درک بهتر، مثالی را مطرح میکنیم.فرض کنید که یک ACL دارای دو عدد قانون یا به اصطلاح statement در لیست خود می باشد. به ترتیب زیر:

  1. اجازه دسترسی از شبکه 172.16.0.0/16
  2. محدودیت دسترسی از دستگاه 172.16.1.1

با یادآوری این نکته که لیست ACL از بالا به پایین پردازش می شود، فرض می کنیم که روتر یک پیام را با آدرس فرستنده 172.16.1.1 دریافت کرده است. روتر این آدرس را با اولین مورد موجود در لیست مقایسه می کند: آیا پیام رسیده از طرف شبکه 172.16.0.016 می باشد؟

جواب مثبت است و بنابراین اجازه عبور به ترافیک رسیده داده نخواهد شد. اما به دلیل اینکه مورد اول با پیام رسیده مطابقت داشت، مورد دوم هیچ وقت پردازش نخواهد شد. در این مثال همه ترافیک هایی که مربوط به شبکه 72.16.0.016 می باشند، اجازه عبور خواهند یافت، حتی آدرس 172.16.1.1/16. بیایید که ترتیب نوشتن دو قانون بالا را تغییر دهیم. بدین صورت:

  1. محدودیت دسترسی از دستگاه 172.16.1.1
  2. اجازه دسترسی از شبکه 172.16.0.0/16

اگر دستگاه 172.16.1.1 ترافیکی را به روتر بفرستد، روتر اولین مورد موجود در لیست ACL را با مشخصات پیام مقایسه کرده و از آنجایی که در همان اولین قدم تطابق موردنظر حاصل شد، روتر قانون اول را در مورد پیام رسیده صزفنظر از اینکه چه نوع ترافیکی باشد از بین خواهد رفت.اگر دستگاه دیگری مثل 172.16.1.2 اقدام به ارسال ترافیک برای روتر نماید، روتر مشخصات پیام را با اولین مورد موجود در لیست ACL مقایسه کرده و به دلیل نیافتن مطابقت مورد نظر، مورد دوم پردازش خواهد شد که تطابق وجود داشته و اجازه دسترسی به ترافیک فوق داده می شود.

از همین روست که گفته می شود ترتیب نوشتن هریک از موارد لیست ACL بسیار مهم بوده و انتقال ترافیک شبکه را تحت تاثیر قرار خواهد داد.در تعریف ACLها به جای استفاده از Subnet Mask از Wildcard Mask استفاده می شود که بیان کننده تعداد بیت ها از آدرس می باشد که باید در ACL مورد بررسی قرار بگیرند و به عبارت دیگر مشخص کننده قسمتی از آدرس IP Address می باشد که باید در ACL مورد بررسی قرار بگیرد.

Wildcard Mask دقیقا برعکس Subnet Mask می باشد به جای bitهای 1 در subnet mask ما از بیت های صفر در wildcard mask و به جای بیت های صفر در subnet mask از بیت های یک در wildcard mask استفاده می کنیم.برای مثال فرض کنید که ماسک 255.255.0.0 را در اختیار داریم. اگر این ماسک را در مبنای 2 بنویسیم خواهیم داشت:

255.255.0.0 = 11111111.11111111.00000000.00000000

سرانجام اگر این subnet mask را تبدیل به wildcard mask نماییم، نتیجه به صورت زیر خواهد بود:

00000000.00000000.11111111.11111111

که در این صورت تبدیل این آدرس به حالت دسیمال یا مبنای 10 آدرس 0.0.255.255 به دست خواهد آمد. در این مثال wildcard mask به روتر می گوید که فقط 16 بیت از اول آدرس IP پیا رسیده باید با 16 بیت از آدرس مشخص شده در هریک از قانون های ACL یکسان باشد تا آن قانون روی پیام رسیده اجرا گردد. در غیر اینصورت، روتر به بررسی قانون های بعدی خواهد پرداخت.دو نوع مخصوص از wildcard mask وجود دارد:

0.0.0.0
255.255.255.255

ماسک اولی به روتر می گوید که تمامی 32 بیت آدرس پیام رسیده باید با آدرس مشخص شده در لیست ACL برابر باشد تا اینکه قانون موردنظر روی آن اجرا شود. برای همین هم اگر wildcard mask برابر با 0.0.0.0 باشد، به نام host mask نامیده می شود.یک مثال ساده میزنیم:

اگر قانون موجود در ACL را به صورت مقابل داشته باشیم: 192.168.1.1 0.0.0.0 به این معنی است که روتر دقیقا بدنبال آدرس 192.168.1.1 در بین پیامهای رسیده می گردد که اگر هیچ مشابهی پیدا نشود، روتر موارد بعدی موجود در لیست ACL را بررسی می نماید.بعد از اینکه لیست ACL را به صورت 192.168.1.1 0.0.0.0 تنظیم نمودیم، روتر به طور اتوماتیک آن را به حالت host 192.168.1.1 در خواهد آورد.

ماسک دوم (255.255.255.255) به روتر می فهماند که همه آدرسهایی که وارد روتر می شوند قابل پذیرش بوده و قانون مزبور روی همه پیام های ورودی اجرا خواهند شد. معمولا این نوع را به صورت آدرس IP برابر با 0.0.0.0 و Wildcard Mask برابر با 255.255.255.255 در داخل ACL مشخص می کنیم: 255.255.255.255 0.0.0.0 که روتر آن را به صورت any 0.0.0.0 در خواهد آورد. آدرس IP نوشته شده در این فرمول اهمیت چندانی نداشته و می توان هر آدرسی را بدلخواه وارد نمود.

مثلا میتوان نوشت: 255.255.255.255 192.168.1.145 که در این حالت نیز روتر صرف نظر از آدرسی که مشخص شده است، به علت ماسک داده شده، همه آدرس ها را قبول خواهد کرد. برای اینکه بهتر بتوانید با Wildcard Mask آشنا شوید، چند مثال را در این باره مطرح می کنیم. جدول زیر برخی از آدرس های IP و Wildcard Mask را نشان می دهد.

وب سایت توسینسو

Access Listها دو نوع به شرح زیر می باشند:

  • Standard Access List
  • Extended Access List

چند نوع Access List در سیسکو وجود دارد؟

در قسمت قبل به این نکته اشاره کردیم که Access Listها در سیسکو به دو نوع Standard Access List و Extended Access List تقسیم می شوند. در این مقاله به شما ضمن معرفی و تشریح این Access List ها به بررسی روش پیکیربندی آن بر روی Router ها نیز اشاره خواهیم کرد. در ادامه توضیحاتی در خصوص روش کارکرد هر یک از این Access List ها را ارائه خواهیم کرد.

  • Standard Access List: توسط این ACLها می توانید اقدام به کنترل ترافیک ورودی و خروجی براساس source ip address یا آدرس فرستنده نمایید و این نوع ACL قادر به کنترل ترافیک ورودی و خروجی براساس پروتکل ها و پورت ها و همچنین براساس آدرس مقصد نمی باشد. این ACLها از طریق شماره شناسایی می شوند. شماره های 99 – 1 و 1999 – 1300 مربوط به Standard Access Listها می باشد.
  • Extended Access List: این ACLها قادر به کنترل ترافیک ورودی و خروجی براساس پروتکل های لایه 3 مانند IP و همچنین پروتکل های TCP، UDP و همچنین براساس پورت ها و سایر پروتکل های شبکه مانند ICMP، IGMP، OSPF، EIGRP و ... می باشند. این ACLها از طریق شماره شناسایی می شوند. شماره های 199 – 100 و 2699 – 2000 مربوط به Extended Access Listها می باشد.
  • ACLهای استاندارد ساده ترین نوع ACLها می باشند و عمل فیلتر کردن ترافیک ها را فقط براساس آدرس IP منبع فرستنده پیام انجام می دهند. دستور زیر را می توان برای ایجاد یک ACL استاندارد به کار برد:
Router(config)#access-list 1-99| 1600-1999 permit| deny source_IP_address [wildcard_mask] [log]

برای درک بهتر و آسانتر از طریق یک سناریو پیکربندی Standard Access List بر روی یک روتر را نشان می دهیم:

آموزش ایجاد Access Control List در تجهیزات سیسکو

(نکته: به طور اشتباه gateway سرور، 192.168.1.1 نوشته شده که اصلاح میکنم: 192.168.2.1.... ،gateway شبکه سمت چپ 192.168.1.1 می باشد)

  • مرحله 1: پیکربندی IP Address روی اینترفیس های روتر:
Router(config)# interface fastEthernet 0/0
Router(config-if)# ip address 192.168.1.1 255.255.255.0
Router(config-if)# no shutdown
Router(config-if)#exit
Router(config)# interface fastEthernet 0/1
Router(config-if)# ip address 192.168.2.1 255.255.255.0
Router(config-if)# no shutdown
Router(config-if)#exit
  • مرحله 2: پیکربندی Standard Access List بر روی روتر:
Router(config)#access-list 1 deny host 192.168.1.3
Router(config)#access-list 1 permit any

در این مرحله ما یک access list نوع standard تعریف خواهیم نمود و شماره 1 را برای آن انتخاب می کنیم، همانطور که در دستور مشاهده می کنید، با این ACL مانع از دسترسی کامپیوتر PC2 به سرور خواهیم شد.

  • مرحله سوم: اعمال Access List به اینترفیس

در این مرحله ما می خواهیم این ACL شماره 1 را که در مرحله 2 ایجاد نموده ایم، به اینترفیس F0/0 برای Inbound اعمال نماییم. این عمل باعث می شود که هر ترافیکی که می خواهد به این اینترفیس وارد شود با قوانین داخل ACL شماره 1 بررسی شود که آیا اجازه عبور دارد یا خیر.

Router(config)#access-list 1 deny host 192.168.1.3        دستور اول

در این خط ما با دستور access list 1 یک ACL نوع استاندارد با شماره 1 تعیین نموده ایم. در ادامه همین دستور عبارت deny ذکر شده است که برای مانع شدن ترافیک استفاده می شود. در ادامه دستور کلمه host ذکر شده است، اشاره به تعریف یک host خاص با IP مشخص را دارد که آدرس این Host در این مثال 192.168.1.3 می باشد.نتیجه اعمال ACL: این خط از ACL مانع از عبور ترافیکی که مبدا آن pc-2 باشد، خواهد شد.

Router(config)#access-list 1 permit any         دستور دوم

در خط بعد، قانون دوم را به ACL 1 اضافه می کنیم که این بار به جای deny از عبارت permit استفاده شده است یعنی صدور اجازه عبور ترافیک و به جای تعیین شبکه یا host خاص به همه host اجازه داده شده است عبارت Any اشاره به کل آدرس های مبدا دارد. نتیجه اعمال ACL: این خط از ACL اجازه عبور ترافیک از هر آدرس مبدایی را که باشد خواهد داد.

  • مرحله  4: تصدیق پیکربندی ACL

مرحله بعد، ما از PC-2 که متصل به Switch1 می باشد، کامپیوتر Server، که متصل به Switch2 می باشد را ping میکنیم. همانطور که مشاهده می کنید، ارتباط بین PC2 و Server توسط ACL مسدود (deny) شده است.

وب سایت توسینسو

مرحله بعد ما از PC-1 کامپیوتر Server را ping می کنیم. همانطور که میبینید، ارتباط بین PC1 و Server توسط ACL اجازه یا permit داده شده است.

وب سایت توسینسو
  • در اینجا پیکربندی روتر را مشاهده می کنید*:
وب سایت توسینسو

آموزش اعمال محدودیت دسترسی به Telnet با ACL

در کنار قابلیت ACLهای استاندارد برای کنترل ترافیک ورودی و خروجی از اینترفیس های روتر، می توان محدودیت هایی را در دسترسی از طریق telnet به روترها نیز اعمال کرد. مثلا می توان فقط مدیران را قادر ساخت که از طریق telnet با روتر شما اتصال برقرار نمایند.اولین قدم، ایجاد یک ACL است که در لیست آن آدرس IP تمامی دستگاههایی که مدیران از طریق آن دستگاه ها به روتر ما ارتباط telnet را برقرار خواهند نمود مشخص کرده و اجازه دسترسی را به وسیله تایپ permit به آنها می دهیم. در مرحله بعدی ACL ایجادی خود را باید فعال سازیم، اما نه بر روی یکی از اینترفیس های روتر. در چنین وضعیتی ACL مربوطه را باید در Vty Line فعال سازیم.

  • به شکل زیر :
Router(config)# line VTY 0 4
Router(config)#access-class standard_ACL_# in|out

یادآوری این نکته ضروری است که به صورت پیش فرض 5 ارتباط همزمان telnet را می توان به یک روتر برقرار نمود که با مشخص کردن ارتباط اول، یعنی 0، و ارتباط آخر، یعنی 4، این ACL در روی تمامی 5 ارتباط فعال خواهند شد. اگر به خاطر دلایلی مثل فراموشی، ACL ایجاد شده را در روی تعدادی از ارتباطات telnet فعال نساخته باشیم، باعث بروز مشکلات امنیتی در شبکه خواهیم شد. پارامتر in باعث اعمال محدودیت بر روی ارتباطات telnet ورودی به روتر می شود.

اما پارامتر out گزینه منحصر به فردی است. با به کار بردن این پارامتر می توان مشخص کرد که این روتر قادر به برقراری ارتباط telnet به وسیله دستورات telnet یا connect با چه دستگاههایی باشد. در ACL های استاندارد این یک استثناء می باشد و روتر را مجبور می کند که آدرس های مشخص شده در قانون های ACL را به عنوان آدرس مقصد در نظر بگیرد. در این شرایط روتر قبل از اینکه اجازه برقراری telnet از طریق روتر خودمان به سوی دستگاههای دیگر را بدهد، ACL را بررسی کرده و در صورت لزوم اجازه را صادر خواهد کرد.مثال ساده زیر ایجاد و فعال کردن یک ACL را برای یک ارتباط telnet نشان می دهد:

Router(config)#access-list 99 permit 192.168.1.0 0.0.0.255
Router(config)# line vty 0 4
Router(config-line)#access-class 99 in

در مثال بالا فقط دستگاههای موجود در شبکه 92.168.1.0/24 اجازه برقراری ارتباط به روتر ما را دارند. نیازی به نوشتن دستورات deny نداریم. زیرا که وجود implicit deny در آخر هریک از قانون های ACL بطور خود به خودی بقیه ترافیک ها به غیر از آنهایی که اجازه عبور دارند را حذف خواهند نمود.در قسمت بعدی سری مقالات ACL مشاهده خواهید کرد که به وسیله استفاده از ACLهای extended نیز می توان در انتقال ترافیک روترها اعمال محدودیت نمود. اما مراحل این کار کمی پیچیده تر می باشد.

ACL های گسترده بر روی اینترفیس های روتر تاثیر می گذارند و نمی توان آنها را برای اعمال محدودیت در دسترسی telnet به دستگاههای دیگر مورد استفاده قرار داد. همچنین وقتی که یک ACL را در روی یک اینترفیس فعال می سازیم، کارایی آن اینترفیس کاهش خواهد یافت که بسته به مدل، نسخه نرم افزار IOS و امکانات دستگاه، این کاهش در کارایی و عملکرد دستگاه متفاوت خواهد بود. بنابراین اگر قصد اعمال محدودیت در دسترسی به طریق telnet را دارید، استفاده از ACLهای استاندارد و دستور access-list بهترین گزینه می باشد

  • به مثالی دیگر از ACL های استاندارد توجه کنید
Router(config)# access-list 2 deny 192.168.1.0
Router(config)# access-list 2 deny 172.16.0.0
Router(config)# access-list 2 permit 192.168.1.0
Router(config)# access-list 2 permit 0.0.0.0 255.255.255.255
Router(config)# interface ethernet 0
Router(config-if)# ip access-group 1 out

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

قانون اول اجازه عبور به پیام های رسیده از سوی 192.168.1.0 را نخواهد داد. به دلیل اینکه wildcard mask مشخص نشده است، بنابراین ماسک فوق به صورت 0.0.0.0 بوده و نشان دهنده این است که باید مطابقت دقیق وجود داشته باشد. مشکل موجود در این قانون این است که ما اصولا این آدرس را نمی توانیم در شبکه به کار بگیریم.زیرا که آدرس 192.168.1.0/24 یک شماره شبکه می باشد و نه یک آدرس host.

  • نکته: اولین و آخرین آدرسی که در هر شبکه قرار می گیرد را نمی توان به hostها یا دستگاههای شبکه اختصاص داد. اولین آدرسی که در هر شبکه وجود دارد را به نام شماره شبکه یا Network Broadcast می نامیم.

قانون دوم نیز دچار همین مشکل است اما قانون های سوم و چهارم صحیح نوشته شده اند.

می بینید که تنظیم یک ACL می تواند کار زیرکانه ای باشد. به هر صورت، شکل صحیح تری از مثال بالا به صورت زیر خواهد بود:

Router(config)# access-list 2 deny 192.168.1.0 0.0.0.255
Router(config)# access-list 2 deny 172.16.0.0 0.0.255.255
Router(config)# access-list 2 permit 192.168.1.1
Router(config)# access-list 2 permit 0.0.0.0 255.255.255.255
Router(config)# interface ethernet 0
Router(config-if)# ip access-group 1 out

همانطوریکه میبینید قانون اول اجازه عبور به ترافیک رسیده از کل شبکه 192.168.1.0/24 را نخواهد داد.قانون دوم نیز به همین شکل اجازه عبور به ترافیک مربوط به شبکه 172.16.0.0/16 را نمی دهد.قانون سوم این اجازه را به دستگاهی با آدرس 192.168.1.1 داده و قانون چهارم نیز همه ترافیک های رسیده را می پذیرد. اما هنوز مشکلی در دستورات فوق به چشم می خورد. به قانون های اول و سوم توجه کنید. آیا روتر قانون سوم را پردازش خواهد کرد یا نه؟

اگر جواب شما "نه" باشد درست حدس زده اید.گفته شد که در نوشتن قانون های یک ACL باید موارد اختصاصی تر را در اول قرار دهیم. در مثال بالا وقتی روتر قانون اول را می بیند، تمامی ترافیک مربوط به شبکه 192.168.1.024 را حذف خواهد نمود. در حالیکه در قانون سوم اجازه عبور به ترافیک دستگاه 192.168.1.1 که جزئی از 192.168.1.024 می باشد داده شده است. روتر با پردازش قانون اول، ترافیک رسیده از 192.168.1.1 را حذف خواهد نمود و دیگر فرصت برای بررسی قانون سوم نخواهد رسید. برای همین باید قانون سوم را در ابتدا و قبل از قانون اول بیاوریم. یعنی به شکل زیر:

Router(config)# access-list 2 permit 192.168.1.1
Router(config)# access-list 2 deny 192.168.1.0 0.0.0.255
Router(config)# access-list 2 deny 172.16.0.0 0.0.255.255
Router(config)# access-list 2 permit any
Router(config)# interface ethernet 0
Router(config-if)# ip access-group 1 out

بانگاه دقیق تر به دستورات بالا باز هم مشاهده خواهید کرد که یک مشکل دیگر هنوز باقی مانده و آن هم این است که ما شماره ACL را در موقع فعال کردن در روی Ethernet 0 به اشتباه روی عدد "2" تنظیم کرده ایم که این عدد باید برابر با "1" باشد.بنابراین قسمت آخر دستور نوشته شده را به صورت زیر اصلاح می کنیم:

Router(config)# interface ethernet 0
Router(config-if)#  no ip access-group 1 out
Router(config-if)#  ip access-group 2 out

البته این نکته را از یاد نبرید که قبل از فعال کردن ACL جدید در ابتدا باید ACL قدیم را حذف کرده و سپس اقدام به آن کار نمایید

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

  • آدرس IP فرستنده و گیرنده پیام ها
  • نوع پروتکل IP مورد استفاده مثل IP، ICMP، TCP، UDP و ...
  • اطلاعات مربوط به پروتکل ها مثل شماره پورت در TCP و UDP و نوع پیامها یا Message type در پروتکل ICMP

ترکیب دستورات مورد استفاده برای ایجاد این نوع ACL به شکل زیر است:

Router(config)#access-list 100-199| 2000-2699 permit|deny IP_Protocol
source_address source_wildcard_mask
[protocol_information]
destination_address destination_wildcard_mask
[protocol_information] [log]

از این دستور نیز می توان فهمید که دستورات بکار رفته در ایجاد ACLهای extended کمی پیچیده تر از قبلی است. شماره ای که برای نام گذاری ACLها بکار می رود را می توان در رنج 100 تا 199 و نیز 1699 تا 2000 انتخاب نمود. بعد از مشخص نمودن گزینه های permit / deny نوع پروتکل مورد نظر را نیز باید مشخص نماییم که این نکته اولین تفاوت اساسی بین ACLهای استاندارد را با ACLهای گسترده نشان می دهد. این پروتکل ها شامل موارد زیر می شوند:

IP,TCP,ICMP,GRE,UDP,IGRP,EIGRP,IGMP,IPINIP,NOS,OSPF                                      

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

برای مثال اگر از پروتکل IP استفاده می کنیم، می توان شماره های پورت دستگاه ها را هم تعیین کرد. برای ICMP نیز می توان انواع پیام های ارسالی را مشخص نمود. در آخر نیز با بکار بردن log می توان نتایج را به پورت کنسول و یا یک سرور حاوی اطلاعات log یا sylog منتقل کرده و آنها را به صورت متمرکز در آنجا تحت بررسی قرار داد. بکار بردن log در این دستور نیز انتخابی می باشد.

آموزش به کار بردن Extended ACL در TCP/UDP

دستور زیر را برای پیکربندی یک ACL گسترده در پروتکل های TCP و UDP بکار می بریم:

Router(config)# access-list 100-199|2000-2699 permit|deny
tcp|udp
source_address source_wildcard_mask
[operator source_port_#]
destination_address destination_wildcard_mask
[operator destination_port_#] [established] [log]

مشاهده می کنید که ما بعد از مشخص کردن یکی از گزینه های permit یا deny نام پروتکل آورده می شود که در اینجا بحث ما بر سر یکی از پروتکل های TCP یا UDP می باشد. در هنگام به کار بردن این پروتکل ها، آدرس منبع، آدرس مقصد، شماره و یا نام پورت های مورد استفاده را می توان تعیین نمود. همچنین در این پروتکل ها باید یک اپراتور را نیز مشخص کنیم. در جدول زیر لیست اپراتورهای موجود به همراه شرح آنها نیز آمده است.

در یاد داشته باشید که این اپراتورها فقط در TCP و UDP کاربرد دارند. همانطوریکه اشاره شد اگر پروتکل مورد استفاده ما TCP یا UDP باشد می توان شماره یا نام پورت ها را هم مشخص نمود. مثلا اگر منظور ما یک ارتباط telnet باشد، هم می توان عبارت telnet را بکار برد و یا شماره 23 را به عنوان شماره پورت متناظر آن استفاده نمود. جدول زیر نام و شماره برخی از پورت های متداول را لیست کرده است.

شماره پورت ها

در زیر به لیست کامل متناظر با پورت های TCP اشاره می کنیم:

Bgp,chargen,daytime,domain,echo,finger,ftp,ftp_data,gopher,hostname,irc,klogin,kshell,lpd,nntp,
pop2,pop3,smtp,sunrpc,syslog,tacacs-ds,talk,telnet,time,uucp,whois,www

Pop3 معمولا در دسترسی کاربران به سرورهای mail کاربرد دارد. www هم در دسترسی به سرورهای http مورد استفاده قرار می گیرد. اگر نام یک پورت در لیست بالا موجود نبود، می توانید همچنان از شماره آنها استفاده کنید. اگر شماره یا نام پورت موردنظر را مشخص نکنیم، بطور پیش فرض تمامی ارتباطات TCP تحت تاثیر قرار خواهند گرفت.در جدول زیر نیز برخی از نام ها و شماره پورت های معمولی که در UDP بکار می رود نشان داده شده اند:

ACL ها در سیسکو

اگر به دستوریکه در اول این بحث آورده ایم دقت کنید، متوجه وجود یک کلمه به نام established در آخر دستورات خواهید شد. در مواقعی احتمال دارد که یک ترافیک TCP را در داخل شبکه ایجاد کرده باشیم و بخواهیم که ترافیک های برگشتی آن را در هنگام ورود به شبکه فیلتر نماییم. در اینصورت این کلمه باعث خواهد شد که روتر اجازه دسترسی را به تمامی بسته هایی که دارای بیت های RST یا ACK در قسمت سر پیام باشند یا داده و یا اجازه ورود را به آنها ندهد. به این نوع از اتصالات، وابسته به ارتباط یا connection-oriented می گویند.

آموزش فعال سازی Extended ACL در روتر سیسکو

به وسیله دستور زیر می توان بعد از ایجاد یک ACL گسترده آن را در روی یکی از اینترفیس های روتر فعال سازیم:

Router(config)#interface type [module_#] port_#
Router(config)#ip access-group ACL_# in|out
  • لابراتوار : پیکربندی Extended Access-list بر روی روتر

در این لابراتور میخواهیم 6 عدد pc به نام های PC1 تا PC6 و یک سرویس دهنده ی فایل با نام File server وجود خواهد داشت که در سه subnet قرار دارند، با استفاده از Extended Access listهاريال می خواهیم دسترسی PC5 از SUBNET3 به File server موجود در subnet1 را مسدود کنیم، ولی دسترسی به سایر کامپیوترهای subnet1 توسط PC5 و سایر PCها در سایر subnetها وجود داشته باشد.


سناریو ACL ها در سیسکو
  • مرحله اول : پیکربندی IP Address روی اینترفیس های روتر

پیکربندی IP Address روی اینترفیس FastEthernet 0//0 روتر

Router#config t
Router(config)#interface fastethernet 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shut down

پیکربندی IP Address روی اینترفیس FastEthernet 1//0 روتر

Router#config t
Router(config)#interface fastethernet 1/0
Router(config-if)#ip address 192.168.2.1 255.255.255.0
Router(config-if)#no shut down

پیکربندی IP Address روی اینترفیس FastEthernet 2//0 روتر

Router#config t
Router(config)#interface fastethernet 2/0
Router(config-if)#ip address 192.168.3.1 255.255.255.0
Router(config-if)#no shut down
  • مرحله دوم: پیکربندی Extended Access list بر روی روتر

در این مرحله، یک ACL نوع Extended تعریف و شماره آن را 101 انتخاب خواهیم کرد و با استفاده از این ACL مانع از دسترسی کامپیوتر PC5 در 3Subnet به File Server موجود در Subnet1 خواهیم شد و PC5 این توانایی را خواهد داشت که به سایر کامپیوترهای Subnet1 دسترسی داشته باشد.

Router#config t
Router(config)#access-list 101 deny ip host 192.168.3.2 host 192.168.1.4
Router(config)#access-list 101 permit ip any any
ACL ها در سیسکو
ACL ها در سیسکو
  • مرحله سوم: اعمال Access list به اینترفیس

در این مرحله ما می خواهیم ACL شماره 101 را که در مرحله 2 ایجاد نموده ایم، به اینترفیس FastEthernet 2//0 برای Inbound اعمال نماییم. این عمل ما باعث خواهد شد که هر ترافیکی که می خواهد، به اینترفیس FastEthernet 2//0 وارد شود، با قوانین داخل Access list شماره 101 بررسی شود که آیا اجازه عبور دارد یا خیر.

Router#config t
Router(config)#هinterface fastethernet 2/0
Router(config)#ip access-group 101 in
ACL ها در سیسکو
  • مرحله چهارم : تصدیق پیکربندی Access List

مرحله بعد، ما از PC5 که عضو Subnet3 می باشد، کامپیوتر سرور را که عضو Subnet1 می باشد، ping می کنیم.

Pc5>ping 192.168.1.4

pinging 192.168.1.4 with 32 bytes of data:

request timed out
request timed out
request timed out
request timed out

همانطور که می بینید، ارتباط بین PC5 که عضو Subnet3 می باشد با سرور که عضو Subnet1 می باشد، توسط ACL مسدود (deny) شده است. مرحله بعد ما از PC5 که عضو Subnet3 می باشد کامپیوتر PC1 را که عضو Subnet1 می باشد، ping می کنیم:

Pc5>ping 192.168.1.2

pinging 192.168.1.2 with 32 bytes of data:

Reply from 192.168.1.2: bytes=32 time=20ms TTL=254

Reply from 192.168.1.2: bytes=32 time=20ms TTL=254

Reply from 192.168.1.2: bytes=32 time=20ms TTL=254

Reply from 192.168.1.2: bytes=32 time=20ms TTL=254
  • مرحله پنجم : مشاهده همه ACLها و تعداد PACKETهایی که با قوانین ACLها Match بوده اند

برای مشاهده همه ACLها روی روتر و مشاهده تعداد PACKETهایی که با قوانین ACLها Match بوده اند، از ذستور show access-list استفاده خواهد شد همانطور که در دستور زیر مشاهده می کنید:

Router#show access-list
Extended IP access list 101
deny ip host 192.168.3.2 host 192.168.1.4 (4 match (es))
permit ip any any (4 match (es))

موفق باشید.


عاطفه حسین زاده
عاطفه حسین زاده

متخصص شبکه های سیسکو

سابقه فعالیت در حوزه های مایکروسافت و سیسکو و مجازی سازی رو دارم اما عمده فعالیت و علاقم حوزه لینوکس و متن بازه و در حال حاضر تصمیم به تمرکز در این حوزه دارم.

نظرات