LINUX 遭到SYN FLOOD攻击 LINUX下SYN攻防战
linux下syn攻防战如下
(一)syn攻击原理
syn攻击属于dos攻击的一种,它利用tcp协议缺陷,通过发送大量的半连接请求,耗费服务器cpu和内存资源。syn攻击聊了能影响主机外,还可以危害路由器,防火墙等网络系统,事实上syn攻击并不管目标是什么系统,只要这些系统打开tcp服务就可以实施.我们知道,在网络中两台电脑建立tcp连接 时需要进行三次握手过程,客户端首先向服务器发关tcp syn数据包,接着服务器会向客户端发关相应的syn ack数据包,最后客户端会以ack进行响应.从而建立正常的握手过程。在具体的连接细节中,服务器最早接受到syn包时,在tcp协议栈中会将相应的半连接记录添加到队列中,之后等待接受下面准备握手的数据包,如果握手成功,那么这个半连接记录将从队列中删除.或者当服务器未收到客户端的确认包时,会重发请求包,一直到超时才将此条目从未连接队列删除。但是在服务器中的tcp协议栈中存储的半连接记录是有限的,当服务器受到syn型的dos攻击后,队 列会很快处于充满状态,客户端在短时间内伪造大量不存在的ip地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的syn包将长时间占用未连接队列,正常的syn请求被丢弃,目标系统运行缓慢严重者引起网络堵塞甚至系统瘫痪,服务器随后就不再接受新的网络连接,从而造成正常的客户端无法访问服务器的情况发生。
(二)实战syn攻击过程
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了。
(五)减小超时值
在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",就可以在当前目录下创建一个。
以上就是本文的全部内容,希望对大家的学习有所帮助。