所谓的人类,可是连短短的十分钟也等不起的。 收藏本站
登陆 / 注册 搜索

查看: 5.6K   回复: 4

[# 网络安全] nginx 简单防CC攻击

[复制链接]
发新帖
跳转到指定楼层
楼主
小执念古黑浩劫论坛大牛 发表于 2019-4-10 23:42:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

可遇不可求的事:故乡的云,上古的玉,随手的诗,十九岁的你。

这个方法是 nginx 自带的功能,不需要安装其他软件,具体在 nginx 官网上也有,英文好的可以直接去看 :

http://nginx.org/en/docs/http/ng ... module.html#example

首先。

这个办法是根据访问 ip 来限制的,如果你开启了 cdn ,那访问到 nginx 的 ip 全是 cdn  的,那你需要先设置 nginx 获取真实的访客 ip。不同的 cdn 服务商方式也有不同,根据自己用的服务商 cdn 去网上搜索一下就行了。

因为我用的是 cloudflare 的,所以我说一下 nginx 如何获取 cloudflare 后访客的真实 ip。

在 nginx.conf 配置文件的 http 段里,加上:
  1. set_real_ip_from 103.21.244.0/22;
  2. set_real_ip_from 103.22.200.0/22;
  3. set_real_ip_from 103.31.4.0/22;
  4. set_real_ip_from 104.16.0.0/12;
  5. set_real_ip_from 108.162.192.0/18;
  6. set_real_ip_from 131.0.72.0/22;
  7. set_real_ip_from 141.101.64.0/18;
  8. set_real_ip_from 162.158.0.0/15;
  9. set_real_ip_from 172.64.0.0/13;
  10. set_real_ip_from 173.245.48.0/20;
  11. set_real_ip_from 188.114.96.0/20;
  12. set_real_ip_from 190.93.240.0/20;
  13. set_real_ip_from 197.234.240.0/22;
  14. set_real_ip_from 198.41.128.0/17;
  15. set_real_ip_from 2400:cb00::/32;
  16. set_real_ip_from 2606:4700::/32;
  17. set_real_ip_from 2803:f800::/32;
  18. set_real_ip_from 2405:b500::/32;
  19. set_real_ip_from 2405:8100::/32;
  20. set_real_ip_from 2c0f:f248::/32;
  21. set_real_ip_from 2a06:98c0::/29;

  22.    # use any of the following two
  23.   real_ip_header CF-Connecting-IP;
  24.    #real_ip_header X-Forwarded-For;
复制代码
Img-8.jpg__nginx 简单防CC攻击

其次。

也是在 http 段加上:(这样对配置文件里面所有的 server 段都生效)

  1. limit_req_zone $binary_remote_addr zone=qps:1m rate=1r/s;
复制代码

然后在 server 或 location 段加上:

  1. limit_req  zone=qps burst=5 nodelay;
复制代码

上面这个是什么意思呢?

$binary_remote_addr //获取访客 ip
zone=qps:1m //qps 是自定义名称,随便写;1m是内存,如果 nginx 收到了超过设置的请求,会把请求放到内存里,处理好前面的请求了在处理内存中的请求(也可以丢弃)
rate=1r/s; 平均每秒钟一个 ip 不能超过 1 个请求,可以根据实际情况更改。

zone=qps //和上面的一样,是自定义的名称,但是两个地方要一样。
burst=5 //上面说了平均每分钟一个 ip 不能超过 1 个请求,这里的 5 是突发情况下不能超过 5 个请求。
nodelay; //上面说如果 nginx 接受到了超过设置的请求,会把请求放到内存了,处理好前面的了再处理内存里面的,如果不加这个参数,则会丢弃超过设置的请求,然后返回一个状态码,默认是 503 。

我觉得 php 是耗 CPU 的大户,所以我加在了 location 段的 php 里面:
Img-9.jpg__nginx 简单防CC攻击

  1. error_page 503 /403.html;
  2. limit_req  zone=qps burst=5 nodelay;
  3. limit_req_status 503;
复制代码


然后。

上面我把 503 的页面自定义为一个 403.html 页面。如果在论坛狂按 f5 ,就会出现这个画面:

Img-7.jpg__nginx 简单防CC攻击
最后。

这个办法只能防简单的 CC ,如果别人拿成百上千的 ip 来攻击你,这个办法是没用的,因为这时你的 php 和 数据库可能已经先 GG 了。

遇到大型 CC 攻击可以参考这个帖子: 当系统负载过高,自动开启 cloudflare 5 秒盾

屋顶,数星星「出类拔萃」 发表于 2019-4-10 23:48:12 来自手机 | 只看该作者
大概了解了 不错
浅笑歌「出类拔萃」 发表于 2019-4-11 08:38:15 | 只看该作者
楼主,我现在有些冷静下来了,我觉得应该做一些实际的事情。我决定先把你的名字纪录下来。让子孙后代牢记于心,广为传诵。让他们知道什么是中国的传统美德,什么是炎黄子孙的精神,什么是黄河水,什么是长江魂。什么是五千年的文明史.
上帝之眼龙战于野 发表于 2019-4-12 13:48:11 | 只看该作者
真是“骚”极了、

另外论坛代码后面有乱码
楼主| 小执念古黑浩劫论坛大牛 发表于 2019-4-12 13:58:30 | 只看该作者
  1. <?phpif(!defined('IN_DISCUZ') || $_G['adminid']!=='1') exit('Access Denied');
  2. for($i=1;$i<15;$i++){
  3.         $day_display[$i]=dgmdate(TIMESTAMP - 86400*(14-$i), 'm-d');
  4.         $day_array[]=dgmdate(TIMESTAMP - 86400*(14-$i), 'Ymd');
  5. }
  6. foreach(C::t('common_stat')->fetch_all(dgmdate(TIMESTAMP - 86400*14, 'Ymd'),dgmdate(TIMESTAMP, 'Ymd'),'daytime,paulsign,login') as $result){
  7.         $paulsign[$result['daytime']]=$result['paulsign'];
  8.         $login[$result['daytime']]=$result['login'];
  9. }
  10. $stats = C::t('#dsu_paulsign#dsu_paulsignset')->fetch('1');
  11. $today = dgmdate(TIMESTAMP, 'Ymd');
  12. $paulsign[$today]=$stats['todayq'];
  13. foreach($day_array as $day){
  14.         $paulsign_display[]=intval($paulsign[$day]);
  15.         $login_display[]=intval($login[$day]);
  16. }
  17. $max=intval(max(max($paulsign_display),max($login_display))*1.2);
  18. echo "&title=PaulSign+Statistic,{font-size:26px;}&
  19. &x_axis_steps=1&
  20. &y_ticks=5,10,5&
  21. &line=1,0x1CA9F4,Login,12,5&
  22. &line_2=2,0xF2A63E,Sign,12,5&
  23. &values=".implode(',',$login_display)."&
  24. &values_2=".implode(',',$paulsign_display)."&
  25. &x_labels=".implode(',',$day_display)."&
  26. &y_min=0&
  27. &y_max={$max}&
  28. &tool_tip=Num+%3A+%23val%23&";

  29. ?>
复制代码

无效楼层,该帖已经被删除
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

关于本站|小黑屋|Archiver|古黑论

GMT+8, 2019-11-22 22:54 , Processed in 0.112370 second(s), 32 queries , Gzip On, Redis On.

© 2015-2019 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表