Материал просмотрен 13,776 раз(а)

Пришло время поговорить об ACL подробней. Как взрослые люди, начнём делать серьёзные вещи. Да и я, наконец, собрался с мыслями и поковырял эту тему.

В данной статье мы рассмотрим простые типовые конфигурации для списков управления доступом на базе Cisco ACL, которые фильтруют IP-пакеты в зависимости от следующих данных:

  • адрес источника (source address);
  • адрес назначения (destination address);
  • тип пакета (протокол верхнего уровня);

Маршрутизатор проверяет каждый пакет и на основании вышеперечисленных критериев, указанных в ACL определяет, что нужно сделать с пакетом, пропустить или отбросить.

Что такое Access Control List?

IP ACL – последовательный набор правил разрешающих или запрещающих прохождение пакета. Маршрутизатор последовательно проверяет каждый пакет на соответствие правилам. После первого же совпадения принимается решение и дальше правила не обрабатываются.

Если ни одно из правил не подошло, то пакет отбрасывается из-за неявного последнего правила deny all.

Какие бывают ACL?

Можно выделить следующие виды списков контроля доступа:

  • стандартные ACL;
  • расширенные ACL (об этом речь пойдёт ниже);
  • динамические ACL (ключ и замок);
  • именованные IP-списки ACL;
  • рефлексивные ACL;
  • синхронизируемые списки ACL, использующие временные диапазоны;
  • прокси-аутентификации;
  • Turbo ACL;
  • контекстно-ориентированные ACL;
  • откомментированные записи IP ACL;
  • распределённые синхронизируемые ACL;

Всему своё время, а мы рассмотрим самое распространённое – стандартные и расширенные списки контроля доступа.

Стандартные списки ACL

Формат синтаксиса команды стандартного ACL выглядит так:

# access-list number {permit|deny} {host|source source-wildcard|any}

  • permit – пропускаем пакет.
  • deny – отбрасываем пакет.
  • host – конкретный IP-адрес узла
  • source source-wildcard – IP и его обратная маска. Надо несколько слов сказать про обратную маску. Здесь применяется инвертированная маска сети, которая показывает, какие биты изменяются.
  • any – любой хост.

Стандартные ACL управляют трафиком, сравнивая адрес источника пакетов с адресами, заданными в списке.

Ну и чтобы лучше понять параметры, приведу несколько примеров:

  1. Задача: разрешаем прохождение трафика от узла 10.0.0.10

Правило:

# access-list 1 permit host 10.0.0.10

равнозначно

# access-list 1 permit 10.0.0.10 0.0.0.0

  1. Задача: запрещаем прохождение пакетов из подсети 10.0.1.0/24

Правило:

# access-list 2 deny 10.0.1.0 0.0.0.255

  1. Задача: разрешить доступ только админу (10.0.0.9), остальным запретить.

Правило:

# access-list 3 permit 10.0.0.9 0.0.0.0

# access-list 3 deny any

И здесь очень важно написать правила именно в таком порядке. Я не зря сказал, что правила проверяются последовательно, до первого совпадения.

Здесь, если пакет принадлежит IP 10.0.0.9, то первая строчка соответствует и пакет пропустится.

А если написать правила в обратном порядке, то первой же строкой будет deny any, что отбросит любой пакет (даже 10.0.0.9) и дальше правила применяься не будут. Поэтому нужно быть очень внимательным в этом.

Расширенные списки ACL

Расширенные списки управляют трафиком, сравнивая адреса источника и назначения пакетов с адресами, заданными в списке. Это более тонкая фильтрация трафика по следующим критериям:

  • протокол;
  • номер порта;
  • значение DSCP;
  • приоритет;
  • состояние бита SYN;

Синтаксис расширенных списков ACL.

# access-list number [dynamic dynamic-name [timeout minutes]] {deny|permit} {protocol|protocol-keyword} {source source-wildcard|any} [source-port] {destination destination-wildcard|any} [precedence precedence] [tos tos] [log | log-input] [time-range time-range-name] [fragments]

Уже представляю ваши глаза “О_О”. Да, вот такой расширенный список, действительно, параметров немного больше.

Примеры расширенных ACL

Я составил типовую конфигурацию в Cisco Packet Tracer, две подсети 10.0.1.0/24 и 192.168.1.0/24.

Узлы подсети 10.0.1.0/24 имеют шлюз по умолчанию 10.0.1.1, а 192.168.1.0/24 соответственно 192.168.1.1.

Настраиваем роутер.

router> en
router# conf t
router(config)# int fast 0/0
router(config-if)# ip address 10.0.1.1 255.255.255.0
router(config-if)# no shut

Аналогично настраиваем и второй инерфейс (fast 0/1), только в качестве адреса указываем не 10.0.1.1, а 192.168.1.1.

Приступим к настройке ACL-ов.

Сначала убедимся, что сеть коммутируется и все узлы доступны друг для друга:

PC>ping 10.0.1.3

Pinging 10.0.1.3 with 32 bytes of data:

Reply from 10.0.1.3: bytes=32 time=125ms TTL=127
Reply from 10.0.1.3: bytes=32 time=107ms TTL=127
Reply from 10.0.1.3: bytes=32 time=125ms TTL=127
Reply from 10.0.1.3: bytes=32 time=109ms TTL=127

Ping statistics for 10.0.1.3:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 107ms, Maximum = 125ms, Average = 116ms

Запрещаем FTP трафик.

Задача: разрешить доступ к FTP для узла 192.168.1.2 и запретить для узла 192.168.1.3.

На сервере 10.0.1.3 поднят FTP сервис (дефолтные cisco:cisco). Убедимся, что узел доступен и FTP работает.

PC>ipconfig
IP Address………………….: 192.168.1.2
Subnet Mask…………………: 255.255.255.0
Default Gateway……………..: 192.168.1.1

PC>ftp 10.0.1.3
Trying to connect…10.0.1.3
Connected to 10.0.1.3

220- Welcome to PT Ftp server

Username:cisco

331- Username ok, need password

Password:
230- Logged in

(passive mode On)
ftp>dir

Listing /ftp directory from 10.0.1.3:
0 : c1841-advipservicesk9-mz.124-15.T1.bin 33591768
1 : c1841-ipbase-mz.123-14.T7.bin 13832032
2 : c1841-ipbasek9-mz.124-12.bin 16599160
3 : c2600-advipservicesk9-mz.124-15.T1.bin 33591768
4 : c2600-i-mz.122-28.bin 5571584
5 : c2600-ipbasek9-mz.124-8.bin 13169700
6 : c2800nm-advipservicesk9-mz.124-15.T1.bin 50938004
7 : c2800nm-ipbase-mz.123-14.T7.bin 5571584
8 : c2800nm-ipbasek9-mz.124-8.bin 15522644
9 : c2950-i6q4l2-mz.121-22.EA4.bin 3058048
10 : c2950-i6q4l2-mz.121-22.EA8.bin 3117390
11 : c2960-lanbase-mz.122-25.FX.bin 4414921
12 : c2960-lanbase-mz.122-25.SEE1.bin 4670455
13 : c3560-advipservicesk9-mz.122-37.SE1.bin 8662192
14 : pt1000-i-mz.122-28.bin 5571584
15 : pt3000-i6q4l2-mz.121-22.EA4.bin 3117390
ftp>quit

Packet Tracer PC Command Line 1.0
PC>221- Service closing control connection.

Команды и настройка FTP-сервера есть на нашем сайте тут.

Убедимся, что доступ есть как с узла 192.168.1.2, так и с 192.168.1.3. У меня всё по плану. Если у вас вдруг нет доступа, убедитесь, что каждому узлу назначен IP и маска, а так же прописан шлюз по-умолчанию. И не перепутали ли вы интерфейсы?

Идём дальше.

Router(config)#ip access-list extended 101
Router(config-ext-nacl)#permit tcp 192.168.1.2 0.0.0.0 10.0.1.3 0.0.0.0 eq 21
Router(config-ext-nacl)#permit tcp 192.168.1.2 0.0.0.0 10.0.1.3 0.0.0.0 eq 20
Router(config-ext-nacl)#deny tcp 192.168.1.3 0.0.0.0 10.0.1.3 0.0.0.0 eq 21
Router(config-ext-nacl)#deny tcp 192.168.1.3 0.0.0.0 10.0.1.3 0.0.0.0 eq 20

Здесь мы видми по 2 разрешающих и по 2 запрещающих правила для указанных направлений и портов 21 и 20. Это служба FTP, передача команд и данных.

А теперь применяем наш список к интерфейсу со стороны сети 192.168.1.0/24 на вход (потому что трафик ВХОДИТ на роутер со стороны интерфейса 192.168.1.1):

Router(config)#int fa 0/1
Router(config-if)#ip access-group 101 in

Как видите, мы просто применили наше правило с номером 101.

Проверяем коннект. С узла 192.168.1.3 видим следующее:

PC>ftp 10.0.1.3
Trying to connect…10.0.1.3

и всё.

А с узла 192.168.1.2 по прежнему коннект!