فصل 4. پیکربندی لیست های دسترسی (ACL)

مسيرياب هاي ژرف در كنار قابليت مسيريابي به روش هاي ايستا و پويا، در برگيرنده قابليت ها و  سرويس هاي كاربردي متعددي در زمينه هاي امنيتي و كنترلي مي باشند. در این بخش سعی داریم ضمن معرفي هر يك از اين قابلیت ها و سرویس ها، روال پیکربندی و راه اندازي هر يك را نيز از طریق خط فرمان مورد بررسي قرار دهیم.

1-4- لیست های دسترسی

اولين قابليتي كه مورد بررسي قرار مي گيرد، قابليت تعريف و مديريت ليست هاي دسترسي روي مسيرياب ژرف است. ليست هاي دسترسي به دو گروه اصلي زیر تقسیم می شوند:

  • ليست دسترسي استاندارد
  • ليست دسترسي توسعه يافته (extended)

 

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

به صورت پیشفرض اولین قانونی که در لیست دسترسی پیکربندی میشود در ردیف شماره 0 قرار میگیرد؛ قانون بعدی در ردیف شماره 5 و به همین ترتیب شماره ردیف خطوط یا همان قوانین لیست دسترسی مضربی از 5 است و 5 واحدی افزایش پیدا میکند.

نکته:

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

 

نکته:

مهم ترین بخش پیکربندی لیست های دسترسی برای انجام عملیات فیلترینگ ترافیک ها ، اعمال آنها در جهت صحیح بر روی اینترفیس مورد نظر است.

 

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

1-1-4- دستور تعريف ليست دسترسي استاندارد

 

حالت اول ليست هاي دسترسي، ليست هاي دسترسي استاندارد هستند كه سطح اوليه نيازهاي كنترل تبادلات را تامين مي كنند.

ليست های دسترسي استاندارد، كه با استفاده از اين دستور تعريف مي شوند، كنترل ترافیک را تنها با استفاده از مقایسه آدرس مبدا بسته هایIP دريافتي مسیریاب، با آدرس های تنظیم شده در لیست دسترسی انجام می دهند.

برای تعریف ليست دسترسي استاندارد، از دستور بالا در سطح پیکربندی سراسری استفاده میشود.

جهت حذف ليست دسترسي ، از شکل no دستور استفاده می شود.

 

در ادامه به بررسي دقيق تر هر يك از پارامترهاي دستور فوق مي پردازيم:

  • number: شماره ليست دسترسي.

این شماره براي ليست هاي دسترسي استاندارد، یک عدد در بازه 1 تا 99 و یا 1300 تا 1999 می باشد.

  • deny و permit : تعيين كننده ی عمل اصلی لیست دسترسی.

بر اساس گزينه انتخابي، دسترسی مجاز و یا غیرمجاز تعیین می گردد.

 

  • source-address wildcard-mask: شبکه های مبدا مورد نظر به همراه مقدار wildcard mask آنها را تعیین میکند.
  • host ip-address : مشخص کننده یک میزبان خاص که مبدا بسته ها برابر با آدرس این میزبان است
  • any : مشخص کننده تمامی بسته ها با هر آدرس IP مبدایی است.

 

مثال:

مثال زیر یک ليست دسترسي استاندارد را تعریف می کند که اجازه  دسترسی را  فقط به ۳ گروه شبکه مشخص شده در زیر می دهد.

نكته:

با وارد كردن مقدار دقيق براي پارامتر wildcard، مي توان شبكه هاي ورودي را كاملا مديريت كرد. براي مثال، با وارد كردن دستور زير، تنها به آدرس هایIP در بازه 10.29.2.64  – 10.29.2.127  اجازه عبور داده خواهد شد.

2-1-4- دستور تعريف ليست دسترسي توسعه يافته

حالت دوم تعريف ليست هاي دسترسي، كه با عنوان ليست هاي دسترسي توسعه يافته شناخته مي شوند، در اين بخش مورد بررسي قرار مي گيرد.

با استفاده از اين دسته از ليست هاي دسترسي، مي توان جزئيات كامل تبادلات مورد نظر را تعيين كرد. در صورتي كه تمايل به استفاده از اين دسته از ليست هاي دسترسي داريد،  توصيه مي شود جنبه هاي مختلف اعمال اينگونه ليست هاي دسترسي را كاملا مد نظر داشته باشيد.

لیست های دسترسی توسعه یافته بر خلاف لیست های دسترسی استاندارد، پارامترهای کنترلی بیشتری را پشتیبانی میکنند. در این لیست ها میتوان ترافیک ها را بر اساس آدرس IP مبدا، آدرس IP مقصد، نوع پروتکل و شماره پورت مبدا و مقصد مشخص کرد.

دستور تعريف ليست دسترسي توسعه يافته، در سه سطح بررسي خواهد شد. سطح اول، فرمت عمومي دستور مي باشد كه شامل پارامترهايي است كه براي تمامي پروتكل هاي مورد پشتيباني قابل تنظيم هستند. سطح دوم و سوم اي كه مورد بررسي قرار مي گيرد، فرمت دستور زماني است كه ليست دسترسي هدف به ترتيب روي پروتكل TCP و UDP تعريف شود. علت بررسي مستقل ليست هاي دسترسي روي پروتكل هاي TCP و UDP آن است كه كاربر قادر است بر اساس پروتکل در نظر گرفته شده، جزئيات بيشتري را در ليست هاي دسترسي روي اين دو پروتكل تعريف نمايد.

در ادامه اين بخش، ابتدا به بررسي سطح يك تعريف ليست دسترسي توسعه يافته پرداخته مي شود.

برای تعریف ليست دسترسي توسعه يافته، از شکل کلی دستور بالا استفاده می شود. جهت حذف ليست دسترسي تعريف شده ، از شکل no دستور استفاده می شود

قبل از توضيح پارامترهاي اين دستور، بهتر است نگاهي به شکل كلي دستور تعريف ليست دسترسي براي پروتكل هاي TCP و UDP داشته باشيم و سپس به بررسي هر يك از پارامترهاي موجود در سه دستور ذكر شده بپردازيم.

 

فرمت دستور تعريف ليست دسترسي براي پروتكل TCP به صورت زير است:

فرمت دستور تعريف ليست دسترسي براي پروتكل UDP به صورت زير است:

لازم به ذكر است براي حذف هر نوع ليست دسترسي تعريف شده در مسیریاب، كافي است از شکل no كلي دستور با ذكر شماره ليست دسترسي مورد نظر استفاده شود.

در ادامه به توضیح هر يك از پارامتر هاي دستورات ذكر شده مي پردازيم.

  • number : شماره ليست دسترسي.

این شماره براي ليست هاي دسترسي توسعه يافته، یک عدد در بازه 100 تا 199 و یا 2000 تا 2699 میباشد.

  • deny و permit : تعيين كننده ی عمل اصلی لیست دسترسی.

بر اساس گزينه انتخابي، دسترسی مجاز و یا غیرمجاز تعیین می گردد.

  • Protocol : نام پروتکل مورد استفاده ی بسته ها

می تواند شامل یکی از کلمات کلیدی ahp ، arp ،eigrp ، esp ،  gre ، icmp ، igmp ، ipinip ، nos ، ospf ، pcp ، pim ، tcp ، udp و ip باشد.

 

  • source-address wildcard-mask: شبکه های مبدا مورد نظر به همراه مقدار wildcard mask آنها را تعیین میکند.
  • host ip-address : مشخص کننده یک میزبان خاص که مبدا بسته ها برابر با آدرس این میزبان است
  • any : مشخص کننده تمامی بسته ها با هر آدرس IP مبدایی است.

 

 

  • destination-address wildcard-mask: شبکه های مقصد مورد نظر به همراه مقدار wildcard mask آنها را تعیین میکند.
  • host ip-address : مشخص کننده یک میزبان خاص که مقصد بسته ها برابر با آدرس این میزبان است
  • any : مشخص کننده تمامی بسته ها با هر آدرس IP مقصدی است.

 

  • eq sourceport-number : این سوییچ تنها در حالتی در دستور قابل استفاده است که از پروتکل های tcp و udp در دستور استفاده شود. این سوییچ شماره پورت مبدا را مشخص میکند که میتواند عددی بین 0 تا 65535 باشد. همچنین میتوان از نام پورت های پرکاربرد TCP و UDP نیز در دستور استفاده کرد. لیست نام هایی که میتوان به جای مقدار شماره پورت در دستور درج شود در جدول زیر قرار گرفته است:
  • biff nameserver snmptrap
    bootpc netbios-dgm sunrpc
    bootps netbios-ns syslog
    discard netbios-ss tacacs
    dnsix non500-isakmp talk
    domain ntp tftp
    echo pim-auto-rp time
    isakmp rip who
    mobile-ip snmp xdmcp

     

    • eq destination-port-number : این سوییچ تنها در حالتی در دستور قابل استفاده است که از پروتکل های tcp و udp در دستور استفاده شود. این سوییچ شماره پورت مقصد را مشخص میکند که میتواند عددی بین 0 تا 65535 باشد. همچنین میتوان از نام پورت های پرکاربرد TCP و UDP نیز در دستور استفاده کرد.
    • tos tos-value : مشخص کننده مقدار ToS بسته ها است. این مقدار میتواند توسط یکی از رشته های زیر تعیین شود. در صورت عدم تمایل جهت اعمال مقدار ToS می توانید از سوییچ default استفاده کنید.

    max-reliability : مقدار ToS باید برابر با 2 باشد

    max-throughput : مقدار ToS باید برابر با 4 باشد

    min-delay : مقدار ToS باید برابر با 8 باشد

    min-monetary-cost : مقدار ToS باید برابر با 1 باشد

    normal : مقدار ToS باید برابر با 0 باشد

    default : بسته ها بدون بررسی مقدار ToS تطبیق پیدا میکنند

    • precedence value : مشخص کننده مقدار IP Precedence بسته ها است. این مقدار میتواند عددی بین 0 تا 7 باشد. همچنین میتوان به جای مقدار عددی، از نام IP Precedence در دستور استفاده کرد که یکی از نام های زیر میتواند باشد. در صورت تعریف tos مقدار precedence نیز باید تعیین گردد که در صورت عدم تمایل میتوانید از گزینه default استفاده کنید. با تعيين گزینه default، مقدار   precedence كنترل نخواهد شد.

     

    default : بسته ها بدون بررسی مقدار فیلد IP Precedence تطبیق پیدا میکنند.

    critical : مقدار IP Precedence باید برابر با 5 باشد

    flash : مقدار IP Precedence باید برابر با 3 باشد

    flashoverride : مقدار IP Precedence باید برابر با 4 باشد

    immediate : مقدار IP Precedence باید برابر با 2 باشد

    internet : مقدار IP Precedence باید برابر با 6 باشد

    network : مقدار IP Precedence باید برابر با 7 باشد

    priority  : مقدار IP Precedence باید برابر با 1 باشد

    routine : مقدار IP Precedence باید برابر با 0 باشد

    • پارامترهای مختص TCP

    اين پارامتر ها كه تنها براي پروتكل TCP معنا پيدا مي كند، به عنوان آخرين پارامتر هاي دستور تعريف ليست دسترسي توسعه يافته، روي پروتكل TCP قابل تعريف هستند.

    توسط اين سلسله پارامترها، می توان تعیین نمود چه flag هایی از TCP در بسته مورد بررسی و مقایسه قرار بگیرند. پارامترهاي قابل كنترل عبارتند از:

    ack

    established

    fin

    psh

    rst

    syn

    urg

     

    • تنظيم كنترل اين falg ها اختياري است. با اين حال، در صورتي كه حداقل يكي از اين flagها كنترل شود، بايد وضعيت بررسي همه  flagهاي باقيمانده از بين اين هفت پارامتر را نيز در دستور تعيين كنيد. در صورتی که نیاز به چک کردن flag خاصی نباشد کافی است  از سوییچ هایی که دارای علامت “!” هستند استفاده کنید. ( مانند !fin)

     

     

     

    نکته:

    در صورت انتخاب سوییچ ip به عنوان مقدار پارامتر protocol ، سوییچ های tos و precedence در دستور وجود نخواهند داشت.

     

    مثال:

    پیکربندی های زیر جلوی عبور تمامی بسته ها از مبدا شبکه 192.168.1.0/24 به مقصد شبکه 192.168.2.0/24 را میگیرد و به دیگر بسته ها از هر مبدا و مقصدی اجازه عبور را می دهد.

    1-2-1-4- دستور access-list remark

    برای افزودن توضيحات مديريتي روي ليست دسترسي که از قبل پیکربندی شده است، از دستور زیر استفاده می کنیم. اين توضيحات ميتواند به مديريت بهتر شبكه تحت نظارت مسيرياب كمك شايان توجهي داشته باشد.

    برای حذف توضيح باید از شکل no دستور استفاده شود که منجر به پاک شدن کل لیست دسترسی میشود.

    مثال:

    در مثال زير كاربرد دستور remark در توصيف ليست هاي دسترسي، مشاهده مي شود:

    2-2-1-4- دستور access-list port-range

    از این دستور برای محدود کردن ترافیک برروی محدوده ای از پورت های یک پروتکل خاص در مبدا و مقصد یک ارتباط استفاده می گردد . در صورتی که بخواهیم بر روی چندین پورت عملیات فیلترینگ را انجام دهیم نیازمند تعریف چندین access list می باشیم اما با این قابلیت مسیریاب ژرف می توان با استفاده از یک دستور بر روی محدوده ای از پورت ها بر روی پروتکل های TCP و UDP عمل فیلترینگ را انجام دهیم .

    این دستور ، دستور مستقلی نمی باشد و وابسته به لیست دسترسی تعریف شده بر روی یک پروتکل خاص می باشد .
    توجه داشته باشید که قابلیت Port range تنها برای لیست های دسترسی توسعه یافته قابل پیکربندی است.

    شکل کلی دستور بصورت زیر می باشد :

  • برای حذف از شکل no دستور استفاده می کنیم .

    توضیح پارامترهای دستور در زیر آورده شده است :

    • number : شماره لیست دسترسی. مشخص کننده شماره ی یک لیست دسترسی توسعه یافته است که قبلا پیکربندی شده است و قصد دارید port range بر روی این لیست دسترسی اعمال شود. این مقدار میتواند عددی بین 100 تا 199 و 2000 تا 2699 باشد
    • acl-entrynumber: مشخص کننده ی شماره ردیف قانون لیست دسترسی توسعه یافته است که قصد دارید port range به آن قانون اعمال شود. مقدار دقیق شماره ردیف قوانین لیست دسترسی را میتوان در خروجی دستور show accesslists مشاهده کرد.
    • source: در صورتی که بخواهیم محدودیت را بر روی پورت های مبدا اعمال کنیم از این سوییچ استفاده میشود
    • startport : اولین شماره پورت در بازه ی مورد نظر را مشخص میکند که میتواند عددی بین 0 تا 65535 باشد
    • endport : آخرین شماره پورت در بازه ی مورد نظر را مشخص میکند که میتواند عددی بین 0 تا 65535 باشد
    • destination : در صورتی که بخواهیم محدودیت را بر روی پورت های مقصد اعمال کنیم از این سوییچ استفاده میشود

     

     

    مثال :

    در مثال زیر قصد بر این است که بر روی ترافیک های TCP عملیات فیلترینگ را بر اساس محدوده ی پورت های20  تا  25 مسیریاب مقصد انجام دهیم .

    3-1-4- نمایش وضعیت لیست های دسترسی

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

    4-1-4- اعمال لیست دسترسی بر روی اینترفیس

    در صورتی که یک لیست دسترسی به یک اینترفیس اعمال شود، ترافیک ها بر اساس عمل اصلی لیست دسترسی که permit یا deny است، فیلتر خواهند شد.

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

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

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

    دستور اعمال لیست های دسترسی بر روی اینرتفیس به صورت زیر است و در سطج پیکربندی اینترفیس قرار دارد:

    جهت حذف اعمال ليست دسترسي از اینترفیس از شکل no دستور استفاده می شود.

    مثال:

    در اين مثال، ليست دسترسي با شماره 150 به اینترفیس gbeth2 در جهت ورودی اعمال شده است. در این حالت، قوانین موجود در ليست دسترسي مربوطه، بر روی ترافیک های ورودی به اینترفیس gbeth2 اعمال میشوند.

    5-1-4- نمونه هایی از اعمال لیست دسترسی بر روی اینترفیس

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

  •  تعيين تنها یک میزبان برای دسترسی به شبکه

توپولوژي ارائه شده در شکل زیر نشان دهنده میزبانی است که به عنوان تنها ميزبان مجاز به دسترسی به شبکه A انتخاب شده است.

در این سناريو تمام تبادلات از مبدا میزبانB به مقصد شبكه A اجازه عبور دارند و مابقی ترافیک ها از مبدا شبكه B به مقصد شبكه A بلاک خواهند شد.

 

ليست دسترسي بالا تمامی بسته های IP از Net B به Net A را به جز بسته های دريافتي از میزبان ‌B ، فیلترمیکند.

توجه داشته باشید که لیست دسترسی در جهت ورودی اینترفیس gbeth 1 اعمال شده است.

  •  منع تنها یک میزبان برای دسترسی به شبکه

توپولوژي ارائه شده در شکل زیر نشان دهنده میزبانی است که به عنوان تنها ميزبان غيرمجاز برای دسترسی به شبکه A  تعيين شده است.

در این سناريو تمام تبادلات از مبدا میزبان B به مقصد شبكه A اجازه عبور نخواهند داشت اما ديگر تجهیزات و میزبان های مستقر درشبكه B اجازه دسترسي به شبكه A را دارند.

پیکربندی های بالا تمامی تبادلات دريافتي از میزبان 192.168.10.1/32 ، از طریق اینترفیس gbeth0 روی Z1 را deny کرده و به ترافیک های دیگر اجازه عبور میدهد.

نكته قابل ذكر در اين سناريو آن است كه مي بايست از دستور accees-list 1 permit any برای آزاد سازی ترافیک های دیگر استفاده کرد ، زیرا همانطور كه پیش تر ذکر شد، در انتهاي هر ليست دسترسي، يك قانون ضمنی deny برای تمامی ترافیک ها وجود دارد.

 

  •  صدور مجوز دسترسی به بازه ای از آدرس های پیوسته

توپولوژي ارائه شده در شکل زیر، سناریو ای را نشان میدهد که ميزبان هايي از شبکه B که دارای آدرس شبکه 192.168.10.0/24 هستند میتوانند به ميزبان هاي مقصد با آدرس شبکه 192.168.200.0/24 درشبكه  Aدسترسی داشته باشند.

بقیه ترافیک ها از مبدا شبكه B به مقصد شبكه A باید deny شوند.

 

با استفاده از پیکربندی های زیر، ترافیک هایی که آدرس مبدا آنها عضو شبکه ی 192.168.10.0/24 باشد، و آدرس مقصد آنها عضو شبکه ی 192.168.200.0/24 باشد، اجازه عبور از مسیریاب را دارند

قانون ضمنیdeny  که در انتهای ليست دسترسي وجود دارد، از دسترسی دیگر ترافیک ها ازطریق اینترفیس gbeth0 به عنوان درگاه ورودی مسيريابZ1 جلوگیری به عمل می آورد.

  • جلوگیری از ترافیک Telnet(Port 23)

گاهي لازم است براي افزایش امنیت شبكه خصوصي خود، دسترسی Telnet از ديگر شبكه ها را ببندید.

شکل بالا نشان دهنده توپولوژي اي بين شبكه هاي A و B است. هدف اين سناريو آن است كه از دسترسی تبادلات دريافتي براي برقراري ارتباط Telnet از شبكه B، كه به عنوان شبكه عمومي شناخته مي شود، به مقصد شبكه A، كه شبكه خصوصي اين توپولوژي است، جلوگیری شود و در عين حال، اجازه ایجاد و برقراری نشستTelnet  از Net Aبه Ne tB برقرار باشد و همچنين دیگر تبادلات بين دو شبكه مجاز باشند.

 

پروتکل  Telnetازپورت شماره 23 استفاده میکند.

با استفاده از پیکربندی زیر، تمامی تبادلات TCP روي پورت 23 به مقصد شبكه A مسدود می شوند و دیگر ترافیک ها اجازه عبور دارند.

  • لیست دسترسی برای کنترل بسته های ICMP ( Ping)

شکل زیر يك توپولوژي بين شبكه A و شبكه B را نشان میدهد.

در این سناريو قصد تعريف شرايطي را داريم كه در آن، بسته هایICMP از مبدا شبكه A و به مقصد شبكه B اجازه عبور دارند و بقیه ترافیک ها deny میشوند.

با اعمال پیکربندی های زیر ،مسيرياب Z1 اجازه میدهد تا بسته هايICMP ازطریق اینترفیس gbeth0 وارد شوند و ساير  تبادلات بين دو شبكه را مسدود می کند.

  • كنترل مجوز عبور بسته هایupdate پروتکل های مسیریابی

زمانی که يك ليست دسترسي را در جهت وروردی به اینترفیس اعمال میکنید، اطمینان حاصل کنید که بسته های update پروتکل های مسیریابی فیلتر نشوند.

در اين بخش نمونه ليست هاي دسترسي براي صدور مجوز عبور بسته هایupdate پروتکل های مسیریابی آورده شده است.

 

از این دستور برای صدور  مجوز عبور بسته هاي مسيريابي RIPاستفاده کنید:

از این دستور برای صدور مجوز عبور بسته هاي مسيريابيEIGRP استفاده کنید:

از این دستور برای صدور مجوز عبور بسته هاي مسيريابيOSPF استفاده کنید:

از این دستور برای صدور مجوز عبور بسته هاي مسيريابي BGPاستفاده کنید: