Access Control List
Access Control List или ACL (или просто Access List) - список правил, которые позволяют контролировать и фильтровать трафик. Правила внутри ACL называются access control entries (ACE).
Основное применение ACL (Access List - Список Доступа) - фильтрация трафика, но так же он находит применение и в других функциях сетевого оборудования. В cisco-устройствах Access Control List разделяют на два вида:- Standard ACL - список правил, позволяющий выполнять фильтрацию по ip адресу источника в пакете.
- Extended ACL - список правил, позволяющий выполнять фильтрацию по ip адресу источника и получателя в пакете, а так же имеет возможность выполнять фильтрацию по портам tcp и udp.
Wildcard Mask
Мы уже в курсе что такое маска и как она образуется. Wildcard mask тоже является маской, только "странной" или "обратной" (названия с просторов в Интернете). Нам предстоит узнать о ней побольше, т.к. она используется в ACL. Ее называют "обратной", потому что единицы и нули в маске меняют свое значение. Теперь 0 - это номер сети, а 1 это хостовая часть. "Все познается в сравнении", поэтому предлагаю сравнить обычную маску с wildcard маской. Начнем с классовых масок.Таблица 4.1 Сравнение "обычной" маски с wildcard маской
Класс | "Обычная" маска | "Обычная" маска, двоичный вид | Wildcard маска | Wildcard маска, двоичный вид |
---|---|---|---|---|
A | 255.0.0.0 | 11111111.00000000.00000000.00000000 | 0.255.255.255 | 00000000.11111111.11111111.11111111 |
B | 255.255.0.0 | 11111111.11111111.00000000.00000000 | 0.0.255.255 | 00000000.00000000.11111111.11111111 |
C | 255.255.255.0 | 11111111.11111111.11111111.00000000 | 0.0.0.255 | 00000000.00000000.00000000.11111111 |
Как вычислить wildcard маску имея обычную маску?
Разберем случай с не классовой маской (которая дробит октет на сетевую часть и хостовую, подробнее тут), т.е. один из октетов отличен от чисел 0 и 255 ( "кривой" октет). В начале, все октеты "обычной" маски, со значением 255, будут соответствовать 0 в wildcard маске, а значения 0 в "обычной" маске, в wildcard - 255. Далее надо взять октет, который отличен от 0 и 255 ("кривой" октет) и вычесть его из числа 255, таким образом мы получим значение этого октета ("кривого" октета) в wildcard маске. Например маске 255.255.240.0, будет соответствовать wildcard маска - 0.0.15.255, 255 - 240=15. На практике будет очень много букв и картинок, наберитесь терпения.Наш Спонсор
Практика
Начальные данные
Все "манипуляции" можно осуществлять только при помощи ADMIN_G33 (либо с других ПК в сети).
В данной практической работе сеть уже спланирована, адресация распределена по всем устройствам в сети. Например, на ADMIN_G33 вы можете видеть ".22.0", это означает, что он имеет ip адрес 172.16.22.0. На всем сетевом оборудовании настроен telnet-сервер, пароль - gurkin33.ru.Цели
-
Standard ACL:
- Создать Standard ACL.
- Фильтровать трафик при помощи созданного ACL.
-
Extended ACL:
- Создать Extended ACL.
- Фильтровать трафик при помощи созданного ACL.
Выполнение
-
Standard ACL
Прежде чем переходить к процессу создания ACL, надо определиться какой трафик мы хотим отфильтровать. В случае с Standard ACL выбор у нас не большой, т.к. фильтрация будет осуществляться только по ip адресу источника пакета.
Ради примера, мы запретим ПК6 выходить за пределы своей сети, аналогично запретим диапазону ip адресов 172.16.20.192-172.16.20.255 (в этот диапазон попадают ПК2 и ПК4) выход за пределы 172.16.20.0/22. Любой ACL (Standard или Extended), можно создать вызвав командуaccess-list <номер> <действие> <критерий>
. Разберем состав команды. Номер ACL - это число, которое определяет какой ACL создается, Standard или Extended:- 1-99 - Standard
- 100-199 - Extended
access-list 11
Действия очень просты - разрешить или запретить, permit или deny (так же на этом этапе можно вставить комментарий remark ). Продолжим собирать команду, добавим действие - запретить.access-list 11 deny
С критерием немного сложнее, но разобраться можно. Всего три варианта критериев:- any - означает любой ip адрес.
- host <ip адрес> - один ip адрес, соответствующий какому-либо устройству.
- <номер сети> <wildcard> - используется для обозначения диапазона ip адресов.
access-list 11 deny host 172.16.27.110
Отлично, но остался еще один ОЧЕНЬ ВАЖНЫЙ момент.ACL может состоять из нескольких правил, которые называются Access Control Entries (ACE). Очень важно знать, что внутри каждого ACL имеется скрытое правило, которое запрещает ВСЕ. Поэтому, в случае "запретить только ... и разрешить все остальное", в конце надо явно указать - "разрешить ВСЕ".Следуя выше сказанному, создадим еще одно правило "разрешить ВСЕ".access-list 11 permit any
Предлагаю ввести эти правила на роутер и изучить команду show access-list.R0(config)#access-list 11 deny host 172.16.27.110 R0(config)#access-list 11 permit any R0(config)#exit R0# %SYS-5-CONFIG_I: Configured from console by console R0#sh access-list Standard IP access list 11 10 deny host 172.16.27.110 20 permit any R0#
Разберем вывод команды
show access-list
(следует отметить, что эта команда показывает все созданные ACL). Первой строчкой указано, что имеется Стандартный ACL с номером 11, дальше идет перечисление ACE. Каждый ACE имеет свой порядковый номер. По умолчанию первый ACE имеет номер 10, второй ACE 20 и т.д. каждый раз прибавляется шаг 10 (в дальнейшем мы узнаем, как использовать этот номер). Теперь снова ОЧЕНЬ ВАЖНЫЙ момент.Когда роутеру надо просмотреть ACL (например, для фильтрации трафика), он просматривает ACE (в указанном ACL) сверху вниз и ищет "подходящее правило". Когда "подходящее правило" найдено, выполняется указанное действие (все ACE после "подходящего правила" не рассматриваются!). Если в ACL не нашлось подходящего правила, применяется "скрытое правило", которое запрещает ВСЕ.Созданный нами ACL пока что не фильтрует трафик, для этого нам надо "повесить" его на интерфейсе (установить ACL на интерфейс, для фильтрации трафика). Чтобы "повесить" ACL надо использовать команду
ip access-group <номер ACL> <направление>
. Подробнее о параметре <направление>, он имеет два значения - in или out. Этим параметром мы указываем к какому трафику применить данный фильтр, к входящему или исходящему. Вот поэтому очень важно представлять движение пакетов. Предлагаю, проверить доступность сети 172.16.20.0/22 с ПК6, установить фильтрацию на интерфейсе, а после подробно прокомментировать процесс фильтрации.R0#conf t Enter configuration commands, one per line. End with CNTL/Z. R0(config)#interf fa 0/1 R0(config-if)#ip access-group 11 in
R0#sh access-l Standard IP access list 11 10 deny host 172.16.27.110 (4 match(es)) 20 permit any
На рисунок 4.2 представлена проверка доступности сети 172.16.20.0/22 с ПК6, а именно с ПК6 до ADMIN_G33. Как видим, доступ есть. Далее мы устанавливаем ACL на интерфейс FastEthernet 0/1 командой
На рисунок 4.3 опять проверяем доступность с ПК6 до ADMIN_G33, но как видим, роутер возвращает ошибку "указанный хост не доступен". Под рисунком 4.3 представлен вывод командыip access-group 11 in
. Давайте разберем, почему интерфейс FastEthernet 0/1, а так же почему параметр in. Если представлять движение пакета от ПК6, то все просто. Интерфейс Fa0/1 - ближайший интерфейс к ПК6 и фильтровать мы должны входящие пакеты от ПК6, именно по этому указываем параметр in.show access-list
в котором появилась строчка (4 match(es)), она указывает на то, что под это правило попало 4 пакета. Теперь предлагаю убедиться, что правило под номером 20 тоже работает, для этого выполним проверку доступности с Server1 до ADMIN_G33, рисунок 4.4. Под рисунком представлен вывод командыshow access-list
.R0#sh access-l Standard IP access list 11 10 deny host 172.16.27.110 (4 match(es)) 20 permit any (4 match(es))
Как видим, правило под номером 20 тоже работает. Если бы этого правила не было, то весь трафик блокировался "неявным" (невидимым) правилом deny any (далее мы опробуем его на практике).
Теперь немного "лирики", прежде чем переходить к созданию нового ACL. Есть еще один вариант, куда мы могли установить ACL 11, на интерфейс Fa0/0 в направлении out. Тогда бы фильтровался исходящий трафик и наша цель тоже была бы достигнута. НО! Если трафик фильтруется как исходящий это значит, что он проходит процесс маршрутизации и тратит ресурсы роутера на обработку пакетов и уже после этого фильтруется, что не правильно. Поэтому рекомендуется устанавливать правила фильтрации, максимально близко к источнику, чтобы не растрачивать аппаратные средства сетевого оборудования на "лишние" действия. Создадим ACL, который будет запрещать доступ для диапазона адресов 172.16.20.192-172.16.20.255. Берем номер ACL, например, 12 (Standard ACL в диапазоне от 1 до 99). Теперь надо создать критерий. Для начала запишем номер сети и "обычную" маску для данного диапазона - 172.16.20.192, маска 255.255.255.192. В разделе "Теория" был рассмотрен процесс перевода "обычной" маски в wildcard, поэтому сразу представим получившуюся команду -access-list 12 deny 172.16.20.192 0.0.0.63
. И не забываем "разрешить ВСЕ остальное" -access-list 12 permit any
.R0(config)#access-list 12 deny 172.16.20.192 0.0.0.63 R0(config)#access-list 12 permit any R0(config)#exit R0# R0#sh access-lists Standard IP access list 11 10 deny host 172.16.27.110 (4 match(es)) 20 permit any (4 match(es)) Standard IP access list 12 10 deny 172.16.20.192 0.0.0.63 20 permit any R0# R0#sh access-lists 12 Standard IP access list 12 deny 172.16.20.192 0.0.0.63 permit any R0#
На роутер добавили новый ACL, с двумя правилами. Команда
ACL создан, осталось "повесить" его на интерфейс. Перед этим советую убедиться, что связь между ПК2 и Server1 присутствует (ПК2 и Server1 взяты для примера). Фильтрацию будем осуществлять на интерфейсе Fa0/0, для входящего трафика.show access-list
показывает все созданные ACL на данном роутере. А с помощью командыshow access-list <номер ACL>
, мы можем просмотреть информацию по конкретному ACL (странно, что не показываются номера ACE, на реальном оборудовании номера присутствуют).R0(config)#interf fa 0/0 R0(config-if)#ip access-g 12 in
Проверим доступность, между ПК2 и Server1, рисунок 4.5. Мы снова можем видеть ошибку "указанный хост не доступен".
R0#sh access-lists 12 Standard IP access list 12 deny 172.16.20.192 0.0.0.63 (4 match(es)) permit any R0#
Теперь ответим на вопрос, как узнать, установлен ли на интерфейсе ACL? Это можно узнать при помощи команды
show running-config
(там же можно увидеть все созданные ACL), а так же при помощи командыshow ip interface
. В выводе последней команды надо искать строчки Outgoing access list is ... (фильтрация исходящего трафика) и Inbound access list is ... (фильтрация входящего трафика).R0#sh runn Building configuration... Current configuration : 895 bytes ! version 12.4 no service timestamps log datetime msec no service timestamps debug datetime msec no service password-encryption ! hostname R0 ! ... ! interface FastEthernet0/0 ip address 172.16.21.0 255.255.252.0 ip access-group 12 in duplex auto speed auto ! interface FastEthernet0/1 ip address 172.16.27.65 255.255.255.192 ip access-group 11 in duplex auto speed auto ! ... ! access-list 11 deny host 172.16.27.110 access-list 11 permit any access-list 12 deny 172.16.20.192 0.0.0.63 access-list 12 permit any ! ... R0#show ip interface FastEthernet0/0 is up, line protocol is up (connected) Internet address is 172.16.21.0/22 Broadcast address is 255.255.255.255 Address determined by setup command MTU is 1500 bytes Helper address is not set Directed broadcast forwarding is disabled Outgoing access list is not set Inbound access list is 12 Proxy ARP is enabled ...
Прежде чем переходить к рассмотрению Extended ACL, удалим фильтрацию на интерфейсах и один ACL. Все делается при помощи "могучей" команды
no
. (удаление отдельных правил в ACL будет рассмотрено далее).R0(config)#interf fa 0/0 R0(config-if)#no ip access-group 12 in R0(config-if)#interf fa 0/1 R0(config-if)#no ip access-group 11 in R0(config-if)#exit R0(config)#no access-list 11 deny host 172.16.27.110 R0(config)#exit R0# R0#sh access-l Standard IP access list 12 10 deny 172.16.20.192 0.0.0.63 (4 match(es)) 20 permit any R0#
-
Extended ACL
Extended ACL немного сложнее, чем Standard ACL, т.к. в критерии фильтрации добавляются ip адрес получателя и фильтрация транспортного уровня.
Теперь зададимся целью, что нам надо отфильтровать.
- Запретить доступ с ПК3 на SW1.
- Разрешить диапазону ip адресов 172.16.20.252-172.16.20.255 доступ к Server1 по 80-му порту (tcp), всем остальным запретить.
- Создать ACL разрешающий доступ только Server1, Server0 и SW1.
access-list <номер> <действие> <тип фильтрации> <критерий>
. Как видно, теперь появился еще тип фильтрации, его можно отнести к критериям, но для лучшего усвоения материала выделим его как отдельный пункт. Как было написано выше ACL с номером из диапазона от 100 до 199 - Extended ACL, поэтому начало для создания ACL может быть такое -access-list 120
. Далее, как и в Standard ACL, надо указать действие. Например, запретить, тогда, продолжая собирать команду получаем -access-list 120 deny
. Критерии будем разбирать подробнее. Прежде всего надо указать какой тип фильтрации будет использован в правиле. Типов много, разберем основные:- ip - фильтрация только по ip адресам отправителя и получателя
- tcp - фильтрация по tcp портам с учетом ip адресов отправителя и получателя. Если порты не указаны, то будут разрешены все TCP сессии по всем портам между указанными ip адресами!
- udp - фильтрация по udp портам с учетом ip адресов отправителя и получателя. Если порты не указаны, то будут разрешены все UDP сессии по всем портам между указанными ip адресами!
- icmp - фильтрация icmp-сообщений с учетом ip адресов отправителя и получателя.
access-list 120 deny ip
Теперь нам надо указать основные критерии фильтрации. Все просто в начале указывается источник (ip адрес или диапазон)следом указывается получатель (ip адрес или диапазон). При условии, что нам надо запретить доступ с ПК3 (источник) до SW1 (получатель), наше первое правило будет выглядеть так -access-list 120 deny ip host 172.16.23.80 host 172.16.27.100
. Отлично! Теперь создадим ACL 120, "повесим" его на интерфейс Fa0/0, фильтровать весь входящий трафик. Не забываем, что если мы не разрешим остальной трафик, то по умолчанию, то что не попадает под правила в ACL будет запрещено! Поэтому так же добавим правило, "разрешить ВСЕ".R0(config)#access-list 120 permit ip host 172.16.22.0 any #разрешаем ADMIN_G33 любой доступ R0(config)#access-list 120 deny ip host 172.16.23.80 host 172.16.27.100 R0(config)#access-list 120 permit ip any any R0(config)#interf fa 0/0 R0(config-if)#ip access-group 120 in
На рисунке 4.6 представлена проверка связи между ПК3 и SW1. Так же была осуществлена проверка связи между ADMIN_G33 и SW1 (рисунка нет). После рисунка 4.6, вы можете найти результат команды
show access-list
.R0#sh access-lists Standard IP access list 12 10 deny 172.16.20.192 0.0.0.63 (4 match(es)) 20 permit any Extended IP access list 120 10 permit ip 172.16.22.0 any (4 match(es)) 20 deny ip host 172.16.23.80 host 172.16.27.100 (4 match(es)) 30 permit ip any any (4 match(es)) R0#
Переходим к созданию следующего правила, точнее сразу двух правил - Разрешить диапазону ip адресов 172.16.20.252-172.16.20.255 доступ к Server1 по 80-му порту (tcp), всем остальным запретить.
Если нам надо разрешить, то это означает permit. Теперь мы переходим к типу фильтрации tcp - фильтрация по tcp портам. Прежде чем переходить к написанию команды, надо объяснить как устанавливается фильтрация по портам. После указания ip адреса (не важно получателя или отправителя), можно (можно, но не обязательно!) указать порт или диапазон портов при помощи атрибутов:- eq - расшифровывается как equal (равен). Например, eq 70, будет означать равен 70-му порту.
- neq - расшифровывается как no equal (не равен). Например, neq 90, будет означать не равен 90-му порту.
- gt - расшифровывается как greater than (больше чем). Например, gt 1023, будет означать диапазон от 1024 до 65535 (65535 - это максимальный номер порта).
- lt - расшифровывается как less than (меньше чем). Например, lt 2024, будет означать диапазон от 1 до 2023.
- range - этот атрибут указывает конкретный диапазон (range). Например, range 100 200, будет означать диапазон от 100 до 200.
access-list 120 permit tcp 172.16.20.252 0.0.0.3 host 172.16.27.92 eq 80
. А теперь правило, которое будет запрещать всем остальным доступ Server1 по 80-му порту, выглядит так -access-list 120 deny tcp any host 172.16.27.92 eq 80
. Научимся добавлять правила в уже существующий ACL, а заодно и удалять конкретные правила из ACL.R0(config)#ip access-list extended 120 R0(config-ext-nacl)#no 30 R0(config-ext-nacl)#25 permit tcp 172.16.20.252 0.0.0.3 host 172.16.27.92 eq 80 R0(config-ext-nacl)#31 deny tcp any host 172.16.27.92 eq 80 R0(config-ext-nacl)#permit ip any any R0(config-ext-nacl)#exit R0(config)#exit R0# R0#sh access-l Standard IP access list 12 10 deny 172.16.20.192 0.0.0.63 (4 match(es)) 20 permit any Extended IP access list 120 10 permit ip 172.16.22.0 any (4 match(es)) 20 deny ip host 172.16.23.80 host 172.16.27.100 (4 match(es)) 25 permit tcp 172.16.20.252 0.0.0.3 host 172.16.27.92 eq www 31 deny tcp any host 172.16.27.92 eq www 41 permit ip any any R0#
Крепитесь! Осталось немного.
С помощью командыip access-list extended 120
мы перешли в режим настройки ACL 120 (а с помощью командыip access-list standard <номер>
, можно перейти в режим настройки стандартного ACL). Командойno 30
, мы удалили 30-ое правило, которое гласило - "разрешить все" (permit ip any any). Далее мы указали какое правило будет под номером 31 и 25, а в конце мы добавилиpermit ip any any
без указания номера, соответственно номер ему будет присвоен автоматически, прибавлением десяти к максимальному номеру (максимальный номер 31, тогда получаем 31+10=41). После всех этих махинаций, предоставлен результат командыshow access-list
, изучите его самостоятельно (вместо цифры 80 cisco подставляет слово www). Проверяем доступность сервера Server1 по 80-му порту с устройства ПК5, рисунок 4.7. Самостоятельно проверьте доступность с ПК2 и еще раз вызовите командуshow access-list
, изучите попал ли трафик под наши правила.Осталось последнее - создать ACL разрешающий доступ только Server1, Server0 и SW1.
Создавать этот ACL мы будем другим путем, при помощи командыip access-list <extended | standard> <номер | имя>
. Символ | означает или. Обратите внимание, что при помощи этой команды, мы можем задавать имя ACL, что гораздо удобнее, чем задавать номер. Итак, чтобы создать ACL с именем vipAccess, надо использовать команду -ip access-list extended vipAccess
. И далее в режиме конфигурации этого ACL добавлять правила.R0(config)#ip access-list ex vipAccess R0(config-ext-nacl)#permit ip 172.16.27.88 0.0.0.7 any R0(config-ext-nacl)#40 permit ip host 172.16.27.100 any R0#sh ip access-lists Standard IP access list 12 10 deny 172.16.20.192 0.0.0.63 (4 match(es)) 20 permit any Extended IP access list 120 10 deny ip host 172.16.23.80 host 172.16.27.100 (8 match(es)) 20 permit tcp 172.16.20.252 0.0.0.3 host 172.16.27.92 eq www (27 match(es)) 25 deny tcp any host 172.16.27.92 eq www (24 match(es)) 35 permit ip any any Extended IP access list vipAccess 10 permit ip 172.16.27.88 0.0.0.7 any 40 permit ip host 172.16.27.100 any R0#
Мы создали ACL с именем vipAccess, перешли в режим настройки этого ACL. Добавили правило
Теперь самостоятельно "повесьте" ACL vipAccess, на интерфейс Fa0/1 (командаpermit ip 172.16.27.88 0.0.0.7 any
(под это правило попадают Server1 и Server0), т.к. мы не указали номер и это первое правило, то ему автоматически присваивается номер 10. Во втором правиле мы явно указали номер - 40. ОЧЕНЬ ВАЖНО! Мы не добавили правила "разрешить ВСЕ", поэтому если трафик не попадает под указанные правила, он будет блокироваться скрытым правилом (под это правило попадает ПК6).ip access-group vipAccess in
)и проверьте доступность Server0 с сетью 172.16.20.0/22. А так же проверьте доступность этой сети с ПК6. Если вы дошли до конца, то Вы молодец!
Наш Спонсор
Лабораторка
Начальные данные
Все "манипуляции" можно осуществлять только при помощи ADMIN_G33 (либо с других ПК). Пароль от оборудования gurkin33.ru, подключаться используя telnet. Для доступа на сетевое оборудование, используйте адресацию представленную на схеме.
Задание
- Ваш босc заметил, что многие из сотрудников очень часто отвлекаются от работы, заходя на сайты vprivet.lol и odnopupnik.lol. Он просит вас закрыть к указанным сайтам доступ для всех сотрудников, кроме ПК_BOSS и ADMIN_G33.
- Т.к. политика вашей компании позволяет использовать telnet для удаленного управления сетевым оборудованием, вам надо оградить этот доступ из Интернета. Только компьютеры YOU_HOME и BOSS_HOME должны иметь доступ к сетевому оборудованию (R0 и SW0).
Выполнение
-
Чтобы узнать ip адрес, который скрывается под доменными именами, достаточно выполнить команду
ping <доменное имя>
. Перед написание ACL определитесь с интерфейсом, на который вы его "повесите". При написании ACL не забудьте в конце "разрешить ВСЕ"! - После установки ACL, вы можете проверить ограничение на ПК6.
Если вы нашли в тексте ошибку, выделите текст и нажмите Ctrl + Enter.