(一)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",将超时重传次数设置为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",就可以在当前目录下创建一个'test.txt"文件,在其中包含大量的网络数据包,通过对该文件的的分析,就很容易得到可疑的客户端IP,之后利用系统自带的"iptables"命令即可对可疑IP进行屏蔽.便如执行命令"iptables -A INPUT -s 219.29.78.79 -d 0/0 -j REJECT",即可禁止"219.29.78.79"的外部主要访问本机所有端口.其中"-j REJECT"参数表示禁止访问.
分享到:
相关推荐
在IT领域,特别是网络安全部分,"Linux下synflood源码"是一个与网络攻击和防御相关的主题。Synflood是一种拒绝服务(DoS)攻击,它利用TCP协议的三次握手过程来消耗目标服务器的资源,导致正常的服务请求无法处理。...
Linux下基于SYN Cookie的防SYN Flood攻击的实现与改进 Linux操作系统中,SYN Flood攻击是一种常见的DoS攻击方式,对服务器的性能造成了极大的影响。为了防止SYN Flood攻击,SYN Cookie是一种常用的防御方式。本文...
在Linux下发送SYN还有其他方法,例如使用`hping3`这样的工具,它可以以命令行形式发送各种类型的TCP、UDP、ICMP和SCTP数据包,包括SYN。 总结起来,Linux下的“发送SYN”涉及到TCP连接的建立过程,可以通过编程语言...
【标题】: "Linux平台下防御SYN Flood攻击策略的研究" 【描述】: 本文主要探讨了在Linux操作系统环境下如何有效防御SYN Flood攻击,并提出了改进算法和构建新型防御模块。 【标签】: Linux操作系统、系统开发、...
SYN Cookie原理与Linux内核实现详解 SYN Flood攻击是一种常见的分布式拒绝服务(DoS)攻击手段,尤其在网络环境基于IPv4的TCP/IP协议栈中。这种攻击利用TCP协议的三次握手流程,通过发送大量伪造源地址的SYN请求,...
综上所述,"syn_scan.c.rar_linux syn_syn扫描"涉及的是使用C语言在Linux环境下编写的一个SYN扫描程序,它利用TCP协议栈的特性进行半开连接扫描,以检测网络上的活动主机和开放端口。理解这些概念对于网络安全从业者...
不全是自己弄的,从网上找到的,但是有问题,自己改了一下没啥明显问题了。125行记得改成自己电脑的ip
Linux SYN 扫描器是一种...通过研究`synscan_1.0.c`源代码,我们可以深入了解TCP连接的建立过程、网络编程的基本原理以及如何在Linux下编写这样的实用工具。同时,这也是学习网络安全、系统编程和C语言实践的好机会。
主要介绍了Linux下大量SYN_SENT连接问题的解决方法,需要的朋友可以参考下
这个代码的原版是从某个论坛上很多年前的帖子翻出来的,本人还不会熟练使用makefile,所以直接在他上面进行了开发。我也不知道很多文件有什么用,src文件夹中有代码,include中包含了头文件信息。...
在 Linux 系统中,可以通过调整 tcp_syn_retries 参数来控制服务器在放弃连接之前所发送的 SYN+ACK 包的次数。默认值是 5,对应于 180 秒左右时间。 2. TCP 连接保持:为了保持长连接,服务器需要周期性地发送 ...
标题中的“awl-0.2.tar.gz”是一个Linux下的开源工具包,用于模拟TCP SYN洪水攻击。这种攻击是网络层DDoS(分布式拒绝服务)攻击的一种常见形式,它利用TCP连接建立过程中的三次握手来消耗目标服务器的资源,从而使...
【Linux SYN扫描器 by SIncoder】是一款专为Linux系统设计的网络扫描工具,主要用于检测网络连接中的SYN(同步)扫描技术。SYN扫描,也称为半开连接扫描,是一种在网络安全审计和渗透测试中常用的非侵入式探测方法。...
在433MHz应用环境下,灵敏度可以达到-107dBm,大大增加了接收距离。同时,SYN470R依然具有SYN400R同样的高集成度, 高频信号接收功能全部集成于片内,以达到用最少的外围器件和最低的成本获得最可靠的接收效果。所以...
【标题】:“威力强悍的 syn发包工具” 在IT安全领域,SYN(同步)发包工具是一种专门用于网络测试和安全评估的软件。SYN攻击是TCP/IP连接过程中的一个漏洞利用,它利用了三次握手协议的特性,通过发送大量的半开...
基于Linux下防止IP欺骗的SYN攻击防火墙的设计与实现.pdf
在Linux操作系统中,线程同步是多线程编程中的一个重要概念,它确保了多个线程在访问共享资源时能够有序进行,避免数据竞争和不一致性。在这个“sem_syn.rar”压缩包中,我们找到了一个使用信号量实现线程同步的例子...
描述中提到,在Linux环境下,这个工具被用于模拟SYN Flood攻击并测试内核的SYN Cookie机制。SYN Cookie是一种防御SYN Flood攻击的方法,它在服务器接收到SYN包但无法完成完整的三次握手时,会发送一个含有特殊信息的...
标题中的"SYN113"、"SYN115"、"SYN480"和"RFC433"很可能是指一系列特定的无线通信协议或技术标准,而这些文档资料则提供了关于这些技术的详细信息。在这个场景中,我们可以深入探讨这四个关键术语所代表的技术内容。...