DDOS分布式拒绝服务攻击(英文意思是Distributed Denial of Service,简称DDoS)是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击,其中的攻击者可以有多个。
这篇文章教大家DDOS的原理和防护
以下有视频版还有文字版
不知道怎么操作的请看文字版的,里面详细的步骤。
关注公众号侠盗男爵回复【kali系统】
视频版↓:
网络安全/kali/黑客/web安全/渗透测试/-3-5个月网络安全全套课程-小白入门到精通!_哔哩哔哩_bilibili
文字版↓:
年底了号主把我自己用到所有技术“做过的实战项目-内网实战靶场环境-渗透工具”还有很多渗透思维图谱!
目前DDOS攻击的方式越来越多,攻击者成本也越来越低,特别是在游戏行业以及各种行业间的恶意竞争中DDOS愈发猖獗。而应对DDOS攻击却没有任何一种简单有效的方案。只能投入大量的资金进行防护。
DDOS攻击的目的只有一个,就是让目标服务无法正常为用户提供服务。常见的4种攻击途径。
网络层攻击
比较典型的攻击类型是UDP反射攻击,例如NTP Flood攻击。这类攻击主要利用大流量拥塞被攻击者的网络带宽,导致被攻击者的业务无法正常响应客户访问。
传输层攻击
比较典型的攻击类型包括SYN Flood攻击、连接数攻击等。这类攻击通过占用服务器的连接池资源从而达到拒绝服务的目的。
会话层攻击
比较典型的攻击类型是SSL连接攻击。这类攻击占用服务器的SSL会话资源从而达到拒绝服务的目的。
应用层攻击
比较典型的攻击类型包括DNS flood攻击、HTTP flood攻击(即CC攻击)、游戏假人攻击等。这类攻击占用服务器的应用处理资源,极大地消耗服务器计算资源,从而达到拒绝服务的目的。
DDOS攻击的防范方法:
以下是阿里云抵抗DDOS攻击的推荐方案。
攻击者的流量在经过前端高防CDN时会被各个节点进行过滤清洗流量,经过CDN之后WAF***会对应用层流量进行拦截,例如:HTTP flood攻击在WAF环节会被拦截,SLB服务将用户请求转发到服务器集群达到负载均衡的效果。
以上整个防御架构从头到尾都充满了金钱的味道,举个例子阿里云DDOS高防最低的30Gb保底防护需要21.216W/年,这还只是最低的30Gb,600Gb则需要379.746W/年。阿里云游戏盾最低也要96W/年。云原生防护56.16W/年。而发起一次DDOS攻击的成本也只有几千块钱。双方的投入成本完全不对等,这对于刚创业的公司来说无疑是灾难性的。
企业受到DDOS攻击后应当立即到当地网监部门进行报案,采取法律手段正当维护自身权益。
通过优化缓解DDOS攻击
hping3进行SYN攻击这种简单的攻击手段我们是可以通过系统优化进行缓解的,如果攻击者IP地址是固定的我们甚至可以通过封禁IP来阻断攻击源。
优化Linux内核参数提升SYN:
上传Centos7 内核优化脚本,脚本优化了Centos内核参数,由于参数过多这里不做重点介绍。
[root@xuegod63 ~]# bash centos.sh
着重介绍SYN直接相关的参数。
net.ipv4.tcp_syncookies = 1
#打开SYN cookies功能,该功能可以尽量把过多的SYN请求缓存起来。
net.ipv4.tcp_max_syn_backlog = 262144
#定义backlog队列容能容纳的最大半连接数,Centos系统中该值默认为256,是远远不够的。
net.ipv4.tcp_synack_retries = 1
#表示收到SYN后发送SYN+ACK的重传次数,默认为5 表示重试5次,而且 每次重试的间隔会翻倍。1、2、4、8、16 秒,最后一次重试后等待 32 秒,若仍然没有收到 ACK,才会关闭连接,故共需要等待 63 秒。日常中这个值推荐设置为2秒,目前网络环境延迟没有以前那么高所以2秒可以满足日常使用,攻击比较多的时候可适当为1秒。
net.core.somaxconn = 65535
#上面所提到的backlog队列实际上受限于系统级的队列上线,通过修改net.core.somaxconn来提高系统队列上限。
以上是对SYN的一些优化参数,实际上脚本中有很多针对系统以及TCP协议的优化,目的都是提高服务器的响应能力。
修改HTTPD服务的队列长度,每个应用会有自己默认的队列长度,应用的队列长度和系统队列长度取最小值。所以修改服务配置。默认HTTPD服务队列长度是511.
[root@xuegod63 ~]# ss -lnt
添加HTTPD服务队列长度配置,不要给的太高。系统最大值65535,由somaxconn参数指定。
[root@xuegod63 ~]# echo "ListenBacklog 2048" >> /etc/httpd/conf.modules.d/00-mpm.conf
重启HTTPD服务
[root@xuegod63 ~]# systemctl restart httpd
[root@xuegod63 ~]# ss -lnt
再次测试SYN Flood攻击对httpd服务的影响。
┌──(root💀xuegod53)-[~]
└─# hping3 -c 1000 -d 120 -S -w 64 -p 80 --flood --rand-source 192.168.1.63
查看SYN半连接数量。已经可以达到2.6W了,如果没有进行修改的话只能到256。
[root@xuegod63 ~]# netstat -an | grep SYN | wc -l
26014
浏览器访问:http://192.168.1.63/ 测试结果为可以缓解,但并不能完全解决问题,偶尔页面还是会打不开。
通过iptables封禁攻击者ip缓解DDOS攻击
iptables是centos自带的***工具,可以通过添加***规则限制同一ip地址对我们发起过多的请求。hping3在攻击中我们使用了--rand-source来生成随机的ip在局域网访问公网地址之后是不会生效的,目标服务器收到的都是来自同一个公网地址的请求。
iptables三个表,5个链接,结构如图:
INPUT(入站数据过滤)
OUTPUT(出站数据过滤)
FORWARD(转发数据过滤)
PREROUTING(路由前过滤)
POSTROUTING(路由后过滤)
iptables语法总结:
iptables [-t 要操作的表]
<操作命令>
[要操作的链]
[规则号码]
[匹配条件]
[-j 匹配到以后的动作]
操作命令
-A 添加规则
-I num 插入,把当前规则插入为第几条
-D num 删除,明确指定删除第几条规则
-P 设置默认策略的
-F 清空规则链的
查看命令
-[vnx]L
-L 列出规则
-n 以数字格式显示ip和port,需要配合-L选项使用
-v 显示信息,以详细信息显示
允许访问TCP/80端口
[root@xuegod63 ~]# iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-m: module_name
-p: protocol
iptables -p tcp : 表示使用 TCP协议
iptables -m tcp:表示使用TCP模块的扩展功能(tcp扩展模块提供了 --dport, --tcp-flags, --sync等功能)
--dport 80 目标端口80
-j ACCEPT 放行流量
拒绝大于15个连接的IP访问。
[root@xuegod63 ~]# iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 15 -j REJECT
-m connlimit --connlimit-above 15
connlimit功能:
限制每个客户端IP的并发连接数,即每个IP同时连接到一个服务器个数。
限制内网用户的网络使用,对服务器而言则可以限制每个IP发起的连接数。
connlimit参数:
--connlimit-above n #限制为多少个
--connlimit-mask n #这组主机的掩码,默认是connlimit-mask 32 ,即每个IP.
REJECT动作会返回一个拒绝(终止)数据包(TCP FIN或UDP-ICMP-PORT-UNREACHABLE),明确的拒绝对方的连接动作。
开始SYN Flood攻击,去掉--rand-source 因为这个参数在局域网内测试是有效的。
┌──(root💀xuegod53)-[~]
└─# hping3 -c 1000 -d 120 -S -w 64 -p 80 --flood 192.168.1.63
再次查看SYN连接数量
[root@xuegod63 ~]# netstat -an | grep SYN | wc -l
0
浏览器访问:http://192.168.1.63/ 可以看到站点丝毫没有受到任何影响。
更多技术干货技术文章请扫描下方二维码