Содержание
Пришло время поговорить об 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
Верно. Тут надо пояснить, что октеты не с конца идут, а именно инвертированы биты в маске (см.калькулятор сетей справа вверху)
ip access-list extended Lnew
permit tcp any any established
permit udp host 4.4.4.100 eq 53 any
permit udp host 4.4.4.1 eq 123 any
permit tcp any host 4.4.4.100 eq 80
permit tcp any host 4.4.4.100 eq 443
permit tcp any host 4.4.4.100 eq 2222
permit udp host 5.5.5.100 host 4.4.4.100 eq 500
permit esp any any
permit icmp any any
int gi 1
ip access-group Lnew in
RTR-R NAT
int gi1
ip nat outside
int gi2
ip nat inside
access-list 1 permit 172.16.100.0 0.0.0.255
ip nat inside source list 1 interface Gi1 overload
RTR-L GRE
interface Tunne 1
ip address 172.16.1.1 255.255.255.0
tunnel mode gre ip
tunnel source 4.4.4.100
tunnel destination 5.5.5.100
router eigrp 6500
network 192.168.100.0 0.0.0.255
network 172.16.1.0 0.0.0.255
RTR-L ACL
ip access-list extended Lnew
permit tcp any any established
permit udp host 4.4.4.100 eq 53 any
permit udp host 5.5.5.1 eq 123 any
permit tcp any host 4.4.4.100 eq 80
permit tcp any host 4.4.4.100 eq 443
permit tcp any host 4.4.4.100 eq 2222
permit udp host 5.5.5.100 host 4.4.4.100 eq 500
permit esp any any
permit icmp any any
int gi 1
ip access-group Lnew in