如何通过Nginx日志实时封禁风险IP

前言

本文分享了自动化采集、分析Nginx日志并实时封禁风险IP的方案及实践.

阅读这篇文章你能收获到:

  • 日志采集方案.
  • 风险IP评估的简单方案.
  • IP封禁策略及方案.

阅读本文你需要:

  • 熟悉编程.
  • 熟悉常用Linux命令.
  • 了解Docker.

背景

分析nginx访问日志时, 看到大量404的无效请求, URL都是随机的一些敏感词. 而且近期这些请求越来越频繁, 手动批量封禁了一些IP后, 很快就有新的IP进来.

因此萌生了通过自动化分析Nginx日志实时封禁IP的想法.

 

nginx-404-accesslog

 

 

需求

序号 需求 备注
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进行部署, 其部署文件如下(为防止代码过长, 此处略去了其他服务):

version: '3.5'
services:
  filebeat:
    image: docker.elastic.co/beats/filebeat:7.4.2
    deploy:
      resources:
        limits:
          me
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值