39 | 案例篇:怎么缓解 DDoS 攻击带来的性能下降问题?
DDoS 简介
- 第一种,耗尽带宽。无论是服务器还是路由器、交换机等网络设备,带宽都有固定的上限。带宽耗尽后,就会发生网络拥堵,从而无法传输其他正常的网络报文。
- 第二种,耗尽操作系统的资源。网络服务的正常运行,都需要一定的系统资源,像是 CPU、内存等物理资源,以及连接表等软件资源。一旦资源耗尽,系统就不能处理其他正常的网络连接。
- 第三种,消耗应用程序的运行资源。应用程序的运行,通常还需要跟其他的资源或系统交互。如果应用程序一直忙于处理无效请求,也会导致正常请求的处理变慢,甚至得不到响应。
案例准备
案例分析
# 运行 Nginx 服务并对外开放 80 端口
# --network=host 表示使用主机网络(这是为了方便后面排查问题)
$ docker run -itd --name=nginx --network=host nginx
# -w 表示只输出 HTTP 状态码及总时间,-o 表示将响应重定向到 /dev/null
$ curl -s -w 'Http code: %{http_code}\nTotal time:%{time_total}s\n' -o /dev/null http://192.168.0.30/
...
Http code: 200
Total time:0.002s
# -S 参数表示设置 TCP 协议的 SYN(同步序列号),-p 表示目的端口为 80
# -i u10 表示每隔 10 微秒发送一个网络帧
$ hping3 -S -p 80 -i u10 192.168.0.30
- 如果你的现象不那么明显,那么请尝试把参数里面的 u10 调小(比如调成 u1),或者加上–flood 选项;
- 如果你的终端一完全没有响应了,那么请适当调大 u10(比如调成 u30),否则后面就不能通过 SSH 操作 VM1。
# --connect-timeout 表示连接超时时间
$ curl -w 'Http code: %{http_code}\nTotal time:%{time_total}s\n' -o /dev/null --connect-timeout 10 http://192.168.0.30
...
Http code: 000
Total time:10.001s
curl: (28) Connection timed out after 10000 milliseconds
$ sar -n DEV 1
08:55:49 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
08:55:50 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08:55:50 eth0 22274.00 629.00 1174.64 37.78 0.00 0.00 0.00 0.02
08:55:50 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
# -i eth0 只抓取 eth0 网卡,-n 不解析协议名和主机名
# tcp port 80 表示只抓取 tcp 协议并且端口号为 80 的网络帧
$ tcpdump -i eth0 -n tcp port 80
09:15:48.287047 IP 192.168.0.2.27095 > 192.168.0.30: Flags [S], seq 1288268370, win 512, length 0
09:15:48.287050 IP 192.168.0.2.27131 > 192.168.0.30: Flags [S], seq 2084255254, win 512, length 0
09:15:48.287052 IP 192.168.0.2.27116 > 192.168.0.30: Flags [S], seq 677393791, win 512, length 0
09:15:48.287055 IP 192.168.0.2.27141 > 192.168.0.30: Flags [S], seq 1276451587, win 512, length 0
09:15:48.287068 IP 192.168.0.2.27154 > 192.168.0.30: Flags [S], seq 1851495339, win 512, length 0
...
- 即客户端构造大量的 SYN 包,请求建立 TCP 连接;
- 而服务器收到包后,会向源 IP 发送 SYN+ACK 报文,并等待三次握手的最后一次 ACK 报文,直到超时。
# -n 表示不解析名字,-p 表示显示连接所属进程
$ netstat -n -p | grep SYN_REC
tcp 0 0 192.168.0.30:80 192.168.0.2:12503 SYN_RECV -
tcp 0 0 192.168.0.30:80 192.168.0.2:13502 SYN_RECV -
tcp 0 0 192.168.0.30:80 192.168.0.2:15256 SYN_RECV -
tcp 0 0 192.168.0.30:80 192.168.0.2:18117 SYN_RECV -
...
$ netstat -n -p | grep SYN_REC | wc -l
193
$ iptables -I INPUT -s 192.168.0.2 -p tcp -j REJECT
$ curl -w 'Http code: %{http_code}\nTotal time:%{time_total}s\n' -o /dev/null --connect-timeout 10 http://192.168.0.30
Http code: 200
Total time:1.572171s
攻击源IP不固定解决的方法
# 限制 syn 并发数为每秒 1 次
$ iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT# 限制单个 IP 在 60 秒新建立的连接数为 10
$ iptables -I INPUT -p tcp --dport 80 --syn -m recent --name SYN_FLOOD --update --seconds 60 --hitcount 10 -j REJECT
系统 TCP 优化
$ sysctl net.ipv4.tcp_max_syn_backlog
net.ipv4.tcp_max_syn_backlog = 256
$ sysctl -w net.ipv4.tcp_max_syn_backlog=1024
net.ipv4.tcp_max_syn_backlog = 1024
$ sysctl -w net.ipv4.tcp_synack_retries=1
net.ipv4.tcp_synack_retries = 1
开启 SYN Cookies
$ sysctl -w net.ipv4.tcp_syncookies=1
net.ipv4.tcp_syncookies = 1
$ cat /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_max_syn_backlog = 1024
DDoS 到底该怎么防御
内核参数
跳过内核协议栈
阻断流量
应用层面
小结
39 | 案例篇:怎么缓解 DDoS 攻击带来的性能下降问题?相关推荐
- 什么是DDos攻击,如何有效缓解DDos攻击?
任何攻击都不会凭空产生,DDOS也有特定的来源.绝大多数的DDOS攻击都来自于僵尸网络.僵尸网络就是由数量庞大的可联网僵尸主机组成,而僵尸主机可以是任何电子设备(不仅是X86架构的设备,更多反而是物联 ...
- 利用incapsula缓解ddos攻击
2019独角兽企业重金招聘Python工程师标准>>> 针对ddos的几种攻击类型,可以利用Incapsula进行ddos缓解.既可抵御所有ddos的攻击类型,又无需安装任何额外的软 ...
- 使用多个DNS供应商以缓解DDoS攻击
随着不安全物联网(IoT)设备的激增,针对域名系统(DNS)供应商的分布式拒绝服务(DDoS)攻击在数量和规模上正在不断增加.这些攻击随之影响依赖于这些供应商进行域名解析的网站.虽然DNS供应商采取了 ...
- SQL 百万级别记录优化之 -- 单引号带来的性能下降
2019独角兽企业重金招聘Python工程师标准>>> update TIMAGEDATA_TD set MSISDNGROUPID=4 where IMSI >= 13600 ...
- DDoS攻击与防范策略
DDoS(Distributed Denial of Service,分布式拒绝服务)攻击的主要目的是让指定目标无法提供正常服务,甚至从互联网上消失,是目前最强大.最难防御的攻击之一. 按照发起的方式 ...
- linux synproxy 抵御 ddos攻击的原理和优化
目录 关于DDoS攻击和本文 关于DDoS与nf_conntrack 附:为什么nf_conntrack表项的查找和创建并不算个事儿 nf_conntrack如何防御DDoS攻击 附:什么是INVAL ...
- DDoS攻击可能损害企业品牌的四种方式
DDoS攻击是一种网络安全威胁,旨在阻碍业务网络的性能.与其他形式的恶意网络活动(例如黑客攻击,网络钓鱼或恶意软件)不同,DDoS的主要目的不一定是窃取敏感数据或使入侵者可以远程访问系统DDoS攻击的 ...
- linux查看发起ddos攻击的ip,在Linux上使用netstat命令查证DDOS攻击的方法
导读 DOS攻击或者DDOS攻击是试图让机器或者网络资源不可用的攻击.这种攻击的攻击目标网站或者服务通常是托管在高防服务器比如银行,信用卡支付网管,甚至根域名服务器. 服务器出现缓慢的状况可能由很多事 ...
- linux运维解决ddos,运维人员该如何排查并解决DDOS攻击
今天小编要跟大家分享的文章是关于运维人员该如何排查并解决DDOS攻击.DOS攻击或者DDOS攻击是试图让机器或者网络资源不可用的攻击.这种攻击的攻击目标网站或者服务通常是托管在高防服务器比如银行,信用 ...
最新文章
- Python可视化(matplotlib)在图像中添加文本和标记(Text and Annotation)
- 产生任意区间内的均匀分布的随机整数序列
- python词汇-基本 Python 词汇
- javascript创建对象 1
- 更改sql-2008sa密码
- Docker : Docker镜像的分层结构
- pom.xml mvn package expected START_TAG or END_TAG not TEXT
- webpack4+vue打包简单入门 1
- Centos6.5 源码安装MySql5.6.33
- 十大编程语言的优劣对比简述
- 贝叶斯(三)先验分布的确定
- php 内网/外网ip判断
- harbor 安装启动遇到的keng
- atitit html5 拼图游戏的解决之道
- 微信扫一扫(wx.scanQRCode)功能新手可能遇到的问题
- CodeSmith Professional 5.0破解下载地址 注册机 keygen
- 2022-2028年中国海南省在线旅游产业发展动态及投资前景分析报告
- 新版花花省淘宝客V6聚合优惠券系统具体功能介绍
- 『每周译Go』手把手教你用 Go 实现一个 mTLS
- 微信平台申请消息接口时Signature校验的Servlet实现
热门文章
- python如何记录运行时间_Python如何测量脚本运行时间
- 学生专用计算机如何打游戏,电竞专业学生日常:白天学语数外计算机,晚上才打游戏...
- idea怎么将本地文件和远程git对比_IntelliJ IDEA将文件和文件夹与本地版本进行比较...
- python学习详解_Python学习入门到精通:Python列表讲解
- 字节跳动屡战社交,这次抖音亲自上场了
- 人脸识别(二)——训练分类器的补充说明
- w10计算机运行特别卡,电脑卡是什么问题?导致Win10正式版卡顿的原因及解决方法...
- Java sqlite事务方法,Java SQLiteDatabase.insert方法代码示例
- php 提取登录QQsid_php模拟登录qq邮箱(curl命令详解)
- Dynamics CRM - 如何修复 Access Is Denied,ObjectTypeCode: 2500 的错误