Как использовать сетевой интерфейс только для чтения -?

У меня есть json с чем-то вроде этого :"number":"OK","number":OK", повторяющимся несколько раз в одной строке.

Мой простой счетчик «ОК»:

sed "s|,|\n|g" response | grep -c OK

1
16.06.2021, 15:31
1 ответ

Самый простой способ сделать интерфейс «только для чтения -» в Linux — это применить к нему выходнойtcфильтр, который удаляетвсе .

Чтобы применить фильтр, должен быть установлен классовый qdisc . prio qdisc — это простейший классовый qdisc, который используется только для возможности использования фильтров в интерфейсе, а не для собственных функций.

В конце установить интерфейс eth1 «только для чтения -»:

tc qdisc add dev eth1 root prio
tc filter add dev eth1 matchall action drop

Это блокирует исходящий трафик на этом интерфейсе. Он даже блокирует сокеты RAW (, на которые в противном случае не влияют брандмауэры ), поэтому будет блокировать DHCP-клиент IPv4 (, который в противном случае может получить адрес, несмотря на брандмауэр ). Есть еще способы обойти это, но это может быть только очень преднамеренным. Вот два, о которых я знаю:

  • использовать параметр сокетаPACKET_QDISC_BYPASSдля необработанного сокета
  • используйте разъем AF _XDP .

Чтобы вернуть интерфейс в исходное состояние, просто удалите qdisc:

tc qdisc del dev eth1 root

Примечания:

  1. Я предполагаю, что коммутатор с портом, установленным в режиме зеркального отображения, вероятно, уже установил этот порт в режим -только для чтения.

    Это надо проверить. И если это правда, использование фильтра выше или маркера 2. ниже становится спорным.

  2. интерфейс, который находится в состоянии UP и к которому не применяются дополнительные настройки, все еще может обмениваться трафиком

    Без предыдущего фильтра даже ненастроенный, но работающий интерфейс может оставить трафик.Есть по крайней мере эти два случая:

    • Автоматическая настройка IPv6

      использоватьsysctl -w net.ipv6.conf.eth1.disable_ipv6=1

    • Если ARP не отключен (с помощьюip link set eth1 arp off)

      Этот случай аналогичен более общему случаю утечки информации, когда система в локальной сети может проверить, не используют ли некоторые системы другие сети (, включая виртуальные )с общеизвестными адресами :, по умолчанию в Linux интерфейс будет отвечать на запросы ARP для любого другого адреса на любом другом интерфейсе. Эточасть слабой модели хоста .

      Так, например, если в системе OP работает livbirt QEMU/KVM с настройками по умолчанию, 192.168.122.1/24 назначено virbr0 , тогда другая система Linux, подключенная только к ненастроенному интерфейсу UP, все равно получит ARP отвечает через него при запуске:

      arping -I eth0 192.168.122.1
      

      Неважно, есть ли у зондирующей системы маршрут к 192.168.122.1. Речь идет об ARP (и команде, которая не заботится о маршрутах ). То же самое о LXC и 10.0.3.1 и т. д.

0
28.07.2021, 11:25

Теги

Похожие вопросы