【eBPF】BCC实现tcp防火墙(下)

admin 2024年2月24日22:29:16评论11 views字数 1414阅读4分42秒阅读模式
【eBPF】BCC实现tcp防火墙(下)

免责声明

【eBPF】BCC实现tcp防火墙(下)

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者及本公众号不为此承担任何责任。

【eBPF】BCC实现tcp防火墙(下)

【eBPF】BCC实现tcp防火墙(下)

检测入站流量

【eBPF】BCC实现tcp防火墙(下)
  1. 定义在sock试图建立连接时出发的函数:

int trace_connect_entry(struct pt_regs *ctx, struct sock *sk)

2. 定义内部变量,分别为:

  • key_hash key = {}:用来作为散列的键的结构体。
  • full_packet packet_value = {}:用来存储此连接全部数据的结构体。
  • u8 verbose_state = 0:用于指示详细事件类型的状态变量。
3. 检查是否为ipv4连接,不是则返回0:
u16 family = sk->__sk_common.skc_family;if (family != AF_INET){    return 0;}

4. 获取pid,端口,ip信息:

u32 pid = bpf_get_current_pid_tgid() >> 32;u16 dst_port = sk->__sk_common.skc_dport;dst_port = ntohs(dst_port);u16 src_port = sk->__sk_common.skc_num;u32 src_ip = sk->__sk_common.skc_rcv_saddr;u32 dst_ip = sk->__sk_common.skc_daddr;

5. 检查pid是否在我们设置的监控列表中,不是则返回0:

u32 *monitored_pid = pid_list.lookup(&pid);if (!monitored_pid){    return 0;}

6. 如果目的ip不允许,不会阻断连接但是会记录下来:

u32 *allowed_ip = allow_list.lookup(&dst_ip);if (!allowed_ip){    key.src_ip = src_ip;    key.src_port = src_port;    key.dst_ip = dst_ip;    key.dst_port = dst_port;    packet_value.src_ip = src_ip;    packet_value.src_port = src_port;    packet_value.dst_ip = dst_ip;    packet_value.dst_port = dst_port;    packet_value.pid = pid;    bpf_get_current_comm(&packet_value.comm, sizeof(packet_value.comm));    verbose_state = 1;    monitored_connections.update(&key, &packet_value);}else{    verbose_state = 2;}if (VERBOSE_OUTPUT){    verbose_event v = {};    make_verbose_event(&v, src_ip, dst_ip, src_port, dst_port, pid, verbose_state);    verbose_events.perf_submit(ctx, &v, sizeof(v));}
【eBPF】BCC实现tcp防火墙(下)

运行效果

【eBPF】BCC实现tcp防火墙(下)
  1. 启动监控时:

【eBPF】BCC实现tcp防火墙(下)

2. 有连接产生时:

【eBPF】BCC实现tcp防火墙(下)

【eBPF】BCC实现tcp防火墙(下)

总结

【eBPF】BCC实现tcp防火墙(下)

本文讲述了如何监控socket入站流量,结合上一篇文章,讲解了如何使用BCC进行简单的tcp防火墙过滤与监控功能。

原文始发于微信公众号(赛博安全狗):【eBPF】BCC实现tcp防火墙(下)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月24日22:29:16
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【eBPF】BCC实现tcp防火墙(下)http://cn-sec.com/archives/2522570.html

发表评论

匿名网友 填写信息