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

前言

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

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

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

阅读本文你需要:

  • 熟悉编程.

  • 熟悉常用Linux命令

  • 了解Docker.

背景

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

因此萌生了通过自动化分析Nginx日志实时封禁IP的想法.
在这里插入图片描述

需求

在这里插入图片描述

分析

在这里插入图片描述

从日志中简单总结几个特征:

备注: 这里分析IP是通过ip2location的免费版数据库, 后面会有详细的描述.

方案

sequenceDiagram
    participant Nginx
    participant Filebeat
    participant Redis
    participant Monitor
    participant Actuator
    Nginx ->> Filebeat: accessLog(File)
    Filebeat ->> Redis: accessLog(JSON)
    loop Always
    Redis ->> Monitor: accessLog(JSON)
    activate Monitor
    Monitor ->> Monitor: Analysis
    Monitor ->> Monitor: Risk assessment
    Monitor ->> Actuator: Banned
    Monitor ->> Monitor: Storing
    end
    deactivate Monitor

日志采集

来源: 笔者的网站通过docker部署, Nginx作为唯一入口, 记录了全部访问日志.

采集: 由于资源有限, 笔者选择了一款轻量的日志采集工具Filebeat, 收集Nginx日志并写入Redis.

风险评估

Monitor服务根据URL、IP、历史评分等进行风险评估, 计算出最终的危险系数.

IP封禁

Monitor发现危险IP后(危险系数超过阈值), 调用Actuator进行IP封禁, 封禁时长根据危险系数计算得出.

实施

日志采集

Filebeat的用法很简单, 笔者通过swarm进行部署, 其部署文件如下(为防止代码过长, 此处略去了其他服务):

version: '3.5'
services
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值