实时文章采集(实时采集并分析Nginx日志,自动化封禁封禁风险IP方案 )

优采云 发布时间: 2021-12-10 08:21

  实时文章采集(实时采集并分析Nginx日志,自动化封禁封禁风险IP方案

)

  实时采集并分析Nginx日志,自动拦截有风险的IP程序php

  文章地址:html

  前言

  本文分享了自动化采集、分析Nginx日志、实时封禁风险IP的解决方案和实践。节点

  阅读这个文章你可以得到:nginx

  阅读这篇文章你需要:git

  背景

  分析nginx访问日志时,看到大量无效的404请求,URL都是随机的敏感词。这些请求最近变得更加频繁。手动批量禁止部分IP后,新的IP很快就会进来。 web

  于是萌生了自动分析Nginx日志后实时封禁IP的想法。

  

  需求序号需求备注

  1

  Nginx 日志采集

  解决方案很多,我选择了最适合我服务器的方案:filebeat+redis

  2

  实时日志分析

  实时消费redis日志,分析需要的数据进行分析

  3

  知识产权风险评估

  IP风险评估,多维度:访问次数、IP归属、使用等。

  4

  实时禁止

  阻止风险 IP 不同的时间长度

  分析

  简单从日志中总结了几个特点:sql

  序列号功能说明备注

  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、历史分数等进行风险评估,计算出最终的风险系数。

  知识产权禁令

  Monitor发现危险IP(风险系数超过阈值)后,调用Actuator对该IP进行封堵,根据风险系数计算封禁时长。

  实现日志采集

  Filebeat 的使用非常简单。笔者通过swarm进行部署,部署文件如下(为防止代码过长,其余服务在此省略):

  version: '3.5'

services:

filebeat:

image: docker.elastic.co/beats/filebeat:7.4.2

deploy:

resources:

limits:

memory: 64M

restart_policy:

condition: on-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:

TZ: Asia/Shanghai

depends_on:

- nginx

  filebeat.yml 文件内容如下:

  filebeat.inputs:

- type: log

enabled: true

paths:

- /logs/nginx/access.log

json.keys_under_root: true

json.overwrite_keys: true

output.redis:

hosts: ["redis-server"]

password: "{your redis password}"

key: "filebeat:nginx:accesslog"

db: 0

timeout: 5

  部署成功后,查看redis数据:

  

  风险评估

  Monitor 服务是用 Java 编写的,使用 docker 部署,并通过 http 与 Actuator 服务交互。

  风险评估需要整合多个维度:

  序列号维度策略

  1

  知识产权归属

  中文网站的用户群通常属于中国。如果IP属于国外,就需要警惕了。

  2

  用

  IP获得使用后,DCH(​​数据中心/网络托管/传输)、SES(搜索引擎蜘蛛)等,增加风险评分。

  3

  访问资源

  访问资源不存在且路径收录敏感词,如admin、login、phpMyAdmin、backup等,提高风险评分。

  4

  访问的频率和持续时间

  频繁和持续的请求,考虑提高分数。

  5

  历史成绩

  历史分数被整合到当前分数中。

  获取 IP 归属

  获取IP归属地相对容易。许多数据服务网站提供免费的包,例如IpInfo。还有免费版本的 IP 数据库可以下载,例如 ip2location。

  作者使用了免费版的ip2location数据库:

  

  ip_from 和 ip_to 是IP段的开始和结束,存储格式为十进制。在 MySQL 中,可以通过 inet_aton('your ip') 函数将 IP 转换为十进制。例如:

  set @a:= inet_aton('172.217.6.78');

SELECT * FROM ip2location_db11 WHERE ip_from = @a LIMIT 1;

  ip_fromip_tocountry_codecountry_nameregion_namecity_namelatitudelongitudezip_codetime_zone

  2899902464

  2899910655

  我们

  美国

  加利福尼亚州

  山顶风光

  37.405992

  -122.07852

  94043

  -07:00

  获取AS、ASN和用法

  网站提供的大部分免费服务都无法查询ASN或者没有目的。ASN数据也有免费的数据库,但还是没有目的和类型等,这时候作者通过其他方式救国。

  ip2location 提供免费版本的 IP2Location™LITE IP-ASN 和 IP2Proxy™LITE 数据库。

  IP2Location™LITE IP-ASN:该数据库提供了对肯定自治系统和编号 (ASN) 的参考。

  IP2Proxy™LITE:数据库收录用作开放代理的 IP 地址。该数据库包括所有公共 IPv4 和 IPv6 地址的代理类型、国家、地区、城市、ISP、域、使用类型、ASN 和最新记录。

  IP2Location™LITE IP-ASN 无法找出所使用的 IP 类型。如果数据较少,IP2Proxy™LITE 不一定收录指定的 IP。但是可以结合这两个库来粗略猜测IP的用途:

  首先,在 IP2Proxy™LITE 中查找 IP 的 ASN。

  set @a:= inet_aton('172.217.6.78');

SELECT * FROM ip2location_asn WHERE ip_from = @a LIMIT 1;

  ip_fromip_tocidrasnas

  2899904000

  2899904255

  172.217.6.0/24

  15169

  谷歌有限责任公司

  结合ASN和IP,查询与指定IP最近的同一个ASN的两条记录:

<p>set @a:= inet_aton('172.217.6.78');

SELECT * FROM ip2proxy_px8 WHERE ip_from >= @a AND asn = 15169 ORDER BY ip_from ASC LIMIT 1;

SELECT * FROM ip2proxy_px8 WHERE ip_from

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线