Мост KVM для IDS интерфейса promisc

У меня есть сервер виртуализации KVM, который обслуживает мост br0, сопоставлен с eth0. Я хочу добавить eth2 в качестве моста к br2 для виртуальной машины IDS, которую я тестирую, но гостевая ОС не видит br2 или eth2 как действующий интерфейс. Я запустил tcpdump на eth2 и могу убедиться, что он видит пакеты, поэтому я знаю, что у меня есть действующий источник и в этом интерфейсе есть опция PROMISC с использованием ifconfig eth2 promisc up . Вот мой файл / etc / network / interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
    address 1.2.3.4
    netmask 255.255.255.0
    gateway 1.2.3.1
    bridge_ports eth0
    bridge_fd 9
    bridge_hello 2
    bridge_maxage 12
    bridge_stp off

auto eth2
iface eth2 inet manual

auto br2
iface br2 inet static
    up ifconfig br2 promisc up
    down ifconfig br2 promisc down
    bridge_ports eth2
    bridge_fd 9
    bridge_hello 2
    bridge_maxage 12
    bridge_stp off

Что мне не хватает?

2
задан 20 August 2016 в 00:47
2 ответа

Мост Linux является базовым переключатель уровня 2. Для того, чтобы он отправлял трафик на интерфейс, подключенный к нему, трафик должен соответствовать этому интерфейсу (т. Е. MAC-адрес назначения доступен через этот порт).

Хотя коммутаторы уровня 2 часто имеют функцию зеркалирования портов, которая перенаправляет весь трафик, проходящий через коммутатор к назначенному порту, мост Linux не имеет такой функции.

Однако вы можете подделать его с помощью управления трафиком Linux (tc). Я делаю это, чтобы перенаправить трафик на виртуальную машину KVM, на которой запущена suricata. Ограничением этого метода является то, что вы можете зеркалировать трафик только на один физический порт.

В этом сценарии MONITOR_PORT - это порт, который необходимо отслеживать, который должен быть физическим портом, и ] MIRROR_PORT - это интерфейс, на который будет отправляться трафик (который может быть виртуальным портом или мостом). При использовании этого метода отслеживаемый порт не обязательно должен находиться в беспорядочном режиме. И зеркальный порт не нужно соединять мостом с отслеживаемым портом.

В моем случае у хоста есть мост br0, подключенный к eno1 и к которому все виртуальные машины имеют виртуальную сетевую карту. Я создал виртуальную сеть только для хоста (как virbr2) для этой виртуальной машины и добавил вторую сетевую карту в виртуальную машину suricata в этой сети в дополнение к ее обычному сетевому адаптеру и направил на нее трафик.

[error@hypervisor ~]$ cat /etc/rc.d/rc.local
#!/bin/bash

# Mirror all packets from one port to another (for suricata)

MONITOR_PORT=eno1
MIRROR_PORT=virbr2

# Ingress
tc qdisc add dev $MONITOR_PORT ingress
tc filter add dev $MONITOR_PORT parent ffff: protocol all u32 match u8 0 0 action mirred egress mirror dev $MIRROR_PORT
# Egress
tc qdisc add dev $MONITOR_PORT handle 1: root prio
tc filter add dev $MONITOR_PORT parent 1: protocol all u32 match u8 0 0 action mirred egress mirror dev $MIRROR_PORT

Обратите внимание, что я этого не сделал. я создаю это сам; Я беззастенчиво оторвал его от Зеркалирование портов с помощью мостов Linux , в котором есть подробное объяснение того, как это работает, и альтернатива с использованием Open vSwitch, которая намного более гибкая (и намного более сложная).

1
ответ дан 3 December 2019 в 11:32

Спасибо, мне удалось заставить его работать, используя (возможно) более простой метод с brctl, например:

auto eth1
iface eth1 inet manual

#Alienvault OSIM Interface
auto br1
    iface br1 inet manual
    address 0.0.0.0
    bridge_ports eth1
    bridge_stp off 

, затем

ifup eth1

, затем посмотрите, захватывает ли он такие пакеты, как:

tcpdump -i br1

you должно появиться много таких вещей, как:

14:46:53.507328 IP 192.168.20.130.53866 > ipv4_1.cxl0.c154.sea001.ix.nflxvideo.net.https: Flags [.], ack 2897, win 5611, options [nop,nop,TS val 3160018074 ecr 2918482309,nop,nop,sack 1 {28961:46337}], length 0
 14:46:53.507402 IP ipv4_1.cxl0.c154.sea001.ix.nflxvideo.net.https > 192.168.20.130.53866: Flags [.], seq 56473:57921, ack 0, win 2050, options [nop,nop,TS val 2918482612 ecr 3160018052], length 1448

например, страницы и страницы пролегают очень быстро, это хорошо. Теперь добавьте свой мост, например:

brctl setageing br1 0
brctl setfd br1 0

Теперь запустите виртуальную машину и добавьте вторую сетевую карту> Укажите имя общего устройства> br1. Возможно, вам придется перезагрузить виртуальную машину, но затем войдите в нее, и вы должны увидеть вторую сетевую карту eth1, которая подключена к вашему зеркальному интерфейсу и может начать просматривать пакеты. Я до сих пор не понял, как заставить vswitch копировать зеркальные пакеты на несколько интерфейсов, если вы хотите, чтобы несколько датчиков смотрели одни и те же данные, так что это моя следующая проблема. Чтобы ваша конфигурация brctl сохранялась после перезагрузки, выполните:

cd /etc/network/if-up.d
touch br1-mirror
chmod +x br1-mirror
vi br1-mirror
  #!/bin/bash
  if [ "$IFACE" = br1 ]; then
  brctl setageing br1 0
  brctl setfd br3 0
fi

Безумный реквизит в помощь здесь, а также этот парень, очень полезный всем http://www.ryanhallman.com/kvm-configure-mirrored-ports- traffic-to-be-visible-in-guest-snort / надеюсь, что все это поможет кому-то другому, трудно понять, как соединить все вместе.

1
ответ дан 3 December 2019 в 11:32

Теги

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