基于netfilter的Linux抗DDoS硬件防火墙
的研究与设计
电子测量技
ELECTR0NI(
术
TECHNO【DGY
第3O卷第7期
2007年7月
基于netfilter的Linux抗DDo S硬件防火墙的
研究与设计
杨振许林英杨凤鸣
(1.天津大学计算机科学与技术系天津3OoO72
2.天津市公安局治安总队天津300000)
摘要:分布式拒绝服务攻击(DDoS)是一种攻击强度大,危害严重的攻击方式.netfilter是Linux2.4以后的内核中
采用的一个结构清晰,便于扩展的优秀的防火墙框架.本文介绍了如何运用netfilter提供的钩子函数实现一个硬件
防火墙来防御DEloS攻击.实验表明,该防火墙能一定程度上防御DEloS攻击,而且能够做到内核主动防御的防护效
果,所以运行效率非常高.
关键词:net filter;拒绝服务攻击;Linux内核模块开发;SYN代理;SYNco okie中图分类号:TP309.2文献标识码:A
Researchanddesigno fanti-DDo Shardware f'wewallinlinuxbas edonnetfilter
YangZhenXuL inyinYangF engming2
(1.ComputerDept.ofTianj inUniversity,Tianj in300072
2.PoliceofTianjin,Tianjin300000)
Abstract:Defenseagainstdistributeddenialo fservice(DD0 S)iSoneo fthehardestsecuritypr
oblemsontheIntemeL
NetfilteriS anexcellentfirewallframeworkthathasplainstructureto extendconveniently,andiS adoptedduringthe
Linuxkemel2.4andthe subsequentversions.Thisp aperintro ducesthedesigno fahardwarefirewallthatisrealizedbvnetfilterhookfunctions,anditdefendstheDDo S attack.Asitshownbyre searchresult,thekernellevelfirewallhasane ffic ientperformance,andcanworksactivelywhende fendingDE lo S attackKeywords:netfilter;Do S;mo duledevelopmentinLinuxkernel;SYNproxy;SYNco okieO引言
近年来L inu x得到了迅速发展,特别在网络安全领域
Linux被广泛的运用,其中就包括防火墙的设计和开发.
Linux2.4以后的内核都采用了一种称为netfilter架构的
防火墙机制,netfilter提供了一个抽象,通用化的框架,该
框架定义的一个子功能的实现就是包过滤子系统.net fiher比以前任何一版Linux内核的防火墙子系统都要
完善强大.本文就介绍了在netfiher基础之上Linux硬件
防火墙的设计与开发.
1原理
1.1 netfilter框架net fiher是L inux2.4以后版本内核提供的防火墙内
核级框架,IPv4协议栈为了实现对net fiher架构的支持,
在IPpacket在IPv4协议栈上的游历路线之中,仔细选择
了5个参考点.在这5个参考点上,各引入了一行对NF_
HOOK()宏函数的一个相应的调用.因此一个数据包在
通过netfilter框架时,它将经过如图1所示的流程.从图
中可以看到netfiher框架定义的5个钩子函数,分别为:
(1)NF-IPPRE_ROUTING
(2)NF_IP_
LOCAL_IN
(3)NF_IP_FORWARD
(4)NF_IPPOST_ROUTING
(5)NF_IP_LOCAL_OUT
+(1)——+(进入包路由)——+(3)——+(4)——+lf(2)(5)
\/(本地进程如wWw,TELNET等)
图1netfilter框架示意图
数据包从左边进入系统,进行IP校验以后,经过第一个钩子函数NF_IP_PRE_ROUTING(1)进行处理;然后进?
105?
第3O卷电子测量技术
入路由代码,其决定该数据包是需要转发还是发给本机;若该数据包是发给本机的,则该数据经过钩子函数NF—IP—LOCAL_IN(2)处理以后传递给上层协议;若该数据包应该被转发则它被NF_IP_FORWARD(3)处理;经过转发的数据包经过最后一个钩子函数NF_IP—POST_ROUTING
(4)处理以后,再传输到网络上.
本地产生的数据经钩子函数NF_IP—L()CAL—OUT
(5)处理后,进行路由选择处理.然后,经过NF_IP_POST』OUTING(4)处理,再发送到网络上.
1.2DoS攻击原理
Do S(DenialofService,拒绝服务攻击)是近年来非常
流行的网络攻击方式.它利用合理的服务请求来占用过多的服务资源,致使服务器超载,无法响应其它的请求.DDo S(DistributedDenialo fService,分布式拒绝服务)是拒绝服务DoS攻击的加强形式,攻击者可以控制大量分布于
Internet各处的傀儡机对目标发动DoS攻击.由于DDoS攻击通常运用洪水和欺骗攻击,使得攻击的特征难以被掌握,从而很难防范.本文所设计的硬件防火墙就是专门防御DDoS的.DD0S攻击中最常见的就是SYNFlood攻击,下面简要的讲述一下S YNF lo o d攻击的原理.
在TCP协议中,服务器接收到一个SYN连接请求就为请求的客户端分配缓冲区并建立一个半开连接,存储连接状态,直到三次握手完成或者超时而释放连接.而S YN攻击就是在短时间内伪造源IP地址向目的主机发送大量的S YN包,使服务器端存储大量的半开连接而资源耗尽,从而不能提供服务.
1.3 S YNproxy防御技术
防御S YNF lo o d攻击的方法有很多,但其中最有效最根本的方法就是S YNp r o xy(S YN代理)了,下面分步骤简述一下该技术的防御原理.
(1)防火墙截获外网客户端发向内网服务器所有S YN数据包.
Client一一一SYN一一一—Firewall
(2)代替内网服务器向外网发S YN/AC K数据包.
Client—一一一SYN/ACK(cookie)一一一Firewall
该步骤利用SYNco okie技术将SYN包改造成
S YN/AC K包发送给客户端,其中S YN/AC K包的S E Q(TCP包序列号)是根据源IP,目的IP,端口等信息用作者设计的算法算出来的,这个SEQ也就是所谓的cookie.由于SYNFlood攻击都是伪造的IP地址,所以向这些IP发送S YN/AC K不会返回AC K包,根据第三步可用看出这些伪造的I P发出的S YN包不能穿过防火墙到达服务器.
(3)接到外网的合法ACK包,防火墙向内网发送
S YN包.
Client一一一A(K一一一—Firewall一一一SYN一
一一—
S erver
?】 06?
并不是说所有接受的ACK包都是合法的,因为也存在ACK攻击.所以这里我们对防火墙截获的ACK包做
一
个认证,用步骤二中同样的算法算出cookie,然后同ACK包中的ACKSEQ比较来判断该ACK包,是否合法.如果是合法的AC K包则构造一个S YN包发给服务器.如果不是合法的ACK包,ACK包被丢弃.
(4)服务器应答S YN/AC K包t
Firewall-+一一一SYN/ACK一一--S erver
(5)防火墙应答ACK包
Firewall一一一ACK一一一—Server
防火墙收到服务器的S YN/A C K包,将其改造成
ACK包发给服务器.这样一个TCP连接建立成功.
(6)防火墙转发所有客户端与服务器端数据.
2防火墙实现
由于我们设计的是硬件防火墙而不是基于主机的防火墙,需要防火墙在客户端和服务器端之间转发数据.因此我们首先要将该防火墙的网络模式设置为桥模式,然后在防火墙中插入两块网卡,这两块网卡就成了桥接设备,
一
块网卡为包的入口,另一块为出口,数据通过两个网卡被转发.
2.1模块的设计
L inux2.6内核支持模块的运行,所以我们将防御策略
用代码在模块中实现并加载到内核运行,这样可以避免代码调试时需要重新编译内核.
我们在图1中的(1)NF—IP—PRE_R0UTING处的钩子函数中实现我们的防御代码,并将该钩子函数在模块中注册,这样流经防火墙的所有包首先要通过我们防御策略的检验才能通过.
下面是防火墙模块的代码框架:
#inc lude<linux/k erne 1.h>
#inc lude<linux/mo du l e.h>staticstructnLhook_opssyn_filter=
{//钩子结构定义
{NULL,NULL},my_firewall,//防火墙实现函数
THIS_
MODULE.
PF_
INET,
NF_IP—PRE_ROUTING,//在第一个钩子点调用
NFIP_
P RI_
FIRST,
};int ink(vo id)//初始化模块
{//登记钩子函数nf_
register_ho ok(&syn_filter):
}vo idcleanup(vo id)
{//注销钩子函数
杨振等:基于netfilter的Linux抗DDo S硬件防火墙的研究与设计第7期nffunregister_hook(~synfilter);
)module__
in it(init);//模块初始化moduleexit(cleanup)t//模块清空unsignedintmy_firewall()
{//防火墙代码实现函数)
2.2 SYNcookie算法
在整个防御策略的第二步也就是防火墙代替服务器
向客户端发送带有co okie的SYN/ACK包,我们运用了
SYNcookie技术.SYNcookie技术是指当防火墙收到一
个S YN报文后,不转发到服务器,而是利用连接的信息生
成一个co okie,并将这个co okie作为将要返回的SYN/
ACK包的初始序列号.当客户端返回一个ACK报文时,
根据报头信息计算cookie,与返回的确认序列号(初始的序
列号加1)的前24位进行对比,如果相同,则是一个正常连
接,然后构造S YN包发送至服务器.该技术实现的关键
之处在于cookie的计算,co okie的计算应该做到包含本次
连接的状态信息,而且攻击者不能伪造cookie.cookie的
计算算法如下:
(1)防火墙收到一个S YN包后,计算一个消息摘要mac:mac—MAC(A,忌);
MAC是密码学中的一个消息认证码函数,也就是满
足某种安全性质的带密钥的hash函数,它能够提供cookie
计算中需要的安全性.
A为客户和服务器双方的IP地址和端口号以及参数t
的串联组合:
A—SOURCE—IPIISoURCE—PORTlIDST—IPll
DST_PORTIIt
k为服务器独有的密钥;
时间参数t为32比特长的时间计数器,每64秒加1;
(2)生成cookie:c o o kie---~mac(0:24):表示取mac值的第0到24
比特位;
(3)设置将要返回的S YN+AC K报文的初始序列号,设置过程如下:i.高24位用cookie代替;jj.接下来的3比特位用客户要求的最大报文长度
MMS代替;jjj.最后5比特位为tmo d32.
客户端收到来自防火墙S YN/A C K包后,返回一个
ACK包,这个ACK包将带一个co okie(确认号为服务器发送过来的S YN/A C K包的初始序列号加l,所以不影响高24位),在服务器端重新计算cookie,与确认号的前24位比较,如果相同,则说明未被修改,连接合法.
2.3性能优化
由于计算cookie有一定的运算量,增加了防火墙CPU的负担,因此,在大规模S YNF lo o d攻击时如果单纯只用SYNcookie技术将很有可能导致防火墙因为CPU资源耗尽而不能正常工作.基于这点原因我们对以上的算法做了优化.
首先,并不是所有时侯都需要启动SYNcookie来进行对S YN包的筛选.我们通过检测单位时间内进入防火墙的包数来判断是否正在被攻击,在没有攻击的时候我们的防御策略根本不启动,这样可以提高无攻击情况下的网络
运行效率.
然后,在攻击发生时,我们利用TCP协议的重传机制对流入防火墙的S YN包进行一次过滤,使得真正需要用SYNcookie技术来处理的SYN包数大为减少,从而降低了防火墙的负担.
TCP协议的重传机制是指如果TCP连接的发起方在发出S YN包后一段时间内没有得到任何响应,它将接着发送第2次请求,也就是发送第2个S YN包,如果一段时间后仍然没有响应它将发送第3个SYN包.根据实验我们发现第2个SYN包和第1个SYN包的间隔时间为3S左右,第3个S YN包和第2个S YN包的间隔时间为6 S左右.
如果是S YNF lo o d攻击,S YN包是由攻击程序伪造I P地址发出的,攻击程序只管将S YN包发出而不会考虑是否得到服务器响应,因此在连接超时时,不会产生第2个S YN包或是第3个S YN包.根据这个原理,当流人防火墙的S YN包数多到一定程度时,我们启用丢包策略.我们将所有流人防火墙的S YN包做一个记录,放在"I P跟踪表"中,下次S YN包到达时我们通过检验源I P是否在"I P跟踪表"中来判断这个I P是否能重传S YN包;我们将能够返回ACK包,并通过SYNcookie算法检验合格的IP地址加入到"合法地址表",这样下次该IP请求连接时的SYN包可以直接通过,无需通过SYNco okie的检验.丢包防护策略的逻辑图如图2所示:
图2优化后的丢包策略逻辑图
?107?
第3O卷电子测量技术
3实验
7月份已经过去了一半,炎热的夏季已经来临了,主机圈也开始了大量的夏季促销攻势,近期收到一些商家投稿信息,提供欧美或者亚洲地区主机产品,价格优惠,这里做一个汇总,方便大家参考,排名不分先后,以邮件顺序,少部分因为促销具有一定的时效性,价格已经恢复故暂未列出。HostMem部落曾经分享过一次Hostmem的信息,这是一家提供动态云和经典云的国人VPS商家,其中动态云硬件按小时计费,流量按需使用;而经典...
spinservers是Majestic Hosting Solutions LLC旗下站点,主要提供国外服务器租用和Hybrid Dedicated等产品的商家,数据中心包括美国达拉斯和圣何塞机房,机器一般10Gbps端口带宽,高配置硬件,支持使用PayPal、信用卡、支付宝或者微信等付款方式。目前,商家针对部分服务器提供优惠码,优惠后达拉斯机房服务器最低每月89美元起,圣何塞机房服务器最低每月...
iON Cloud怎么样?iON Cloud升级了新加坡CN2 VPS的带宽和流量最低配的原先带宽5M现在升级为10M,流量也从原先的150G升级为250G。注意,流量也仅计算出站方向。iON Cloud是Krypt旗下的云服务器品牌,成立于2019年,是美国老牌机房(1998~)krypt旗下的VPS云服务器品牌,主打国外VPS云服务器业务,均采用KVM架构,整体性能配置较高,云服务器产品质量靠...