понедельник, 14 октября 2013 г.

основы межсетевого экранирования в Cisco IOS

Не претендуя на полноту изложения, попробую описать технологии, которыми можно воспользоваться для защиты периметра.

Рассматривать будем IOS с firewall feature set. Этот набор возможностей, как правило, есть во всех IOSах (в которых есть шифрование), кроме самого базового.

Итак, пусть на границе нашей сети стоит машрутизатор cisco, который и призван обеспечивать безопасность наших внутренних ресурсов.

Защищаем трафик.

Первым делом имеет смысл порезать ненужный трафик самым простым и грубым способом — списками доступа.

Списки доступа (ACL, Access Control List) для протокола IP — на маршрутизаторах cisco бывают стандартные (проверяют только ip адрес источника и разрешают или запрещают прохождение трафика по этому параметру) и расширенные (проверяют адреса источника и назначения, протокол передачи, порты источника и назначения, а также другие поля заголовков IP, TCP, UDP и других протоколов).

Порядок строк в списке доступа очень важен, т.к. проверяются эти строки по порядку и как только будет найдено совпадение, пакет или будет пропущен или будет уничтожен

В конце любого ACL непременно стоит невидимое «запретить все», поэтому мимо ACL пакет не проскользнёт.

Списки доступа бывают нумерованные и поименованные. Рекомендую использовать поименованные со смысловыми названиями.

Примеры:
access-list 1 permit 192.168.1.0 0.0.0.255

access-list 101 permit ip any 192.168.1.0 0.0.0.255

ip access-list standard TEST
permit host 1.2.3.4

ip access-list extended TEST2
permit tcp any 10.1.1.0 0.0.0.255 eq http
permit tcp any 10.1.1.0 0.0.0.255 eq https
permit udp any 10.1.1.0 0.0.0.255 eq 53
permit ip any 10.1.1.0 0.0.0.255 dscp cs5

Списки доступа — это шаблоны, которые можно использовать как для фильтрации трафика, так и как критерий отбора для других технологий. Например, списками доступа определяется «интересный» трафик для шифрования, для NAT, для QoS и т.д.

Сам по себе список доступа ничего не делает, пока не будет применен для какой либо технологии. Например, для фильтрации трафика на интерфейсе на вход или на выход ACL применяется командой

ip access-group <название ACL> {in|out}

Традиционно рекомендуется на внешний интерфейс вешать так называемый антиспуфинговый ACL, т.е. предотвращающий атаки с подделанных адресов.

Пример:
ip access-list ex ANTISPOOFING
deny ip host 0.0.0.0 any
deny ip 10.0.0.0 0.255.255.255 any
deny ip 172.16.0.0 0.15.255.255 any
deny ip 192.168.0.0 0.0.255.255 any
deny ip host 255.255.255.255 any
deny ip 224.0.0.0 15.255.255.255 any
permit ip any any

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

Поэтому запрет трафика от частных сетей (10, 172, 192) может нарушить работу туннеля.

Итак, порезали ненужный трафик. Пришло время заняться межсетевым экранированием. Надо обеспечить внутренних пользователей Интернетом, но при этом не пропустить снаружи внутрь несанкционированные подключения. Маршруизаторы cisco умеют быть межсетевыми экранами с сохранением сессий (stateful firewall).

Если у вас задачи простые, нет выделенных зон безопасности, нет анонса сервисов наружу, то проще всего воспользоваться базовым межсетевым экраном.

Для этого надо создать правило ip inspect, описать те протоколы, которые вы хотите обрабатывать и запоминать сессии, привесить это правило на интерфейс и… всё :) Маршрутизатор будет запоминать те сессии, которые были инициированы изнутри, и пропускать снаружи только те пакеты, которые «заказаны». Если же пришедший пакет не соответствует никакой сессии, то дальше маршрутизатор проверяет ACL, висящий на интерфейсе, на предмет наличия разрешающего правила для этого пакета.

Пример конфига:

Ro(config)# ip inspect name FW tcp
Ro(config)# ip inspect name FW udp
Ro(config)# ip inspect name FW icmp
Ro(config)# ip inspect name FW ftp
Ro(config)# ip inspect name FW sip

TCP — слушает ТСР сессии.
UDP — слушает UDР сессии.
остальные строки включают прослушку и обработку соответствующего протокола, т.к. его работа сложнее, чем просто пропуск

ответного пакета TCP/UDP сессии. Например, протокол FTP имеет один служебный канал, по которому идёт согласование и аутентификация, а данные передаются совсем по другому каналу, причём сессия пытается инициироваться снаружи и маршрутизатор её не пропустит. А если включить инспектирование, маршрутизатор подслушает служебную сессию, узнает, на каких портах сервер и клиент договорились слать данные и эту сессию тоже поместит в список разрешенных.

Пусть f0/0 — внешний, а f0/1 — внутренний интерфейс

Ro(config)# int f0/1
Ro(config-if)# ip inspect FW in


Правило вешается на вход внутреннего или выход внешнего интерфейса, т.е. в направлении на ВЫХОД трафика наружу.

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

Ro(config)# ip access-l ex STRICT
Ro(config-ex-nacl)# deny ip any any

Ro(config)# int f0/0
Ro(config-if)# ip access-g STRICT in

В приведенном варианта снаружи пройдут только те пакеты, которые были запрошены изнутри.

Есть тонкость: ACL STRICT попутно запретит весь трафик на сам роутер, т.к. по умолчанию трафик роутера не попадает в инспектируемый. Чтобы инспектировать трафик маршрутизатора надо добавить

Ro(config)# ip inspect name FW router

Если же задачи сложные, надо создавать различные зоны безопасности (демилитаризованные зоны, DMZ), гибко настраивать работу протоколов между этих зон, то лучше воспользоваться так называемым, зональным межсетевым экраном (zone-based firewall). Описывать его здесь не буду, ибо это уже не для молодого бойца :)

Чем ещё можно защитить трафик, проходящий через маршрутизатор?

системой предотвращения вторжений (IPS), промежуточной аутентификацией (cut-through proxy), оценкой протоколов (технология ip nbar), созданием очередей (QoS).

Расскажу о них подробнее. Позже :)

Сергей Фёдоров


Отсюда: habrahabr.ru/post/60492/

Комментариев нет:

Отправить комментарий