实时采集并分析Nginx日志, 自动化封禁风险IP方案
文章地址: https://blog.piaoruiqing.com/2019/11/17/block-ip-by-analyzing-nginx-logs/
前言
本文分享了自动化采集、分析Nginx日志并实时封禁风险IP的方案及实践.
阅读这篇文章你能收获到:
日志采集方案.
风险IP评估的简单方案.
IP封禁策略及方案.
阅读本文你需要:
熟悉编程.
熟悉常用Linux命令.
了解Docker.
背景
分析nginx访问日志时, 看到大量404的无效请求, URL都是随机的一些敏感词. 而且近期这些请求越来越频繁, 手动批量封禁了一些IP后, 很快就有新的IP进来.
因此萌生了通过自动化分析Nginx日志实时封禁IP的想法.

需求
| 序号 | 需求 | 备注 |
|---|---|---|
| 1 | Nginx日志收集 | 方案有很多, 笔者选择了最适合个人服务器的方案: filebeat+ redis |
| 2 | 日志实时分析 | 实时消费redis的日志, 解析出需要的数据进行分析 |
| 3 | IP风险评估 | 对IP进行风险评估, 多个维度: 访问次数、IP归属、用途等 |
| 4 | 实时封禁 | 针对风险IP进行不同时长的封禁 |
分析
从日志中简单总结几个特征:
| 序号 | 特征 | 描述 | 备注 |
|---|---|---|---|
| 1 | 访问频繁 | 每秒数次甚至数十次 | 正常的流量行为也存在突发流量, 但不会持续很久 |
| 2 | 持续请求 | 持续时间久 | 同上 |
| 3 | 多数404 | 请求的URL可能大多数都不存在, 且存在敏感词汇如admin、login、phpMyAdmin、backup等 | 正常流量行为很少存在这种情况 |
| 4 | IP不正常 | 通过ASN能看出一些端倪, 一般这类请求的IP都不是普通的个人用户. | 查询其用途一般是COM(商业)、DCH(数据中心/网络托管/传输)、SES(搜索引擎蜘蛛)等 |
备注: 这里分析IP是通过ip2location的免费版数据库, 后面会有详细的描述.
方案

日志采集
来源: 笔者的网站通过docker部署, Nginx作为唯一入口, 记录了全部访问日志.
采集: 由于资源有限, 笔者选择了一款轻量的日志采集工具Filebeat, 收集Nginx日志并写入Redis.
风险评估
Monitor服务根据URL、IP、历史评分等进行风险评估, 计算出最终的危险系数.
IP封禁
Monitor发现危险IP后(危险系数超过阈值), 调用Actuator进行IP封禁, 封禁时长根据危险系数计算得出.
实施
日志采集
Filebeat的用法很简单, 笔者通过swarm进行部署, 其部署文件如下(为防止代码过长, 此处略去了其他服务):
文章转载自代码如诗,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




