使用 NGINX 流控和 fail2ban 防止 CC 攻击

简介:

背景知识

CC 攻击

攻击者通过创建大量请求导致服务器资源耗尽,主要针对特定服务接口,属于实现 DoS 攻击的一种方式(DoS 攻击更多是针对网络端口,而不是具体服务接口)。

NGINX 流控

  • limit_req_zone:通过“漏桶”算法限制每个 IP 发起的请求频率。

  • limit_conn_zone:限制每个 IP 发起的连接数。

fail2ban

通过匹配服务器日志操作 iptables 来限制客户端网络连接。

实践配置

NGINX 部分

在 http 部分中配置:

limit_req_zone $binary_remote_addr zone=sym:10m rate=5r/s; limit_conn_zone $binary_remote_addr zone=conn_sym:10m;12

然后在需要流控的 location 部分配置:

limit_req zone=sym burst=5; limit_conn conn_sym 10;12

重启 NGINX 后当有超流客户端请求时将在 NGINX error.log(默认在 /var/log/nginx/error.log) 中看到类似记录:

2017/02/12 18:03:57 [error]15965#15965: *61240 limiting requests, excess: 6.000 by zone "sym", client: 121.41.106.121, server: hacpai.com, request: "GET / HTTP/1.0", host: "hacpai.com"1

此时请求已经被 NGINX 限流,但是客户端仍然能够继续发送请求,占用服务器资源。

fail2ban 部分

新建 /etc/fail2ban/jail.d/sym.conf 文件,加入如下内容:

[sym-cc]enabled  = trueport     = https,httpfilter   = symlogpath  = /var/log/nginx/*error.logmaxretry = 120findtime = 60bantime  = 120action   = iptables-multiport[name=Sym, port="https,http", protocol=tcp]            sendmail-whois-lines[name=Sym, dest=youremail@gmail.com]12345678910

findtime 60 秒内如果有超过 maxretry 120 次匹配到则禁止连接 bantime 120 秒。禁止连接通过操作 iptables 实现 。(要发送邮件,需要安装配置好 sendmail)

重启 fail2ban 后当发生超流时可以在 /var/log/fail2ban.log 中看到类似记录:

2017-02-12 18:01:26,968 fail2ban.actions: WARNING [sym-cc] Ban 121.41.106.1211

另外:

  • fail2ban-client statusfail2ban-client status sym-cc 可以查看当前禁止信息

  • fail2ban-regex /var/log/nginx/error.log /etc/fail2ban/filter.d/sym.conf 可以查看配置匹配情况。

注意事项

fail2ban

  • 服务重启可能较慢,耐心等待

  • findtime 不要小于 60 秒

  • action 用 iptables-multiport 同时设置 HTTPS 和 HTTP

  • 可能需要自己手动加入操作系统启动项

如果 NGINX 开了 access_log,其实也可以简单粗暴一点直接将 fail2ban 配置到访问日志上,这样就不用配置 NGINX 流控模块了,不过缺点是失去了“弹性”。

NGINX

上面提到的 NGINX 流控模块的“弹性”主要指的是 limit_req_zone 模块中 burst 和 nodelay 两个参数的组合使用。

  • rate:按照固定速率“漏请求”给后端服务器

  • burst:可理解为桶大小,能装多少个请求

  • nodelay:带了这个参数的话在桶装不下时将请求“全部倒给”后端服务器;如果不带的话请求还是按照速率慢慢漏

日志清理

需要定时清理 NGINX、fail2ban 日志,防止磁盘空间占用过大。



本文转自 zbill 51CTO博客,原文链接:http://blog.51cto.com/dek701/2053007,如需转载请自行联系原作者

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
云安全 安全 网络安全
80和443端口的作用以及遇到CC攻击该怎么办
80和443端口都是用于网站业务,那么这两个端口是有什么区别呢?
|
云安全 缓存 监控
什么是CC攻击,有什么办法防御CC攻击
CC攻击的前身是一个名为Fatboy的攻击程序,而之所以后来人们会称之为CC,是因为DDoS攻击发展的初期阶段,绝大部分DDoS攻击都能被业界熟知的“黑洞”(Collapsar,一种安全防护产品)所抵挡,CC攻击的诞生就是为了直面挑战黑洞,所以Challenge Collapsar(挑战黑洞).
什么是CC攻击,有什么办法防御CC攻击
|
13天前
|
存储 安全 应用服务中间件
解密Nginx限流机制:有效应对DDoS攻击与高并发流量
解密Nginx限流机制:有效应对DDoS攻击与高并发流量
24 0
|
8月前
|
安全 应用服务中间件 Apache
|
9月前
|
开发框架 网络协议 .NET
网站被CC攻击的症状?什么是CC攻击? 110.42.2.0 43.248.189.0
网站被CC攻击的症状?什么是CC攻击? 110.42.2.0 43.248.189.0
|
SQL 应用服务中间件 nginx
nginx禁止外网访问登录页面,SQL 注入、XSS 攻击配置
nginx禁止外网访问登录页面,SQL 注入、XSS 攻击配置
577 0
|
安全 搜索推荐 网络安全
使用Discuz! X3.5 自带参数防御CC攻击以及原理,修改Discuz X 3.5 开启防CC攻击后,不影响搜索引擎收录的方法
使用Discuz! X3.5 自带参数防御CC攻击以及原理,修改Discuz X 3.5 开启防CC攻击后,不影响搜索引擎收录的方法
430 0
|
缓存 网络协议 安全
网络安全-DoS与DDoS攻击原理(TCP、UDP、CC攻击等)与防御
网络安全-DoS与DDoS攻击原理(TCP、UDP、CC攻击等)与防御
756 0
|
域名解析 人工智能 安全
CC攻击有哪些类型,遇到CC攻击有哪些办法防护?
近年来,网络攻击频发,目前网络攻击的种类有很多,其中最为常见的就是DDOS攻击;DDOS攻击类型种类繁多,其中CC攻击是其中最为特殊,那么CC攻击是什么,都有哪攻击些类型呢?
|
域名解析 搜索推荐 网络协议
CC攻击和DDoS攻击的区别是什么
CC攻击和DDoS攻击的区别是什么