Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
системы Cisco IOS для конфигурирования правил доступа между сетями. До появления этой технологии
трафик фильтровался с помощью списков доступа ACL и динамической инспекции трафика Context-
Based Access Control (CBAC). И ACL и правила CBAC’а применялись непосредственно на физические
интерфейсы, что во многих случаях не способствует масштабируемости и гибкости решения. Весь
трафик, проходящий через интерфейс, получал ту же самую инспекционную политику. Такая модель
конфигурации ограничивает степень детализации политик межсетевого экрана и вызывает путаницу
правильного применения политики межсетевого экранирования, особенно в сценариях, когда
политика межсетевого экрана должна применяться между несколькими интерфейсами.
Zone Based Firewall меняет конфигурацию межсетевого экрана от старой интерфейсной модели на
более гибкую, более понятную модель, на основе зон безопасности.
Зона безопасности состоит из набора различных интерфейсов, которые должны иметь одинаковую
политику сетевой безопасности или, иначе говоря, одинаковый уровень доверия. После этого все
правила настраиваются для взаимодействий между зонами. Такой подход облегчает настройки правил
межсетевого экрана. Кроме того в Zone-Based Policy Firewall используется Cisco Policy Language (CPL),
которая позволяет более гибко, чем в предыдущих версиях межсетевого экрана, настраивать правила
фильтрации трафика.
Зона устанавливает границы безопасности вашей сети. Зона определяет границу, где трафик является
предметом ограничения со стороны политики, как только он уходит в другую область вашей сети.
По умолчанию, трафик разрешен между интерфейсами одной зоны безопасности и запрещен между
разными зонами. Трафик между интерфейсом, который относится к какой-либо зоне, и интерфейсом,
который не относится ни к одной зоне, запрещен. В дополнение ко всему, вы не можете применять
классические правила межсетевого экранирования (CBAC, ACL) к интерфейсу, который принадлежит
какой-либо зоне безопасности.
Существует одна зона, которая есть на всех маршрутизаторах и создана по-умолчанию и известна как
self-зона. К этой зоне относятся все IP-адреса маршрутизатора. Трафик между self-зоной и любой
другой, по-умолчанию, разрешен. Однако, вы можете применить политику между self-зоной и любой
другой чтобы контролировать трафик, который генерируется маршрутизатором. Если вы примените
политику от любой зоны к self-зоне, то трафик от self-зоны в обратном направлении будет все равно
разрешен (пока вы явно это не запретите).
Когда вы хотите применить политики к трафику, который проходит между зонами, необходимо помнить
одно важное правило: политики применяются к зоновой паре (zone pair). При этом, пара зон {A,B} это
не тоже самое, что {B,A}. Первая зона в паре называется зоной-источником (source zone), вторая зоной
назначения (destination zone). Когда вы применяете политику межсетевого экранирования к зоновой
паре, она применяется к трафику который «бежит» от зоны-источника к зоне назначения.
Сетевые интерфейсы маршрутизатора которые принадлежат зонам являются объектами ряда правил,
которые регулируют поведение интерфейса, при движении трафика между этими интерфейсами:
Прежде чем интерфейсы могут быть назначены зоне безопасности, последняя должна быть сконфигурирована.
Любой интерфейс может быть назначен только одной зоны безопасности.
Любой зоне может принадлежать один или несколько интерфейсов
В пределах зоны по умолчанию разрешен весь трафик
Между зонами по умолчанию политика – deny any any
Трафик предназначенный маршрутизатору или сгенерированный им разрешен по умолчанию
Трафик не может протекать между интерфейсом, который принадлежит зоне и любым интерфейсом, который не
принадлежит никакой зоне. Иначе говоря, если один из интерфейсов принадлежит к какой-либо зоне, другой нет - трафик
запрещен
Интерфейсы, которые не были назначены в зоны функционируют как классические порты маршрутизатора и, могут все
еще использовать CBAC.
zone security IN
access-group - стандартный, расширенный или именованный ACL который может фильтровать трафик на основании IP
адреса-порта источника и приемника. Это единственный способ выделить трафик от конкретного источника к
конкретному получателю.
Protocol - это протоколы уровня 4 (TCP, UDP, ICMP), а также прикладные сервисы, такие как HTTP, SMTP, DNS, и т.д.
Может быть указан любой известный или определяемый пользователем сервис.
Class-map - подчиненный класс, который предоставляет дополнительные критерии соответствия может быть вложен в
другой класс
Not - определяет, что любой трафик, который не соответствует указанному сервису или протоколу или листу доступа
будет выбран в данном class-map.
Классовые карты инспекции могут быть двух типов: match-all и match-any. В первом случае, все
условия match, которые заданы внутри класса, должны быть выполнены; во втором случае должно
совпасть хотя бы одно условие.
Критерии соответствия должны применяться в порядке от более конкретных к менее специфичным,
если трафик соответствует нескольким критериям.
HTTP-трафик должен встретить сперва match protocol http, чтобы быть уверенным, что трафик
обрабатывается HTTP инспекцией. Если же строчки в класс-карте поменять местами, то HTTP трафик
попадет под match protocol tcp и такой трафик будет классифицирован как TCP трафик и будет
инспектироваться в соответствие с возможностями инспекционного TCP движка.
Примеры class-map:
Drop - Трафик обрабатываемый этим действием слепо отбрасывается и никакого уведомления на удаленных хост не
высылается. В противоположность классическим листам доступа (ACL), когда высылается ICMP Host Unreachable. В
настоящий момент нет возможности менять поведение действия Drop.
Помимо выше сказанного, каждая карта политик имеет скрытый класс class-default, для которого сконфигурировано
действие “drop” (аналогично строке deny any any в любом списке доступа).
Pass – Пропускает трафик не включая инспекцию протокола. Это действие позволяет маршрутизатору пересылать
трафик из одной зоны в другую, при этом он не е отслеживает состояние соединений или сессий. Это действие
разрешает прохождение трафика только в одном направлении. Чтобы обратный трафик пройти в обратном направлении,
должна быть соответствующая политика для него. Это действие полезно для таких протоколов, как IPSec ESP, IPSec
AH, ISAKMP и других по своей сути безопасных протоколов с предсказуемым поведением.
Inspect - Включает динамическую инспекцию для трафика, который проходит от зоны источника к зоне приемника и
автоматически разрешает обратный трафик даже для сложны протоколов, таких как H323. Например, если трафик из
зоны Private в зону Internet, маршрутизатор поддерживает информацию о соединениях или сеансах для TCP и UDP
трафика. Поэтому маршрутизатор разрешает обратный трафик из зоны Internet в зону Private в качестве ответов на
запросы соединений из Private в Internet.
Примеры policy-map
ZBF предлагает опцию логирования для трафика, который отбрасывается или инспектируется.
ZBF не поддерживает редактирование своих структур на лету, таких как policy-map, class-map и
parameter-map. Для того, чтобы внести изменения в класс определяющий трафик или действие для
классифицированного трафика необходимо скопировать существующую ZBF-структуру команда в
текстовый редактор, полностью удалить конфигурацию ZBF с маршрутизатора, сделать необходимые
изменения в скопированной конфигурации и повторно залить на маршрутизатор.
Применение политик межсетевого экранирования
Для двух зон можно применить только одну service policy в одном направлении и, соответственно, одну
в обратном направлении. Если действие с трафиком определено как inspect, то запросы будут
контролироваться таким образом, что в обратную сторону будут разрешены ответы на эти запросы. Если
действие определено как пропускать трафик, то контролироваться ничего не будет и ответы на этот
трафик проходить не будут (если это не разрешено политикой между зонами в обратную сторону).
Примеры:
Политики, которые могут быть применены относительно self-зоны маршрутизатора имеют некоторые
ограничения.
Во-первых, динамическая инспекция для трафика, который сгенерирован самим маршрутизатором,
ограничена протоколами TCP, UDP, ICMP и H323. Инспекция протоколов на уровне приложений (HTTP,
TELNET и пр.) не поддерживается.
Во-вторых, ограничение по количеству сессий и по полосе также не может быть сконфигурировано. Если
вы используете, например, протоколы маршрутизации OSPF, EIGRP, то они должны быть явно
разрешены – т.к. инспекция этих протоколов не поддерживается.
interface Ethernet0/0
Конфигурация R2:
hostname R2
interface Loopback0
ip address 2.2.2.2 255.255.255.0
!
interface Ethernet0/0
ip address 24.234.12.2 255.255.255.0
zone-member security PRIVATE
interface Ethernet0/1
ip address 24.234.23.2 255.255.255.0
zone-member security PRIVATE
Интерфейсы Ethernet0/0 и Ethernet0/1 поместим в зону PRIVATE, а интерфейс Serial1/0.1 в зону PUBLIC.
Между зонами PRIVATE и PUBCLIC осуществляется инспекция всего TCP и UDP трафика. Инспекция ICMP
трафика не осуществляется. Конфигурация динамической маршрутизации опущена, равно как и
конфигурация остальных маршрутизаторов, так как для данного примера она не существенна.
Видим, что мы без проблем создаём TCP соединения через маршрутизатор R2, но трафик ICMP не
проходит. Команда show policy-map type inspect zone-pair показывает статистику работы ZBF в
реальном времени.
Так же можно посмотреть текущие сессии установленные через маршрутизатор. Например в
приведенном выше выводе видим установленное TCP TELNET соединение с R1 в строну R5. Так как ICMP
трафик у нас не классифицируется , он попадает по умолчанию попадает в class class-default и
отбрасывается.
Выполним для ICMP Трафика инспектирование, но ограничим его движение между зонами PRIVATE и
PUBLIC со скоростью 8K.
Мы видим, что при отсылке 100 пакетов, 9 из них были отпрошены на R2 – это пакеты которые что не
влезли в указанную полосу. Выполним еще раз команду show policy-map type inspect zone-pair
PRIVATE_PUBLIC sessions на R2:
Здесь мы видим как работал наш ограничитель для ICMP трафика. В поле conformed указано что 192
пакета попали в 8Kbit-полосу. Но мы посылали 100 пакетов , а откуда взялась цифра 192?
Все просто. Мы посылали 100 ICMP Echo Request пакетов в строну R5, на каждый ICMP Request,
маршрутизатор R5 отвечал ICMP Echo Reply. Если бы ICMP трафик не был ограничен 8Kbit полосой, то R2
посчитал бы 200 пакетов, которые прошли через него – 100 ICMP запросов и 100 ICMP ответов. Но так
как есть ограничения для этого трафика, то 9 пакетов были убиты - exceeded 9, и до R2 дошли только 91
запрос, что дало 91 ответ. Итого 182. Но перед тем как делать 100-пакетный тест, мы сделали
стандартный 5-пакетный ICMP тест, который полностью попал в полосу.
Мы можем включить журналирование, чтобы видеть создание и завершение сессии для трафика,
проходящего через маршрутизатор. Это делается с помощью команды parameter-map
audit-trail on
В данном примере, поведение инспектирования TCP и UDP трафика было изменено применением
параметра, такого как логирование (audit-trail on). Теперь когда создаются и завершаются сесии, R2
будет логировать эти события и выдавать сообщения:
В первом сообщении указывается что произошло создание TCP сессии от R1 в строну R5 на порт 23. При
этом указывается зонная пара PRIVATE_PUBLIC и класс трафика (TCP_UDP) под который попало данное
соединение.
Во втором сообщении указано о завершении этой сессии и дана информация о количестве байт,
переданных в одну и в другую строну.
Для настройки межсетевого экрана на маршрутизаторе было решено применить Zone Based
Firewall.
Настройка ZBF.
Таких классов можно создавать несколько и применять к разным политикам, назначенные на разные
зоны безопасности.
Дополнительные команды
Если вам необходимо открыть свой порт, который не прописан по умолчанию в IOS, то вы
его можете создать сами. Для этого вводим:
Cisco IOS это довольно многофункциональна платформа, а не только ОС для роутера, на ней можно
развернуть и IP-телефонию и полноценный Firewall. Первое я уже где-то описывал, а со вторым не
сталкивался, но этот момент не заставил себя ждать. Итак, есть такая интересная незатронутая тема,
как Zone-based firewall (ZBF).
В основе всей этой концепции лежит разбиение сети на отдельные участки или зоны. Самый яркий
пример, это когда у нас в сети есть обычные пользователи, есть общедоступные сервера и, разумеется,
выход в интернет. Само собою понятно, что извне не должно быть доступа к хостам пользователей, но
должен быть доступ к серверам ну и имеется еще ряд нюансов. Это все можно сделать с помощью
списков доступа (ACL), но как-то это все будет слишком уж коряво выглядеть и так же работать.
Таким образом, чтобы реализовать ZBF, надо первым делом разделить сеть на зоны, в нашем случае
это:
- внутренняя, где расположены пользователи (inside)
После создания зон нам необходимо будет привязать к ним определенные интерфейсы на роутере.
Теперь правилами доступа мы будем рулить между зонами, а не между интерфейсами. При этом
необходимо указать и настроить политики доступа из одной зоны в другую. На роутере можно будет
использовать инспекцию трафика, так что инициировать соединение можно будет с одной зоны (если
инициирование разрешено из этой зоны) и нельзя будет с другой. В нашем случае, пользователи могут
инициировать соединение с серверами в dmz и другими серверами в Интернете. Сервера из dmz, в
свою очередь не могут инициировать соединение в хостами во внутренней сети, так же как и сервера в
Интернете. Если же необходимо разрешить определенный трафик из dmz, то необходимо указать
отдельные разрешающие правила. Точно так же можно указать отдельные правила для соединения
извне с серверами в зоне dmz. Например, разрешить только HTTP соединения и т.д. Необходимо
учитывать, что эти правила работают только в одну сторону и только между двумя зонами. В любом
случае, можно разрешить трафик и с другой стороны.
По умолчанию, между интерфейсами в одной зоне разрешен весь трафик, между интерфейсами в
разных зонах – трафик запрещен. Трафик, который генерируется маршрутизатором, или предназначен
ему, по-умолчанию разрешен.
- class-map определяет, какой именно трафик будет инспектироваться (проходить между зонами, также
проходить будут ответы на этот трафик). Фильтроваться трафик может по критериям c 4 по 7 уровней
модели OSI (т.е. начиная от IP-адреса и заканчивая трафиком определенного приложения).
Определяется трафик списками доступа, значением CoS, типом протокола и еще рядом других
параметров. Критериев может присутствовать одновременно несколько. При этом можно указать,
должен ли трафик попадать под все эти критерии (match-all) или под любой из них (match-any). Таким
образом, основная задача class-map это отфильтровать необходимый тип трафика.
- policy-map определяет действие, которое будет произведено с отфильтрованным с помощью class-
map трафиком. Действия могут быть следующие: инспектировать (разрешать, при этом
контролировать поток), разрешать, запрещать, записывать в лог.
В одном policy-map может быть указано несколько class-map и к каждой из них может применяться
отдельное действие. Если class map-ов указано несколько то сравнение будет проходить от первого до
последнего правила последовательно до первого совпадения. Если трафик не попадает ни под одно
правило, то он запрещается.
- service policies через него мы привязываем policy-map к определенной паре зон в одном направлении.
Для двух зон можно применить только одну service policy в одном направлении и, соответственно,
одну в обратном направлении. Если действие с трафиком определено как inspect, то запросы будут
контролироваться таким образом, что в обратную сторону будут разрешены ответы на эти запросы.
Если действие определено как пропускать трафик, то контролироваться ничего не будет и ответы на
этот трафик проходить не будут (если это не разрешено политикой между зонами в обратную
сторону).
Теперь перейдем к самому интересному, к настройке. Посмотрим еще раз на рисунок, эта топология
будет взята за основу построения нашего файрвола. В левой стороне находится внутренняя сеть, в
нижней части показаны два сервера (ubuntu – web-сервер, debian – другой сервер, предназначение
которого нам неизвестно), в правой части выход в Интернет. Я пропущу настройки интерфейсов на
маршрутизаторе и прочие мелочи, это уже никому не интересно, адресами интерфейсов будут первые
доступные адреса в указанных подсетях.
Итак, с зонами мы определились. Теперь попробуем настроить трафик между зонами inside и outside
Тут все более-менее просто и понятно, создаем список доступа ACL
Теперь создадим class-map, где определим трафик как попадающий под наш список доступа. Как видно
именно тут ключевым словом match-any указывается необходимо ли попадание под все критерии
описанные в class-map (match-all) или под любой из них.
Теперь создадим policy-map и определим в нем необходимое действие с трафиком (inspect) а также
укажем использование class-map для фильтрования. У меня они оба называются From_Inside, но эти
имена могут отличаться, даже лучше, когда они отличаются.
ZBF-Router(config)#policy-map type ?
access-control access-control specific policy-map
control Configure a control policy policy-map
inspect Configure CBAC Policy Map
logging Control-plane packet logging
port-filter Control-plane tcp/udp port filtering
queue-threshold Control-plane protocol queue limiting
ZBF-Router(config)#policy-map type inspect ?
WORD policy-map name
http Configure CBAC policy-map for HTTP protocol
im Configure CBAC policy-map for IM protocol
imap Configure CBAC policy-map for IMAP protocol
p2p Configure CBAC policy-map for P2P protocols
pop3 Configure CBAC policy-map for POP3 protocol
smtp Configure CBAC policy-map for SMTP protocol
sunrpc Configure CBAC policy-map for RPC protocol
ZBF-Router(config)#policy-map type inspect From_Inside
ZBF-Router(config-pmap)#class type inspect From_Inside
ZBF-Router(config-pmap-c)#?
Policy-map class configuration commands:
drop Drop the packet
exit Exit from class action configuration mode
inspect Context-based Access Control Engine
no Negate or set default values of a command
pass Pass the packet
police Police
service-policy Deep Packet Inspection Engine
urlfilter URL Filtering Engine
ZBF-Router(config-pmap-c)#inspect ?
ZBF-Router(config-pmap-c)#inspect
%No specific protocol configured in class From_Inside for inspection. All
protocols will be inspected
ZBF-Router(config-pmap-c)#
ZBF-Router(config-pmap-c)#exit
ZBF-Router(config-pmap)#exit
ZBF-Router(config)#
Теперь разрешаем трафик между двумя зонами, который определен в service-policy From_Inside.
ZBF-Router(config)#int fa2/0
ZBF-Router(config-if)#zone-member security inside
ZBF-Router(config-if)#exit
ZBF-Router(config)#int fa0/0
ZBF-Router(config-if)#zone-member security outside
ZBF-Router(config-if)#exit
ZBF-Router(config)#
Доступа к серверам в dmz из сети пользователей не будет на данном этапе потому что не указана
политика доступа между зонами. Давайте разрешим доступ к серверам в dmz по следующим
критериям:
- доступ из пользовательской сети (и только от этих адресов) по протоколам ssh, telnet и http.
Создаем Class-Map для пары inside-dmz (укажем их тут несколько для разнообразия)
Что ж, доступ есть из внутренней сети есть. А теперь интересный момент, мы не разрешили
протокол ICMP, поэтому доступ к серверу через браузер и через ssh c telnet-ом будет, а пинг
проходить не будет. Такие дела.
Повторим еще раз пройденный материал, разрешим извне доступ к серверам по протоколу http.
Тут такая же история, есть доступ через браузер, но нет доступа через другие протоколы, в том
числе ICMP.
Замечу, что сервера при этом не могут вообще никуда инициировать соединения кроме как между
собой. При этом они могут отвечать на соединения извне. Спокойно можно из внутренней сети зайти
по ssh для администрирования сервера.
На последок добавлю что, zone based firewall совсем не мешает использовать NAT. В нашем случае
пользователи из внутренней сети выходят в Интернет именно используя NAT. Конфигурация довольно
нехитрая и выглядит таким образом:
1. Определяем зоны
2. Определяем пары зон
3. Настраиваем class-map, где указываем трафик, к которому будет применяться
политика
4. Настраиваем политику policy-map, в которой определяем действия с трафиком,
определенным в class-map
5. Применяем политику на пары зон
6. Назначаем зоны на интерфейсы
Рассмотрим, как можно использовать данный механизм для защиты от Ddos атак.
В данном примере у нас есть 2 интерфейса, которые смотрят внутрь сети,
и 2 интерфейса, которые смотрят на аплинки.
Назовем зону, которую вешаем на внешние интерфейсы PUBLIC
Назовем зону, которую вешаем на внутренние интерфейсы PRIVAT
(только не забываем, что на интерфейсы мы вешаем их в последнюю очередь)
1. Определяем зоны
Заходим в режим конфигурации на cisco и создаем зоны
conf t
(config)# zone security PRIVAT
(config)# zone security PUBLIC
conf t
(config)# zone-pair security PRI-TO-PUB source PRIVAT destination PUBLIC
(config)# zone-pair security PUB-TO-PRI source PUBLIC destination PRIVAT
3. Настраиваем class-map
В моем примере я отдельно инспектирую трафик udp и tcp (что тоже необязательно).
Я буду использовать правило match-all (логическое И), поэтому для каждого ip адреса,
который мы хотим инспектировать (защищать от Ddos),
создается свой access-list и всего class-map будет 4 штуки для udp и tcp, для
каждого направления.
Адреса внутри моей сети внешние.
Пусть адрес, который я хочу защитить внутри моей сети будет 8.8.8.8
Создаем 2 access-list (2 направления)
conf t
(config)# access-list 104 permit ip host 8.8.8.8 any
(config)# access-list 105 permit ip any host 8.8.8.8
zone self
Description: System defined zone
zone PRIVAT
Member Interfaces:
TenGigabitEthernet0/1/0
TenGigabitEthernet0/2/0
zone PUBLIC
Member Interfaces:
TenGigabitEthernet0/0/0.1
TenGigabitEthernet0/0/0.2
#sh zone-pair security
Zone-pair name PRI-TO-PUB
Source-Zone PRIVAT Destination-Zone PUBLIC
service-policy INSPECT_PRI
Zone-pair name PUB-TO-PRI
Source-Zone PUBLIC Destination-Zone PRIVAT
service-policy INSPECT_PUB
#sh class-map type inspect
Class Map type inspect match-all INSPECT_8.8.8.8_tcp_PRI (id 1)
Zone-pair: PUB-TO-PRI
Service-policy inspect : INSPECT_PUB
Class-map: INSPECT_8.8.8.8_tcp_PUB (match-all)
Match: access-group 105
Match: protocol tcp
Inspect
Packet inspection statistics [process switch:fast switch]
tcp packets: [0:5463]