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地址等常用方法,下面分别进行分析。


闽公网安备 35020602001684号