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

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

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

в Linux:

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

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

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

В Linux:

Попробуем nftables.

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

NFTables_Hooks.svg

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

NFTables_Flow.svg

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

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

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

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

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

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

Типы данных

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

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

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

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

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

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

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

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

Это какого? ☺

Д/З

Задание 10

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

  1. Суть:
    • Настроить сеть на server с помощью systemd-networkd, включить маршрутизацию, но не NAT

    • Настроить общий SNAT на server с помощью nftables

      • «выход в интернет» должен работать на всех трёх машинах
    • Настроить сеть и маршрутизацию на router с помощью systemd-networkd

    • Настроить на router с помощью nftables:

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

      • Чёрный список IP (ко всем можно подключиться, а к этим — нельзя)
      • Ограничение по количеству TCP-соединений к server по порту3 за определённый период времени

    • Настроить сеть на client с помощью systemd-networkd

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

    1. report 10 server:

      • networkctl status

      • nft list ruleset

      • cal | netcat router порт1 (дождаться, пока отработает)

    2. report 10 router:

      • networkctl status

      • nft list ruleset

    3. report 10 client:

      • netcat -l порт2

      • date | netcat ya.ru 80 (должно работать)

      • date | netcat сайт-из-чёрного-списка 80 (не должно)

    4. server (продолжение)

      • Принимать одновременно все подключения с форком обработчика (socat c параметром TCP-LISTEN:порт3,reuseaddr,fork

    5. client (продолжение)

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

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

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

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

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

LecturesCMC/LinuxNetwork2022/10_FireWalls (последним исправлял пользователь FrBrGeorge 2022-05-02 10:12:44)