Пакеты HTTP/HTTPS отбрасываются [nftables]

Вопрос или проблема

Я использую таблицу broute в ebtables для выборочной блокировки HTTP/HTTPS пакетов на уровне L2 – я хочу обрабатывать их на IP (L3) уровне с помощью nftables.

У меня возникла проблема, что пакеты не доходят до маршрутизатора после того, как они блокируются наверх на L3.

Я думаю, проблема связана с таблицей NAT, из-за которой пакеты не доходят до маршрутизатора.

Вот мои правила:

/ # ebtables -t broute -L
Bridge table: broute

Bridge chain: BROUTING, entries: 4, policy: ACCEPT
-p IPv4 --ip-proto tcp --ip-dport 80 -j DROP 
-p IPv4 --ip-proto udp --ip-dport 80 -j DROP 
-p IPv4 --ip-proto tcp --ip-dport 443 -j DROP 
-p IPv4 --ip-proto udp --ip-dport 443 -j DROP 

/ # nft list ruleset
table inet filter {
    chain forward {
        type filter hook forward priority filter; policy accept;
        tcp dport 80 accept
        tcp dport 443 accept
    }
}
table inet nat {
    chain prerouting {
        type filter hook prerouting priority dstnat; policy accept;
        tcp dport { 80, 443 } accept
    }

    chain postrouting {
        type nat hook postrouting priority srcnat; policy accept;
        oif "br0" masquerade
    }
}

Ответ или решение

Для решения проблемы с благонадежностью передачи HTTP/HTTPS пакетов в контексте использования ebtables и nftables, необходимо понять теоретические и практические аспекты работы с сетевыми фильтрами на различных уровнях модели OSI, а также взаимодействие NAT и маршрутизации.

Теория

При восходящей передаче пакетов из канального уровня (L2) к сетевому уровню (L3) через ebtables и nftables, возникает важный вопрос порядка обработки пакетов. Ebtables действуют на уровне сетевого моста, что позволяет управлять трафиком до его обработки IP стеком. Правила в broute таблицах используются для перенаправления или блокировки трафика на уровне моста.

Nftables предоставляют гибкие возможности управления сетевым трафиком на уровне IP (L3). При этом существует возможность настройки различных таблиц и цепочек с разными приоритетами обработки, такими как фильтрация и NAT (Network Address Translation).

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

Пример

В приведенном вами примере содержатся следующие правила:

  1. Ebtables Broute:

    • Применяются правила для "обрезки" HTTP/HTTPS трафика на уровне моста (broute таблица). Эти правила предотвращают входящим TCP и UDP пакетам на портах 80 и 443 обрабатывать на уровне моста и перенаправляют их на L3:
      -p IPv4 --ip-proto tcp --ip-dport 80 -j DROP 
      -p IPv4 --ip-proto udp --ip-dport 80 -j DROP 
      -p IPv4 --ip-proto tcp --ip-dport 443 -j DROP 
      -p IPv4 --ip-proto udp --ip-dport 443 -j DROP 
  2. Nftables:

    • Созданы следующие таблицы filter и nat:
    • Filter: Предназначена для акцепта TCP пакетов на 80 и 443 портах в цепочке forward, что фактически позволяет маршрутизировать данный трафик через систему.
    • Nat: Имеет две цепочки – prerouting и postrouting. В prerouting пакеты на портах 80 и 443 принимаются, а в postrouting активируется masquerade на интерфейсе br0, что позволяет скрыть исходный IP адрес для этих пакетов.

Применение

Основная проблема может заключаться в неверной ассоциации и приоритете обработки этих цепочек по отношению к фактическому маршруту передачи данных. Рассмотрим возможные подходы к решению:

  1. Проверка конфигурации NAT:

    • Убедитесь, что prerouting цепь NAT не вызывается после того, как пакеты проходят через broute. Иначе NAT может изменить пакеты до их обработки соответствующими правилами фильтра.
  2. Определение порядка цепочек и приоритетов:

    • Убедитесь, что приоритет цепочек распределен верно, чтобы пакеты обрабатывались в нужной последовательности. Возможна настройка специфических приоритетов для ваших цепочек в nftables.
  3. Рассмотрите использование логирования:

    • Настройте временное логирование пакетов на каждом этапе с целью понимания на каком этапе они могут потеряться. Это можно сделать с помощью использования log в ebtables и nftables.
  4. Диагностика сетевых интерфейсов:

    • Проверьте, что интерфейсы настроены корректно и работают в ожидаемом сетевом режиме. Убедитесь, что нет блокировок или конфликтов в правилах моста.
  5. Обновите конфигурацию в зависимости от диагноза:

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

Таким образом, важно балансировать между конфигурациями ebtables и nftables, а также учитывать все этапы и цепочки обработки пакетов. Уделив внимание правильной настройке NAT и маршрутизации, возможно предотвратить потерю HTTP/HTTPS пакетов.

Оцените материал
Добавить комментарий

Капча загружается...