网站如何防御CC和DDOS攻击 2021-11-30 18:01:00 编程 网络安全 暂无评论 711 次阅读 3151字 修改时间:2021-12-01 11:26:31 此文章是个人建站两年以来的对攻防的总结点,只是个人拙见,欢迎大佬们在评论中补充 站长们最头痛的事情莫过于网站(服务)又又又被攻击了,本篇文章总结常见的攻击和防御方式 # CC攻击 简单介绍这种攻击的原理 > CC(Challenge Collapsar,挑战黑洞),CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃。CC主要是用来攻击页面的,每个人都有这样的体验:当一个网页访问的人数特别多的时候,打开网页就慢了,CC就是模拟多个用户(多少线程就是多少用户)不停地进行访问那些需要大量数据操作(就是需要大量CPU时间)的页面,造成服务器资源的浪费。 本人有幸遇到过几次CC攻击,每次都是把服务器CPU消耗到100%,造成无法正常浏览网站。 #### 防御方式一,CDN 其实防御CC攻击的方式有很多种,如果您是不差钱的主儿,可以直接上高防御CDN,利用CDN的原理将流量引入到云平台,等待数据清洗后,再将正常的流量回源到你的服务器,当然了,其实普通的CDN通过简单的配置也可以达到防御目的,例如设置单IP访问限制 [](http://justsoso.xyz/usr/uploads/cdn.png) 免费CDN 1.百度免费版本CDN,一天10GB流量,无防护功能:https://su.baidu.com/ 2.360推出的免费CDN网站卫士(还没体验过):https://wangzhan.qianxin.com/ 另外付费的CDN品牌就更多了,阿里云、腾讯云、又拍云(站长符合条件可免费使用)、七牛云等等 使用CDN内容分发平台,不但可以防御攻击,还可以提升网站静态内容的访问速度。 #### 防御方式二,限流 即使用了CDN,对自己的服务应用安全依然不可忽视。比如CDN到期了,或者失效了,失去了CDN的保护,我们的服务就相当于在裸奔,哪怕只是单个IP就能对服务器产生致命的攻击(例如,不断对服务器的某个较大的静态资源,开启几十个线程疯狂请求,那我们的服务器每秒钟可能遭遇到上千次请求)。 以为个人的经验,就是在应用前部署一个Nginx,通过反向代理的方式请求我们的应用。 这样,无论是做安全设置,还是配置SSL证书,对我们的应用都是无侵入的,并且nginx是一个高性能的http的服务器,可以在应用前抗下大量垃圾请求 我个人对nginx的配置如下: 主要看一下部分, `include blockip.conf;` 是加载一个外部的文件,我们从外部加载一个IP黑名单,格式为:deny 112.10.185.152; limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s; limit_req zone=allips burst=5 nodelay; 以上内容设置了:漏桶算法的限流,并且配置了一个外部黑名单,下面我们再详细讲如何统计攻击者IP ```bash http { include blockip.conf; # zone 表示生成一个大小为10M,名字为one的内存区域,用来存储访问的频次信息 # 表示允许相同标识的客户端的访问频次,这里限制的是每秒20次,即每秒只处理20个请求 limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s; autoindex on; include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; client_max_body_size 100m; server { #burst爆发的意思,这个配置的意思是设置一个大小为5的缓冲区当有大量请求(爆发)过来时, #超过了访问频次限制的请求可以先放到这个缓冲区内等待, limit_req zone=allips burst=5 nodelay; listen 80; server_name xxxx.com www.xxxx.com; location / { set_real_ip_from 0.0.0.0/0; real_ip_header X-Forwarded-For; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 反向代理到应用上 proxy_pass http://127.0.0.1:880; } error_page 500 502 503 504 /50x.html; } } ``` #### 防御方式三,拉黑IP 如果只做了限流,依然不能阻止攻击,只是速度变慢了而已,其实我们可以通过nginx的日志分析出攻击者ip,直接拉黑IP地址,这样这个IP访问不到我们了 在上一步我们在nginx中引入了一个外部文件 `include blockip.conf;` 我们可以写一个脚本把nginx日志中的攻击IP写入到这个文件中 通过awk统计出统计攻击Ip,脚本命令解释: 第1行:查找最近50000行nginx的访问日志(根据自己的访问量判断) 第2行:将ip 拼接 url 统计出来,(如果攻击者每次变换url,可以只统计ip) 第3、4行:数据排序,将出现大于300次的ip写进黑名单 ```bash tail -n50000 /usr/local/nginx/logs/access.log \ |awk '{print $1,$7}' \ |sort|uniq -c|sort -rn \ |awk '{if($1>300)print "deny " $2 ";"}' > /usr/local/nginx/conf/blockip.conf ``` 以上就是个人对CC攻击的防御措施,当然了,上面的方式呢比较简陋,但是对于一般的小站点基本上也够用了。 # DDOS攻击 DDOS攻击一般是针对IP发起的,所以呢,我们如果用了CDN,那别人就只能获取到我们的CDN节点IP。 如果遭遇到DDOS攻击,最简单的方式就是换个IP,套上一层CDN。 否者呢,有钱就买防御、堆硬件硬抗了,没钱的话呢,只能放弃挣扎了。 标签: 网络安全
评论已关闭