Zenedge公司为开源社区贡献了一款名为Zentables-addons的开源Linux内核扩展模块。该模块可以增强系统中HTTP负载均衡器(例如HA Proxy和Amazon ELB)屏蔽IP地址的能力。该团队所研发的产品可以有效地将切断被屏蔽的IP地址与Linux内核用户空间之间的通信访问。这一扩展模块通过代理协议检测并利用恶意IP预测技术,将屏蔽能力提升了将近百分之六十六。
Zentablesaddons实际上是一个netfilter/iptables模块的集合,而这两个模块运行在Linux系统的内核层,而不是用户层。Zentablesaddons模块目前主要有两大模块组成:一个是专门用于解析代理协议的模块,该模块名为xt_zenset。它可以提取用户的真实源地址,并用这一地址与预鉴定的恶意IP地址进行对比,以鉴定出真实的恶意IP地址;另一个模块可以迅速切断并屏蔽TCP连接。第二个模块名为xt_RESET,该模块能够在即将建立通信的两端模拟TCP重置。
现在让我们来深入了解一下,当我们接收到一个从恶意客户端发送过来的请求时,会发生什么事情。
HTTP请求首先会抵达负载均衡器,该模块会首先利用代理协议header来对请求进行第一轮的检测,检测客户端的真实IP地址。检测通过后,模块会将请求转发至网络服务器。网络服务器便会根据请求信息来进行相应的处理。
当我们使用了七层网络协议来控制操作系统的内核访问时(比如说Nginx或者Apache),操作系统内核将会拷贝请求数据,然后将内核操作环境转换为用户层,并在用户空间处理网络请求。这一步骤往往消耗的资源过多,因为它需要先将请求信息进行拷贝,然后再进行处理。然后,Nginx或者Apache服务器会从代理协议header中提取出真实的IP地址,并将其与预测的恶意IP地址进行比对,最后才决定是否允许该IP地址访问。而在这一步骤中,系统需要根据请求信息向负载均衡器提供HTTP应答信息。这一操作步骤同样需要消耗大量资源,因为我们需要保持恶意TCP链接的连接状态。最终,负载均衡器会将请求的处理信息发送至恶意客户端。
当我们使用Zentablesaddons时,我们不仅可以避免对请求数据进行拷贝,还可以避免系统在内核层与用户空间进行频繁地切换。当请求信息抵达网络服务器之后,系统数据包过滤器会使用xt_zenset模块来对请求信息进行检查。如果请求的源地址与恶意IP地址相匹配,系统会立刻使用xt_RESET模块切断网络连接。最终,当负载均衡器接收到了TCP RST之后,系统会将HTTP错误信息发送给恶意客户端。
使用方法:
比如说,我们要屏蔽源地址10.10.10.10通过代理协议或者TCP RST发送的请求,或者是直接屏蔽这一IP地址,我们可以这样操作:
安装模块
模块依赖:
构建模块:
运行模块:
还没有评论,来说两句吧...