Linux下tengine环境如何屏蔽攻击ip?

赞赏 2016-07-12

基于 Tengine 环境的 Web 环境遭遇了CC攻击可以通过类似 ngx_lua_waf 的方式拦截攻击,生成一些类似 403 或者 30 2的状态码。这些防御避免了业务被持续攻击,但是还是会消耗服务器资源一旦达到一定数量级,也会严重影响到系统的性能,所以通过分析 nginx的访问日志彻底屏蔽这些 IP。 本文给出一个Tengine 环境结合 fail2ban 实现自动封禁 HTTP 状态码为 403 的访问者 IP 地址的示例。


Tengine 的环境配置和 ngx_lua_waf 的设置本文不再赘述,重点描述 fail2ban 的安装和配置。

安装 fail2ban


yum install -y epel-release 
yum install -y fail2ban 

设置 Nginx 的访问日志格式 


这个是设置 fail2ban 封禁的关键因素

log_format  main  '$remote_addr $status $request $body_bytes_sent [$time_local]  $http_user_agent $http_referer  $http_x_forwarded_for $upstream_addr $upstream_status $upstream_cache_status $upstream_response_time';
access_log  logs/access.log  main;

4.png 

攻击日志的信息:

42.120.74.xxx 403 GET /ethnicity.php?id=../opt/nginx/conf/nginx.conf HTTP/1.1 2090 [03/Dec/2015:04:19:57 +0800]  curl/7.29.0 -  - - - - -

5.png 

配置 fail2ban


CC 攻击的 IP 会经过 Nginx和 lua 处理后,访问状态变为 403,根据 Nginx的访问日志格式,设置 fail2ban 过滤这些 IP 和 403 状态,加入黑名单攻击的 IP 就被临时封禁了

1) 新建 fail2ban 的规则文件 /etc/fail2ban/filter.d/nginx-403-CC.conf,这个和 nginx 的日志 log_format 设置位置是吻合的,这个很关键:

# cat /etc/fail2ban/filter.d/nginx-403-cc.conf
[Definition]
failregex =403.(GET|POST)*.*HTTP/1.*$
ignoreregex =

3.png

2)  新建 fail2ban 的配置文件 /etc/fail2ban/jail.d/nginx-anti-403.conf。这里配置的是封禁的规则相关的,日志的路劲是自定义的,需要和当前的路劲是一致的:

# cat /etc/fail2ban/jail.d/nginx-anti-403.conf
[nginx-anti-403]
enabled = true
port = http
filter = nginx-403-cc
logpath = /opt/nginx/logs/access.log
findtime = 6
bantime = 900
maxretry = 9

时间和频率参数注释:
findtime(检测多少秒内的日志)
bantime (屏蔽攻击ip的时间为多少秒)
maxretry (达到多少次就启动屏蔽) 

2.png

3) 修改 fail2ban 的防火墙相关的配置

当前版本 fail2ban 在执行 iptables 命令时,会加上了 -w 参数防止规则冲突,iptables-1.4.20 以后才有这个参数,而 CentOS 6 的 iptables 是1.4.7,导致 iptables 规则添加失败,解决方法是删除 iptables -common.conf 中的 执行如下命令即可无任何的返回就是成功的:

#sed -i 's/iptables = iptables/iptables = iptables/' /etc/fail2ban/action.d/iptables-common.conf 

4) 启动 fail2ban 

# /etc/init.d/fail2ban start
Starting fail2ban:                                         [  OK  ]

1.png 


攻防效果的演示


fail2ban 策略生效之前:

6.png

生效之后:

7.png

再看下防护墙规则(这个规则是 fail2ban 自动添加的):

8.png

登陆后阅读全文
阅读 1908 赞赏 0 有用 0 没用 0 收藏 0 分享

   



0 条留言

linux分享的头像

linux分享

每个软件都有确定的用途

相关文章

阿里云·业务运营团队内部的前端构建和工程化工具 Dawn开源

Linux下Tengine结合lua防御cc攻击案例

阿里云云盾扫描服务器的的IP段有哪些?

阿里云云盾扫描服务器的的IP段有哪些?

安全组设置允许SSH登录到 Linux 实例

Linux 流控原理,实现,及实例

Linux 如何使用 kpartx 命令读取分区表信息

云服务器 ECS Linux /tmp 目录文件是如何做到定期清理的?

Linux Web 环境配置站点的方法

Linux 内核配置问题导致 NAT 环境访问异常

有料推荐

这世界欠我一个这样的老公!

高校学生模仿“世界名画”摆拍,可以说是戏精本精了

iPhone X 跌破发行价,苏宁200亿入股恒大 | 财经日日评

果然是高手!这次在日本,特朗普竹杠敲得不是一般狠

资深黄牛现身说法:iPhone X价格秒变不停,就像炒股一样

长一样的双胞胎也能识别?蚂蚁金服发布「眼纹识别」技术

苏联是怎么被阿富汗拖垮的?

美团或入局「分时租赁」共享汽车,王兴要大笔投入「泛出行」领域了? | 36氪独家

你或许被“一盘番茄炒蛋”刷屏了,但有人辛酸,有人质疑

iPhone X发售前夜,黄牛与苹果公司的不安

他的文章

我是如何执行 "rm -rf ~" 的

正态分布为什么常见?(财富的分布却不符合正态分布)

Linux下窗口管理器 xmonad 的使用教程

用披萨做比喻来解释 IaaS,PaaS,SaaS 的区别

如何制作CSR(证书私钥和证书请求文件)文件?

php RedisException with message read error on connection

Windows环境下ping丢包或不通时链路测试工具推荐

Linux下ping丢包或不通时链路测试工具推荐

链路测试结果分析说明及常见链路异常场景和测试报告

SSH 登录时出现如下错误:login: Module is unknown

手机扫一扫
分享文章