Брандмауэр
Можно использовать правила брандмауэра на уровне моста Ethernet для реализации ограничений OP.
Мост Linux имеет специальный «собственный» порт с именем моста. Мост в целом участвует в пересылке кадров на уровне L2 между портами (интерфейсами, установленными как bridge-), но собственный порт моста участвует в маршрутизации пакетов на уровне L3, как и другие интерфейсы. Сравните это с простым управляемым коммутатором: у него есть порты, но он также может быть доступен для целей управления через IP: такие IP-пакеты могут достигать его с любого порта (по-прежнему как кадры Ethernet), но затем отправляются на сам коммутатор, а не пересылаются на него. другой порт.
Для брандмауэра Netfilter, используемого nftables и блюда, это означает, что трафик мост-порт-мост-порт виден в передний крюк фильтра (цепь фильтр/ВПЕРЕД для блюда). Трафик от собственного порта к другому порту выходной хук фильтра (цепочка filter/OUTPUT), а трафик от порта к собственному порту моста является входной хук фильтра (цепочка фильтр/ВХОД). Эта схема описывает его в части Link Layer (синие прямоугольники в нижнем синем поле).
Итак, здесь трафик для блокировки находится между эт1
и собственный интерфейс (т.е. блокировать дальнейшую обработку в стеке маршрутизации) и наоборот.
Я предполагаю, что здесь только один мост. Теперь, когда эти инструменты были представлены, необходимо сделать больше инвестиций, чтобы использовать их должным образом, особенно в случае нескольких мостов. В любом случае приведенные ниже команды всегда будут работать правильно, поскольку эт1
одновременно может быть портом только одного моста: здесь бр0
.
С использованием блюда:
ebtables -A ВВОД -i eth1 -j DROP
ebtables -A ВЫВОД -o eth1 -j DROP
Там нет упоминания о бр0
: это представлено ВХОД
и ВЫВОД
.
Поскольку различные значения по умолчанию по-прежнему принимают трафик, eth0
не будет заблокирован с бр0
, ни трафик между eth0
и эт1
.
Используя (достаточно недавно, чтобы избежать синтаксических ошибок) nftables: то же самое с начальным шаблоном для добавления:
nft добавить таблицу мост mytable
nft add chain bridge mytable myinput '{ type filter hook input priority filter; политика принять; }'
nft add chain bridge mytable myoutput '{ type filter hook input priority filter; политика принять; }'
nft добавить правило моста mytable myinput iif eth1 drop
nft добавить правило моста mytable myoutput oif eth1 drop
Запись
iptables используется не на уровне Ethernet (L2), а на уровне IP (L3), поэтому не является подходящим инструментом для этого. Возможно, есть также специальная функция, называемая сетевой фильтр моста который будет преобразовывать фреймы Ethernet типа IPv4 для отправки искусственных IP-пакетов в iptables (все еще на пути моста), чтобы их можно было обработать, а затем преобразовать эти пакеты обратно в кадры Ethernet для дальнейшей обработки с помощью блюда. Это позволило бы использовать iptables
выполнять такую фильтрацию, если вы следуете и правильно понимаете обработку зеленых полей (сетевой уровень: пакеты) в нижнем синем поле (канальный уровень: Ethernet) в предыдущая схема , но это, скорее всего, приведет к дополнительным нежелательным эффектам. Не используйте эту функцию (и не экспериментируйте с системой, в которой уже запущен Docker), пока не поймете что может сломаться.