linux下syn:LINUX下SYN攻防战

  ()SYN攻击原理
  SYN攻击属于DOS攻击种,它利用TCP协议缺陷,通过发送大量半连接请求,耗费服务器CPU和内存资源.SYN攻击聊了能影响主机外,还可以危害路由器,防火墙等网络系统,事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施.我们知道,在网络中两台电脑建立TCP连接时需要进行 3次握手过程,客户端首先向服务器发关TCP SYN数据包,接着服务器会向客户端发关相应SYN ACK数据包,最后客户端会以ACK进行响应.从而建立正常握手过程.在具体连接细节中,服务器最早接受到SYN包时,在TCP协议栈中会将相应半连接记录添加到队列中,的后等待接受下面准备握手数据包,如果握手成功,那么这个半连接记录将从队列中删除.或者当服务器未收到客户端确认包时,会重发请求包,直到超时才将此条目从未连接队列删除.但是,在服务器中TCP协议栈中存储半连接记录是有限,当服务器受到SYN型DOS攻击后,队列会很快处于充满状态,客户端在短时间内伪造大量不存在IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户确认,由于源地址是不存在,服务器需要不断重发直至超时,这些伪造SYN包将长时间占用未连接队列,正常SYN请求被丢弃,目标系统运行缓慢严重者引起网络堵塞甚至系统瘫痪,服务器随后就不再接受新网络连接,从而造成正常客户端无法访问服务器情况发生.
  ( 2)实战SYN攻击过程
  SYN攻击实现起来非常简单,互联网上有大量面成SYN攻击工具可以直接利用.假设在Linux服务器中安装了Web服务,在 Linux命令提示符中执行"service httpd start"命令,即可开启Web服务,接着执行"netstat -ant | grep 80"命令,可以看到80端口已经处于打开状态了.在网络其它机器上利用SYN攻击软件Software(例如"synkill"等)对Linux服务器80端口进行 DOS攻击,的后在Linux服务器中执行命令"netstat -ant | grep 80",可以看到大量网络连接信息,包括连接类型,原地址,目标直地址,连接状态等,当然,SYN工具通常会伪告客户端地址,因此在连接列表中是找不到真实地址.在连接状态中显示"SYN_RECV",表示当前处于半连接状态.我们可以每隔几秒钟运行命令"netstat -n -p TCP | grep SYN_RECV |grep 80 | wc -l",来检查某个端口(这里为80)未连接队列条目数,当发现该条目数增大到某个极大值,并处于平衡状态时,那么就很有可能是LinuxTCP协议栈中队列满了,此时用户就无法建立新连接了.
  ( 3)如可在Linux中防御SYN型DOS攻击
  在Linux中防御SYN型DOS攻击思路方法比较常见有增大队列SYN最大半连接数,减小超时值,利用SYN cookie技术,过滤可疑IP地址等常用思路方法,下面分别进行分析.
  ( 4)增大队列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了.
  ( 5)减小超时值
  在Linux中建立TCP连接时,在客户端和服务器的间创建握手过程中,当服务器未收到客户端确认包时,会重发请求包,直到超时才将此条目从未连接队列是删除,也就是说半连接存在存活时间,超过这个时间,半连接就会自动断开,在上述SYN攻击测试中,当经过较长时间后,就会发现些半连接已经自动断开了.半连接存活时间实际上是系统所有重传次数等待超时时间的和,这个值越大,半连接数占用Backlog队列时间就越长,系统能处理 SYN请求就越少,因此,缩短超时时间就可以有效防御SYN攻击,这可以通过缩小重传超时时间和减少重传次数来实现.在Linux中默认重传次数为5 次,总超时时间为3分钟,在Linux中执行命令"sysctl -w net.ipv4.tcp_synack_retries=1",将超时重传次数设置为1.
  ( 6)利用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激活状态.
  ( 7)过滤可疑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"参数表示禁止访问.
Tags:  linux下syn

延伸阅读

最新评论

发表评论