铁块般的飞机犹如流星,仅仅是和你一同仰望天空,平日司空见惯的风景也会变得与众不同。你的一举一动决定我所有的悲观喜忧,让我的心随之奏响音乐,应该怎样形容这种感情呢?这大概就是恋爱了吧。 收藏本站
登陆 / 注册 搜索

查看: 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;
复制代码
nginx 简单防CC攻击 Img-8.jpg

其次。

也是在 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 里面:
nginx 简单防CC攻击 Img-9.jpg

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


然后。

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

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

这个办法只能防简单的 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 |显示全部楼层

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

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

本版积分规则

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

GMT+8, 2020-1-30 01:44 , Processed in 0.046001 second(s), 29 queries , Redis On.

© 2015-2020 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表