Создание ACL для протокола IPv6

В этой статье речь пойдёт о создании списков контроля доступа на маршрутизаторе cisco для протокола ipv6. Перед прочтением статьи рекомендуется ознакомиться с обзорной статьёй об ACL и отдельно со статьёй о создании расширенных ACL для IPv4.

Дело в том, что списки контроля доступа для IPv6 являются практически полной копией расширенных именованных список контроля доступа для IPv4 с той разницей, что в качестве адресов отправителя и получателя в них используются IPv6 адреса.

Как мы помним, в случае использования IPv4 нам предлагался на выбор, следующий перечень способов создания ACL:

  • нумерованные стандартные;
  • нумерованные расширенные;
  • именованные стандартные;
  • именованные расширенные;

Такое количество вариантов было связано не с тем, что они все реально необходимы и используются в разных областях и не с тем, что какие-то варианты лучше других подходят для каких-то целей. Всё гораздо проще: такое обилие вариантов – это дань долгой истории развития сетевых технологий в целом и IOS в частности. На самом деле, из всех этих списков самым универсальным, применимым в любой ситуации является именованный расширенный, а все остальные поддерживаются с целью обратной совместимости. Принимая во внимание вышесказанное, становится очевидным, почему, когда возникла задача создать с нуля списки контроля доступа для нового протокола IPv6, разработчики убрали все старые костыли и оставили один вариант – именованные расширенные ACL для IPv6.

Списки контроля доступа для IPv6 позволяют фильтровать трафик по следующим параметрам:

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

Работа с IPv6 ACL

Возьмём для примера следующую топологию.

ACL для IPv6 - Топология

Допустим, что нам надо запретить пользователям из локальной сети обращаться в интернете ко всему кроме того, что доступно по протоколу HTTPS (порт 443). Кроме того, мы хотим, чтобы из интернета можно было бы управлять нашим маршрутизатором по SSH (порт 22), и больше ни к каким внутренним устройствам обратиться было бы нельзя. Вариант в SSH из интернета, возможно, не самый безопасный, здесь он взят только для примера.

Настроим соответствующие правила на интерфейсе Fa0/1 маршрутизатора RouterLAN (это интерфейс, направленный в сторону интернета):

RouterLAN#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
RouterLAN(config)#ipv6 access-list OUTBOUND 
RouterLAN(config-ipv6-acl)#permit tcp host 2002::1 eq 22 any established
RouterLAN(config-ipv6-acl)#permit tcp 2001::/64 any eq 443
RouterLAN(config-ipv6-acl)#exit
RouterLAN(config)#ipv6 access-list INBOUND
RouterLAN(config-ipv6-acl)#permit tcp any eq 443 2001::/64 established
RouterLAN(config-ipv6-acl)#permit tcp any host 2002::1 eq 22
RouterLAN(config-ipv6-acl)#exit
RouterLAN(config)#interface fa0/1
RouterLAN(config-if)#ipv6 traffic-filter INBOUND in
RouterLAN(config-if)#ipv6 traffic-filter OUTBOUND out
RouterLAN(config-if)#end
RouterLAN#
%SYS-5-CONFIG_I: Configured from console by console

Мы создали два списка контроля доступа с именами INBOUND, который применяется ко всему трафику, приходящему из интернета и OUTBOUND, который применяется к исходящему трафику. Конечно, задачу можно было бы решить более оптимальным способом, в данном примере место назначения ACL и их содержимое подобрано так, чтобы показать нюансы использования.

Так как подразумевается, что мы уже знакомы с применением расширенных ACL в IPv4, прокомментируем конфигурацию кратко.

Список OUTBOUND разрешает обращаться в интернет только с 22 порта с внешнего интерфейса маршрутизатора и только в рамках установленной до этого TCP сессии. Эта строчка позволяет маршрутизатору отвечать, когда к нему подключаются извне по SSH.

Вторая строчка разрешает обращение с клиентской сети (2001::/64) в интернет на 443 порт (обращение к серверам по HTTPS)

Список INBOUND назначен на вход интерфейса Fa0/1. Первая строчка разрешает получение во внутреннюю сеть трафика с удалённых серверов, с 443 порта в рамках уже установленной TCP сессии. Эта строчка нужна чтобы клиенты могли не только слать запросы на получение страничек, но и получать на них ответы (сами странички). Вторая строчка разрешает обращаться извне на внешний интерфейс маршрутизатора на 22 порт (SSH).

Отличия IPv6 от IPv4 ACL

Кажется, что это то же самое, что и писать IPv4 ACL, поэтому хочется отдельно остановиться на различиях:

  1. Используются IPv6 адреса отправителя и получателя вместо IPv4 – ну, это понятно.
  2. Вместо wildcard масок используются префиксы, что вполне логично – представьте себе длину wildcard для IPv6
  3. При назначении ACL на интерфейсу используется не «ip access-group», а «ipv6 traffic-filter»
  4. Если в IPv4 подразумевалось, что после вашего текста в ACL неявно присутствует строчка deny ip any any, то здесь три строчки:
    • permit icmp any any nd-na
    • permit icmp any any nd-ns
    • deny ipv6 any any

В четвёртом пункте два правила permit позволяют работать обнаружению соседей, аналог ARP для IPv6.

Пример из статьи в формате Packet Tracer 6.0.1: скачать.

Тэги: 

Комментарии

А как на счет динамических ACL IPv6?

С ACL IPv4 все просто
Создаем ACL:
access-list 105 dynamic test permit ip any any
и добавляем правила по rsh например:
rsh -l user 192.168.1.1 "access-template 105 test 192.168.33.24 0.0.0.7 0.0.0.0 255.255.255.255"

У IPv6 есть что-то подобное?

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