我有一个KVM虚拟化服务器,它提供一个映射到eth0的br0网桥。 我想添加eth2作为我testing的IDS虚拟机的br2的桥接,但是guest虚拟机操作系统不会将br2或eth2看作有效的接口。 我在eth2上运行了tcpdump,并且可以validation它是否看到数据包,所以我知道我有一个有效的源,并且该接口具有使用ifconfig eth2 promisc up的PROMISC选项。 这是我的/ 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
我错过了什么?
Linux桥是一个基本的第二层交换机。 为了将stream量发送到与其连接的接口,stream量必须适合该接口(即可通过该端口到达目的地MAC地址)。
虽然第2层交换机通常具有将所有通过交换机的stream量转发到指定端口的端口镜像function,但Linux网桥没有这种function。
但是,您可以使用Linux的stream量控制(tc)来伪造它。 我这样做是为了将stream量转发到运行suricata的KVM虚拟机。 这种方法的局限性在于,您只能在单个物理端口上镜像stream量。
在这个脚本中, MONITOR_PORT是要监视的端口,它必须是一个物理端口, MIRROR_PORT是stream量将被发送到的接口(可以是虚拟端口或网桥)。 被监控的端口不需要用这种方法进入混杂模式。 而且镜像端口不需要桥接到监视端口。
在我的情况下,主机有一个桥接器br0,桥接到eno1,所有虚拟机都有一个虚拟网卡。 我为此虚拟机创build了一个仅宿主的虚拟networking(如virbr2),并在此networking上的suricata虚拟机中添加了第二个NIC(除常规NIC之外),并将stream量导向该networking。
[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的替代方法,它更加灵活(而且更加复杂)。
谢谢,我能够使用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
你应该得到很多东西,比如:
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
像页面和页面stream过很快,这是很好的。 现在添加你的桥,如:
brctl setageing br1 0 brctl setfd br1 0
现在启动虚拟机并添加第二个NIC>指定共享设备名称> br1。 您可能不得不重新启动虚拟机,但是然后login到虚拟机,您应该看到eth1的第二个NIC,桥接到您的镜像接口,并可以开始查看数据包。 我还没有想出如何让vswitch将镜像包复制到多个接口,以防万一您想让多个传感器查看相同的数据,这就是我的下一个问题。 要使brctlconfiguration保持重新启动,请执行以下操作:
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/希望这一切帮助别人,很难弄清楚如何把所有的东西拼凑在一起。