LINUX.ORG.RU
ФорумAdmin

Зеркалирование трафика с физического порта на виртуальный


1

2

Доброго времени суток! Сабж: имеется физический сервер с парком виртуалок на борту на базе Xen. Виртуалки поделены на 4 VLAN'а, гипервизор в отдельном VLAN'е, физический порт сервера соединен с маршрутизатором Cisco 1921 - данный канал является транком для имеющихся VLAN'ов. У роутера всего 2 порта - второй смотрит наружу. В одном из VLAN'ов стоит виртуалка со Snort'ом, на которую нужно передавать весь поступающий на роутер извне трафик для анализа.

Вопрос: каким образом можно зеркалировать тарфик с физ. порта Cisco для дальнейшей передачи на виртуалку со Snort'ом для последующего анлиза?

PS. Полагаю, необходимо на роутере создать вирт. интерфейс, зазеркалировать на него трафик (как?), затем в xen-гипервизоре создать бридж, к которому присоединить вирт. интерфейс роутера и один из интерфейсов ВМ со Snort'ом, вот только не знаю как это сделать, да так, чтоб коннект к роутеру не отвалился (весь этот зоопарк на другом конце страны, так что ошибку допустить нельзя).


Нужно взять свич т.к. роутеры (R)SPAN делать не умеют. И канал, который надо прослушивать, пропустить тоже через свич. А дальше читай доки цыски по SPAN-у.

blind_oracle ★★★★★
()
Ответ на: комментарий от blind_oracle

Хм, начальство вряд ли одобрит покупку свича...

Но получается в данном случае свичом выступает xen-гипервизор под CentOS 6.4, к нему на eth3 поступает весь трафик от роутера и дальше в зависимости от того, какому VLAN'у предназначается, он идет на eth3.x, где х - номер VLAN'а, и далее не вирт. интерфейс вирт. машины.

Возможно ли средствами Linux весь трафик, поступающий на порт eth3, зеркалировать на виртуалку, расположенную, например в VLAN4?

Incher
() автор топика

трафик приходящий на физ. порт не сложно пробросить и в виртуальный при помощи моста с «setageing 0»

не забываем про net.bridge.bridge-nf-call-iptables и на новых ядрах про net.bridge.bridge-nf-filter-vlan-tagged

vel ★★★★★
()
Ответ на: комментарий от vel

Выкладываю схемку для наглядности. Мне нужно копировать весь трафик поступающий с Cisco на eth3 HP Proliant на интерфейс eth1 виртуалки Dom1(Snort). Если делать при помощи brctl, то, теоретически мне нужно просто добавить мосту xenbr40 атрибут «setageing 0»?

Incher
() автор топика
Ответ на: комментарий от Incher

Еще как вариант нашла программку Daemonlogger от разработчиков Snort, может, у кого-нибудь есть опыт работы с ней? Кто знает, подскажите, будет ли работать в моем случае такой вариант:

/usr/bin/daemonlogger -u daemonlogger -g daemonlogger -i eth3 -o eth3.40

PS. Знания по сетям у меня не очень-то твердые, на продакшене опасаюсь данную команду проверять, чтоб не перекрыть ненароком доступ к Dom0.

Incher
() автор топика
Ответ на: комментарий от Incher

eth3 в мост с «setageing 0» и дальше в этот мост подключить снорт.

«setageing 0» практически превращает мост/коммутатор в концентратор, что и требуется при копировании трафика.

Про xen ничего не могу сказать.

vel ★★★★★
()
Ответ на: комментарий от macumazan

С зеркалированным трафиком не все так просто. Сначала нужно чтоб пакеты попали в цепочки iptables.

мост с «setageing 0» это средство получение потока в iptables.

А дальше уже и TEE можно использовать.

vel ★★★★★
()
Ответ на: комментарий от macumazan

Пробовала, ни -j TEE, ни -j ROUTE --tee не работает - в ядре модули включены, но нет библиотек libipt_TEE.so и libipt_ROUTE.so - версия iptables 1.4.7, нашла, что таргет -j TEE поддерживается только с версии 1.4.9, но rpm-пакета для Centos новее, чем 1.4.7 не нашла, а на пересборку iptables нет времени.
Создание промежуточного моста с «setageing 0» без потери коннекта к серверу не обойдется, т.к. сервер находится далеко - начальство не соглашается.
Daemonlogger показался мне самым безопасным и быстрым решением, попробовала на виртуалке его протестировать, но что-то результаты меня смущают (возможно тест некорректный - с помощью ping; вероятно, надо с помощью другой службы пакеты кидать): на виртуалке с Centos 6.4 есть 2 сетевых интерфейса eth0 (192.168.249.144) и eth2 (192.168.249.145), делаю

/usr/bin/daemonlogger -d -i eth0 -o eth2
запускаю на виртуалке tcpdump 'icmp' -i eth0 и в другой консоли tcpdump 'icmp' -i eth2, затем пингую с физического хоста с отправкой 4 пакетов, но в каждую консоль сыпется уйма пакетов вместо положеных восьми:
...
11:52:18.044154 IP 192.168.249.1 > 192.168.249.146: ICMP echo request, id 1, seq 4, length 40
11:52:18.044173 IP 192.168.249.146 > 192.168.249.1: ICMP echo reply, id 1, seq 4, length 40

350 packets captured
1517 packets received by filter
1166 packets dropped by kernel

Подскажите, пожалуйста, как можно корректно протестировать работу Daemonlogger?

Incher
() автор топика
Ответ на: комментарий от macumazan

Прошу прощения, в куске вывода tcpdump'а должен быть 192.168.249.144, вместо 192.168.249.146. Просто адреса на виртуалке динамические, при перезапуске сменились с 192.168.249.144 и 192.168.249.145 на 192.168.249.146 и 192.168.249.147 соответственно.

Incher
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.