暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

代码如诗 2019-11-18
302

实时采集并分析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的想法.

需求

序号需求备注
1Nginx日志收集方案有很多, 笔者选择了最适合个人服务器的方案: filebeat
+redis
2日志实时分析实时消费redis
的日志, 解析出需要的数据进行分析
3IP风险评估对IP进行风险评估, 多个维度: 访问次数、IP归属、用途等
4实时封禁针对风险IP进行不同时长的封禁

 

分析

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

序号特征描述备注
1访问频繁每秒数次甚至数十次正常的流量行为也存在突发流量, 但不会持续很久
2持续请求持续时间久同上
3多数404请求的URL可能大多数都不存在, 且存在敏感词汇如admin、login、phpMyAdmin、backup等正常流量行为很少存在这种情况
4IP不正常通过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:
  imagedocker.elastic.co/beats/filebeat:7.4.2
  deploy:
    resources:
      limits:
        memory64M
    restart_policy:
      conditionon-failure
  volumes:
  - $PWD/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
  - $PWD/filebeat/data:/usr/share/filebeat/data:rw
  - $PWD/nginx/logs:/logs/nginx:ro
  environment:
    TZAsia/Shanghai
  depends_on:
  - nginx
文章转载自代码如诗,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论