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

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

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

в Linux:

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

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

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

В Linux:

Попробуем nftables.

nftables

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

Ничего страшного, нам нужна только зелёненькая часть ☺

LecturesCMC/LinuxNetwork2022/10_FireWalls/NFTables_Hooks.svg

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

  1. Следуя стрелочкам, пакет, в зависимости от принятия решений (обозначены ромбами), проходит контрольные точки (обозначены огурцами)

    • Огурцы называются «Hook» (термин из подсистемы Netfilter ядра Linux)
  2. В процессе прохождения пакет обрабатывается правилами

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

    • LecturesCMC/LinuxNetwork2022/10_FireWalls/NFTables_Flow.svg

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

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

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

Типы данных

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

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

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

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

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

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

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

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

Просмотр номеров «ручек» (handle)

Фильтрация портов

Разрешим принимать TCP только на определённые порты, остальное запретим

Ограничение частоты соединений

Отказ при превышении лимитов по частоте подключения ( <!> это не шейпинг)

Простой вариант: собственно ограничение частоты соединений

Сложный вариант со списком временно забаненных хостов. Таблицу создавать не будем (хотя бы для того, чтобы показать, как это неудобно ☺): впишем всё прямо в имеющиеся таблицу filter, а правила — в её цепочку input (которая висит на контрольной точке input)

Вывод: пользуйтесь таблицами!

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

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

Это какого? ☺

…тысячи их

И кстати, важное правило:

Межсетевой экран не обеспечивает безопасности системы! Это только инструмент, реализующий отдельные компоненты в схеме безопасности.

Д/З

образ

TODO Снова ☺ проявляется бага с mDNS из-под root resolver из-под root запускается в chroot-е /var/resolv. Раньше проблема была в библиотеках, которые не доползали до /var/resolv

Задание 10

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

  1. clientrouterserver

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

    1. report 10 server:

      • networkctl status eth1

      • nft list ruleset

      • ssh клиент (должен привести к подключению на client и логину!)

        • (2025-04-28) Для того, чтобы login сработал, надо на клиенте в /etc/openssh/sshd_config вписать строку PermitRootLogin yes и перезапустить сервис

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

    2. report 10 router:

      • networkctl status eth1

      • networkctl status eth2

      • nft list ruleset

    3. report 10 client:

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

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

      • Посмотреть множество нарушителей квоты по подключениям (там должен быть 2a00:f480:8:3::1b)

    5. Остановить зависшие команды на 2a00:f480:8:3::1b и server

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

    • В теме письма должно встречаться слово LinuxNetwork2026

LecturesCMC/LinuxNetwork2026/Six/10_FireWalls (последним исправлял пользователь ArsenyMaslennikov 2026-05-18 03:56:51)