既不回头,何必不忘;既然无缘,何必誓言;今日种种,似水无痕。 收藏本站
登陆 / 注册 搜索

阅读:1.5万   回复: 4

nginx 简单防CC攻击

原创 [复制链接]
小执念 古黑浩劫论坛大牛 2019-4-10 23:42 |显示全部楼层

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

管理员
这个方法是 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 秒盾
上一篇
下一篇
帖子热度 1.5万 ℃

屋顶,数星星 「出类拔萃」 2019-4-10 23:48 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

大概了解了 不错
浅笑歌 「出类拔萃」 2019-4-11 08:38 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

楼主,我现在有些冷静下来了,我觉得应该做一些实际的事情。我决定先把你的名字纪录下来。让子孙后代牢记于心,广为传诵。让他们知道什么是中国的传统美德,什么是炎黄子孙的精神,什么是黄河水,什么是长江魂。什么是五千年的文明史.
上帝之眼 「龙战于野」 2019-4-12 13:48 |显示全部楼层

啦啦啦啦

真是“骚”极了、

🤙🚠🥚🈷🐠‌另外论坛代码后面有乱码
小执念 古黑浩劫论坛大牛 2019-4-12 13:58 |显示全部楼层

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

管理员
无效回复
您需要登录后才可以回帖 登录 | 免费注册  

本版积分规则

快速回复 返回列表