Зеркалирование портов

Open vSwitch позволяет направлять копию потока трафика из одного или нескольких интерфейсов в другой. Также он может организовать перенаправление трафика из всей VLAN в конкретный порт или наоборот. Зеркалироваться может только входящий, только исходящий или оба типа трафика. Использование такой возможности позволит вести контроль сетевого трафика, передаваемого между виртуальными машинами с целью обнаружения (предупреждения) компьютерных атак.

Пример:

Зеркалирование трафика из интерфейса vnet2, принадлежащего одной виртуальной машние, в специально созданный для прослушивания порт mirror0 с типом internal:

sudo ovs-vsctl -- set Bridge ovs-sw0 mirrors=@m -- \
--id=@mirror0 get Port mirror0 -- --id=@vnet2 get Port vnet2 -- \
--id=@m create Mirror name=mymirror select-dst-port=@vnet2 \
select-src-port=@vnet2 output-port=@mirror0

где конструкцией –id=@<имя_переменной> определяется использование переменной;

командой set Bridge ovs-sw0 mirrors=@m создается зеркало, имя и параметры, которого получаются из переменной @m;

командой –id=@mirror0 get Port mirror0 ––id=@vnet2 get Port vnet2 определяются значения переменных @mirror0, @vnet2 — записываются идентификаторы соответствующих портов;

командой –id=@m create Mirror name=mymirror select-dst-port=@vnet2 select-src-port=@vnet2 output-port=@mirror0 определяется значение переменной @m — записываются имя и параметры зеркала;

select-dst-port — зеркалирование входящего трафика;

select-src-port — зеркалирование исходящего трафика;

output-port — место перенаправления трафика.

С помощью консольной утилиты tcpdump, запущенной на узле, можно прослушивать весь трафик, поступающий, например, на порт mirror0. Для этого необходимо выполнить команду:

tcpdump -i mirror0

Также можно организовать ретрансляцию всех пакетов, например, пришедших на порт eth0 или eth1 на порт eth2:

sudo ovs-vsctl -- set Bridge ovs-sw0 mirrors=@m \
-- --id=@eth0 get Port eth0 -- --id=@eth1 get Port eth1 \
-- --id=@eth2 get Port eth2 \
-- --id=@m create Mirror name=mymirror -- select-dst-port=@eth0,@eth1 \
select-src-port=@eth0,@eth1 output-port=@eth2

где конструкцией –id=@<имя_переменной> определяется использование переменной;

командой set Bridge ovs-sw0 mirrors=@m создается зеркало, имя и параметры которого получаются из переменной @m;

командой ––id=@eth0 get Port eth0 –id=@eth1 get Port eth1 –id=@eth2 get Port eth2 определяются значения переменных @eth0, @eth1 и @eth2;

командой –id=@m create Mirror name=mymirror select-dst-port=@eth0, @eth1 select-src-port=@eth0,@eth1 output-port=@eth2 определяется значение переменной @m — записываются имя и параметры зеркала;

select-dst-port — зеркалирование входящего трафика;

select-src-port — зеркалирование исходящего трафика;

output-port — место перенаправления трафика.

Для отмены зеркалирования нужно выполнить команду:

sudo ovs-vsctl remove Bridge ovs-sw0 mirrors mymirror