Введение в межсетевые экраны

МЭ — обработка сетевого трафика (вообще говоря, на всех уровнях):

МЭ интерфейсного уровня

в Linux:

TODO пример, если останется время

МЭ сетевого и транспортного уровней

Обычно оба уровня, потому что задачи МЭ общие.

В Linux:

Попробуем nftables.

Принцип: https://wiki.nftables.org/wiki-nftables/index.php/Netfilter_hooks:

../../LinuxNetwork2022/10_FireWalls/NFTables_Hooks.svg

Правила, хуки, цепочки, таблицы

../../LinuxNetwork2022/10_FireWalls/NFTables_Flow.svg

  1. Проходя по стрелочкам, пакет, в зависимости от принятия решений (обозначены ромбами) проходит контрольные точки (обозначены зелёными боксами и для уровня TCP/IP называютюся «Hook», а для интерфейсного — «Bridge»)
    • Кто придумал такую терминологию, был большой оригинал ☹

  2. В процессе прохождения пакет обрабатывается правилами

  3. Однотипные правила, решающие общую подзадачу, объединяются в цепочки

    • Типы цепочек: nat (преобразование), filter (фильтрация), route (перенаправление)

    • Цепочка может быть «закреплена» на какой-нибудь контрольной точке (или «зацеплена за крюк») — это базовая цепочка.
    • Проходя через контрольную точку, пакет «перепрыгивает» на базовую цепочку: по очереди обрабатывается правилами из неё.
    • Если при контрольной точке имеется несколько цепочек, сравнивается их приоритет,
    • Пакет из цепочки может не выйти — если его выбросят или попросят уйти (goto) на конкретную цепочку, указанную в правиле
    • В противном случае пакет доходит до конца цепочки (или правила «покинуть цепочку»), и обработка пакета продолжается в том месте, откуда он перепрыгнул на неё.
      • …например, переход в следующую базовую цепочку или по стрелочке на следующую контрольную точку
  4. Цепочки и данные к ним группируются в таблицы — наборы правил для решения определённых пользовательских задач. Единственная роль таблицы, помимо информационной — её можно целиком удалить или заменить.

Имена таблиц и цепочек могут быть любыми.

Типы данных

В справочнике:

Работа nftables — это интерпретация некоторого байт-кода, в который компилируются правила

Наборы данных можно изменять без изменения правил в цепочке (а ещё в них логарифмический поиск)

Кстати, есть ещё «ARP Level» — потому что он межуровневый и там свои задачи.

Высокоуровневые оболочки

Это необъятная тема, со спецификой каждого инструмента

Использование NFTables

Площадка: client[12]routersrv

Примеры из Арчевики

TODO примеры (пока смотрим в Арче)

Для того, чтобы настройки стали постоянными, их надо складывать в /etc/nftables/nftables.nft, или imlude-ить оттуда. Можно скопипастить выдачу nft list ruleset или её фрагменты.

МЭ прикладного уровня

Это какого? ☺

Д/З

Образ не изменился

Задание 10

Воспроизвести (модифицированный) пример из лекции:

  1. clientrouterserver

    • «выход в интернет» должен работать на всех трёх машинах через server

      • DNS разрешается настраивать вручную при помощи 8.8.8.8 в /etc/resolv.conf

      • Все сетевые настройки выполняются перманентно с помощью sytemd-networkd

        • (маршрут по умолчанию, маршрут с srv на client и обратно)

      • SNAT на srv должен быть настроен перманентно с помощью /etc/nftables/nftables.nft

    • Настроить на router перманентно с помощью /etc/nftables/nftables.nft (руками вводить не надо):

      • Проброс порта 2222 → client:22 (подключение с server к router на порт 2222 должно приводить к подключению к client на 22)

      • Ограничение по количеству входящих TCP-соединений к server по ssh за определённый период времени

        • (см. пример «4.9 Динамическая блокировка»)

        • (см. также пример выше, он почти такой как надо, только на самом хосте, а нама недо на router ⇒ на другой контрольной точке)

        • <!> Цепочка в этом примере — свободная, а нам надо её прикрепить к нужной контрольной точке, как в предыдущем примере

    • <!> Настройка в отчёт не входит.

  2. Отчёт (вместо курсива могут быть числа, IP-адреса и т. п.):

    1. report 10 server:

      • networkctl status eth0

      • networkctl status eth1

      • nft list ruleset

      • ssh router -p 2222 (должен привести к входу на client!)

        • выполнить там ip a

    2. report 10 router:

      • networkctl status eth1

      • networkctl status eth2

      • nft list ruleset

      • date | netcat ya.ru 80 (должно показать 414)

    3. report 10 client:

      • date | netcat ya.ru 80 (должно показать 414)

      • for i in $(seq число ); do date | netcat server 22; done

        • Должен отработать в рамках ограничения (сколько положено по квоте), а дальше зависнуть
    4. router (продолжение)

      • Посмотреть множество нарушителей квоты по подключениям (там должен быть client)

    5. Остановить зависшие команды на client и server

  3. Три отчёта (названия сохранить, должно быть: report.10.server, report.10.router и report.10.client) переслать одним письмом в качестве приложений на uneexlectures@cs.msu.ru

LecturesCMC/LinuxNetwork2023/10_FireWalls (последним исправлял пользователь FrBrGeorge 2023-06-27 19:52:28)