使用BPF定制安全组

发布于:2024-10-24 编辑:匿名 来源:网络

之前的文章已经看了蛮多了,看来网上的话题比较流行。在这篇文章中,我们继续探索BPF在网络领域的应用:使用BPF实现安全组。

根据腾讯云的文档,安全组的概念如下:安全组是一个具有状态包过滤功能的虚拟防火墙。用于设置云服务器、负载均衡、云数据库等实例的网络访问控制,以及控制实例级别。

进出流量是网络安全隔离的重要手段。在本文中,我们将实现以下规则: 代码语言:txt copy 0.0.0.0/0:6 ---> TCP:00.0.0.0/0:* -x-> TCP:0 即允许所有源端口6 TCP流量访问服务器的0端口,其他端口访问的流量被丢弃(本文只讨论入站流量的过滤,当然出站流量的限制也是可行的)。

XDP和BPFXDP是eXpress Data Path的缩写,它为Linux内核中的BPF提供了一个框架,以实现高性能的可编程数据包处理。当网络驱动程序接收到以太网帧时,它在整个软件堆栈的起点运行 BPF 程序。

回到本文的主题,我们可以通过将安全组规则翻译成BPF程序并使用XDP挂载到网卡设备上执行来达到我们的目的。实现上述功能的BPF程序如下:代码语言:txt复制#include #include #include #include # include #include "bpf_helpers.h"#include "bpf_endian.h"static int is_secure_source(void *data_begin, void *data_end){struct ethhdr *eth_header = data_begin;if ((void *)(eth_header + 1) > data_end) {return 1;}if (eth_header->h_proto != bpf_htons(ETH_P_IP)) {return 1;}struct iphdr *ip_header = (struct iphdr *)(eth_header + 1);if ((void * )(ip_header + 1) > data_end) {return 1;}if (ip_header->protocol != IPPROTO_TCP) {return 1;}struct tcphdr *tcp_header = (struct tcphdr *)(ip_header + 1);if ((void * )(tcp_header + 1) > data_end) {return 1;}if (tcp_header->dest == bpf_htons(0)) {if (tcp_header->source != bpf_htons(6)) {return 0;//拒绝} else {return 1;// 接受}} else {return 1;}}SEC("xdp")int xdp_secure_policy(struct xdp_md *ctx){void *data= (void *)(__u64)ctx->data;void *data_end = (void *)(__u64)ctx->data_end;if (is_secure_source(data, data_end)) {返回 XDP_PASS;} else {返回 XDP_DROP;}} char __license[] SEC("许可证") = "GPL";该程序的功能是对网卡收到的每条数据跳过合法的以太网帧头、IP数据报头,最后检查TCP报文头。

目的端口是否为0,如果是,进一步判断源端口是否为6,以判断是否允许入站流量。在整个程序中,指针边界的判断是必要的。

如果缺少,程序将无法通过内核BPF。验证器的验证。

(程序中我们忽略未知/不完整的数据)最后编译成二进制文件sg.bpf.o。另外,我们还需要一个简单的服务器程序来验证功能: 代码语言:txt 复制包 mainimport ("io""log""net")funcserve(c net.Conn) {defer c.Close()log. Printf ("客户端已连接:%s\n", c.RemoteAddr().String())io.Copy(c, c)log.Printf("客户端已关闭:%s\n", c.RemoteAddr(). String ())}func main() {lis, err := net.Listen("tcp", ":0")if err != nil {panic(err)}for {conn, err := lis.Accept( ) if err != nil {panic(err)}goserve(conn)}} 程序的功能非常简单。

它侦听端口 0。对于每个连接的客户端,它会回显客户端的输入。

最后编译成可执行程序testserver。在实验中加载BPF程序之前,我们首先运行服务器程序进行测试。

代码语言:txt。复制 $./testserver 然后从另一台主机连接到此服务。

在两个不同的终端上执行以下命令。 : 代码语言:txt copy $nc $(SERVER_IP) 0 -p 6hellohello 代码语言:txt copy $nc $(SERVER_IP) 0hihi 可以看到,两个客户端都能正常访问服务器。

现在,我们加载上面的 BPF 程序: 代码语言:txt copy $ sudo ip link set dev eth0 xdpgeneric obj sg.bpf.o sec xdp verbose 将 BPF 程序加载到 eth0 网卡上(这里选择 xdpgeneric 作为运行模式是因为实验环境中的虚拟机不支持 xdpdrv /xdpoffload )。现在,再次尝试在两个终端中向服务器发送数据: 代码语言:txt copy $ nc$(SERVER_IP) 0 -p 6 hellohelloheyhey 代码语言:txt copy $nc$(SERVER_IP) 0 hihino 回复 性能符合预期。

源端口 6 的客户端仍然可以向服务器发送数据并接收响应,而其他客户端则不断重传,直到服务器重置连接。本文的代码可以在这里找到。

结论 本文探讨了使用 XDP 和 BPF 来实现自定义安全组,以编程方式控制对入站流量的访问。

使用BPF定制安全组

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 总投资35亿!五松半导体项目落户西部(重庆)科学城

    总投资35亿!五松半导体项目落户西部(重庆)科学城

    华龙网 集成电路事关国家重要,关系国家安全和国民经济命脉,也是智能手机发展的基础产业重庆大数据.记者获悉,近日,又一个集成电路项目——五松半导体8英寸MEMS特种芯片IDM产业基地项目落户西部(重庆)科学城。 据悉,该项目已获得国家相关部委批准,总投资35亿元,规划面

    06-06

  • 中国学者实现了室温固态可编程量子处理器

    中国学者实现了室温固态可编程量子处理器

    新华网消息 量子计算被认为是下一代信息技术的重要方向。 然而,由于量子位非常脆弱,通常只能在极低温度等特殊条件下维持。 量子特性。 近日,中国科学技术大学杜江峰院士团队利用一系列新技术,首次在室温大气条件下实现了基于固态自旋系统的可编程量子处理器。 国际学术期

    06-06

  • 2018年IPC手动焊接返修返修大赛中国锦标赛成绩揭晓

    2018年IPC手动焊接返修返修大赛中国锦标赛成绩揭晓

    中国上海12月7日 - 12月7日上午11点10分,久负盛名的IPC手动焊接返修返修大赛中国锦标赛在上海举行深圳会展中心国际电路板及电子组装华南展览会圆满结束。 株洲中车时代电气有限公司的杨艳以满分的绝对优势夺得中国赛冠军;中国电子科技集团公司第三十八研究所的王英和江苏金

    06-06

  • 张汝京:打造最好的“中国芯”!

    张汝京:打造最好的“中国芯”!

    他心里有一颗“中国芯片”。 当半导体行业陷入困境时,他义无反顾地加入了芯片行业。 被封锁、被打压,经历人生的坎坷,他始终不改初心,在七十多岁的时候开始了第四次创业。 他就是希恩(青岛)集成电路有限公司董事长张汝京,中国芯片产业史上非常重要的人物。 英特尔创始人

    06-06

  • 广东猛,浙江如何留住“花”?

    广东猛,浙江如何留住“花”?

    热门电视剧《繁花》已经大结局了。 剧中不仅看到了“富贵迷人”的黄河路,还看到了以一桩桩生意搭建起整条街的浙江服装商人。 就像剧中红遍上海的“三阳品牌”一样,在上世纪90年代炎热的90年代,杭州的“范老板”、海宁的“魏老板”、“小宁波”勇敢地进入上海,创造了来自浙

    06-17

  • Intel推出Moon Lake架构:全新P、E核心、Xe2-LPG显卡、全新NPU 4带来更多人工智能性能

    Intel推出Moon Lake架构:全新P、E核心、Xe2-LPG显卡、全新NPU 4带来更多人工智能性能

    Intel发布的Moon Lake架构标志着Core Ultra移动处理器演进的重要一步,专注于电源效率和优化的性能。 全新 P 和 E 核心的集成,加上 Xe2-LPG 显卡和 NPU 4 的加入,可提供高达 48 INT8 的性能,体现了英特尔致力于提升其芯片组人工智能能力的承诺。 这一发展得到了英特尔与微

    06-18

  • Gartner:阿里云市场份额翻倍,全球市场“看向彼岸”

    Gartner:阿里云市场份额翻倍,全球市场“看向彼岸”

    7月10日,权威研究机构Gartner发布全球云计算市场数据。 2018年阿里云全球市场份额近一倍,位居全球第一。 市场是“坐三看二”。 分析人士认为,阿里云对研发的投入近乎激进,建立了全球最丰富的技术产品矩阵,并带来强劲增长。 据Gartner统计,2019年全球云计算市场进一步向

    06-18

  • 「亿嘉达」完成数千万元Pre-A轮融资,专注泌尿及盆底健康领域

    「亿嘉达」完成数千万元Pre-A轮融资,专注泌尿及盆底健康领域

    投资界(ID:pedaily)10月20日消息,近日,亿嘉达医疗科技(上海)有限公司(以下简称“亿嘉达”)完成数千万元Pre-A轮融资。 本轮融资由辰德资本领投,朗玛峰创投和老股东华创资本跟投,普万资本担任财务顾问。 本轮融资将用于亿嘉达泌尿及盆底健康产品的持续创新、临床研究

    06-18

  • 宇顺电子拟以200亿元收购成都润运100%股权,转型为影院运营

    宇顺电子拟以200亿元收购成都润运100%股权,转型为影院运营

    来自投资界的消息,宇顺电子1月10日晚间公告称,公司将复牌,并将于继续推进重大资产重组事项。 重组事项为:公司拟以1亿元收购成都润运%股权,并将其转型为影院运营。   此前,宇顺电子曾披露拟通过发行股份、支付现金或两者结合的方式收购成都润运%股权,并已与控股方星

    06-17

  • 赞成功借壳上市一石二鸟成“微信生态第一股”

    赞成功借壳上市一石二鸟成“微信生态第一股”

    昨日晚间,有赞创始人及CEO白亚发布内部信称,相关部门已批准使用中国创新55亿股支付公司(.HK)换取有赞51%的股份。 白亚表示,上市极大提升了有赞品牌的可信度,资本市场也赋予了有赞更好的融资方式。   成功借壳上市历时22个月  事实上,有赞早在2020年(22个月前)就

    06-18

  • 艾莎医药完成过亿元B轮融资,启明创投

    艾莎医药完成过亿元B轮融资,启明创投

    投资社区(ID:pedaily)领投 据5月11日消息,近日,专注于上市后服务的数字化临床CRO艾莎医药创新药及器械市场,宣布完成逾亿元B轮融资。 1亿元B轮融资。 本轮融资由启明创投领投,道和智易、思科瑞芯跟投。 老股东博航资本继续追加投资,劢柏资本担任独家投资人。 本轮融资

    06-17

  • 为什么我们不再用Root和毛笔呢?

    为什么我们不再用Root和毛笔呢?

    ——重要警告:允许可能会导致系统不稳定。 ——重要警告:甚至可能造成不可挽回的硬件损坏,让您后悔莫及。 当他做出这个决定时,不断弹出的警告对话框试图劝说他留下来。 就在这时,他仿佛听到手机系统在说:“少年,一步就会走向深渊,即便如此,你还会这样做吗?是的,如

    06-21