Содержание
Пришло время поговорить об 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 управляют трафиком, сравнивая адрес источника пакетов с адресами, заданными в списке.
Ну и чтобы лучше понять параметры, приведу несколько примеров:
- Задача: разрешаем прохождение трафика от узла 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
- Задача: запрещаем прохождение пакетов из подсети 10.0.1.0/24
Правило:
# access-list 2 deny 10.0.1.0 0.0.0.255
- Задача: разрешить доступ только админу (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 по прежнему коннект!
Задача 2, правило.. Разве маска там верна? надо ж было запретить для /24
понял ошибку. инвертная маска 255.255.255.0 = 0.0.0.255
Верно. Тут надо пояснить, что октеты не с конца идут, а именно инвертированы биты в маске (см.калькулятор сетей справа вверху)