码迷,mamicode.com
首页 > 其他好文 > 详细

ddos 防御 - TCP 网络层防御

时间:2015-04-14 23:29:51      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:ddos

cron_ddos_tcp.sh

  1#!/bin/sh
  2
  3
  4 for kip in `netstat -an |grep -i ‘:80‘ |grep ‘EST‘ | awk ‘{print $5}‘ | cut -d : -f 1 | sort | uniq -c | awk ‘{if($1 > 50 && $2 !~ /192\.168\.1\.19.|0\.0\.0\.0/) {print $2}}‘`; do
  5
  6 echo $kip >> /var/log/cron_ddox_tcp_banip.log
  7
  8 /sbin/iptables -A INPUT -p tcp -j DROP -s $kip
  9
 10 done


* * * * * sh /usr/local/sbin/cron_ddos_tcp.sh >> /var/log/cron_ddos_tcp.log




应急响应

在攻击发生后,第一个现象是我们的网站上不去了,但是依然可以访问到管理界面,我们登陆上去简单执行了命令:

netstat -antp

我们看到有大量的链接存在着,并且都是ESTABLISHED状态,正常状态下我们的网站访问量没有这么高,如果有这么高我们相信中国的信息安全就 有希望了,对于这样的情况其实处理就比较简单,这是一次四层的攻击,也就是所有ip都是真实的,由于目前为止只是消耗了webserver的网络连接资 源,所以我们只需要简单的将这些ip在网络层封禁就可以,很简单,用下面的命令即可:

for i in `netstat -an | grep -i ‘:80 ‘|grep ‘EST’ | awk ‘{print $5}’ | cut -d : -f 1 | sort | uniq -c | awk ‘{if($1 > 50) {print $2}}’`

echo $i

echo $i >> /tmp/banip

/sbin/iptables -A INPUT -p tcp -j DROP -s $i

done

然后作为计划任务一分钟执行一次即可,很快,iptables的封禁列表就充斥了大量的封禁ip,我们简单的统计了下连接数最大的一些ip发现都来 自韩国。为了保证系统的性能,我们调大了系统的可接受的连接数以及对Nginx进行了每个连接能够进行的请求速率,系统于是恢复了正常的运行。
正常状态一直持续到第二天,但是到中午之后我们发现访问又出现了问题,网络很慢,使用ping发现大概出现了70%左右的丢包,在艰难的登陆到系统上之后,发现系统已经很少有TCP的正常连接,为了查明原因,我们对系统进行了抓包:

tcpdump -w tmp.pcap port not 22

tcpdump -r tmp.pcap -nnA

我们发现攻击已经从应用层的攻击调整到了网络层的攻击,大量的目标端口是80的udp和icmp包以极快的速度充满了网络,一个包大小大概在1k左 右,这次占据的资源纯粹是带宽资源了,即使在系统上做限制也解决不了这个问题,不过也没有关系,对于网络层的问题我们可以在网络层上做限制,我们只需要在 网络上把到达我们ip的非TCP的所有包如UDP和ICMP等协议都禁止掉即可,但是我们没有自己的服务器也缺乏对网络设备的控制权,目前是由工信部 CERT提供支持的,由于临时无法协调进行相应的操作,后果如大家看到,我们的服务很慢,基本上停止了服务,在一段时间之后攻击者停止了攻击,服务才进行 了恢复,很憋屈是么?但是同时我们得到了很多热心朋友的帮助,得到了更好的网络和服务器资源,在网络资源方面的能力得到了很大的提升,缓解了这方面的问 题,这里对他们表示感谢。

三 常见ddos攻击及防御

继续秉承80sec的”Know it then hack it”,这里简单谈一下ddos攻击和防御方面的问题。ddos的全称是分布式拒绝服务攻击,既然是拒绝服务一定是因为某些原因而停止服务的,其中最重要 的也是最常用的原因就是利用服务端方面资源的有限性,这种服务端的资源范围很广,可以简单的梳理一个请求正常完成的过程:

1 用户在客户端浏览器输入请求的地址

2 浏览器解析该请求,包括分析其中的dns以明确需要到达的远程服务器地址

3 明确地址后浏览器和服务器的服务尝试建立连接,尝试建立连接的数据包通过本地网络,中间路由最终艰苦到达目标网络再到达目标服务器

4 网络连接建立完成之后浏览器根据请求建立不同的数据包并且将数据包发送到服务器某个端口

5 端口映射到进程,进程接受到数据包之后进行内部的解析

6 请求服务器内部的各种不同的资源,包括后端的API以及一些数据库或者文件等

7 在逻辑处理完成之后数据包按照之前建立的通道返回到用户浏览器,浏览器完成解析,请求完成。

上面各个点都可以被用来进行ddos攻击,包括:

1 某些著名的客户端劫持病毒,还记得访问百度跳搜狗的事情么?:)

2 某个大型互联网公司发生的dns劫持事件,或者直接大量的dns请求直接攻击dns服务器,这里可以使用一些专业的第三方dns服务来缓解这个问题,如Dnspod。

3 利用建立网络连接需要的网络资源攻击服务器带宽使得正常数据包无法到达如udp的洪水攻击,消耗前端设备的cpu资源以使得数据包不能有效转发如icmp 和一些碎片包的洪水攻击,消耗服务器方建立正常连接需要的资源如syn flood或者就是占用大量的连接使得正常的连接无法发起,譬如这次的TCP flood。

4 利用webserver的一些特点进行攻击,相比nginx来说,apache处理一个请求的过程就比较笨重。

5 利用应用程序内部的一些特性攻击程序内部的资源如mysql,后端消耗资源大的接口等等,这也就是传统意义上的CC攻击。


ddos 防御 - TCP 网络层防御

标签:ddos

原文地址:http://haibo600.blog.51cto.com/1951311/1632728

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!