AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 798001
Accepted
batflaps
batflaps
Asked: 2016-08-20 13:47:01 +0800 CST2016-08-20 13:47:01 +0800 CST 2016-08-20 13:47:01 +0800 CST

Promisc 接口 IDS 的 KVM 桥接器

  • 772

我有一个 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

我错过了什么?

kvm-virtualization bridge ids
  • 2 2 个回答
  • 4349 Views

2 个回答

  • Voted
  1. Best Answer
    Michael Hampton
    2016-08-20T23:00:53+08:002016-08-20T23:00:53+08:00

    Linux 网桥是基本的第 2 层交换机。为了将流量发送到与其相连的接口,流量必须适合该接口(即,可以通过该端口访问目标 MAC 地址)。

    虽然第 2 层交换机通常具有端口镜像功能,可将通过交换机的所有流量转发到指定端口,但 Linux 网桥没有此类功能。

    但是,您可以使用 Linux 的流量控制 (tc) 来伪造它。我这样做是为了将流量转发到运行 suricata 的 KVM 虚拟机。此方法的限制是您只能在单个物理端口上镜像流量。

    在此脚本中,MONITOR_PORT是要监控的端口,必须是物理端口,MIRROR_PORT是流量将发送到的接口(可以是虚拟端口或网桥)。使用这种方法,被监控的端口不需要处于混杂模式。并且镜像端口不需要桥接到被监控端口。

    在我的例子中,主机有一个桥 br0,桥接到 eno1,所有的虚拟机都有一个虚拟网卡。我已经为这个虚拟机创建了一个仅限主机的虚拟网络(作为 virbr2),并在这个网络上的 suricata 虚拟机中添加了第二个 NIC,除了它的常规 NIC,并将流量定向到它。

    [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
    

    请注意,我不是自己创建的;我无耻地将它从Port mirroring with Linux bridges中撕下来,它详细解释了它的工作原理以及使用更灵活(也更复杂)的 Open vSwitch 的替代方案。

    • 1
  2. batflaps
    2016-09-10T13:58:29+08:002016-09-10T13:58:29+08:00

    谢谢,我能够使用(可能)更简单的 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
    

    就像页面和页面很快流过,这很好。现在添加你的桥,如:

    brctl setageing br1 0
    brctl setfd br1 0
    

    现在启动您的虚拟机并添加第二个网卡 > 指定共享设备名称 > br1。您可能需要重新启动 VM,然后登录到 VM,您应该会看到 eth1 的第二个 NIC,该 NIC 桥接到您的镜像接口并可以开始查看数据包。我还没有弄清楚如何让 vswitch 将镜像数据包复制到多个接口,以防你想让多个传感器查看相同的数据,所以这是我的下一个问题。要使您的 brctl 配置持续重启,请执行以下操作:

    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/希望这一切帮助其他人,很难弄清楚如何将所有部分拼凑在一起。

    • 1

相关问题

  • Xen 与 KVM 的性能对比

  • 什么是bridge_fd?

  • 如何在 kvm-linux 中登录除 ssh、vnc 之外的控制台

  • Linux 内核虚拟机

  • Vista 上的 VNC

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve