Access-Lists (ACL):

اگر جداول مسیریابی یک Router کامل و فاقد مشکل باشد، هر نوع Packet از آن عبور خواهد کرد. در حقیقت برای Router فرقی ندارد که یک Packet از کجا آمده و به کجا خواهد رفت، با چه نوع پروتکلی جابه جا می شود. Access-Lists بدین منظور استفاده می شوند که ترافیک های سمت یک Router را تفکیک کنید. (Router شبیه به یک Firewall عمل کند)

Access-Lists به 2 صورت مورد استفاده قرار می گیرند:
Standard:
🔹 Router ملاک خوب یا بد بود ترافیک را فقط آدرس Source در نظر می گیرد.
🔹 Access-Lists به صورت معمول با عدد نوشته می شوند که اعداد بین 1 تا 99 مربوط به نوع Standard است. (توصیه می شود که Access-Lists را با حروف بنویسید)
🔹نوشتن قانون در Access-List با 2 کلمه Permit یا Deny انجام می شود. البته حالت سومی تحت نام Remark وجود دارد که جهت توضیحات استفاده می شود.
🔹زمانی Access-Lists اعمال خواهد شد که بر روی Interface از Router سوار شود و حتماً جهت حرکت Packet مشخص گردد .(Out ، In)
🔹 Access-Lists از بالا به پایین اولویت اجرایی دارند و Access-List اول اجرا خواهد شد که در ابتدای لیست show run دستگاه باشد.
🔹 قواعدی تحت نام Implicit Deny در Access-Lists وجود دارد که جزء قوانین مخفی است.
🔹 Standard در برند Cisco Router برای نشان دادن محدوده ها در شبکه استفاده می شود. (مثلا، کسانی که در این ACL هستند با رنج IP فلان NAT شوند … )

Extended:
🔹 Router ملاک خوب یا بد بود ترافیک را آدرس Protocol ،Destination , Source در نظر می گیرد.
🔹 Access-Lists به صورت معمول با عدد نوشته می شوند که اعداد بین 100 تا 192 مربوط به نوع Extended است. (توصیه می شود که Access-Lists را با حروف بنویسید)
🔹نوشتن قانون در Access-List با 2 کلمه Permit یا Deny انجام می شود. البته حالت سومی تحت نام Remark وجود دارد که جهت توضیحات استفاده می شود.
🔹زمانی Access-Lists اعمال خواهد شد که بر روی Interface از Router سوار شود و حتماً جهت حرکت Packet مشخص گردد .(Out ، In)
🔹 Access-Lists از بالا به پایین اولویت اجرایی دارند و Access-List اول اجرا خواهد شد که در ابتدای لیست show run دستگاه باشد.
🔹 قواعدی تحت نام Implicit Deny در Access-Lists وجود دارد که جزء قوانین مخفی است.


(ACL)

Standard Access-Lists طبق سناریو:
قانون 👈 ترافیک کامپیوتر با آدرس 10.1.1.2 از Router شیراز عبور نکند. (Source address را هدف قرار دهید)

به صورت معمول Access-Lists با عدد مشخص می شوند .Standard اعداد بین 1 تا 99 و Extended اعداد بین 100 تا 192 می باشد.
به یاد داشته باشید که هر شماره Access-List یک کتابچه قانون است. و این امکان وجود دارد که در Access-List 7 تعداد زیادی قانون نوشته و محدودیتی ندارد.

Shiraz(config)#access-list 7

نوشتن قانون در Access-List با 2 کلمه Permit یا Deny انجام می شود. البته حالت سومی تحت نام Remark وجود دارد که قانون نیست و جهت توضیحات مورد استفاده قرار می گیرد.

? Shiraz(config)#access-list 7
  deny    Specify packets to reject
  permit  Specify packets to forward
  remark  Access list entry comment

Shiraz(config)#access-list 7 remark Man Az Karbar Pc Khosham Namiyad

Access-List را باید به شکل WildCard که عکس Subnetmask استفاده کنید. اما نوشتن 0.0.0.0 یعنی هر 4 قسمت شرط است و جزء 10.1.1.2 بقیه سیستم ها مهم نیستند.
در سناریو فقط آدرس 10.1.1.2 مورد هدف قرار گرفته است، اما این قابلیت وجود دارد که به جای نوشتن 0.0.0.0 در انتهای Access-List از کلمه host قبل از آدرس IP استفاده کنید.

Shiraz(config)#access-list 7 deny 10.1.1.2 0.0.0.0
Shiraz(config)#access-list 7 deny host 10.1.1.2

به خاطر داشته باشید که، زمانی Access-Lists اعمال خواهد شد که بر روی Interface از Router سوار شود و حتماً جهت حرکت Packet در Router مشخص گردد. (Out ، In)
در سناریو اگر Access-List را بر روی Gig0/0 سوار کنید، جهت ورودی (In) و اگر بر روی Gig0/2 سوار کنید، جهت خروجی (Out) است.

Shiraz(config)#int Gig 0/0
Shiraz(config-if)#ip access-group 7 in

Implicit Deny:
در Access-List قواعدی تحت نام Implicit Deny وجود دارد که جزء قوانین مخفی است. قواعد به این شکل است که هر قانونی که در کتابچه قانون نوشته شود حتماً اجرا خواهد شد، اما Router به خاطر Access-List نوشته شده به همه مشکوک می شود و کسانی را که در کتابچه قانون نام برده نشده اند را Dney خواهد کرد. لذا باید قاعده Implicit Deny را بر روی Router حذف کنید.

طبق سناریو Packet از هر نوع مبداء به جزء آدرس 10.1.1.2 از Gig0/0 روتر عبور کند را باید بی خیال شود. کلمه any در Access-List به معنای همه می باشد. (Router بقیه را بیخال شو)

Shiraz(config)#access-list 7 permit any

مستحضر باشید که Access-Lists از بالا به پایین اولویت اجرایی دارند و Access-List اول اجرا خواهد شد که در ابتدای لیست show run دستگاه باشد. به صورت استاندارد Permit any باید آخر لیست نوشته شود تا Router از قاعده Implicit Deny استفاده نکند.

Shiraz(config)#access-list 7 deny host 10.1.1.2
Shiraz(config)#access-list 7 deny host 10.1.1.3
Shiraz(config)#access-list 7 permit any

جهت جابه جایی قانون ها در لیست show run از کلمه no در ابتدای Access-Lists استفاده کنید و مجدداً قانون را بنویسید.

Shiraz(config)#no access-list 7 permit any
Shiraz(config)#access-list 7 permit any

❌ مستحضر باشید که ISO مربوط به Router Cisco یک مشکل دارد. اگر Access-Lists را در حالت Standard و Extended با عدد بنویسید، تنها با حذف یک خط ACL تمام خطوط می پرد.

جهت حل مشکل بهتر است Access-Lists را با حروف بنویسید، اما نکاتی در این ساختار حائز اهمیت است:
🔹 جهت نوشتن Access-List به صورت حروف باید با عبارت ip access-list شروع کنید.
🔹 Standard یا Extended بودن Access-List را مشخص کنید.

Shiraz(config)#ip access-list standard Hamed
Shiraz(config-std-nacl)#deny host 10.1.1.2
Shiraz(config-std-nacl)#deny host 10.1.1.3
Shiraz(config-std-nacl)#permit any

🔹 زمانی Access-Lists اعمال خواهد شد که بر روی Interface از Router سوار شود و علاوه بر فرمت حروفی، باید جهت حرکت Packet در Router مشخص گردد. (Out ، In)
🔹 حتماً حروف کوچک و بزرگ را در نوشتن Access-List به صورت حروف رعایت کنید.

Shiraz(config)#int Gig 0/0
Shiraz(config-if)#ip access-group Hamed in

Extended Access-List:
Router ملاک خوب یا بد بود ترافیک را آدرس Protocol ،Destination, Source نظر می گیرد.
مستحضر باشید که در Extended تمام پیش فرض های حالت Standard وجود دارد و فقط فرمت نوشتن آن متفاوت است.

Extended Access-Lists طبق سناریو:
قانون 👈 ترافیک کامپیوتر با آدرس 10.1.1.2 سایت Bad.com را با پروتکل های HTTP و HTTPS باز نکند. (هدف کل پروتکل TCP نیست، باید به شماره پورت اشاره کنید)

Shiraz(config)#ip access-list extended Good
Shiraz(config-ext-nacl)#deny tcp host 10.1.1.2 host 172.16.1.3

Shiraz(config-ext-nacl)#deny tcp host 10.1.1.2 host 172.16.1.3 eq 80
Shiraz(config-ext-nacl)#deny tcp host 10.1.1.2 host 172.16.1.3 eq 443

قانون 👈 تمامی اعضای شبکه سمت راست، سایت Test.com را فقط با پروتکل HTTPS باز کنند. (HTTP آنها کار نکند)

 Shiraz(config)#ip access-list extended Good
 Shiraz(config-ext-nacl)#deny tcp 10.1.1.0 0.0.0.255 host 172.16.1.2 eq 80

قانون 👈 لپ تاپ با آدرس 10.1.1.3 نتواند سایت Test.com را Ping کند.

Ping توسط پروتکلی به اسم ICMP کار می کند و شماره Port ندارد. بدانید و آگاه باشید که Ping دو فاز دارد :
وقتی که از سیستم A 👈 سیستم B را Ping می زنید، در حقیقت یک درخواست می فرستید. اگر مشکلی پیش نیاد، جوابی بر می گردد .به درخواستی که فرستاده می شود Echo Request و جوابی که بر می گردد Echo Reply گویند. حال با توجه به اینکه ICMP شماره پورت ندارد، نوع ICMP را مشخص کنید.

 Shiraz(config)#ip access-list extended Good
 Shiraz(config-ext-nacl)#deny icmp host 10.1.1.3 host 172.16.1.2 echo

قانون 👈 هر نوع پروتکلی از هر مبدأ به هر مقصدی مجاز خواهد بود. (بقیه را بیخیال شود)

 Shiraz(config)#ip access-list extended Good
 Shiraz(config-ext-nacl)#permit ip any any

قانون 👈 سرور با آدرس 10.1.1.4 نتواند تحت پروتکل TCP بین پورت های 300 تا 500 با کامپیوتر 172.16.1.2 ارتباط برقرار کند.

 Shiraz(config)#ip access-list extended Good
 Shiraz(config-ext-nacl)#deny tcp host 10.1.1.3 host 172.16.1.2 range 300 500

قانون 👈 کامپیوتر با آدرس 10.1.1.3 بر روی Port های بیشتر یا کمتر از 1024 با سرور 172.16.1.2 ارتباط TCP نداشته باشد.

 Shiraz(config)#ip access-list extended Good
 Shiraz(config-ext-nacl)#deny tcp host 10.1.1.3 host 172.16.1.2 gt 1024
 Shiraz(config-ext-nacl)#deny tcp host 10.1.1.3 host 172.16.1.2 lt 1024

نکاتی در بحث Access-Lists:

دستور Show access-lists در مد Privileged:
🔹 Standard یا Extended بودن Access-List را مشخص می کند.
🔹 آمار تعداد Packet هایی که با هر قانون Match شده است.
🔹 اعداد سمت چپ Access-Lists ملغب به (Sequence Number) هستند و این عدد به صورت پیش فرض با اضافه شدن قانون جدید، مضربی از 10 را به خود اختصاص می دهد.
زمانی که اولویت اجرایی Access-Lists را تغییر دهید این مضارب تغییر خواهند کرد. بنابراین بهتر است که جهت اضافه یا جابه جایی قانون ها در لیست show run از کلمه no در ابتدای Access-Lists استفاده نکنید و به جای آن از اعداد توالی (Sequence Number) در ابتدای Access-Lists استفاده کنید.
🔹 بعضی از شماره Port ها در Router معادل حروفی دارند. مثلا شماره پورت 80 معادل حروفی www دارد.

Shiraz(config-std-nacl)#35 deny host 10.1.1.5

Shiraz#show access-lists
Standard IP access list Hamed
    20deny host 10.1.1.3 (1 match(es))
    35deny host 10.1.1.5
    40deny host 10.1.1.2 (8 match(es))
    40deny tcp 10.1.1.0 0.0.0.255 host 172.16.1.2 eq www

🔹 نکته دیگر، اگر بین مبدأ و مقصد بیش از یک Router باشد (مثلا 3 عدد Router تحت مدیریت شما)، بهترین حالت برای نوشتن Access-List نزدیک ترین Router به مبدأ است.

🔹 مستحضر باشید که Access-Lists باید بر روی Interface سوار شود که آدرس IP دارد. این بدان معنا است که Access-Lists بر روی سوئیچ لایه 3 با همین فرمت قابل نگارش هستند. اما ACL را روی Interface شکسته شده (Sub-Interface) سورا نکنید، زیرا اصل Interface باید آدرس IP داشته باشد.

🔹 Router ها از لحاظ چیدمان سخت افزاری زیاد قوی طراحی نشده اند و نوشتن Access-Lists زیاد بر روی آنها کار را سخت می کند. زیرا مرتباً باید Packet ها را باز کند و محتویات را چک کند و … بنابراین توصیه می شود از Firewall استفاده کنید. Firewall ها از لحاظ چیدمان سخت افزاری بسیار قوی تر از Router ها ساخته شده اند. (Firewall جهت چک کردن ساخته شده)

🔹 Access-Lists علاوه بر سوار شدن بر روی Interface ها جایگاه دیگری بر روی Line دارند. معروف ترین Line جهت سوار کردن Line vty است. (داستان Telnet و SSH مطرح می شود)

Shiraz(config)#ip access-list extended Telnet
Shiraz(config-ext-nacl)#permit tcp host 10.1.1.2 any eq 23
Shiraz(config-ext-nacl)#permit tcp host 10.1.1.3 any eq 23

Shiraz(config)#line vty 0 4
Shiraz(config-line)#access-class Telnet in