网络安全 kali 渗透学习 web 渗透入门 DDOS 的原理和防护
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/ 可以看到站点丝毫没有受到任何影响。
更多技术干货技术文章请扫描下方二维码
评论