ACL (Access Control List) — это список управления доступом. Списки доступа позволяют сетевым инженерам идентифицировать пакеты различных типов. Для этого в конфигурации ACL перечисляют значения, которые маршрутизатор Cisco может найти в заголовках IP, TCP, UDP и др. Например, список доступа может распознать пакет с IP-адресом отправителя 1.1.1.1, или пакеты IP-адрес получателя которых находится в подсети 10.1.1.0/24, или пакеты с портом получателя TCP 23 (Telnet). Чаще всего списки доступа применяют как фильтр пакетов.
ACL применяется на:
- Интерфейсе: для фильтрации пакетов
- Telnet: для ограничения доступа к маршрутизатору
- VPN: для определения трафика, подлежащего шифрованию
- QoS: для определения трафика, который необходимо обработать
- NAT: для определения IP-адресов, которые необходимо транслировать
Сами по себе списки доступа представляют из себя список выражений, которые что-то разрешают, либо запрещают. ACL применяется на определенном интерфейсе и на одном направлении (входящем или исходящем). Таким образом, списки ACL могут быть применены к входящим на маршрутизатор пакетам раньше, чем он примет решение о их перенаправлении. Либо к исходящим пакетам, после того, как маршрутизатор примет решение о перенаправлении и направит пакет на данный интерфейс.
Рассмотрим простой пример. Когда из LAN1 (локальная внутренная сеть) приходит пакет на интерфейс f0/0 роутер проверяет входящий трафик по ACL строго в том порядке, в котором записаны выражения. Если ACL разрешает проходить пакету, то роутер отправляет на интерфейс f0/1. Перед отправкой пакета маршрутизатор проверяет исходящий трафик по ACL и только после этого принимает решение о его передаче в сторону ISP (Internet Service Proiver — провайдер).
При использовании ACL для фильтрации пакетов может быть выбрано только одно из двух действий. Команды конфигурации используют ключевые слова deny (запретить) и permit (разрешить), означающие соответственно отказ от пакета или разрешение его передачи.
Списки доступа ACL бывают двух видов:
- Стандартные (standart) — могут проверять только IP-адреса отправителей пакетов
- Расширенные (extended) — могут проверять адреса источников/получателей, тип протокола, UDP/TCP порты
ACL обозначаются порядковыми номерами (стандартные от 1 до 99, расширенные от 100 до 199), а также символьными именами.
Рассмотрим несколько важных правил, касающихся ACL:
- Нельзя разместить более одного списка доступа на интерфейс, протокол, направление;
- ACL не действует на трафик сгенерированный самим маршрутизатором;
- Для фильтрации пакетов используется обратная WildCard-маска (например 0.0.255.255 соответствует 255.255.0.0)
- Как только обнаруживается соответствие пакета в одной из строк списка ACL, маршрутизатор предпринимает действие, указанное в этой строке списка, и прекращает дальнейшее сравнение
- В конце каждого списка доступа стоит неявное deny any — запретить все
Стандартные нумерованные списки доступа используют следующую глобальную команду:
access-list {1-99} {permit | deny} {address | any | host} {source-wildcard)
Каждый нумерованный список доступа ACL содержит одну или несколько команд access-list с любым номером из диапазона, представленного в строке синтаксиса выше. Помимо номера ACL, каждая команда содержит выбранное действие (permit или deny) и логику распознавания. Параметры команды access-list:
- permit — разрешить
- deny — запретить
- adress — запрещаем или разрешаем конкретную сеть (указываем ее Ip-адрес)
- any — запрещаем или разрешаем все
- host — запрещаем или разрешаем хост (указываем его Ip-адрес)
- source-wildcard — обратная маска
После создания списка доступа его необходимо применить на определенном интерфейсе:
ip access-group {номер или имя ACL} {in | out}
Где in — входящее направление, out — исходящее направление.
Перейдем теперь к практике. Для начала настроем простую сеть, в которой будут ноутбук администратора, компьютеры обычных пользователей и сервер. Необходимо сделать так. чтобы доступ к серверу имел только администратор. Ip-план и схема прилагаются.
Категория хоста | Ip-подсеть | Номер VLAN |
Администратор | 172.16.0.0/24 | 2 |
Сервера | 172.16.1.0/24 | 3 |
Пользователи | 172.16.2.0/24 | 10 |
По традиции для тех кто будет собирать эту схему Packet tracer я привожу полную конфигурацию всех устройств с описанием команд.
Switch>enable - переходим в расширенный режим Switch#configure terminal - переходим в режим конфигурации Switch(config)#vlan 2 - создаем vlan 2 Switch(config-vlan)#name Admin - название для vlan 2 Switch(config)#vlan 3 - создаем vlan 3 Switch(config-vlan)#name Server - название для vlan 3 Switch(config)#vlan 10 - создаем vlan 10 Switch(config-vlan)#name User's - название для vlan 10 Switch(config)#interface range fa0/1 - fa0/9 - настраиваем интерфейсы в сторону Пользователей Switch(config-if-range)#description User's - описание интерфейса Switch(config-if-range)#switchport mode access - настраиваем порт на тегированный режим Switch(config-if-range)#switchport access vlan 10 - тегируем кадры 10 VLAN Switch(config-if-range)#exit Switch(config)#interface fa0/10 - настраиваем интерфейсы в сторону Сервера Switch(config-if)#description Server - описание интерфейса Switch(config-if)#switchport mode access - настраиваем порт на тегированный режим Switch(config-if)#switchport access vlan 3 - тегируем кадры 3 VLAN Switch(config-if)#exit Switch(config)#interface fa0/20 - настраиваем интерфейсы в сторону Админа Switch(config-if)#description Admin - описание интерфейса Switch(config-if)#switchport mode access - настраиваем порт на тегированный режим Switch(config-if)#switchport access vlan 2 - тегируем кадры 2 VLAN Switch(config-if)#exit Switch(config)#interface fa0/24 - настраиваем интерфейсы в сторону Роутера Switch(config-if)#description Router - описание интерфейса Switch(config-if)#switchport mode trunk - настраиваем порт на нетегированный режим Switch(config-if)#switchport trunk allowed vlan 2-3,10 - пропускаем VLAN 2-3,10 Switch(config-if)#exit Switch(config)#do write - сохраняем конфигурацию
Конфигурация для маршрутизатора:
Router>enable - переходим в расширенный режим Router#configure terminal - переходим в режим конфигурации Router(config)#interface fa0/0 - настаиваем порт в сторону Свича Router(config-if)#description Switch - описание интерфейса Router(config-if)#no shutdown - включаем интерфейс физически Router(config-if)#exit Router(config)#interface fa0/0.2 - настраиваем сабинтерфейс для подсети Админа Router(config-subif)#description Admin - описание интерфейса Router(config-subif)#encapsulation dot1q 2 - тегируем 2 VLAN'ом Router(config-subif)#ip address 172.16.0.1 255.255.255.0 - задаем шлюз по-умолчанию для Админа Router(config-subif)#exit Router(config)#interface fa0/0.3 - настраиваем сабинтрфейс для подсети Серверов Router(config-subif)#description Server - описание интерфейса Router(config-subif)#encapsulation dot1q 3 - тегируем 3 VLAN'ом Router(config-subif)#ip address 172.16.1.1 255.255.255.0 - задаем шлюз по-умолчанию для Серверов Router(config-subif)#exit Router(config)#interface fa0/0.10 - настраиваем сабинтрфейс для подсети Пользователей Router(config-subif)#description User's - описание интерфейса Router(config-subif)#encapsulation dot1q 10 - тегируем 10 VLAN'ом Router(config-subif)#ip address 172.16.2.1 255.255.255.0 - задаем шлюз по-умолчанию для Серверов Router(config-subif)#exit
Запускаем пинг с пользовательского компа до сервера
Как видим доступ есть. Нам же необходимо, чтобы доступ имел только админ. Для этого нам необходимо создать список доступа (пусть он будет иметь порядковый номер 10), в котором мы разрешим всем пакетам от администратора (172.16.0.100) доступ в подсеть серверов (172.16.1.0/24). После чего применим это правило на сабинтерфейсе fa0/0.3 (для серверов) для всех исходящих пакетов.
Router(config)#access-list 10 permit host 172.16.0.100 - создаем список доступа, в котором разрешаем хосту админа Router(config)#interface fa0/0.3 - настраиваем сабинтерфейс для Серверов Router(config-subif)#ip access-group 10 out - применяем настройки списка доступа на сабинтерфейсе
Тестируем настройки. Запускаем пинг с пользовательского компьютера в сторону сервера.
Пишет Destination host unreachable — хост назначения недоступен.
Запускаем пинг с компьютера администратора.
Пинг идет — значит ACL настроили правильно. Что происходит когда мы пингуем сервер с ноутбука администратора? Пакет сначала поступает на саибинтерфейс fa0/0.2 маршрутизатора. На данном интерфейсе не настроены списки доступа значит пакет проходит далее. Роутер смотрит в свою таблицу маршрутизации и видит что подсеть серверов находится на сабинтерфейсе fa0/0.3. Перед отправкой пакета маршрутизатор видит, что к данному интерфейсу прикреплен ACL 10. В данном списке доступа всего одна запись — разрешить отправку пакетов только хосту 172.16.0.100 (ноут админа). Маршрутизатор смотрит в Ip-пакет и видит адрес отправителя 172.16.0.100 после чего отправляет пакет в подсеть серверов. Ip-пакет с любым отличным от 172.16.0.100 будет отбрасываться, так как в конце ACL 10 стоит неявный deny any — запретить все.
Теперь перейдем к расширенным спискам доступа. Пользователям в нашей сети необходимо иметь доступ к файловому хранилищу и веб-сайту. Мы же ранее полностью ограничили им доступ к серверу. Необходимо исправить ситуацию и в этом нам помогут расширенные списки доступа. Расширенные списки доступа могут проверять Ip-адреса источника/отправителя, тип протокола, UDP/TCP-порты. В нашей ситуации необходимо будет проверять номера портов. Если пользователь обращается к серверу по разрешенному порту, то маршрутизатор пропускает такой пакет. Разрешенные порты: 80 (HTTP — доступ к веб-сайту), 21 (FTP — доступ к файловому хранилищу). Протоколы HTTP и FTP работают поверх TCP. Также для распознавания доменных имен на нашем сервере поднят DNS. DNS-сервер работает на порту 53.
Размещать расширенный список доступа будем на сабинтерфейсе fa0/0.3. Но на этом интерфейсе уже размещен список доступа. Вспоминаем правило: Нельзя разместить более одного списка доступа на интерфейс. Так что придется удалить созданный ранее список доступа. Правило, созданное для администратора перенесем в новый расширенный список с именем Server-out.
Конфигурация для маршрутизатора:
Router(config)#no access-list 10 permit host 172.16.0.100 - удаляем предыдущий список доступа Router(config)#interface fa0/0.3 - настраиваем сабинтерфейс для Серверов Router(config-subif)#no ip access-group 10 out - удаляем предыдущие настройки списка доступа Router(config-subif)#exit Router(config)#ip access-list extended Server-out - создаем расширенный список доступа Router(config-ext-nacl)#permit ip host 172.16.0.100 host 172.16.1.2 - даем админу полный доступ к серверу Router(config-ext-nacl)#permit tcp any host 172.16.1.2 eq 80 - разрешаем любому хосту доступ по HTTP к серверу Router(config-ext-nacl)#permit tcp any host 172.16.1.2 eq 21 - разрешаем любому хосту доступ по FTP к серверу Router(config-ext-nacl)#permit tcp any host 172.16.1.2 eq 53 - разрешаем любому хосту доступ по DNS к серверу Router(config-ext-nacl)#exit Router(config)#interface fa0/0.3 Router(config-if)#ip access-group Server-out out
С компьютера админа пинг до сервера есть:
С компьютера пользователя пинга нет:
Проверим с компьютера пользователя проходят ли DNS-запросы до сервера. Для этого запустим утилиту nslookup — которая определяет Ip-адрес до доменному имени.
DNS-запросы проходят без проблем. Проверим доступ к нашему условному Web-сайту через браузер:
Напоследок подключимся к FTP-серверу:
Подключение прошло успешно!