LINUX下SYN FLOOD攻击及LINUX下SYN攻防简述

LINUX下SYN攻防战以下     服务器

(一)SYN攻击原理cookie

SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,经过发送大量的半链接请求,耗费服务器CPU和内存资源。SYN攻击聊了能影响主机外,还能够危害路由器,防火墙等网络系统,事实上SYN攻击并无论目标是什么系统,只要这些系统打开TCP服务就能够实施.咱们知道,在网络中两台电脑创建TCP链接 时须要进行三次握手过程,客户端首先向服务器发关TCP SYN数据包,接着服务器会向客户端发关相应的SYN ACK数据包,最后客户端会以ACK进行响应.从而创建正常的握手过程。在具体的链接细节中,服务器最先接受到SYN包时,在TCP协议栈中会将相应的半链接记录添加到队列中,以后等待接受下面准备握手的数据包,若是握手成功,那么这个半链接记录将从队列中删除.或者当服务器未收到客户端的确认包时,会重发请求包,一直到超时才将此条目从未链接队列删除。可是在服务器中的TCP协议栈中存储的半链接记录是有限的,当服务器受到SYN型的DOS攻击后,队 列会很快处于充满状态,客户端在短期内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认,因为源地址是不存在的,服务器须要不断的重发直至超时,这些伪造的SYN包将长时间占用未链接队列,正常的SYN请求被丢弃,目标系统运行缓慢严重者引发网络堵塞甚至系统瘫痪,服务器随后就再也不接受新的网络链接,从而形成正常的客户端没法访问服务器的状况发生。网络

(二)实战SYN攻击过程tcp

SYN攻击实现起来很是的简单,互联网上有大量面成的SYN攻击工具能够直接利用.假设在Linux服务器中安装了Web服务,在 Linux的命令提示符中执行"service httpd start"命令,便可开启Web服务,接着执行"netstat -ant | grep 80"命令,能够看到80端口已经处于打开状态了.在网络的其它机器上利用SYN攻击软件(例如"synkill"等)对Linux服务器的80端口进行 DOS攻击,以后在Linux服务器中执行命令"netstat -ant | grep 80",能够看到大量的网络链接信息,包括链接的类型,原地址,目标直地址,链接状态等,固然,由于SYN工具一般会伪告客户端地址,所以在链接列表中是 找不到真实地址的.在链接状态中显示"SYN_RECV",表示当前处于半链接状态.咱们能够每隔几秒钟运行命令"netstat -n -p TCP | grep SYN_RECV |grep 80 | wc -l",来检查某个端口(这里为80)的未链接队列的条目数,当发现该条目数增大到某个极大值,并处于平衡状态时,那么就颇有多是Linux的TCP协 议栈中的队列满了,此时用户就没法创建新的链接了。工具

 (三)如可在Linux中防护SYN型DOS攻击测试

在Linux中防护SYN型DOS攻击的方法比较常见的有增大队列SYN最大半链接数,减少超时值,利用SYN cookie技术,过滤可疑的IP地址等经常使用方法,下面分别进行分析。加密

(四)增大队列SYN最大半链接数队列

在Linux中执行命令"sysctl -a|grep net.ipv4.tcp_max_syn_backlog",在返回的"net.ipv4.tcp_max_syn_backlog=256"中显示 Linux队列的最大半链接容量是256.这个默认值对于Web服务器来讲是远远不够的,一次简单的SYN攻击就足以将其彻底占用.所以,防护DOS攻击 最简单的办法就是增大这个默认值,在Linux中执行命令"sysctl -w et.ipv4.tcp_max_syn_backlog=3000",这样就能够将队列SYN最大半链接数容量值改成3000了。  ip

(五)减少超时值内存

在Linux中创建TCP链接时,在客户端和服务器之间建立握手过程当中,当服务器未收到客户端的确认包时,会重发请求包,一直到超时才将此条目从未链接队 列是删除,也就是说半链接存在必定的存活时间,超过这个时间,半链接就会自动断开,在上述SYN攻击测试中,当通过较长的的时间后,就会发现一些半链接已经自动断开了。半链接存活时间其实是系统全部重传次数等待的超时时间之和,这个值越大半链接数占用的Backlog队列的时间就越长,系统能处理的 SYN请求就越少,所以,缩短超时时间就能够有效防护SYN攻击,这能够经过缩小重传超时时间和减小重传次数来实现.在Linux中默认的重传次数为5 次,总超时时间为3分钟,在Linux中执行命令"sysctl -w net.ipv4.tcp_synack_retries=1",将超时重传次数设置为。     

(六)利用SYN cookie来防护DOS攻击

除了在TCP协议栈中开辟一个内存空间来存储半链接数以外,为避免由于SYN请求数量太多,致使该队列被填满的状况下,Linux服务器仍然能够处理新的SYN链接,能够利用SYN Cookie技术来处理SYN链接。什么是SYN Cookie呢?SYN Cookie是用一个Cookie来响应TCP SYN请求的,在正常的TCP链接过程当中,当服务器接收一个SYN数据包,就会返回一个SYN -ACK包来应答,而后进入TCP -SYN -RECV(半开放链接)状态来等待最后返回的ACK包。服务器用一个数据空间来描述全部未决的链接,然而这个数据空间的大小是有限的,因此攻击者将塞满 这个空间,在TCP SYN COOKIE的执行过程当中,当服务器收到一个SYN包的时候,他返回一个SYN -ACK包,这个数据包的ACK序列号是通过加密的,它由TCP链接的源地址和端口号,目标地址和端口号,以及一个加密种子通过HASH计算得出的,而后 服务器释放全部的状态.若是一个ACK包从客户端返回后,服务器从新计算COOKIE来判断它是否是上个SYN -ACK的返回包.若是是的话,服务器就能够直接进入TCP链接状态并打开链接.这样服务器就能够避免守候半开放链接了,在Linux中执行命令"echo "echo "1" > / proc/sys/net/ipv4/tcp_syncookies"> > /etc/rc_local",这样便可启动SYN Cookie,并将其添加到了Linux的启动文件,这样即便系统重启也不影响SYN Cookie的激活状态。

(七)过滤可疑的IP直址

当客户机对服务器进行攻击时,在服务器上能够进行抓包操做,这样能够对数据包中的IP进行检测,而后再对这些可疑的潮行过滤,从而将其没法正常链接服务器。利用Linux自带的"tcpdump"命令能够实现抓包操做,执行命令"tcpdump -c 1000 -l eth 0 -n dst port 80 > test.txt",就能够在当前目录下建立一个。

相关文章
相关标签/搜索