DDoS(Distributed Denial of Service,分布式拒绝服务)主要通过大量合法的请求占用大量网络资源,从而使合法用户无法得到服务的响应,是目前最强大、最难防御的攻击之一。
一、什么是DDOS攻击?
DDoS也就是分布式拒绝服务攻击。它使用与普通的拒绝服务攻击同样的方法,但是发起攻击的源是多个。通常攻击者使用下载的工具渗透无保护的主机,当获得该主机的适当的访问权限后,攻击者在主机中安装软件的服务或进程(以下简侈怔理)。这些代理保持睡眠状态,直到从它们的主控端得到指令,对指定的目标发起拒绝服务攻击。
二、如何确认自己受到DDOS攻击?
在系统上执行:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
执行后,将会显示服务器上所有的每个IP多少个连接数。
以下是我自己用VPS测试的结果:
li88-99:~# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
1 114.226.9.132
1 174.129.237.157
1 58.60.118.142
1 Address
1 servers)
2 118.26.131.78
3 123.125.1.202
3 220.248.43.119
4 117.36.231.253
4 119.162.46.124
6 219.140.232.128
8 220.181.61.31
2311 67.215.242.196
每个IP几个、十几个或几十个连接数都还算比较正常,如果像上面成百上千肯定就不正常了。
三、防范DDOS攻击的方法:
一些常用的防DDOS攻击的方法,罗列如下:
1.增加硬件防火墙和增加硬件设备来承载和抵御DDOS攻击,最基本的方法,但成本比较高。
2.修改SYN设置抵御SYN攻击:
SYN攻击是利用TCP/IP协议3次握手的原理,发送大量的建立连接的网络包,但不实际建立连接,最终导致被攻击服务器的网络队列被占满,无法被正常用户访问。
Linux内核提供了若干SYN相关设置,使用命令:
sysctl -a | grep syn
看到:
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5
tcp_max_syn_backlog是SYN队列的长度,tcp_syncookies是一个开关,是否打开SYN Cookie
功能,该功能可以防止部分SYN攻击。tcp_synack_retries和tcp_syn_retries定义SYN
的重试次数。
加大SYN队列长度可以容纳更多等待连接的网络连接数,打开SYN Cookie功能可以阻止部分
SYN攻击,降低重试次数也有一定效果。
调整上述设置的方法是:
增加SYN队列长度到2048:
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
打开SYN COOKIE功能:
sysctl -w net.ipv4.tcp_syncookies=1
降低重试次数:
sysctl -w net.ipv4.tcp_synack_retries=3
sysctl -w net.ipv4.tcp_syn_retries=3
为了系统重启动时保持上述配置,可将上述命令加入到/etc/rc.d/rc.local文件中。
3.安装iptables对特定ip进行屏蔽。
A.安装iptables和系统内核版本对应的内核模块kernel-smp-modules-connlimit
B. 配置相应的iptables规则
示例如下:
(1)控制单个IP的最大并发连接数
iptables -I INPUT -p tcp –dport 80 -m connlimit –connlimit-above 50 -j REJECT
#允许单个IP的最大连接数为 30
(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数
iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –update –seconds 60 \
–hitcount 30 -j REJECT
iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –set -j ACCEPT
#单个IP在60秒内只允许最多新建30个连接
(3)用iptables屏蔽IP
iptables -I RH-Lokkit-0-50-INPUT 1 -p tcp -m tcp -s 213.8.166.227 --dport 80 --syn -j REJECT
指定端口的参数是--dport 80;多了--syn参数,可以自动检测sync攻击
(4)使用iptables禁止ping:
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 2 -j ACCEPT-A INPUT -p icmp -m icmp --icmp-type 8 -j REJECT --reject-with icmp-port-unreachable
(5)允许某ip连接
iptables -I RH-Firewall-1-INPUT 1 -p tcp -m tcp -s 192.168.0.51 --syn -j ACCEPT
C. 验证
(1)工具:flood_connect.c(用来模拟攻击)
(2)查看效果:
使用
watch ‘netstat -an | grep:21 | \ grep< 模拟攻击客户机的IP>| wc -l’
实时查看模拟攻击客户机建立起来的连接数,
使用
watch ‘iptables -L -n -v | \grep< 模拟攻击客户机的IP>’
查看模拟攻击客户机被 DROP 的数据包数。
D.注意
为了增强iptables防止CC攻击的能力,最好调整一下ipt_recent的参数如下:
#cat/etc/modprobe.conf
options ipt_recent ip_list_tot=1000 ip_pkt_list_tot=60
#记录1000个IP地址,每个地址记录60个数据包
#modprobe ipt_recent
E.可编写脚本自动提娶攻击ip然后自动屏蔽:
*/2 * * * * /usr/local/nginx/var/log/drop.sh
#!/bin/sh
cd /usr/local/nginx/var/log
tail access.log -n 1000 |grep vote.php | |sort |uniq -c |sort -nr |awk '{if ($2!=null && $1>50)}' > drop_ip.txt
for i in `cat drop_ip.txt`
do
/sbin/iptables -I INPUT -s $i -j DROP;
done
这shell 每几分钟执行一次,就可自动屏蔽那些不正常IP,相信大家都看的懂,下面是针对连接数屏蔽代码
#!/bin/sh
/bin/netstat -ant |grep 80 |awk '{print $5}' |awk -F : '{print $1}' |sort |uniq -c |sort -rn |grep -v -E '192.168|127.0' |awk '{if ($2!=null && $1>50)}' > drop_ip.txt
for i in `cat drop_ip.txt`
do
/sbin/iptables -I INPUT -s $i -j DROP;
done
说下,grep -v -E '192.168|127.0' 也就是排除内网IP,免得把自己给屏蔽了,当然还可以加些自己的IP。
ddos攻击最大的难点在于攻击者发起的攻击的成本远低于防御的成本。比如黑客可以轻易的控制大量肉鸡发起10G,100G的攻击。而要防御这样的攻击10G,100G带宽的成本却是100W,1000W….
分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。通常,攻击者使用一个偷窃帐号将DDoS主控程序安装在一个计算机上,在一个设定的时间主控程序将与大量代理程序通讯,代理程序已经被安装在网络上的许多计算机上。代理程序收到指令时就发动攻击。利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行。
DdoS的攻击方式有很多种,最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。单一的DoS攻击一般是采用一对一方式的,当攻击目标CPU速度低、内存小或者网络带宽小等等各项指标不高的性能,它的效果是明显的。随着计算机与网络技术的发展,计算机的处理能力迅速增长,内存大大增加,同时也出现了千兆级别的网络,这使得DoS攻击的困难程度加大了-目标对恶意攻击包的"消化能力"加强了不少。这时候分布式的拒绝服务攻击手段(DDoS)就应运而生了。DDoS就是利用更多的傀儡机(肉鸡)来发起进攻,以比从前更大的规模来进攻受害者
分布式拒绝服务攻击采取的攻击手段就是分布式的,在攻击的模式改变了传统的点对点的攻击模式,使攻击方式出现了没有规律的情况,而且在进行攻击的时候,通常使用的也是常见的协议和服务,这样只是从协议和服务的类型上是很难对攻击进行区分的。在进行攻击的时候,攻击数据包都是经过伪装的,在源IP 地址上也是进行伪造的,这样就很难对攻击进行地址的确定,在查找方面也是很难的。这样就导致了分布式拒绝服务攻击在检验方法上是很难做到的。
对分布式攻击进行必要的分析,就可以得到这种攻击的特性。分布式拒绝服务在进行攻击的时候,要对攻击目标的流量地址进行集中,然后在攻击的时候不会出现拥塞控制。在进行攻击的时候会选择使用随机的端口来进行攻击,会通过数千端口对攻击的目标发送大量的数据包,使用固定的端口进行攻击的时候,会向同一个端口发送大量的数据包。
分类:
网络层攻击:SYN Flood、ACK Flood、ICMP Flood、UDP Flood、NTP Flood 、SSDP Flood、DNS Flood等等
应用层攻击:
效果:
占满网络带宽;
提交大量请求,使服务器超负荷运行,响应缓慢;
阻断某一用户访问服务器;
阻断某服务与特定系统或个人的通讯。
防护:
1.针对第一种,需要在运营商网络里进行攻击流量识别,清洗;
2.第二种需要对流量模型学习建模,防护引擎要有多种方式检测攻击流量并自动生成过滤特征。当然最重要是修复应用的脆弱设计;抗DDOS设备主要的技术难点在于如何准确判断流量是攻击流量还是正常流量。流量清洗回注是没多少技术含量的。当然光靠设备自动化防护是远远不够的,需要有应急团队的专业服务。那些直接说不能防护的人不知是神马心态.
防御手段:
总体来说,从下面几个方面考虑:
硬件
单个主机
整个服务器系统
硬件:
1. 增加带宽
带宽直接决定了承受攻击的能力,增加带宽硬防护是理论最优解,只要带宽大于攻击流量就不怕了,但成本非常高。
2、提升硬件配置
在有网络带宽保证的前提下,尽量提升CPU、内存、硬盘、网卡、路由器、交换机等硬件设施的配置,选用知名度高、 口碑好的产品。
3、 硬件防火墙
将服务器放到具有DDoS硬件防火墙的机房。专业级防火墙通常具有对异常流量的清洗过滤功能,可对抗SYN/ACK攻击、TCP全连接攻击、刷脚本攻击等等流量型DDoS攻击
单个主机:
1、及时修复系统漏洞,升级安全补丁。
2、关闭不必要的服务和端口,减少不必要的系统加载项及自启动项,尽可能减少服务器中执行较少的进程,更改工作模式
3、iptables
4、严格控制账户权限,禁止root登录,密码登录,修改常用服务的默认端口
整个服务器系统:
1. 负载均衡
使用负载均衡将请求被均衡分配到各个服务器上,减少单个服务器的负担。
2、CDN
CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率,因此CDN加速也用到了负载均衡技术。相比高防硬件防火墙不可能扛下无限流量的限制,CDN则更加理智,多节点分担渗透流量,目前大部分的CDN节点都有200G 的流量防护功能,再加上硬防的防护,可以说能应付目绝大多数的DDoS攻击了。
3. 分布式集群防御
分布式集群防御的特点是在每个节点服务器配置多个IP地址,并且每个节点能承受不低于10G的DDoS攻击,如一个节点受攻击无法提供服务,系统将会根据优先级设置自动切换另一个节点,并将攻击者的数据包全部返回发送点,使攻击源成为瘫痪状态,从更为深度的安全防护角度去影响企业的安全执行决策。
4、安全域划分