【博客622】利用Linux bridge泛洪做流量审计与分析

利用Linux bridge泛洪做流量审计与分析

1、Linux bridge泛洪

在 Linux 中,bridge 是虚拟的二层网络设备。不同于 eth 或 ens 等真实的网络设备,bridge 能够让同一 Linux 系统内的其他网络设备连接起来;比如 docker 默认的网络模型就是利用 bridge 将各个实例的网络打通,如图:
在这里插入图片描述

2、强制泛洪

在 brctl 的 manual 中有一段描述:

brctl setageing <brname> <time> sets the ethernet (MAC) address
 ageing time, in seconds. After <time> seconds of not having seen
a frame coming from a certain address, the bridge will time out
(delete) that address from the Forwarding DataBase (fdb).

bridge 会维持一张 mac 地址表,叫 fdb。Linux 内核会为该 bridge 维持一个 gc 定时器,该定时器会定时去清理失效的 fdb 记录;该定时器默认的间隔为 300s;可以通过命令 brctl showstp docker0 看到:

brctl showstp docker0
docker0
 bridge id		8000.0242d4005155
 designated root	8000.0242d4005155
 ...
 ageing time		 300.00
 ...

veth4f17ef9 (1)
 ...

当这个 ageing time 设置为 0,会发生什么呢?
答案:强制泛洪效果

当一个网络包经过 bridge 而 bridge 在其 fdb 中找不到对应记录,即 bridge 不确定该网络包该通过那个网口发出去时,bridge 会将该网络包通过除收包网口外的其他所有网口发出去,俗称泛洪。 当将 ageing time 设置为 0 时, 意即 bridge 无需维持 fdb ,每当收到一个网络包,都将这个网络包泛洪出去。
在这里插入图片描述

3、利用Linux bridge泛洪做流量审计与分析

实验拓扑:
在这里插入图片描述

步骤:

# 准备 namespace client
ip netns add nsclient
ip link add vci type veth peer name vco
ip link set vci netns nsclient
ip netns exec nsclient bash -c "
ip link set dev vci up
ip addr add 10.0.0.2/24 dev vci
ip route add default via 10.0.0.1 dev vci
"

# 准备 namespace server
ip netns add nsserver
ip link add vsi type veth peer name vso
ip link set vsi netns nsserver
ip netns exec nsserver bash -c "
ip link set dev vsi up
ip addr add 10.0.0.1/24 dev vsi
ip route add default via 10.0.0.2 dev vsi
"

# 准备 namespace pcap,用于抓包
ip netns add nspcap
ip link add vpi type veth peer name vpo
ip link set vpi netns nspcap
ip netns exec nspcap bash -c "
ip link set dev vpi up
"

# 准备 bridge br0
# brctl 管理,需要安装 bridge-utils
brctl addbr br0
brctl addif br0 vco
brctl addif br0 vso
brctl addif br0 vpo
ip link set dev vco up
ip link set dev vso up
ip link set dev vpo up
ip link set dev br0 up
# brctl setageing br0 0 # 强制泛洪,稍后再开启

注意: 如果该环境中已经运行 docker,则需要执行命令 iptables -t filter -I FORWARD -i br0 -o br0 -j ACCEPT ,使得 br0 的流量不受 docker 的影响。

实验操作:

开启几个终端窗口:namespace client, namespace server, namespace pcap, bridge br0

进入 namespace 的命令:ip netns exec ${ns name} bash
比如进入 namespace client:ip netns exec nsclient bash

未开启强制泛洪时:

在这里插入图片描述

在这里插入图片描述

开启强制泛洪时:

在 bridge br0 窗口中执行命令 brctl setageing br0 0,再次试验 ping 和 http server。

在这里插入图片描述
在这里插入图片描述

总结

在网络设备上做流量镜像时,bridge 的强制泛洪实现了网卡级别的流量镜像效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值