我有一个 KVM 虚拟化服务器,它提供一个映射到 eth0 的 br0 网桥。我想为我正在测试的 IDS 虚拟机添加 eth2 作为 br2 的桥接,但客户操作系统没有将 br2 或 eth2 视为有效接口。我在 eth2 上运行 tcpdump 并且可以验证它正在查看数据包,所以我知道我有一个有效的源并且该接口具有使用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
我错过了什么?
Linux 网桥是基本的第 2 层交换机。为了将流量发送到与其相连的接口,流量必须适合该接口(即,可以通过该端口访问目标 MAC 地址)。
虽然第 2 层交换机通常具有端口镜像功能,可将通过交换机的所有流量转发到指定端口,但 Linux 网桥没有此类功能。
但是,您可以使用 Linux 的流量控制 (tc) 来伪造它。我这样做是为了将流量转发到运行 suricata 的 KVM 虚拟机。此方法的限制是您只能在单个物理端口上镜像流量。
在此脚本中,
MONITOR_PORT
是要监控的端口,必须是物理端口,MIRROR_PORT
是流量将发送到的接口(可以是虚拟端口或网桥)。使用这种方法,被监控的端口不需要处于混杂模式。并且镜像端口不需要桥接到被监控端口。在我的例子中,主机有一个桥 br0,桥接到 eno1,所有的虚拟机都有一个虚拟网卡。我已经为这个虚拟机创建了一个仅限主机的虚拟网络(作为 virbr2),并在这个网络上的 suricata 虚拟机中添加了第二个 NIC,除了它的常规 NIC,并将流量定向到它。
请注意,我不是自己创建的;我无耻地将它从Port mirroring with Linux bridges中撕下来,它详细解释了它的工作原理以及使用更灵活(也更复杂)的 Open vSwitch 的替代方案。
谢谢,我能够使用(可能)更简单的 brctl 方法使其工作,例如:
然后
然后看看它是否正在捕获数据包,例如:
你应该得到很多东西,比如:
就像页面和页面很快流过,这很好。现在添加你的桥,如:
现在启动您的虚拟机并添加第二个网卡 > 指定共享设备名称 > br1。您可能需要重新启动 VM,然后登录到 VM,您应该会看到 eth1 的第二个 NIC,该 NIC 桥接到您的镜像接口并可以开始查看数据包。我还没有弄清楚如何让 vswitch 将镜像数据包复制到多个接口,以防你想让多个传感器查看相同的数据,所以这是我的下一个问题。要使您的 brctl 配置持续重启,请执行以下操作:
在这里帮助的疯狂道具,还有这个家伙,对所有人都非常有帮助http://www.ryanhallman.com/kvm-configure-mirrored-ports-traffic-to-be-visible-in-guest-snort/希望这一切帮助其他人,很难弄清楚如何将所有部分拼凑在一起。