На маршрутизаторах ESR реализован функционал Zone-Based-Firewall который по умолчанию работает в StateFull-режиме.
Что означает Zone-Based?
1. На маршрутизаторе необходимо создать зоны безопасности:
esr# configure esr(config)# security zone trusted esr(config-zone)# exit esr(config)# security zone untrusted esr(config-zone)# exit esr(config)#
2. На все интерфейсы маршрутизатора, на которых назначен ip-адрес, назначается зона безопасности к которой будет относится весь трафик поступающий/отправляемый в назначенную зону:
esr(config)# interface gigabitethernet 1/0/1 esr(config-if-gi)# mode routerport esr(config-if-gi)# ip address 192.0.2.1/30 esr(config-if-gi)# security-zone untrusted esr(config-if-gi)# exit
esr(config)# bridge 1 esr(config-bridge)# vlan 1 esr(config-bridge)# security-zone trusted esr(config-bridge)# ip address 192.168.1.1/24 esr(config-bridge)# enable esr(config-bridge)# exit
esr(config)# bridge 10 esr(config-bridge)# vlan 10 esr(config-bridge)# security-zone trusted esr(config-bridge)# ip address 192.168.10.1/24 esr(config-bridge)# enable esr(config-bridge)# exit
3. Для разрешения прохождения транзитного трафика из широковещательного домена, ограниченного ip-интерфейсом маршрутизатора в одной зоне безопасности, в широковещательный домен, относящегося к другой зоне безопасности, создаются наборы правил межзонного взаимодействия. Для примера, правило разрешающее устанавливать любые сессии из зоны trusted в зону untrusted:
esr(config)# security zone-pair trusted untrusted esr(config-zone-pair)# rule 1 esr(config-zone-pair-rule)# action permit esr(config-zone-pair-rule)# enable esr(config-zone-pair-rule)# exit esr(config-zone-pair)# exit
4. При том, что зона безопасности конфигурируется на ip-интерфейсе маршрутизатора, сам ip-интерфейс не относится к сконфигурированной на нём зоне. Все ip-интерфейсы маршрутизатора всегда относятся к зоне безопасности "self". Зона безопасности "self" создана по умолчанию и не отображается в конфигурации.
При этом, если необходимо разрешить работу каких либо протоколов с самим маршрутизатором, необходимо создать соответствующие правила межзонного взаимодействия из необходимой зоны безопасности в зону безопасности "self".
Для примера, разрешить из зоны trusted узлам с ip-адресами 192.168.1.15, 192.168.1.37 и 192.168.1.142 подключаться к маршрутизатору по протоколу ssh:
esr(config)# object-group service SSH esr(config-object-group-service)# port-range 22 esr(config-object-group-service)# exit esr(config)# object-group network SSH_TRUSTED_PERMIT esr(config-object-group-network)# ip address-range 192.168.1.15 esr(config-object-group-network)# ip address-range 192.168.1.37 esr(config-object-group-network)# ip address-range 192.168.1.142 esr(config-object-group-network)# exit esr(config)# security zone-pair trusted self esr(config-zone-pair)# rule 10 esr(config-zone-pair-rule)# action permit esr(config-zone-pair-rule)# match protocol tcp esr(config-zone-pair-rule)# match destination-port SSH esr(config-zone-pair-rule)# match source-address SSH_TRUSTED_PERMIT esr(config-zone-pair-rule)# enable esr(config-zone-pair-rule)# exit esr(config-zone-pair)# exit
Второй наглядный пример, разрешить узлу с ip-адресом 192.51.100.6esr-10(config)# object-group network GRE_UNTRUSTED_PERMIT из зоны untrusted устанавливать gre-сессию на текущий маршрутизатор:
esr(config-object-group-network)# ip address-range 192.51.100.6 esr(config-object-group-network)# exit esr(config)# security zone-pair untrusted self esr(config-zone-pair)# rule 100 esr(config-zone-pair-rule)# action permit esr(config-zone-pair-rule)# match protocol gre esr(config-zone-pair-rule)# match source-address GRE_UNTRUSTED_PERMIT esr(config-zone-pair-rule)# enable esr(config-zone-pair-rule)# exit esr(config-zone-pair)# exit
Неотображаемым правилом по умолчанию в каждом наборе правил межзонного взаимодействия является запреяющее правило.
esr(config)# security zone-pair untrusted self esr(config-zone-pair)# rule esr(config-zone-pair-rule)# action deny esr(config-zone-pair-rule)# enable esr(config-zone-pair-rule)# exit esr(config-zone-pair)# exit
Таким образом пакет не попавший ни под одно разрешающее правило будет отброшен.
Как работает firewall в режиме StateFull?
1. При поступлении пакета на маршрутизатор, в первую очередь проверяется наличие уже зарегистрированной сессии под которую подпадает данный пакет.
Список сессий, которые в данный момент зарегистрированы на маршрутизаторе можно посмотреть при помощи команды:
esrvf# show ip firewall sessions Codes: E - expected, U - unreplied, A - assured, C - confirmed Prot Inside source Inside destination Outside source Outside destination Pkts Bytes Status ----- --------------------- --------------------- --------------------- --------------------- ---------- ---------- ------ tcp 192.168.1.15:54366 192.168.1.1:22 192.168.1.15:54366 192.168.1.1:22 -- -- AC
Если в списке зарегистрированных сессий есть под которую подпадает данный пакет, он маршрутизируется без дополнительных проверок.
2. Если в таблице зарегистрированных сессий нет подходящей сессии, проводится проверка по правилам межзонного взаимодействия:
2.1. По таблице маршрутизации определяется, в какой интерфейс должен будет отправится обрабатываемый в данный момент пакет.
2.2. В качестве source-zone принимается зона безопасности, сконфигурированная на интерфейсе через который пакет поступил маршрутизатор
2.3. В качестве destination-zone принимается зона безопасности, сконфигурированная на интерфейсе определенном в п.2.1
2.4. Просматривается набор правил "security zone-pair <source-zone> <destination-zone>" начиная с правила с меньшим номером.
Неактивированные правила (в которых нет команды "enable") не просматриваются.
Если пакет подпадает под все условия прописанные в правиле ("match") выполняется действие прописанное в правиле ("action") и дальнейший просмотр правил прекращается
2.5. Если в п.2.4. пакет попал под правило с "action permit" кроме маршрутизации пакета в таблицу зарегистрированных сессий добавляется информация о сессии, в рамках которой был смаршрутизирован проверенный пакет.
Таким образом все последующие пакеты ранее разрешенной сессии будут маршрутизироваться без просмотра по правилам межзонного взаимодействия. Причём данное утверждение относится как к прямым пакетам (из source-zone в destination-zone) так и к обратным пакетам сессии (из destination-zone в source-zone).
Как следствие, в режиме StateFull для firewall нет необходимости создавать отдельные разрешающие правила для "обратного" трафика. Достаточно чётко разрешить какие пользователи могут устанавливать сессии узлами в других зонах безопасности с указанием протоколов и портов (при наличии).
Если одна зона безопасности сконфигурирована на нескольких ip-интерфейсах, это не означает, что трафик маршрутизируемый между интерфейсами одной зоны безопасности не проверяется Firewall'ом.
Как следствие, подобный трафик тоже необходимо разрешать в соответствующем наборе правил.
Для примера - разрешение любого трафика между широковещательными доменами отнесенными к зоне trusted:
esr(config)# security zone-pair trusted trusted esr(config-zone-pair)# rule 1 esr(config-zone-pair-rule)# action permit esr(config-zone-pair-rule)# enable esr(config-zone-pair-rule)# exit esr(config-zone-pair)# exit
Для отслеживания активности работы Zone-Based-Firewall при создании правил, есть возможность включить логирование их срабатывания используя ключ "log" при указании "action"
Для примера, добавление запрещающего правила с логированием:
esr(config)# security zone-pair untrusted self esr(config-zone-pair)# rule 10000 esr(config-zone-pair-rule)# action deny log esr(config-zone-pair-rule)# enable esr(config-zone-pair-rule)# exit esr(config-zone-pair)# exit
После применения данной конфигурации в syslog маршрутизатора (локальный или удаленный) будут поступать сообщения о попытках установить запрещенную сессию.
2022-11-21T12:27:31+00:00 %FIREWALL-I-LOG: zone-pair 'untrusted self' rule 10000 denied tcp 192.168.1.15:40900 (gi1/0/1 60:e3:27:00:ee:e9) -> 192.168.1.1:23 dscp 4, 1 packets
Если указать ключ "log" на разрешающее действие, например сконфигурированное ранее:
esr(config)# security zone-pair trusted self esr(config-zone-pair)# rule 10 esr(config-zone-pair-rule)# action permit log esr(config-zone-pair-rule)# match protocol tcp esr(config-zone-pair-rule)# match destination-port SSH esr(config-zone-pair-rule)# match source-address SSH_TRUSTED_PERMIT esr(config-zone-pair-rule)# enable esr(config-zone-pair-rule)# exit esr(config-zone-pair)# exit
То в syslog также будут попадать сообщение о срабатывании разрешающего правила. Например:
2022-11-21T12:28:25+00:00 %FIREWALL-I-LOG: zone-pair 'untrusted self' rule 100 permitted tcp 192.168.1.15:43596 (gi1/0/1 60:e3:27:00:ee:e9) -> 192.168.1.1:22 dscp 0, 1 packets
Кроме/вместо логирования срабатывания правил можно включить подсчёт пакетов передаваемых в рамках установленных сессий при помощи команды:
esr(config)# ip firewall sessions counters
После применения данной команды в конфигурации, в выводе информации о зарегистрированных сессиях будет отображаться количество пакетов и байт переданных в рамках данной сессии:
esrf# show ip firewall sessions Codes: E - expected, U - unreplied, A - assured, C - confirmed Prot Inside source Inside destination Outside source Outside destination Pkts Bytes Status ----- --------------------- --------------------- --------------------- --------------------- ---------- ---------- ------ tcp 192.168.1.15:43552 192.168.1.1:22 192.168.1.15:43552 192.168.1.1:22 28 4081 AC esr# show ip firewall sessions Codes: E - expected, U - unreplied, A - assured, C - confirmed Prot Inside source Inside destination Outside source Outside destination Pkts Bytes Status ----- --------------------- --------------------- --------------------- --------------------- ---------- ---------- ------ tcp 192.168.1.15:43552 192.168.1.1:22 192.168.1.15:43552 192.168.1.1:22 52 6049 AC
Можно ли отключить firewall?
В режиме конфигурирования интерфейсов/туннелей есть команда:
esr(config-if-gi)# ip firewall disable
При применении данной команды, firewall не отключается полностью. Маршрутизатор продолжает регистрировать маршрутизируемые сессии.
Но при применении данной команды перестаёт просматриваться соответствующий набор правил межзонного взаимодействия даже если одновременно с "ip firewall disable" на интерфейсе указана зона безопасности.
При применении команды "ip firewall disable" на интерфейсе, все пакеты поступающие через данный интерфейс считаются разрешенными.
Что если на интерфейсе не настроена security-zone или не отключен Firewall?
В таком случае будет блокироваться весь входящий трафик, поскольку нет разрешающий правил для его обработки.