Зеркалирование портов¶
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