Hades-lite

Hades-lite 青松云安全开源的一个内核级 Anti-ddos 的驱动程序,轻量且高效,构建高性能代理防御,单机可抵御7Gb DDoS攻击

Github stars Tracking Chart

Hades-lite

1、技术背景:

分布式拒绝服务 DDoS ,由于攻击简单、容易达到目的、难于防止和追查,逐渐成为常见的攻击方式,其目的是使计算机或网络无法提供正常的服务。随着网络资源的丰富以及带宽的增长,任何人都可能有能力影响网络服务的正常使用。

由于传统x86服务器架构io处理性能问题,导致大流量的ddos攻击发生时,服务处于阻塞或者宕机状态。使得原本通用防护方案的短板凸显出来。传统厂商的防护方案在此又显得笨重昂贵,如果能有一种轻量级的方案,并且兼顾下一代防火墙的优势,将会是一种非常好的解决方案。

2、技术原理:

由于ddos flood 流量大部分为异常流量,为减轻内核处理负载,直接将非法流量在驱动层面直接丢弃。驱动按照NUMA 统一map内存表项分配到不通CPU上面,然后将每core对应的内存从NUMA中进行划分。防止remote memory access。

core0 为物理CPU1,core1为物理CPU2,core2为物理CPU3,core3为物理CPU4。服务器将每颗CPU引出的物理内存作为LocalMemory,访问时采用访问本地内存优先的策略,阻止CPU之间交互报文。同时为阻止CPU之间进行报文交互,PCIE Local Node需要将会话进行隔离。NIC侧内核需要将queue与指定的node进行绑定。申请内存做DMA保证内存访问一致性。

image

网卡队列与内核中断绑定: NIC QueueIrq绑定 网卡队列与中断绑定以后能够保证队列的同源同宿,核与核之间并行处理报文。在实际使用时如果出现频繁中断的情况需要加入中断合并处理,减少中断次数。

驱动层面的处理流程如下图: 核心处理模块流程:

image

Tcp流量举例,当发生攻击时首先检测流量是否在白名单中,如果在然后检测是否超时,没有超时的情况放行,对于出机房方向的流量默认放行,置标志位为永久有效。对于没有在白名单,或者受防护主机列表里面的流量,进入下一级防护流程。并记录当前流量属性。作为后续异常报文识别判断依据。

image

白名单超时报文处理:当流表中流量发生超时以后,检测是否还有会话保持,如果超过一定时间没有会话进来则进行老化处理,对于大流量攻击导致的会话表项超载,需要丢弃此会话。 流量整形:对于正常通过防御流程的报文,如果还是超过本地防御阈值的情况,进行流量整形处理,将超过阈值的流量进行丢弃处理,保证不会因为流量过高导致服务器被打挂。

3、 使用说明

A.给内核网卡驱动打补丁,目前适用内核4.4.104版本

patch -p1 < ${SRC_DIR}/ixgbe-4.4.104.patch

B.将ddos.c 放入如下内核目录中

/linux/linux/drivers/net/ethernet/intel/ixgbe/

C.编译内核

4、物理环境及性能

CPU :4 cores , Memery:16G , NIC:Intel 82599 10G

Performance :64bit 7G

Main metrics

Overview
Name With Ownerqssec/Hades-lite
Primary LanguageC
Program languageShell (Language Count: 2)
Platform
License:GNU General Public License v3.0
所有者活动
Created At2018-08-02 09:32:11
Pushed At2018-12-25 02:43:43
Last Commit At2018-12-25 10:43:43
Release Count0
用户参与
Stargazers Count97
Watchers Count8
Fork Count28
Commits Count16
Has Issues Enabled
Issues Count2
Issue Open Count2
Pull Requests Count0
Pull Requests Open Count0
Pull Requests Close Count0
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private