В результате обработки интерфейсов в LSP могут появиться записи двух структур: NetworkInterface и FilterChain.
Структура NetworkInterface используется для описания сетевого интерфейса и тех действий, которые должны быть выполнены с пакетом при его прохождении через этот интерфейс – фильтрация и классификация.
Структура FilterChain формирует условие срабатывания конкретного правила пакетной фильтрации для партнеров по взаимодействию (для crypto-maps).
1. Формирование NetworkInterface:
· Пишется параметр LogicalName=”<native-interface-name>”, где <native-interface-name> – внутреннее имя интерфейса, зарегистрированное в агенте
· Описание остальных параметров (если источник для параметра отсутствует в Cisco-like конфигурации – параметр не пишется):
Параметр |
Источник в Cisco-like конфигурации (подкоманда команды interface) |
InputFilter – задает правила как stateless (пакетной) так и statefull (контекстной) фильтрации для входящих пакетов на этот интерфейс |
ip access-group in при ее отсутствии - ip inspect inspection-name in |
OutputFilter – задает правила как stateless (пакетной) так и statefull (контекстной) фильтрации для исходящих пакетов с этого интерфейса |
ip access-group out при ее отсутствии - ip inspect inspection-name out |
InputClassification – задает правила классификации входящих пакетов на этот интерфейс и выставления значения поля TOS в IP-заголовке пакетов. Классификация и маркирование входящего защищаемого трафика производится после его успешной декапсуляции.. |
service-policy input |
OutputClassification – задает правила классификации исходящих пакетов с этого интерфейса и выставления значения поля TOS в IP-заголовке пакетов. Классификация и маркирование исходящего защищаемого трафика производится до его IPsec инкапсуляции. В случае туннелирования результирующее значение TOS-байта копируется из внутреннего IP-заголовка во внешний. |
service-policy output |
2. Формирование FilterChain для фильтрации трафика:
· Для каждой записи листа доступа формируется отдельный фильтр.
· Запись deny транслируется в DROP.
· Запись permit транслируется:
· в ссылку на inspection chain label, если присутствует inspection chain, и в записи листа доступа указан протокол TCP или IP
· в PASS, если inspection chain отсутствует.
· Формирование параметров LogEventID (см. ниже)
· Последней записью перед inspect chain label или последней записью в FilterChain при отсутствии inspect chain пишется фильтр drop all:
Filter (
Action = DROP
)
3. Формирование FilterChain для инспектирования трафика:
· Если присутствует фильтрация трафика, то первая запись inspect chain помечается label со значением имени inspect chain (из команды ip inspect name …)
· Записи формируются в порядке следования команд ip inspect name в Cisco-like конфигурации. Исключение: если в команде ip inspect name указан протокол tcp, то это всегда порождает предпоследний фильтр перед “pass all” (независимо от расположения самой команды в конфигурации):
Filter (
ProtocolID *= 6
Action = PASS
ExtendedAction = inspect_tcp< … >
)
· Ссылка на port map порождает последовательность фильтров, основанную на командах ip port map:
· Параметр ProtocolID всегда равен 6.
· Параметр Action – всегда PASS.
· Порт или диапазон портов (из команды ip port map) транслируется в параметр DestinationPort.
· Если в port map присутствует ссылка на список доступа, то каждая запись из этого списка порождает отдельную запись Filter:
· DestinationIP (единичный адрес или подсеть) берется из записи списка доступа
· В случае permit – пишется запись с параметром ExtendedAction (формирование смотрите ниже)
· В случае deny – параметр ExtendedAction отсутствует
· При наличии спецификатора log пишется параметр (см. ниже):
Log = TRUE
· В параметр ExtendedAction прописывается значение inspect_tcp<…>.
Исключение: если в port map указывается ftp, то прописывается inspect_ftp <…>.
· В качестве параметров ExtendedAction может прописываться timeout и флаги NOALERT и AUDIT.
· Последней записью пишется фильтр pass all:
Filter (
Action = PASS:
)
· Формирование параметров LogEventID и Log см. ниже.
4. Пример формирования FilterChain для фильтрации и инспектирования трафика
· Фрагмент Cisco-like конфигурации:
ip inspect alert-off
...
access-list 1 deny 10.20.30.40
access-list 1 permit 10.20.30.0 0.0.0.255
!
ip port-map user-1 port tcp 2000
!
ip port-map user-2 port tcp 2001 list 1
!
ip inspect name inspect1 user-1 timeout 1008
ip inspect name inspect1 ftp audit-trail on
ip inspect name inspect1 tcp alert on audit-trail off timeout 1234
ip inspect name inspect1 user-2 alert off
...
ip access-list extended acl1
deny udp 3.4.0.0 0.0.255.255 any
deny icmp host 3.4.5.6 9.8.7.0 0.0.0.255
permit tcp host 1.2.3.4 any established
permit tcp any any
...
interface FastEthernet0/0
ip access-group acl1 in
ip inspect inspect1 in
· Фрагмент полученной LSP конфигурации:
FilterChain FilterChain:acl1 (
Filters *= Filter (
SourceIP *= 3.4.0.0/16
ProtocolID *= 17
Action = DROP
LogEventID = "acl1"
),
Filter (
SourceIP *= 3.4.5.6
DestinationIP *= 9.8.7.0/24
ProtocolID *= 1
Action = DROP
LogEventID = "acl1"
),
Filter (
SourceIP *= 1.2.3.4
ProtocolID *= 6
Action = "inspect1"
ExtendedAction = tcp_flags< any_set *= RST, ACK >
LogEventID = "acl1"
),
Filter (
ProtocolID *= 6
Action = "inspect1"
LogEventID = "acl1"
),
Filter (
Action = DROP
),
Filter (
Label = "inspect1"
ProtocolID *= 6
DestinationPort *= 2000
Action = PASS
ExtendedAction = inspect_tcp< timeout = 1008 flags *= NOALERT >
LogEventID = "Inspect:inspect1:user-1"
),
Filter (
ProtocolID *= 6
DestinationPort *= 21
Action = PASS
ExtendedAction = inspect_ftp< flags *= NOALERT, AUDIT >
LogEventID = "Inspect:inspect1:ftp"
),
Filter (
DestinationIP *= 10.20.30.40
ProtocolID *= 6
DestinationPort *= 2001
Action = PASS
LogEventID = "Inspect:inspect1:user-2:1"
),
Filter (
DestinationIP *= 10.20.30.0/24
ProtocolID *= 6
DestinationPort *= 2001
Action = PASS
ExtendedAction = inspect_tcp< flags *= NOALERT >
LogEventID = "Inspect:inspect1:user-2:1"
),
Filter (
ProtocolID *= 6
Action = PASS
ExtendedAction = inspect_tcp< timeout = 1234 >
LogEventID = "Inspect:inspect1:tcp"
),
Filter (
Action = PASS
)
)
5. Формирование FilterChain для QoS классификации трафика.
· Берется описание policy map и последовательно раскрывается по порядку следования class map, за одним исключением: при наличии default class map, она порождает предпоследнюю по счету запись в FilterChain.
· При переборе class maps делается просмотр на один шаг вперед: запоминается имя следующей class map для того, чтобы использовать его как ссылку на label.
· Первые по счету фильтры всех class maps, кроме первой, помечаются меткой (label) с именем class map в качестве значения.
· Для default class map используется метка “class-default”.
· Далее описывается конвертирование очередной class map.
· Если class map не содержит критериев классификации трафика, для нее пишется вырожденный фильтр вида:
Filter (
Label = "<class-map-i>"
Action = "<class-map-i+1>"
)
· Варианты таких class maps:
· пустая class map
· class map типа match-all, которая содержит хотя бы одну ссылку на несуществующий или пустой список доступа
· class map типа match-any, которая содержит только ссылки на несуществующие или пустые листы доступа.
· Если class map применима ко всему трафику, пишется Filter следующего вида:
Filter (
Label = "<class-map>"
Action = PASS
ExtendedAction = classify_mark< tos_set= tos_set_mask=... >
LogEventID = "Classification:<policy-map>:<class-map>"
)
Примечание: здесь и далее предполагается, что присутствуют команды set precedence и/или set dscp. Если такие команды отсутствуют, то в результирующих фильтрах отсутствуют параметры tos_set и tos_set_mask. Подробнее см. далее.
· Варианты таких class maps:
· class map по умолчанию (задается командой class class-default);
· class map типа match-all, которая содержит единственный критерий классификации трафика – команду match-any ;
· class map типа match-any, в которой один из критериев классификации трафика - команда match-any.
· Правила конвертирования команд set (маркировка трафика):
· Если команды set precedence и set dscp отсутствуют, параметры tos_set и tos_set_mask в результирующих фильтрах не пишутся.
· Команда set precedence транслируется в
ExtendedAction = classify_mark< tos_set=<num_precedence>*32 tos_set_mask=224 >
где
<num_precedence>*32 – числовое значение команды set precedence, умноженное на 32 (битовый сдвиг на 5 бит влево, т.е. результирующее значение TOS-байта для указанного precedence без учета остальных битов)
маска 224 (11100000) указывает на precedence.
· Команда set dscp транслируется в
ExtendedAction = classify_mark< tos_set=<num_dscp>*4 tos_set_mask=252 >
где
<num_dscp>*4 – числовое значение команды set dscp, умноженное на 4 (битовый сдвиг на 2 бита влево, т.е. результирующее значение TOS-байта для указанного DSCP без учета остальных битов)
маска 252 (11111100) указывает на DSCP.
· В некоторых случаях в одном фильтре могут смешиваться указания как для классификации, так и для маркировки трафика. Например (в оригинале ExtendedAction пишется в одну строку):
Filter (
Action = PASS
ExtendedAction = classify_mark< tos_match *= 160, 192 tos_match_mask=224 tos_set=96 tos_set_mask=224 >
)
Данный фильтр задает правило: трафик с precedence=internet или precedence=critical маркировать как precedence=flash.
· Далее будут расматриваться невырожденные варианты построения class maps. Они могут приводить к разветвленной структуре ссылок на различные labels. Следует отметить, что в общем случае для конкретного class map могут быть ссылки на две labels:
· Фильтры, порожденные следующим критерием классификации трафика в рамках текущей class map. Далее такие ссылки будут указываться, как “<Curr_class>”.
· Корневой фильтр, описывающий начало следующего class map в policy map. Далее будет указываться, как “<Next_class>”.
· Пример записи FilterChain:
...
Filters *= Filter (
Action = "<Curr_class>"
ExtendedAction = classify_mark< tos_match *= 40, 192 tos_match_mask=252 >
LogEventID = "Classification:..."
),
Filter (
Action = "<Next_class>"
),
...
Данная запись обозначает:
если TOS-байт трафика содержит значение DSCP=af11 или DSCP=cs6, то рассмотреть следующий критерий классификации трафика из текущей class map (соответствует class map типа match-all),
в противном случае - перейти к рассмотрению следующей class map.
· Конвертирование class map типа match-all:
· Команда match-any, если она не является единственным критерием классификации, игнорируется.
· Команды match dscp и match precedence транслируются (каждая по отдельности) в следующие конструкции:
· При наличии <Curr_class>:
Filter (
Action = "<Curr_class>"
ExtendedAction = classify_mark< tos_match *= ... tos_match_mask=... >
LogEventID = "Classification:..."
),
Filter (
Action = "<Next_class>"
)
· При отсутствии <Curr_class> (последний критерий классификации для данного class map):
Filter (
Action = PASS
ExtendedAction = classify_mark< tos_match *= ... tos_match_mask=... tos_set=... tos_set_mask=... >
LogEventID = "Classification:..."
)
· Пример:
Фрагмент Cisco-like конфигурации:
...
class-map match-all cl-map-1
match dscp af11 cs6
match precedence internet critical
!
policy-map pol-map-1
class cl-map-1
set precedence flash
!
...
Фрагмент LSP:
...
FilterChain ClassificationChain:pol-map-1 (
Filters *= Filter (
Action = "cl-map-1:match_precedence"
ExtendedAction = classify_mark< tos_match *= 40, 192 tos_match_mask=252 >
LogEventID = "Classification:pol-map-1:cl-map-1:match_dscp"
),
Filter (
Action = PASS
),
Filter (
Label = "cl-map-1:match_precedence"
Action = PASS
ExtendedAction = classify_mark< tos_match *= 160, 192 tos_match_mask=224 tos_set=96 tos_set_mask=224 >
LogEventID = "Classification:pol-map-1:cl-map-1:match_precedence"
),
Filter (
Action = PASS
)
)
...
· Для каждого критерия классификации, задаваемого командой match access-group, пишется отдельный FilterChain. Для каждой записи листа доступа формируется отдельный фильтр:
· deny транслируется в ссылку на <Next_class>. При отсутствии последней – в PASS-правило.
· permit транслируется в ссылку на <Curr_class>. При отсутствии последней – в PASS-правило, в котором в качестве параметра ExtendedAction задается маркировка трафика (tos_set/tos_set_mask).
· При наличии спецификатора log или log-input, пишется параметр Log=TRUE (подробнее см. ниже).
· Следует отметить, что указания TCP-флагов в листах доступа (включая спецификатор established) игнорируются.
· Если присутствует ссылка <Curr_class> (данный критерий классификации не последний для данного class map), то в конце пишется фильтр:
При наличии <Next_class>:
Filter (
Action = "<Next_class>"
)
При отсутствии <Next_class>:
Filter (
Action = PASS
)
· Пример:
Фрагмент Cisco-like конфигурации:
ip access-list extended acl1
deny tcp host 10.20.30.40 host 10.10.10.10
permit ip host 10.20.30.40 10.10.10.0 0.0.0.255
!
ip access-list extended acl2
...
class-map match-all cl-map-1
...
match access-group name acl1
match access-group name acl2
!
class-map cl-map-2
...
policy-map pol-map-1
class cl-map-1
set precedence flash
class cl-map-2
set precedence critical
...
Фрагмент LSP:
...
Filter (
SourceIP *= 10.20.30.40
DestinationIP *= 10.10.10.10
ProtocolID *= 6
Action = "cl-map-2"
LogEventID = "Classification:pol-map-1:cl-map-1:acl1"
),
Filter (
SourceIP *= 10.20.30.40
DestinationIP *= 10.10.10.0/24
Action = "cl-map-1:acl2"
LogEventID = "Classification:pol-map-1:cl-map-1:acl1"
),
Filter (
Action = "cl-map-2"
),
Filter (
Label = "cl-map-1:acl2"
...
Filter (
Label = "cl-map-2"
...
Filter (
Action = PASS
)
...
· Конвертирование class map типа match-any:
· Присутствие команды match-any, приводит к тому, что данная class map применима ко всему трафику. Этот случай рассмотрен выше.
· Команды match dscp и match precedence транслируются (каждая по отдельности) в фильтр вида:
Filter (
Action = PASS
ExtendedAction = classify_mark< tos_match *= ... tos_match_mask=... tos_set=... tos_set_mask=... >
LogEventID = "Classification:..."
)
· Команды match access-group, ссылающиеся на несуществующие или пустые ACLs, игнорируются.
· Для каждого критерия классификации, задаваемого командой match access-group, пишется отдельный набор фильтров. Для каждой записи листа доступа формируется отдельный фильтр:
· deny транслируется в ссылку на <Curr_class>. При ее отсутствии – в ссылку на <Next_class>. При отсутствии последней – в PASS-правило.
· permit транслируется в PASS-правило, в котором в качестве параметра ExtendedAction задается маркировка трафика (tos_set/tos_set_mask).
· Следует отметить, что указания TCP-флагов в записи листа доступа (включая спецификатор established) игнорируются.
· Пример:
Фрагмент Cisco-like конфигурации:
ip access-list extended acl1
deny tcp host 10.20.30.40 host 10.10.10.10
permit ip host 10.20.30.40 10.10.10.0 0.0.0.255
!
ip access-list extended acl2
permit udp any any
!
class-map match-any cl-map-1
match precedence priority
match access-group name acl1
match access-group name acl2
!
class-map cl-map-2
match precedence internet critical
match dscp af11 cs6
!
policy-map pol-map-1
class class-default
class cl-map-1
set precedence flash
class cl-map-2
set precedence network
...
Фрагмент LSP:
...
FilterChain ClassificationChain:pol-map-1 (
Filters *= Filter (
Action = PASS
ExtendedAction = classify_mark< tos_match *= 32 tos_match_mask=224 tos_set=96 tos_set_mask=224 >
LogEventID = "Classification:pol-map-1:cl-map-1:match_precedence"
),
Filter (
SourceIP *= 10.20.30.40
DestinationIP *= 10.10.10.10
ProtocolID *= 6
Action = "cl-map-1:acl2"
LogEventID = "Classification:pol-map-1:cl-map-1:acl1"
),
Filter (
SourceIP *= 10.20.30.40
DestinationIP *= 10.10.10.0/24
Action = PASS
ExtendedAction = classify_mark< tos_set=96 tos_set_mask=224 >
LogEventID = "Classification:pol-map-1:cl-map-1:acl1"
),
Filter (
Label = "cl-map-1:acl2"
ProtocolID *= 17
Action = PASS
ExtendedAction = classify_mark< tos_set=96 tos_set_mask=224 >
LogEventID = "Classification:pol-map-1:cl-map-1:acl2"
),
Filter (
Label = "cl-map-2"
Action = "cl-map-2:match_precedence"
ExtendedAction = classify_mark< tos_match *= 40, 192 tos_match_mask=252 >
LogEventID = "Classification:pol-map-1:cl-map-2:match_dscp"
),
Filter (
Action = "class-default"
),
Filter (
Label = "cl-map-2:match_precedence"
Action = PASS
ExtendedAction = classify_mark< tos_match *= 160, 192 tos_match_mask=224 tos_set=224 tos_set_mask=224 >
LogEventID = "Classification:pol-map-1:cl-map-2:match_precedence"
),
Filter (
Label = "class-default"
Action = PASS
LogEventID = "Classification:pol-map-1:class-default"
)
)
...
6. Из интерфейса последовательно читаются crypto maps из crypto map set, прописанного в команде crypto map <crypto_map> (режим конфигурирования интерфейса).
· Из описания crypto map читается access list, прописанный в команде match address <access_list> (режим конфигурирования crypto map).
· Далее для простоты такой access list будет указываться как crypto-map-acl.
· Если в файле cs_conv.ini параметр ike_autopass выставлен в значение “on” (значение по умолчанию, см. ike_autopass), то в начале FilterChain пишется следующий фильтр:
Filter (
ProtocolID = 17
SourcePort = 500, 4500
Action = PASS
PacketType = LOCAL_UNICAST, LOCAL_MISDIRECTED
)
· Следует учесть, что данная настройка помешает созданию конфигурации с вложенным IPsec.
· Если необходимо составить конфигурацию с вложенным IPsec, то следует параметр ike_autopass выставить в значение “off” и самостоятельно прописать соответствующий PASS-фильтр для IKE пакетов, в котором указан адрес партнера по защищенному соединению.
· Происходит трансляция из crypto-map-acl в структуры Filter следующим образом:
· deny транслируется в:
· если присутствует следующая crypto map, то в ссылку (по label) на первый фильтр, сгенерированный из crypto-map-acl следующей crypto map.
· правило PASS для последней crypto map в списке.
· permit транслируется в правило APPLY (IPSec). При этом пишутся параметры из данного crypto map.
· Указания TCP-флагов (включая спецификатор established), а также спецификаторы log и log-input игнорируются.
7. В случае, если в crypto map set присутствует ссылка на dynamic template set (задается командами crypto dynamic map), в котором есть несколько dynamic crypto maps, в crypto-map-acls которых существуют пересечения по адресам, в фильтре происходит объединение правил.
· Объединение правил для статических crypto maps не производится (ни между разными статическими crypto maps, ни между статическими и динамическими crypto maps).
· В случае если статическая crypto map имеет приоритет ниже, чем динамическая, могут возникать логические неувязки. Настоятельно рекомендуется давать статическим crypto maps приоритет выше, чем динамическим. Следует отметить, что в документации Cisco также присутствует эта рекомендация.
· Если данная рекомендация не выполнена – выдается предупреждение [2.9].
· Не производится объединение правил для динамических crypto maps, которые входят в разные dynamic template sets, которые в свою очередь входят в один crypto map set.
· В случае если в dynamic template set существует пересечение по адресам правил, в которых для одних dynamic templates прописаны правила permit, а для других – deny; в фильтре прописывается правило вида (PASS), (Action1), …, (ActionN).
· Логика формирования данных фильтров может существенно отличаться от логики Cisco.
· В данном примере продемонстрирован особый прием: специально для прописывания PASS-правила сделан crypto dynamic-map dmap 2 (на самом деле приоритет этого dynamic map в данном конкретном случае не важен), в котором нет ничего, кроме связи с ACL, состоящим из deny-правила (правил): отсутствуют transform sets и т.п. Следует отметить, что данный способ может использоваться только с агентом, и неприменим на реальных устройствах Cisco.
· Данная логика действует только на явно прописанные deny-правила. Для неявных правил deny ip any any, которые предполагаются в конце каждого access list, никаких объединений правил не делается.
· В случае, если для данной crypto map задан IKECFG пул (любым способом: или с помощью команд crypto isakmp client configuration address-pool local / crypto map … client configuration address initiate/respond; или с помощью команды set pool), то в структуре IKERule прописывается соответствующий AddressPool.
· Следует учитывать, что если используется crypto map с crypto-map-acl, то в данном crypto-map-acl надо вписывать правила, в которые попадают адреса из пула. Например:
! ...
ip local pool pool1 192.168.211.10 192.168.211.30
! ...
crypto map cmap 10 ipsec-isakmp
set peer 10.1.1.10
! ...
match address cr-acl
set pool pool1
!
ip access-list extended cr-acl
permit ip <...> host 10.1.1.10
permit ip <...> 192.168.211.0 0.0.0.255
! ...
· Примечание: приведенная конфигурация корректна, но используется редко. На практике IKECFG пул чаще всего задается для динамических crypto maps, к которым не привязан ни один crypto-map-acl.
· Требование к прописыванию фильтра с адресами из пула примерно соответствует поведению Cisco IOS.
· Однако данное поведение отличается от версии 3.1: там можно было написать укороченный crypto-map-acl (фильтр с адресами из пула создавался неявно):
ip access-list extended cr-acl
permit ip <...> host 10.1.1.10
8. Происходит проверка нужно ли прописывать данный фильтр. Если этот фильтр совпадает или полностью включается в один из предыдущих фильтров, прописанных для данного интерфейса, тогда этот фильтр не прописывается в LSP.
9. Формирование параметров LogEventID и Log структуры FilterChain:
· Примечание 1: LogEventID формируется всегда.
· Примечание 2: если структура Filter формируется не из записи ACL, параметр Log выставляется в FALSE.
· Примечание 3: параметр Log выставляется в TRUE в случае, если структура Filter формируется из записи ACL и в этой записи присутствует спецификатор log или log-input.
· Объекты, кроме IPsec policy (см. ниже):
Тип исходного объекта |
Ситуация |
Параметр |
Допустимость параметра Log=TRUE |
Фильтрующий ACL |
|
“<ACL-name>” |
+ |
Inspection |
Запись в port map, не имеющая ссылок на ACL |
“Inspect:<inspect-name>:<port-map-name>” |
|
Запись в port map, ссылающаяся на ACL |
“Inspect:<inspect-name>:<port-map-name>” |
+ |
|
Ссылка на протокол TCP |
“Inspect:<inspect-name>:tcp” |
|
|
Classification |
match acl… |
“Classification:<policy-map-name>:<class-map-name>:<acl-name>” |
+ |
match dscp… |
“Classification:<policy-map-name>:<class-map-name>:match_dscp” |
|
|
match precedence… |
“Classification:<policy-map-name>:<class-map-name>:match_precedence |
|
|
match any |
“Classification:<policy-map-name>:<class-map-name>” |
|
|
Clear-Text фильтрация внутри защищенного соединения |
|
“ClearText:<acl-name>” |
+ |
· IPsec policy:
· Вначале идет префикс “IPsec”.
· Далее, если допускается открытый трафик, пишется “:Bypass”.
· Далее, если присутствует защищенный трафик, пишется “:Protect“.
· Для динамических crypto maps возможны сочетания “IPsec:Bypass:Protect”.
· Далее, после двоеточия, пишется набор из следующих параметров:
· Имя и порядковый номер crypto map, разделенные двоеточием.
· Если используется dynamic map: имя и порядковый номер dynamic map, разделенные двоеточием.
· Если присутствует ACL (может отсутствовать для dynamic map): после двоеточия пишется имя этого ACL.
· Если источником являются несколько crypto maps, то блоки описания для каждой crypto map разделяются символом “$” (доллар).
· Параметр Log=TRUE допускается: пишется в том случае, если в текущей записи ACL присутствует модификатор log или log-input.
· Если фильтр формируется на основе нескольких записей ACL, достаточно присутствие одного из этих модификаторов хотя бы в одной из задействованных записей.
· Пример исходной конфигурации:
...
ip access-list extended crypto-acl-1
permit ip any any
!
ip access-list extended crypto-acl-2
deny ip host 192.168.101.102 any log
permit tcp 192.168.3.0 0.0.0.255 any eq 80 log
!
crypto dynamic-map dmap 10
match address crypto-acl-1
set transform-set tr1
!
crypto dynamic-map dmap 20
match address crypto-acl-2
set transform-set tr2
!
crypto map cmap 10 ipsec-isakmp dynamic dmap
...
# Native LSP конфигурация
...
FilterChain IPsecPolicy:cmap (
Filters *= Filter (
SourceIP *= 192.168.101.102
Action = PASS
ExtendedAction = ipsec< sa *= IPsecAction:dmap:10 fallback_action = PASS >
LogEventID = "IPsec:Bypass:Protect:cmap:10:dmap:10:crypto-acl-1$cmap:10:dmap:20:crypto-acl-2"
Log = TRUE
),
Filter (
SourceIP *= 192.168.3.0/24
ProtocolID *= 6
DestinationPort *= 80
Action = PASS
ExtendedAction = ipsec< sa *= IPsecAction:dmap:10, IPsecAction:dmap:20 >
LogEventID = "IPsec:Protect:cmap:10:dmap:10:crypto-acl-1$cmap:10:dmap:20:crypto-acl-2"
Log = TRUE
),
Filter (
Action = PASS
ExtendedAction = ipsec< sa *= IPsecAction:dmap:10 >
LogEventID = "IPsec:Protect:cmap:10:dmap:10:crypto-acl-1"
)
)
...