Фаервол, брандмауэр, межсетевой экран — это некая функция, которая определяет пропускать пакет или не пропускать пакет, основываясь на его содержимом. В этой статье разберемся, как фаервол может быть реализован с аппаратной точки зрения.

Ещё бывает «Reject», но это довольно редкое и специфичное действие
Ещё бывает «Reject», но это довольно редкое и специфичное действие

Сначала перечислим какие бывают типы устройств, который выполняют фильтрацию пакетов:

  • SOHO-роутеры. В SOHO-роутерах внутри однокристальная система (System-on-Chip). Они используют операционную систему Linux и в качестве фильтрации IPtables. Это самое распространенное решение. Такие устройства встречаются везде, в каждом доме. К этой категории относятся устройства типа D-link, MikroTik.

  • Тазики. Это серверы, PC на ОС Linux, BSD и др. Такого типа фаерволы обычно реализуют вместе с функцией маршрутизации. Здесь мощнее процессор и шины, поэтому такие системы способны прокачивать десятки гигабит трафика.

  • Фаерволы на базе offload-систем. Например, Intel DPDK или BSD Netmap. Они переносят процессы на сетевые карты. Благодаря этому достигается высокая производительность — до нескольких сотен гигабит в секунду. 

  • SmartNIC. Это специализированные сетевые карты, которые обрабатывают трафик самостоятельно и не грузят CPU. Они довольно быстрые, но их нужно программировать вручную. Они используются некоторыми вендорами и системами виртуализации.

  • Платформы NPU-based (Network Processing Unit). Это может быть Fortinet FortiGate, Huawei серии AR. Эти системы могут прокачивать гораздо больше трафика в сравнении с x86. В этой категории есть небольшие решения для маленького офиса и есть решения для дата-центров. Как правило, NPU-based из коробки позволяют реализовать очень много возможностей, например дополнительные фильтрации и инспекции. 

  • ASICs-based фаерволы. Это, например, коммутаторы для дата-центров типа Broadcom. Они перекачивают терабиты трафика. Но нужно помнить, что на широкой полосе фаервол может стать узким горлышком из-за TCAM: память эта дорогая, на устройстве её не так много, как хотелось бы, поэтому если вам нужно, например, десять тысяч правил (или сто тысяч и более), использовать как фаервол его не получится. 

Все эти коробки можно назвать фаерволами, потому что это не предназначение железки, а одна из функций. Кроме того иногда вендоры производят комбайны, которые позволяют из одного типа коробок сделать другой. Типичный пример — Cisco 6500, в которую вставляется сервисный модуль и он превращает устройство в фаервол с большими возможностями. А ещё Juniper MX или SRX, который может быть не только фаерволом, но и маршрутизатором и коммутатором.

Для чего нужна фильтрация пакетов

Первое, что подразумевается, когда мы говорим про фаерволы — это фильтрация на границе сети и автономной системы. Почему она нужна? Интернет злой, в нём полно нехороших товарищей, которые пытаются вас сломать. Причем сломать не с точки зрения информационной безопасности, а например переиспользовать ваши IP-адреса или при помощи подделки пакетов влезть в вашу сеть, используя ваши IP-адреса. Поэтому на границах сети надо отрезать все, что не касается вашей системы. 

Если вы сервис-провайдер, то вы явно не хотите, чтобы к вам с внешних стыков прилетел трафик, у которого source-адрес совпадает с системой адресов вашей автономной системы. Если вы оператор связи, вы не хотите получать с портов трафик, у которого source и destination в серых сетях. 

Некоторые ddos-атаки можно фильтровать на границе. Типичный пример — это история когда у вас есть некая зона, где живут ваши публичные сервисы. Вы точно знаете на каких адресах в этой зоне живут сервисы, которые работают только по протоколу TCP, и те сервисы, которые работают по протоколу UDP. И на границе можете довольно гранулярно отрезать весь UDP-трафик, оставив TCP only. 

Для того чтобы эффективно защищаться от ddos вам нужно сделать так, чтобы ваши линки не были перегружены. Поэтому в некоторых случаях ACL (списки правил) нужно навешивать не на вашем оборудовании, а по ту сторону линка, например, у апстрима. Почти все апстирмы снисходительно относятся к этому и позволяют навесить ACL, особенно если вас пытаются завалить полосой.

Можно использовать и оборудование, например, ASIC-коммутаторы. Если правил фильтрации на границе нужно немного, и хотим отрезать только самые банальные вещи, то коммутатор, в который вы собираете внешние пиринги вполне себе может справиться с этой задачей. Если на границе у вас стоит более мощная железка, на неё тоже можно навесить правила и всё будет неплохо работать. Вы получите чистый трафик уже внутри вашей сети и дальше его нужно лишь дофильтровывать. То есть сама по себе граница сети не является точкой фильтрации, но основной мусор надо вычищать там.

Дофильтрафия внутри сети

Когда мы строим сеть нам нужно понимать, как мы будем разбивать сервисы внутри сети. Это не значит, что нужен обязательно фаервол. Мы можем разделять сервисы друг от друга с помощью виртуализации: 

  • Vlan (или Vxlan) — технология создание логических сетей в физической сети.

  • VRF (Virtual routing and forwarding) — технология создания на базе одного физического маршрутизатора нескольких виртуальных.

  • L3VPN (Layer 3 Virtual Private Network) — технология создания виртуальных частных сетей (VPN) на третьем уровне модели OSI (сетевом уровне).

Не особо важно, как мы будем разделять, но, например, можно отделить сеть одного конкретного проекта, замапить его в нужный vlan, его ассоциировать с нужным VRF и дальше уже маршрутизировать по сети с доверенной сетью без дополнительных правил фильтрации. Не выводим трафик на фаервол и делаем минимальную фильтрацию на коммутаторах или маршрутизаторах. 

Пример: есть Ceph-кластер — это объектно-ориентированное хранилище. Оно может быть распределённое, находиться в серверах разных дата-центров. Допустим, мы не хотим, чтобы у нас между разными сетями трафик фильтровался потому что это будет давать дополнительный delay. 

Мы сделаем чистую маршрутизацию для этих сетей в рамках этого VRF (как один, так и несколько). Если трафик между VRF не доверенный и его нужно проверить, то мы можем отправить его либо на программный, либо на аппаратный фаерволы и сделать там какую-либо инспекцию. То есть так называемый service mesh, когда мы трафик заворачиваем дефолтом или спецификом на левый интерфейс фаервола и потом отдаем его после фильтрации на правый интерфейс фаервола — на outside. Дальше этот трафик маршрутизируется по заранее заданным правилам.

Что получаем? Это случай, когда мы именно доверяем устройствам какой-либо группы фильтрации и просто трафик разделяем и маршрутизируем. На нем не нужно тратить какие-то дополнительные ресурсы. Мы точно знаем, что трафик между сетью А и сетью B маршрутизируется и больше никуда не выходит. И там и там есть доверенное устройство, на которых есть какие-то клиенты или host-based фаервол и этого достаточно. Это снижает задержки.

Нужно ли настраивать фаервол на конечной ноде?

Зачем вообще может понадобиться host-based фаервол? Затем, что каждый фаервол является бутылочным горлышком. Поэтому в дата-центрах, где идут терабиты трафика, единственным способом наращивать полосу остается host-based фаервол, то есть фильтрация на стороне хоста. Но это не так просто сделать. Потому что стоимость даже host-based фаервола не нулевая, даже если вы туда выгружаете только те правила, которые специфичны только этому хосту. Кроме того, если вы хотите специфицировать roll set фаервола для каждого сервера, нужно придумать для этого механику распространения и проверку его корректности.

Какие ещё есть подходы к этой проблеме? Есть концепция Zero trust network, где каждый узел в сети считается потенциальной угрозой. Поэтому конечную фильтрацию выполняет не модуль IPTables, а непосредственно сервис. То есть вы можете установить TCP-соединение с сервисом, но дальше будет аутентификация. По сути всю тонкую фильтрацию делегируем приложению, которое проверяет валидность соединения не по IP, а по идентифицируемому фактору внутри соединения: сертификат, токен и т.п.

В конечно счёте host-based на конечных устройствах скорее нужен. Сейчас фаервол на эндпоинте — это ещё и средство защиты от фишинга и спуфинга. 

Типы фаерволов и их функционал

L3/L4 пакетные фильтры — stateless TCAM-based 

TCAM (Ternary Content-Addressable Memory) — это технология для быстрого поиска и фильтрации данных в сетевых устройствах, которая используется в фаервол-системах. Она представляет собой массив ячеек памяти, каждый из которых может хранить три значения: 0, 1 или 2. Это позволяет быстро определять, соответствует ли пакет заданным критериям и правилам.

У неё есть две разновидности: 

  1. Stateless TCAM - это тип TCAM без состояния. То есть когда мы не запоминаем тот самый state.

  2. Stateful TCAM — это когда мы запоминаем информацию из предыдущих запросов и держим её в отдельной таблице. Это ускоряет поиск.

Технология TCAM быстрая на read, но у нее есть минусы: высокая стоимость, необходимость в охлаждении и её долго перепрограммировать. Однако эта технология может применяться практически на всех устройствах сетевого уровня: от l2 коммутаторов до фаерволов, маршрутизаторов.

Full-software processing L3/L4/dumb DPI — iptables/nftables/ipfw/pf/etc

Программные решения можно запускать практически на любом x86. Их слабое место — высокая нагрузка на CPU. Разработчики стремятся писать такие фаероволы, которые быстро работают и едят меньше ресурсов. Потому что для любого фаервола, в том числе host-based, очень важно, чтобы он не съедал большую часть мощности процессора. 

DPI (Deep Packet Inspection) и IPS (Intrusion prevention system)

DPI — это технология, которая позволяет анализировать содержимое пакетов данных: заголовки, откуда и куда.

IPS (Intrusion Prevention System) — это система, которая предназначена для предотвращения вторжения в компьютерную систему.

IPS отличается от DPI тем, что имеет дополнительные условия. Например, был трафик 30 000 TCP-соединений на какой-то destination, а потом резко возрос в три раза, при этом в течение недели по статистике такого никогда не было. Соответственно, фаервол определяет это как какую-то аномалию и срезает трафик, которого никогда не было.

Всего у IPS есть два режима работы:

  1. Фильтровать по статистическим данным (описана в примере).

  2. Фильтровать по сигнатурам. Фаервол проверяет пакеты на наличие одной из сигнатур. Если есть — блокирует, если не соответствует — пропускает.

Заключение

Фаервол — это не устройство само по себе, а функция, которая проверяет входящие и исходящие пакеты данных и блокирует те, которые не соответствуют правилам. Фильтрация нужна, чтобы защититься от DDos-атак, перехватов трафика и использования уязвимостей. Она может быть реализована по-разному, в зависимости от масштабов сети, трафика и задач. Фаерволы нужны на разных узлах: на границах сети, на апстриме, на конечных устройствах. Но при построении защиты сетевому инженеру необходимо искать баланс между степенью защищенности и ресурсами, которые потребуются на эту фильтрацию.

Статья подготовлена по материалам подкаста «linkmeup». Его создатели сделали собственный образовательный курс в Слёрме. Если вы хотите больше узнать про устройство сетей и научиться с ними работать на продвинутом уровне, приходите на поток «Сети в Linux».

На курсе вы:

  • Получите представление о том, как устроена сеть в Linux.

  • Познакомитесь с протоколами и технологиями, на которых строятся современные сети. В том числе с IPv6.

  • Научитесь пользоваться инструментами для настройки сетевого стека в Linux и диагностики его работы.

В курсе 30% теории и 70% практики, АМА-сессии с экспертами и ревью домашних заданий. В качестве выпускной работы нужно будет собрать или починить виртуальную лабораторию

Старт потока в сентябре. Набор уже открыт. Ознакомиться с программой и оставить заявку можно на нашем сайте.

Комментарии (2)


  1. dinisoft
    03.08.2023 17:07
    +1

    Местами не совсем корректно, к сожалению. :(

    Нынешние soho умеют offload-ить пакеты, т.е. первый пакет из сессии попадает на обработку ядром, далее сессия метаться и остальные пакеты пролетают уже мимо обработки проца. Т.о. захудалый проц на 200-300MHz переваривает 1GBit/s траффика с загрузкой в 2-3%.


    1. alitenicole Автор
      03.08.2023 17:07

      спасибо! учтём, изучим)