Создание расширенного ACL

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

Итак, расширенный ACL может быть именованный и нумерованный. В любом случае, он позволяет фильтровать трафик по следующим параметрам:

  1. Адрес отправителя
  2. Адрес получателя
  3. TCP/UDP порт отправителя
  4. TCP/UDP порт получателя
  5. Протоколу, завёрнутому в ip (отфильтровать только tcp, только udp, только icmp, только gre и т.п.)
  6. Типу трафика для данного протокола (например, для icmp отфильтровать только icmp-reply).
  7. Отделить TCP трафик, идущий в рамках установленной TCP сессии от TCP сегментов, которые только устанавливают соединение. Подробнее об этом можно прочитать в статье «Что делает established в ACL»
  8. И др.

Нумерованный расширенный ACL

Нумерованный расширенный ACL должен иметь номер с 100-го по 199 или с 2000 по 2699. Причём номер относится ко всему ACL (ко всем его строчкам).

Например, чтобы запретить web трафик с адреса 192.168.0.1 надо написать следующий стандартный ACL:

R1#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#access-list 110 deny tcp host 192.168.0.1 any eq 80
R1(config)#access-list 110 permit ip any any

Первая строчка запрещает tcp-трафик с указанного адреса на 80-ый порт, вторая – разрешает остальной трафик. access-list 110 – обозначает принадлежность строчки к ACL с номером 110, далее идёт действие (permit – разрешить, deny – запретить, либо remark – комментарий «для себя»). Потом идёт протокол (в CCNA рассматриваются только три протокола tcp, udp и ip). Потом идёт информация об отправителе пакета (адрес, возможно, wildcard маска, возможно, порт отправителя), за тем – то же самое про получателя. В нашем примерев первой строчки порт отправителя не задан, то есть трафик, который будет запрещён может отправляться с любого порта отправителя, порт же получателя должен быть 80.

Расшифровка полей в расширенном ACL

Применяется такой ACL на интерфейс следующим образом:

R1(config)#interface fa0/0
R1(config-if)#ip access-group 110 in

В этом примере мы применили ACL 110 на интерфейс Fa0/0 для фильтрации входящего трафика.

Нумерованный ACL нельзя отредактировать можно только добавить строчку в конец. В нашем примере добавлять строчку в конец не имеет смысла, так как permit ip any any разрешает весь трафик и дальше проверка не производится. Единственный способ отредактировать нумерованный ACL – вывести кусок конфига с ним, скопировать в блокнот существующий ACL, отредактировать его, удалить старый, вставить новый. Допустим, нам надо добавить в ALC 110 запрет трафика ещё и из второй половины сети 192.168.0.0, с портов выше 1024 на порт 80 . Эта строчка должна встать по логике вещй между первой и второй. Выводим конфиг (весь, или только часть, с acl):

R1#show running-config 
…
!
access-list 110 deny tcp host 192.168.0.1 any eq 80
access-list 110 permit ip any any
!
…

Копируем то что касается ACL 110 блокнот, добавляем туда нужную строчку, затем удаляем старый ACL:

R1#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#no access-list 110

И вставляем новый:

R1(config)#access-list 110 deny tcp host 192.168.0.1 any eq 80
R1(config)#access-list 110 deny tcp 192.168.0.128 0.0.0.127 gt 1024 any eq 80
R1(config)#access-list 110 permit ip any any

На всякий случай, повторно применяем на интерфейсе новый ACL

R1(config)#interface fa0/0
R1(config-if)#ip access-group 110 in

Именованный расширенный ACL

Именованные ACL создаются иначе.

R1(config)#
R1(config)#ip access-list extended MY_ACL
R1(config-ext-nacl)#deny tcp host 192.168.0.1 any eq 80
R1(config-ext-nacl)#permit ip any any
R1(config-ext-nacl)#end
%SYS-5-CONFIG_I: Configured from console by console

Мы создали ACL с именем MY_ACL, который делает то же самое, что и ACL 110 из предыдущего примера. В качестве аргумента команды ip access-list необходимо указать не только имя, но и тип ACL (standard – стандартный и extended – расширенный), так как маршрутизатор не может сам определить тип. В случае использования нумерованного, тип определялся по номеру (с 100-го по 199 или с 2000 по 2699). Внутри именованного ACL уже не надо упоминать имени или номера, так как мы попадаем в режим редактирования конкретного ACL (config-ext-nacl) и все строчки ACL вводим сразу начиная со слова deny, permit или remark.

Применяется именованный ACL так же как и нумерованный:

R1(config)#interface fa0/0
R1(config-if)#ip access-group MY_ACL in

В отличие от нумерованного, именованный ACL можно редактировать построчно каждой строчке именованного ACL назначается номер со сдвигом 10, то есть строки нумеруются 10,20,30,40, и т.п. Благодаря этому, можно вставить строчку между существующими. Например, если мы зайдём в редактирования ACL MY_ACL:

R1(config)#ip access-list extended MY_ACL

И добавим очередную строчку начиная с числа 15

R1(config-ext-nacl)#15 deny tcp host 192.168.0.2 any eq 80

То такая строчка вставится между 10 и 20-ой (между первой и второй) строками старого ACL.

Кроме того, можно удалять строчки по одной. Для этого так же необходимо зайти в режим редактирование ACL и воспользоваться командой no с номером удаляемой строки:

R1(config)#ip access-list extended MY_ACL
R1(config-ext-nacl)#no 15
R1(config-ext-nacl)#no 10

Чтобы удалить весь ACL, надо выполнить команду:

R1(config)#no ip access-list extended MY_ACL
Тэги: 

Добавить комментарий