[解决方案] 回顾一下业务中的网络技术演化

news/2025/9/28 22:12:23/文章来源:https://www.cnblogs.com/shuqin/p/19117726

[解决方案] 回顾一下业务中的网络技术演化

回顾一下业务中的网络技术演化

这个版本解决了一个几年前遗留的网络问题,近期可能不会再对网络相关的模块进行迭代了,这里回顾一下这些年网络相关技术在业务中的迭代。

背景

业务的枢纽为 感知攻击者入侵的欺骗服务,处于枢纽之后核心功能为 服务管理入侵行为分析,处于枢纽之前的核心功能为 引流

引流的目的为扩大感知面,增加攻击者入侵感知的几率,这部分功能和网络关联比较多,所以这里聚焦网络相关基础功能和随业务迭代变更。

  • 引流模块基础模块
    • 宿主机虚拟 IP 引流
    • 服务器部署代理节点引流
    • 交换机侧虚拟网络引流
  • 业务迭代变更
    • 内部化 VM IP
    • 业务架构调整
      • 如何访问新架构的欺骗服务
      • 异构问题如何解决
      • 如何对恶意流量进行分析

引流模块基础模块

三种引流模块是从宿主机一层层往外扩展的叠加,是产品网络相关的基础形态。

宿主机虚拟 IP 引流

在宿主机上配置多个虚拟 IP,并通过 iptables DNAT 规则将访问这些IP的流量透明转发至欺骗服务。

背景

服务位于虚拟机中(安全性考虑),监听特定端口,虚拟机使用桥接方式连接到宿主机。带来的限制:欺骗服务只能通过虚拟机的 IP 地址访问,链路只有一条

考虑如何在宿主机内增加访问这个欺骗服务的链路

  1. 增加 IP 并且将这个 IP 的流量重定向到欺骗服务所在虚拟机中
  2. 增加流量代理,将流量代理至欺骗服务的端口上

业务采取的是第一种方式,增加虚拟IP并且使用 iptables 将流量 DNAT 至虚拟机上,这样可以保持服务感知的源地址不变

实现

增加的虚拟 IP 有几种方式,早期业务使用第二种方式

  1. 直接在物理网卡上增加 IP
  2. 使用 macvlan 虚拟网卡,然后再虚拟网上添加 IP
  3. 使用 netns 隔离 IP,每个 IP 独占一个命名空间以及 MAC 地址

选择第二种方案是:第一种方案过于简陋,第三种方案未采用是由于当时对网络命名空间不熟悉。

创建网卡,添加 IP

$ ip link add link br0 name macvlan0 type macvlan
$ ip link set macvlan0 up
$ ip addr add 192.168.32.247/24 dev macvlan0
$ ip addr show macvlan0

增加 iptables DNAT 规则,将访问 192.168.32.247 的流量重定向至 192.168.32.245 上(虚拟机 IP)

$ iptables -t nat -A PREROUTING -d 192.168.32.247/32 -j DNAT --to-destination 192.168.32.245

前置条件

$ iptables -P FORWARD ACCEPT
$ sysctl -w net.ipv4.ip_forward=1

在 iptables 的加持下,虚拟网卡只用于内核回复 ARP Request,后续的 TCP 通信流量不会经过这个网卡。

简单的网络拓扑如下,虚拟机使用桥接模式,在 DNAT 规则增加后,通过 192.168.32.247 也可以访问到虚拟机。

┌───────────────────────────────────────────┐
│  Host                                     │
│         ┌─────────────────┐               │
│         │ vm1             │               │
│         │ 192.168.32.245  │               │
│         │       eth0      │               │
│         └────────│────────┘               │
│           ┌──> vnet1                      │
│           │      │                        │
│           │      │   192.168.32.247       │
│      DNAT │      │ ─── macvlan0           │
│           │      │                        │
│           │      │                        │
│           └──── br0  192.168.32.251       │
└──────────────────│────────────────────────┘eth0

服务器部署代理节点引流

通过部署代理节点 agent,监听指定IP地址及端口,并将接收到的流量代理至欺骗服务。

背景

目前在宿主机环境只能增加同网段的IP,那不同子网的 IP 如何引流?答:加一个流量代理

代理的 agent 部署在客户业务机器内,管理端将需要代理的规则下发至 agent,agent 监听端口并且将流量代理至欺骗服务。
这样存在一个问题:欺骗服务需要获取真实的的对端地址,简单的代理会丢失这个信息,拿到的对端地址是 agent 的本地地址。

对于 Service 而言,conn.RemoteAddr() 得到的结果是正确的,这是直连的结果。

       conn        
User <-------> Serviceip1             ip3

pconn.RemoteAddr() 得到的结果是代理 agent 地址,不符合期望

       uconn           pconn        
User <-------> Proxy <-------> Serviceip1            ip2              ip3

如何解决这个问题:宿主机增加一个网关服务,代理 agent 携带 uconn.RemoteAddr() 等相关元数据发送至网关服务,
网关服务收到元数据后增加 SNAT 规则并且将流量代理至欺骗服务,这样欺骗服务感知到的对端地址是真实的。

实现

使用自定义协议,在每个连接的头部增加

  1. 8 字节魔数,用于区分内部连接
  2. 对端地址
  3. 需要转发的目的地址(欺骗服务)

增加 SNAT 的关键一步:建立 TCP 连接前,需要指定源地址,源 IP 取 HostIP(192.168.32.251),端口通过 net.Listen("tcp", "0.0.0.0:0") 提前分配,这样连接的五元组就固定下来,后面规则就是机械的参数填充了。

$ iptables -t nat -A POSTROUTING -s 192.168.32.251/32 -p tcp -m tcp --sport 34162 -j SNAT --to-source 192.168.1.55:46421

简单的网络拓扑如下,增加了 gateway 服务,接收来自 代理 agent 的流量,在代理连接建立之前增加 SNAT 规则。

┌─────────────────────────────────────────────────┐
│  Host                                           │
│               ┌─────────────────┐               │
│               │ vm1             │               │
│               │ 192.168.32.245  │               │
│               │       eth0      │               │
│               └────────│────────┘               │
│         ┌──────────> vnet1                      │
│         │       │      │                        │
│         │       │      │   192.168.32.247       │
│     SNAT│   DNAT│      │ ─── macvlan0           │
│         │       │      │                        │
│         │       │      │                        │
│      Gateway    └──── br0  192.168.32.251       │
└────────────────────────│────────────────────────┘eth0                       

交换机侧虚拟网络引流

在核心交换机侧部署虚拟网络节点,创建虚拟 VLAN/VXLAN IP 并监听指定IP地址及端口,将流量代理至欺骗服务。

背景

继续扩大感知面,在代理节点 agent 的基础上,同网段、不同网段已经能够覆盖。
但是都是针对已存在的网段进行引流,这部分在整个网络中的比例是比较低的,如果可以覆盖到这些不存在的网络,那么可以极大增加感知面。

如何虚拟不存在的网络,这里涉及到交换机的一些原理(暂时不考虑 vxlan):

  1. (二层)交换机通过 VLAN 创建一个独立的广播域
  2. (三层)交换机为 VLAN 创建一个虚拟接口,并且为这个接口分配网关和掩码(192.168.1.1/24)
  3. (三层)交换机包的路由查询,将数据包从目标网段对应的 VLAN 接口发送出去
    • ACCESS 接口,包出去的时候剥离 VLAN tag, 包进入则打上 VLAN tag
    • TRUNK 接口,可以收到所有的网络数据包

内核支持 vlan 虚拟网卡,可以使用内核对 vlan tag 解析封装和解封装。

实现

利用的交换机的特性,提前做一些操作

  1. 分配 vlan 和对应的网段
  2. 分配 trunk 口,这样该 trunk 口接入的服务器相当于核心交换机下的接入交换机

在接入的服务器内部署代理 agent 的基础上,只需要额外做一件事情:管理 vlan 网卡和 ip

早期没有接触过 netns,这些操作都是在 host 内完成的,这里不讨论过时的设计了

遇到的一些问题和解决方案

  1. 一个 agent 需同时接入交换机的 trunk 口,使用了 netns 隔离网络来解决,一个网段(一个 VLAN 可能存在多个网段)占用一个 netns。
  2. 虚拟过万数量的 IP,按照之前 agent 的监听逻辑,一个 IP:Port 的监听就会占用一个 fd,使用 iptables+ipset DNAT 解决
    1. IP:Port 存入 hash:ip,port 的 ipset 中
    2. 使用一条 iptables 规则,匹配 ipset 将流量 DNAT 到一个监听地址上
    3. 使用 netns 隔离 iptables 规则和监听地址,整体 fd 占用数量较少

整体方案如下:

  1. 创建网桥,并且将物理网卡挂载在网桥上
  2. 设置通信网卡及 IP,用于流量代理和规则获取,也挂在网桥上
  3. 创建虚拟网络
    1. 创建 netns
    2. 创建 veth-peer,宿主空间挂载在网桥上,up 所有网卡
    3. 在 netns 内部的 veth-peer 上创建虚拟 vlan 网卡,并且增加 ip
    4. 在 netns 内创建 ipset,增加 iptables 规则
  4. agent 切换命名空间,在 netns 内部监听端口(这样一个进程可以监听多个命名空间内的地址)
# 创建网桥
$ ip link add br1 type bridge
$ ip link set br1 up
$ ip lihk set eth0 master br1# 创建通信网卡,保持存在一个基础的 IP 和外界通信
$ ip link add link br1 name veth0 type vlan id 100
$ ip link set veth0 up
$ ip addr add 192.168.100.100/24 dev veth0# 创建虚拟网络
$ ip netns add ns1
$ ip link add veth1 type veth peer name eth0 netns ns1
$ ip netns exec ns1 ip link set eth0 up
$ ip netns exec ns1 ip link set lo up
$ ip link set veth1 up
$ ip link set veth1 master br1# 设置虚拟 VLAN(100) 网卡和添加 IP
$ ip netns exec ns1 ip link add link eth0 name vlan100 type vlan id 100
$ ip netns exec ns1 ip link set vlan100 up
$ ip netns exec ns1 ip addr add 192.168.110.2/24 dev vlan100
$ ip netns exec ns1 ip route add default via 192.168.110.1 onlink dev vlan100#  新增 iptables/ipset 规则
$ ip netns exec ns1 ipset create ipset1 hash:ip,port
$ ip netns exec ns1 iptables -t nat -A PREROUTING -p tcp -m set --match-set ipset1 dst,dst -j DNAT --to-destination 127.0.0.1:5550

遇到的一些问题

  1. DNAT 127.0.0.1 需要开启 net.ipv4.conf.all.route_localnet=1
  2. ipset 在 3.10 的内核上兼容性不好,没有区分宿主机和命名空间,只能通过命名进行区分解决

网络侧的代理网络拓扑如下

┌───────────────────────────────────────────────────────────────┐
│ Host                                                          │
│                   ┌─────────────────┐   ┌─────────────────┐   │
│                   │ ns1             │   │ ns2             │   │
│                   │                 │   │                 │   │
│                   │  192.168.100.2  │   │  192.168.101.8  │   │
│                   │     vlan100     │   │     vlan101     │   │
│                   │        │        │   │        │        │   │
│                   │       eth0      │   │       eth0      │   │
│ 192.168.100.100   └────────│────────┘   └────────│────────┘   │
│      veth0               veth1                 veth2          │
│        │                   │                     │            │
│        └───────────────────│─────────────────────┘            │
│                            │                                  │
│                           br0                                 │
└────────────────────────────│──────────────────────────────────┘eth0     

如果是多张网卡,那么保持基础通信的 IP,新增一个网桥连接虚拟网络和物理网卡即可,这样 ns1 和 ns2 就独立不受影响了

┌───────────────────────────────────────────────────────────────┐
│ Host                                                          │
│                   ┌─────────────────┐   ┌─────────────────┐   │
│                   │ ns1             │   │ ns2             │   │
│                   │                 │   │                 │   │
│                   │  192.168.100.2  │   │  192.168.101.8  │   │
│                   │     vlan100     │   │     vlan101     │   │
│                   │        │        │   │        │        │   │
│                   │       eth0      │   │       eth0      │   │
│ 192.168.100.100   └────────│────────┘   └────────│────────┘   │
│      veth0               veth1                 veth2          │
│        │                   │                     │            │
│        └───────────────────│                     │            │
│                            │                     │            │
│                           br1                   br2           │
└────────────────────────────│─────────────────────│────────────┘eth0                  eth1 

vxlan 支持

同样需要交换机进行配置,另外使用 bgp 协议来动态控制路由,frr 提供这些功能,设置好 AS 号即可。

其他和网络相关的逻辑参考 几种通过 iproute2 来打通不同节点间容器网络的方式,关于 vxlan 如何跨节点通信,网络配置几乎相同。

完整的网络拓扑如下,vxlan 的命名空间对应一个网段,一个 vni 对应一个网桥,通过网桥连接命名空间和 vtep 设备。

┌─────────────────────────────────────────────────────────────────────────────────┐
│ Host                                                                            │
│                  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐  │
│                  │ ns1             │  │ ns2             │  │ ns3             │  │
│                  │                 │  │                 │  │                 │  │
│                  │  192.168.100.2  │  │  192.168.101.8  │  │                 │  │
│                  │     vlan100     │  │     vlan101     │  │                 │  │
│                  │        │        │  │        │        │  │    10.1.0.10    │  │
│                  │       eth0      │  │       eth0      │  │       eth0      │  │
│ 192.168.100.100  └────────│────────┘  └────────│────────┘  └────────│────────┘  │
│      veth0              veth1                veth2                veth3         │
│        │                  │                    │                    │           │
│        └──────────────────│                    │                    │── vtep1   │
│                           │                    │                    │           │
│                          br1                  br2                  br3          │
└───────────────────────────│────────────────────│────────────────────────────────┘eth0                 eth1                 eth2          └────────────────────│────────────────────┘  switch                                

业务迭代变更

这部分是属于欺骗服务宿主机内部的变更逻辑,和前面几个技术点比起来没有那么纯粹,夹杂着业务逻辑。

这部分忽略前面三个引流部分,目前的网络拓扑为

┌───────────────────────────────────────────┐
│  Host                                     │
│         ┌─────────────────┐               │
│         │ vm1             │               │
│         │ 192.168.32.245  │               │
│         │       eth0      │               │
│         └────────│────────┘               │
│                vnet1                      │
│                  │                        │
│                 br0  192.168.32.251       │
└──────────────────│────────────────────────┘eth0

内部化 VM IP

网络环境出现重复 IP 的情况下,对 vm 存活的判断可能出现错误而回收 vm。
将 vm 内部化来避免这个问题,如果 IP 访问失败也不会影响 vm 的状态,新增一个 br1 复用之前的多 IP DNAT 逻辑即可。

┌───────────────────────────────────────────┐
│  Host                                     │
│         ┌─────────────────┐               │
│         │ vm1             │               │
│         │   172.16.23.2   │               │
│         │       eth0      │               │
│         └────────│────────┘               │
│            ┌── vnet1                      │
│            │     │                        │
│        DNAT│    br1  172.16.23.1          │
│            │                              │
│            └─── br0  192.168.32.251       │
└──────────────────│────────────────────────┘eth0

业务架构调整

现在由于性能和后面维护考虑,决定将 vm 中的欺骗服务移动至 docker 容器内

  1. 出于安全性考虑,保留 vm(docker 相对 vm 更容易逃逸)
  2. 性能更优,容器的占用远低于 vm,这样可以启动更多的欺骗服务
  3. 可维护性更强,服务的部署逻辑都在 dockefile 中被持久化
  4. windows 类型的 vm 保持不变

调整后的网络拓扑为一个异构网络架构,如下

┌───────────────────────────────────────────────────────────────┐
│  Host                                                         │
│        ┌─────────────────────────┐     ┌─────────────┐        │
│        │ vm1                     │     │ vm2(win)    │        │
│        │ ┌────────┐   ┌────────┐ │     │             │        │
│        │ │10.1.0.2│   │10.1.0.3│ │     │             │        │
│        │ │  eth0  │   │  eth0  │ │     │             │        │
│        │ └───│────┘   └───│────┘ │     │             │        │
│        │   veth1        veth2    │     │             │        │
│        │     └──────│─────┘      │     │             │        │
│        │         docker0         │     │             │        │
│        │        10.1.0.1         │     │             │        │
│        │                         │     │             │        │
│        │        172.16.23.2      │     │ 172.16.23.3 │        │
│        │           eth0          │     │     eth0    │        │
│        └────────────│────────────┘     └──────│──────┘        │
│                   vnet1                     vnet2             │
│                     └───────────────│─────────┘               │
│  192.168.32.251                    br1                        │
│       br0                      172.16.23.1                    │
└────────│──────────────────────────────────────────────────────┘eth0                                           

如何访问新架构的欺骗服务

之前访问欺骗服务的方式

  1. 直接访问 IP,流量 DNAT 至 vm
  2. 访问代理监听的端口,通过 gateway 转发至欺骗服务

如果把 gateway 的转发功能部署在 vm 里面,host 把所有的流量转发至 vm 内,那么可以复用之前 SNAT 规则。

如何将 host 内的流量转发至 vm?

  1. 在交换机侧虚拟网络引流逻辑上,在命名空间内部有一条 iptables 规则把流量 DNAT 到一个端口上,对于 IP 的访问复用这个逻辑
  2. 代理流量的访问,增加一个代理即可,对于欺骗服务而言都是透明的

调整后的流量链路如下:

┌───────────────────────────────────────────────────────────────┐
│  Host                                                         │
│        ┌─────────────────────────┐     ┌─────────────┐        │
│        │ vm1                     │     │ vm2(win)    │        │
│        │ ┌────────┐   ┌────────┐ │     │             │        │
│        │ │  srv1  │   │  srv2  │ │     │     srv3    │        │
│        │ │10.1.0.2│   │10.1.0.3│ │     │             │        │
│        │ └───│────┘   └───│────┘ │     │ 172.16.23.3 │        │
│        │     └──────│─────┘      │     └──────│──────┘        │
│        │           SNAT          │           SNAT             │
│        │            │            │            │               │
│        │       gateway2 (Listen) │      gateway2 (Listen)     │
│        │            │ 172.16.23.2│            │ 192.168.32.251│
│        └────────────│────────────┘            │               │
│                     └───────────────│─────────┘               │
│                                  L4 Proxy                     │
│                                     │                         │
│               192.168.32.100     gateway1 (Listen)            │
│               192.168.32.101        │ 192.168.32.251          │
│       br0 ───────── DNAT ───────────┘                         │
│        │                            │                         │
│        │ ──────── L4 Proxy ─────────┘                         │
└────────│──────────────────────────────────────────────────────┘eth0                                           

调整后的 gateway1 成为了整个所有服务的流量入口,后面可以根据这个特性对架构进行调整。

异构问题如何解决

在新架构的访问链路中,两类欺骗服务明显的异构,监听的 IP 不在一个层级,一类是 10.* 一类是 172.*。
目前 gateway2 需要处理两套转发逻辑,除了丑一些功能是没有问题的。

现在有一个需求需要打通欺骗服务的网络链路,srv1/srv2/srv3 可以互相访问对方的服务端口。

同构网络架构方案
对于同网络架构的网络打通方案见 几种通过 iproute2 来打通不同节点间容器网络的方式。

异构网络架构方案
比较容易想到的方案是,少了一层那么为了兼容增加一层处理逻辑即可。

有了 交换机侧虚拟网络引流 的经验,netns 可以在这个地方尝试使用。

理论上以下的网络拓扑是可以正常运行的,但是存在一个问题:网桥 br-win 在 netns 里面,kvm 不能指定这个网桥

┌─────────────────────────────────────────────────────────────────────┐
│  Host                                                               │
│     ┌─────────────────────────┐     ┌─────────────────────────┐     │
│     │ vm1                     │     │ netns_win               │     │
│     │ ┌────────┐   ┌────────┐ │     │ ┌────────┐   ┌────────┐ │     │
│     │ │10.1.0.2│   │10.1.0.3│ │     │ │10.2.0.2│   │10.2.0.3│ │     │
│     │ │  eth0  │   │  eth0  │ │     │ │  eth0  │   │  eth0  │ │     │
│     │ └───│────┘   └───│────┘ │     │ └───│────┘   └───│────┘ │     │
│     │   veth1        veth2    │     │   vnet2        vnet3    │     │
│     │     └──────│─────┘      │     │     └──────│─────┘      │     │
│     │         docker0         │     │          br-win         │     │
│     │        10.1.0.1         │     │         10.2.0.1        │     │
│     │                         │     │                         │     │
│     │       172.16.23.2       │     │       172.16.23.3       │     │
│     │           eth0          │     │           eth0          │     │
│     └────────────│────────────┘     └────────────│────────────┘     │
│                vnet1                         veth-win               │
│                  └───────────────│───────────────┘                  │
│  192.168.32.251                 br1                                 │
│       br0                   172.16.23.1                             │
└────────│────────────────────────────────────────────────────────────┘eth0                                                           

所以需要调整一下,把 br-win 放在 host 内,使用 veth-peer 把 ip 留在命名空间内,变更后的网络拓扑如下:

┌─────────────────────────────────────────────────────────────────────┐
│  Host                                                               │
│     ┌─────────────────────────┐                                     │
│     │ vm1                     │                                     │
│     │ ┌────────┐   ┌────────┐ │       ┌────────┐   ┌────────┐       │
│     │ │10.1.0.2│   │10.1.0.3│ │       │10.2.0.2│   │10.2.0.3│       │
│     │ │  eth0  │   │  eth0  │ │       │  eth0  │   │  eth0  │       │
│     │ └───│────┘   └───│────┘ │       └───│────┘   └───│────┘       │
│     │   veth1        veth2    │         vnet2        vnet3          │
│     │     └──────│─────┘      │           └──────│─────┘            │
│     │         docker0         │                br-win               │
│     │        10.1.0.1         │                  │                  │
│     │                         │              veth-win1              │
│     │                         │     ┌────────────│────────────┐     │
│     │                         │     │ netns     eth1          │     │
│     │                         │     │  win    10.2.0.1        │     │
│     │                         │     │                         │     │
│     │       172.16.23.2       │     │       172.16.23.3       │     │
│     │           eth0          │     │           eth0          │     │
│     └────────────│────────────┘     └────────────│────────────┘     │
│                vnet1                         veth-win0              │
│                  └───────────────│───────────────┘                  │
│  192.168.32.251                 br1                                 │
│       br0                   172.16.23.1                             │
└────────│────────────────────────────────────────────────────────────┘eth0                                                           

如何对恶意流量进行分析

业务中使用 suricata 对流量进行分析,部署在欺骗服务所在的网桥上,这个位置获取拿到原始的流量数据。

如果是在 br0 的位置抓包,拿到的流量会携带一个 L4 Proxy 的源数据头,这个数据头会导致 suricata 识别不了一些协议,如何 HTTP。

┌────────────────────────────────────────────────────────────────┐
│  Host                                                          │
│    ┌─────────────────────────┐                                 │
│    │ vm1                     │                                 │
│    │ ┌────────┐   ┌────────┐ │             ┌────────┐          │
│    │ │  srv1  │   │  srv2  │ │             │10.2.0.2│          │
│    │ │10.1.0.2│   │10.1.0.3│ │             │  eth0  │          │
│    │ └───│────┘   └───│────┘ │             └───│────┘          │
│    │     └──────│─────┘      │                 │               │
│    │ suricata ──│            │     suuricata ──│               │
│    │           SNAT          │               SNAT              │
│    │            │            │     ┌───────────│───────────┐   │
│    │            │            │     │           │           │   │
│    │       gateway2 (Listen) │     │      gateway2 (Listen)│   │
│    │            │ 172.16.23.2│     │           │172.16.23.3│   │
│    └────────────│────────────┘     └───────────│───────────┘   │
│                 └───────────────│──────────────┘               │
│                              L4 Proxy                          │
│                                 │                              │
│           192.168.32.100     gateway1 (Listen)                 │
│           192.168.32.101        │ 192.168.32.251               │
│   br0 ───────── DNAT ───────────┘                              │
│    │                            │                              │
│    │ ──────── L4 Proxy ─────────┘                              │
└────│───────────────────────────────────────────────────────────┘eth0                                                         

suricata 在没有流量的情况下也就是有一定的资源占用的,整个 Host 机器可能存在多个 vm,意味着也存在多个 suricata。

目标:减少 suricata 数量,复用 suricata 资源,降低服务管理的成本。
gateway1 是所有流量的入口,只要拿到 gateway1 和 gateway2 之间的流量,并且去掉头部就是原始流量了。

比较占用性能的方案如下:

  1. 抓包 br1 网桥,获取所有的网桥流量
  2. 新建虚拟 tap 设备,指定网卡为 tap 设备启动 suricata
  3. 建立连接,增加连接相关的缓存
  4. 对包进行匹配和重组
    1. 匹配流量头
    2. 去掉流量头,修改 seq/ack 序号,重新生成一个网络数据包
    3. 新的数据包写入至 tap 设备中
  5. 接收 suricata 的事件,使用缓存相关的数据订正 IP 相关信息

调整后的的网络拓扑如下,新增 vtap0 给 suricata 抓包分析恶意流量

┌─────────────────────────────────────────────────────────────────────┐
│  Host                                                               │
│     ┌─────────────────────────┐                                     │
│     │ vm1                     │                                     │
│     │ ┌────────┐   ┌────────┐ │       ┌────────┐   ┌────────┐       │
│     │ │10.1.0.2│   │10.1.0.3│ │       │10.2.0.2│   │10.2.0.3│       │
│     │ │  eth0  │   │  eth0  │ │       │  eth0  │   │  eth0  │       │
│     │ └───│────┘   └───│────┘ │       └───│────┘   └───│────┘       │
│     │   veth1        veth2    │         vnet2        vnet3          │
│     │     └──────│─────┘      │           └──────│─────┘            │
│     │         docker0         │                br-win               │
│     │        10.1.0.1         │                  │                  │
│     │                         │              veth-win1              │
│     │                         │     ┌────────────│────────────┐     │
│     │                         │     │ netns     eth1          │     │
│     │                         │     │  win    10.2.0.1        │     │
│     │                         │     │                         │     │
│     │       172.16.23.2       │     │       172.16.23.3       │     │
│     │           eth0          │     │           eth0          │     │
│     └────────────│────────────┘     └────────────│────────────┘     │
│                vnet1                         veth-win0              │
│                  └───────────────│───────────────┘                  │
│  192.168.32.251                 br1 ─────────────┐                  │
│       br0                   172.16.23.1        vtap0                │
└────────│────────────────────────────────────────────────────────────┘eth0                                                           

一些想法

  1. netns 是个好东西,对于网络的隔离可以做到非常灵活的程度
  2. 涉及对外自定义的协议尽量使用常见协议,否则外部一旦部署升级也会麻烦一些,涉及三方服务也不能识别,比如 suricata 如果是用 HA Proxy 是可以支持剥离的

参考

  1. 几种通过 iproute2 来打通不同节点间容器网络的方式,https://www.cnblogs.com/shuqin/p/18529071

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/921189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业网站建设推广含义平台型网站

一、python库camelot安装及使用中的一些注意事项 1&#xff09;camelot方法有两种解析模式&#xff1a;流解析&#xff08;stream&#xff09;、格子解析&#xff08;lattice&#xff09;&#xff0c;其中格子解析能够保留表格完整的样式&#xff0c;对于复杂表格来说要优于流…

做设计的地图网站网站建设费用申请

作者&#xff5c;秦承刚&#xff0c;吴启翾&#xff0c;喻望&#xff0c;杨伟 编辑&#xff5c;张婵 出处丨高效开发运维 5 月 2 日&#xff0c;谷歌发布了一款新型的沙箱容器运行时 gVisor&#xff0c;号称能够为容器提供更安全的隔离&#xff0c;同时比 VM 更轻量。容器基于共…

深入解析:高性能分布式对象存储RustFS

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

一款在线免费 PDF AI 工具平台,PDF 拆分,合并,加水印,PDF与Word、Excel、PPT、图片、TXT、HTML、Markdown互转的在线AI工具

该网页是一款在线免费 PDF AI 工具平台,核心功能围绕 PDF 处理展开,同时涵盖多格式文件与 PDF 的相互转换,具体信息如下: 一、核心功能板块 (一)PDF 处理功能PDF 拆分:可将单个 PDF 文件拆分为多个独立的 PDF 文…

计算机核心课

别再瞎学了!计算机科学10门核心课,才是真“硬通货” 身边总有计算机专业的同学陷入“无效努力”:刷了300道算法题,面试时被问“红黑树的插入逻辑”却答不上;跟风学了Python爬虫、Vue框架,做项目时连“内存溢出怎…

微慕wordpress河南新站关键词排名优化外包

目录 引子 RDB RDB的优缺点 小节一下 引子 不论把Redis作为数据库还是缓存来使用&#xff0c;他肯定有数据需要持久化&#xff0c;这里我们就来聊聊两种持久化机制。这两种机制&#xff0c;其实是 快照 与 日志 的形式。快照:就是当前数据的备份&#xff0c;我可以拷贝到磁…

【SimpleFOC】vofa+监控电机数据

使用vofa+,以及其“数据引擎”功能,可以将串口接收到的数据进行可视化,方便电机的调试:如角度、速度、以及电流采样等相关数值。 一、VOFA+下载 VOFA+官网下载地址 二、VOFA+配置三、STM32代码添加语句 举个例子 p…

ubuntu虚拟机磁盘扩展

1. 确认磁盘空间已扩展, 通常虚拟机磁盘为sdasudo fdisk -l /dev/sda 2. 扩展分区(如果需要) 如果扩展的空间未分配到分区,需要先扩展分区:sudo parted /dev/sda (parted) resizepart 3 # 假设LVM在分区3 (parte…

哪个网站做清洁的活多制作游戏的app

下面是新浪微博上曾经很火的一张图&#xff1a; 一时间网上一片求救声&#xff0c;急问这个怎么破。其实这段代码很简单&#xff0c;index数组就是arr数组的下标&#xff0c;index[0]2 对应 arr[2]1&#xff0c;index[1]0 对应 arr[0]8&#xff0c;index[2]3 对应 arr[3]0&…

开网站开发公司开发软件的流程

文章目录题目描述思路 & 代码题目描述 比 leetcode 136要难点注意&#xff1a;空间复杂度要求O(1)&#xff0c;否则用哈希表直接秒杀啦。昨天的笔试&#xff0c;还有刷的面经都有这道题。。。今天赶紧补补 思路 & 代码 相对于 leetcode 136&#xff0c;这边多了个分…

网站建设的风险管理网站做百度推广吗

操作符的分类 • 算数操作符 &#xff1a; 、 - 、 * 、 / 、 % • 移位操作符 &#xff1a; << 、 >> • 位操作符 &#xff1a; & 、 | 、 ^ • 赋值操作符 &#xff1a; 、 、 - 、 * 、 / 、 % 、 << 、 >> 、 & 、 |…

数学知识

exgcd(拓展欧几里得算法) exgcd,常用于解决形如 \(ax+by=gcd(a,b)\) 的方程。 容易知道,\(gcd(a,b)=gcd(b,a%b)\) 所以我们可以先解出来方程 \(bx+(a%b)y=gcd(b,a%b)\) 所以这个方程如何解呢? 考虑参考辗转相除法…

Whispers from the Star:Anuttacon推出的以AI智能体语音交互为核心的太空生存游戏 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站开发语言占有率wordpress简体中文下载

来源&#xff1a;亿欧网 作者&#xff1a;倪弋摘要&#xff1a;人工智能生成物是否具有知识产权&#xff1f;人工智能可以替代司法者吗&#xff1f;人工智能侵权责任如何认定&#xff1f;人工智能的出现会给现行的法律制度带来了不少挑战&#xff0c;只有在法律研究上未雨绸缪…

从0到1搭建高隐蔽性C2基础设施

前言 在红蓝对抗中,C2(Command&Control)服务器是红队的"神经中枢"————其稳定性决定行动能否持续,隐蔽性决定能否必避开蓝队溯源。多数红队行动暴露,根源在于C3存在明显指纹(如默认50050端口、CS特征…

CDBurnerXP刻录软件

CDBurnerXP刻录软件✅ 免费第三方小工具CDBurnerXP免费、简洁,支持数据盘、音乐 CD、ISO 镜像刻录。中文界面,适合普通用户。官网:https://cdburnerxp.se/

简单大气网站欣赏深圳市建设工程资料网站

开始学习了,希望我可以尽快成功上岸! 一、回溯理论基础 什么是回溯法?回溯法也可以叫做回溯搜索法,它是一种搜索的方式。 回溯是递归的副产品,只要有递归就会有回溯。 回溯法的效率回溯法的本质是穷举,穷举所有可能,然后找出我们想要的答案。如果想让回溯法高效一些,可…

湖南地税局官网站水利建设基金长沙全网覆盖的网络推广

1、前言 在大型企业项目中&#xff0c;系统架构复杂多变&#xff0c;一个项目根本无法支撑起所有业务。为了提高项目扩展性、灵活性、重用性&#xff0c;封装性&#xff0c;将项目分为多个Module是非常必要的。 这里就不说IDEA如何安装了&#xff0c;安装好IDEA后需要修改maven…

网站标题怎么做网站建设工作要点

01什么是判断题&#xff1f;判断是关于对象和它属性有所肯定或者否定的思维形式。在研究数学中&#xff0c;经常要对现实世界的空间形式和数量关系&#xff0c;作出肯定或者否定的回答&#xff0c;因而要大量使用判断&#xff0c;并把一些正确的判断作为进一步研究问题的依据。…

普定县建设局网站wordpress 添加广告

一. 简述静态网页和动态网页的区别。 请求响应信息&#xff0c;发给客户端进行处理&#xff0c;由浏览器进行解析&#xff0c;显示的页面称为静态页面。处理文件类型如.html、jpg、.gif、.mp4、.swf、.avi、.wmv、.flv等 请求响应信息&#xff0c;发给事务端进行处理&#xff0…