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

本贴最后更新于 1207 天前,其中的信息可能已经水流花落

背景知识

CC 攻击

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

NGINX 流控

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;

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

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

重启 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"

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

fail2ban 部分

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

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

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.121

另外:

注意事项

fail2ban

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

NGINX

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

日志清理

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

参考

  • 安全

    安全永远都不是一个小问题。

    149 引用 • 775 回帖 • 565 关注
  • CC
    4 引用 • 51 回帖
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    255 引用 • 479 回帖 • 545 关注
  • fail2ban
    1 引用 • 12 回帖
12 回帖
请输入回帖内容...
  • Eddie 1

    拒绝尴尬,消灭零回帖。

  • alanfans 1
  • lijp 1

    实战贴。 👍

  • Hassan 1

    好帖

  • R 1

    厉害了,已收藏

  • meikaiyipian 1

    二话不说,先收藏了

  • for 1

    老哥,稳!

  • pelias2013 1

    赞,阿里云的高防 IP 真贵

  • baymin

    收藏了先

  • rogwan

    这样限制,会影响多少性能呢?

    1 回复
  • 88250

    fail2ban 是通过增量扫描日志然后调用 iptables 来过滤异常流量的,这个处理过程对服务器几乎没有任何性能影响。

  • pangwen 1 评论

    想收藏找半天 😂 ,我觉得是不是可以把收藏放在更醒目的位置啊,方便先收藏后查看。。(就是突然临时的想法)

    感谢反馈,目前这个位置感觉已经足够醒目了 😄
    88250
请输入回帖内容 ...