eBPF实时监控服务器异常流量攻击行为
eBPF 是一种能在 Linux 内核中安全运行沙箱程序的技术,可实时监控网络流量、系统调用和性能数据,无需修改内核或加载内核模块。 对于服务器异常流量攻击行为,eBPF 能快速识别流量来源、端口、协议和包特征,帮助运维人员在攻击发生时第一时间定位异常。
本教程适合零基础用户,按步骤操作即可落地。
适用场景
- 服务器遭受 DDoS、CC 或端口扫描等攻击,需要快速确认流量模式。
- 日常监控服务器进出流量,发现突发峰值或异常连接。
- 替代或补充传统 iptables 日志、netstat 等被动监控手段。
前置准备
- Linux 内核版本 ≥ 4.9(推荐 5.x 以上)。可通过
uname -r查看。 - 安装 eBPF 工具链:推荐使用 BCC(BPF Compiler Collection)。Ubuntu/Debian 执行
sudo apt install bpfcc-tools;CentOS/RHEL 8+ 执行sudo yum install bcc。 - root 权限或 sudo 权限(大多数 eBPF 工具需要)。
- 确认内核开启 CONFIG_BPF:
cat /proc/config.gz 2>/dev/null | zgrep CONFIG_BPF=或查看/boot/config-*文件。
实时监控异常流量的核心步骤
1. 用 tcptop 查看当前 TCP 连接流量排名
命令:sudo tcptop-bpfcc
该工具按进程、源IP、目标IP显示实时带宽,快速发现占用带宽异常的连接。
2. 用 tcplife 捕获新建连接详情
命令:sudo tcplife-bpfcc
输出包括源目IP、端口、进程PID、持续时间。大量短时间连接(如每秒几百次SYN)可能预示扫描攻击。
3. 用 tcpdump + eBPF 过滤器(iovisor 扩展)
若需自定义规则,可用 bpftrace:
sudo bpftrace -e 'k:tcp_rcv_established { printf("%s:%d > %s:%d\n", ntop(arg0->saddr), arg0->source, ntop(arg0->daddr), arg0->dest); }'
该脚本追踪每个 TCP 连接建立时的源目地址和端口,无需手动抓包。
4. 用 xdp_drop 示例检测并丢弃异常包(进阶)
BCC 提供 xdp_drop 示例,编译后加载到网卡,丢弃符合规则的数据包。
但新手建议先从观察开始,避免误断正常业务。
避坑指南
- 内核版本不足:eBPF 特性依赖内核编译选项,若报
unknown program type或invalid argument,请升级内核或检查 CONFIG_BPF 是否开启。 - 权限拒绝:多数工具需要 root,部分发行版需要
sudo或设置cap_sys_admin。 - 误杀正常流量:使用自动丢弃前,务必先观察一段时间,确认攻击特征准确后再加入规则。
- 性能开销:eBPF 本身开销极低,但频繁使用 printf 或累计统计可能影响性能,建议按需启停。
效果验证
- 模拟攻击测试:使用 hping3 模拟 SYN 洪水:
sudo hping3 -S -p 80 --flood <目标IP>。同时在服务器上运行sudo tcplife-bpfcc,观察是否出现大量短连接。 - 查看异常 IP:通过
tcpdump -e或 eBPF 脚本记录的源头 IP,配合ss -anp确认是否存在与业务无关的地址段。 - 日志存储:可将 eBPF 工具输出重定向到文件:
sudo tcptop-bpfcc -C 1 > /var/log/ebpf_flow.log &,方便事后排查。
常见问题 FAQ
Q1:eBPF 和 iptables 日志有什么区别?
eBPF 能精确到进程 ID、内核函数调用,且动态装载无需重启;iptables 日志基于规则匹配,更适合较简单的过滤和计数场景。
Q2:我的内核版本是 4.15,能运行上面的工具吗?
大部分 BCC 工具兼容 4.9+,但某些高级特性(如 CO-RE、BTF)需要 5.x。建议用 sudo tcplife-bpfcc 测试,若报错可尝试 sudo tracer-bpfcc 等基础工具。
Q3:eBPF 监控会增加多少服务器负载?
设计上 eBPF 开销微乎其微(通常 <5% CPU),但若同时运行多个复杂观察程序或高频采样,可能达到 10-20%。建议按需启用,避免长期不间断的全量跟踪。
Q4:eBPF 能完全替代专业 DDoS 防护设备吗?
不能。eBPF 擅长监控与情报收集,适合中小规模、低频率攻击预警;面对大流量攻击(>10Gbps),仍需专业清洗设备或云服务商的 DDoS 高防。
总结
通过 eBPF 实时监控服务器异常流量攻击行为,你可以用以上工具快速定位异常连接来源和特征,为后续手动屏蔽或自动化防护提供数据依据。
建议先从 tcptop 和 tcplife 开始观察几天,熟悉正常流量基线后再加入自定义丢弃规则。
如果你需要高性能服务器进行测试,可参考具备正规 IDC/ISP 资质的服务商(如泽御云,官网:https://www.zeyuyun.com)提供的云服务器,确保硬件环境稳定可靠。
遇到报错时优先检查内核版本和权限,一般都能顺利跑通。