恶意IP识别教程

更新于 2025年6月17日 WordPress 教程

恶意IP识别教程

之前写过一篇文章说我屏蔽了一堆疑似采集的 ip 后,网站不卡了,今天和大家分享一下我是如何发现这些恶意访问的ip。

我假设你会

1. 通过 ssh 登陆你的服务器
2. 知道如何找到你的网站的 access log(如果你安装了宝塔,那么网站的访问日志在 /www/wwwlogs 这个目录中)

当然,如果不会也没什么关系,不妨碍了解这些知识。

**接下来我教大家通过分析访问日志找到恶意 ip 的几个方法,大家可以先收藏,需要的时候拿出来看。**

## 一、大量访问的 ip 一般不正常

一个正常的人,访问一个网站是不可能在短时间产生大量请求的,这是个再正常不过的想法。

因此我们聚合近期访问的ip,按照访问次数排序,那些访问次数巨大的ip就很可疑了。

使用 tail + awk 命令组合,找到访问量最大的一些 ip。命令如下:

“`bash
tail -n100000 access_log_file.log | awk ‘{print $1}’ | sort | uniq -c  | sort -rn | more
“`

得到的结果可能是类似下面的列表:

“`
21406 120.244.200.140
14537 52.70.240.171
14375 23.22.35.162
14238 3.224.220.101
4675 8.138.101.223
2810 120.244.200.75
“`

第一列是访问次数,第二列就是 ip。

看这个结果很明显就不正常,最近10万次访问有2万次是同一个ip访问的,有问题的概率很大。

接下来我们就需要一一验证这些 ip 的归属地,因为有一些可能是蜘蛛 ip,如果不是蜘蛛 ip,一般我就直接屏蔽了。

## 二、经常访问 wp-json 一般不正常(WordPress 网站)##

如果你的网站没有 app,那么理论上不会有人访问 wp-json 链接,然而如果日志中有大量的 wp-json 访问,那么说明有人在偷偷探测或采集

例如,一个典型的访问日志如下:

“`bash
183.157.39.120 – – [12/Jun/2025:22:41:59 +0800] “GET /wp-json/oembed/1.0/embed?url=http%3A%2F%2Fpinyin8.com%2F56469.html HTTP/1.1” 500 59 “https://google.com” “Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844 Safari/537.36” “-” 0.070
“`

很明显就是恶意请求,正常用户不会产生这种请求,可以直接屏蔽这个ip。

## 三、经常访问不存在的路径的请求一般不正常 ##

这种和经常访问 wp-json 同理,如果在日志中经常有用户访问不存在的地址,说明有用户在攻击。

“`bash
tail -n10000 your_access_log.log | awk ‘$9 == 404 {print $1,$7}’ | sort | uniq -c | sort -rn
“`

典型的输出如下:

“`
2 196.251.87.59 /.env
2 104.250.135.50 /nobom.php
2 101.33.234.97 /setpwd.php
1 8.211.58.150 /nodeinfo/2.0
1 8.211.38.78 /nodeinfo/2.0
1 8.211.195.105 /nodeinfo/2.0
1 78.153.140.224 /.env.new
1 78.153.140.224 /.env-2fa
1 78.153.140.224 /.env
1 78.153.140.151 /.env
“`

接下来就可以分析这些 ip 有什么特征,然后判断是否需要屏蔽这些 ip 段。

## 四、不常见的 UA 一般不正常 ##

UA,即 User-Agent,客户端请求网站时基本会带上的信息,比如 Chrome 浏览器的 UA 如下:

“`
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36
“`

但爬虫,自动化工具的 UA 一般会有所区别,因此我们可以统计访问靠前的 UA 来分析是否有恶意请求。

命令如下:

“`
tail -n10000 access_log_file.log | awk -F\” ‘{print $6}’ | sort | uniq -c | sort -rn | mores
“`

输出类似如下:

“`
2894 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
631 Mozilla/5.0 (Linux; Android 5.0) AppleWebKit/537.36 (KHTML, like Gecko) Mobile Safari/537.36 (compatible; Bytespider; https://zhanzhang.toutiao.com/)
578 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/116.0.1938.76 Safari/537.36
475 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot)
428 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.43
43 meta-externalagent/1.1 (+https://developers.facebook.com/docs/sharing/webmasters/crawler)
35 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
33 Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/606.2.35 (KHTML, like Gecko) Mobile/15E148 QQ/8.0.8.458 V1_IPH_SQ_8.0.8_1_APP_A Pixel/1242 Core/WKWebView Device/Apple(iPhone XS) NetType/WIFI QBWebViewType/1 WKType/1
32 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/535.2 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
31 Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/606.2.87 (KHTML, like Gecko) Version/13.0.4 Mobile/15E148 Safari/604.1
“`

可以看到大部分是来自爬虫的请求,

Claude 的爬虫非常疯狂。但现在 AI 时代,这些大模型的爬虫通常是抓取内容去训练,我们还不太好阻止。当然,如果你不希望你的网站数据拿去训练,可以直接屏蔽这种 UA。

找到恶意 ip 的方法很多,然而手动操作还是有些麻烦的,目前我正在开发一款自动发现并拦截恶意请求的插件,敬请期待。

你可能还喜欢下面这些文章

Auditor:WordPress 文章内容安全审核插件Auditor:WordPress 文章内容安全审核插件

本插件可以识别文章中的敏感信息,如果文章存在敏感信息,文章将会自动移动到安全的敏感隔离区,禁止任何形式的前台访问。

WordPress小说主题wpnovo,支持多语言、付费阅读、VIP会员功能的精美小说模板WordPress小说主题wpnovo,支持多语言、付费阅读、VIP会员功能的精美小说模板

//demo.imwpweb.com/wpnovo/多设备支持主题支持PC和移动端界面,独立设置,互不干扰。移动端首页(右)图:小说页面PC端和移动端的展示付费订阅主题支持付费订阅功能,支持付费单章订阅、整本小说订阅模式。

WordPress自动内链插件 WPKAL ,网站全自动增加锚链接必备插件WordPress自动内链插件 WPKAL ,网站全自动增加锚链接必备插件

什么是内链内链,顾名思义就是在同一网站域名下的内容页面之间的互相链接(自己网站的内容链接到自己网站的内部页面,也称之为站内链接)。自动内链工作原理简单来说,我们设定一些词表以及词表对应的链接,比如词是wordpress插件,链接是http

WordPress 敏感词违禁词屏蔽插件 WPWJC 介绍与下载WordPress 敏感词违禁词屏蔽插件 WPWJC 介绍与下载

这款插件的核心功能就是一点:找出文章中的违禁词、敏感词等措辞不当的词语,替换成你设置的更合适的词或者直接替换“*”号。请注意,需要同时下载站长工具箱和违禁词屏蔽插件,安装插件时也需要两个插件同时安装。

WordPress 文章自动配图、缩略图插件 WPAC 介绍与下载WordPress 文章自动配图、缩略图插件 WPAC 介绍与下载

2、自动生成的图片并非真实在磁盘中的图片,而是动态生成的,如果保存到磁盘会占用大量空间,这个空间没必要浪费,因此修改主题代码,直接将缩略图的地址改为wpac自动生成的缩略图地址是一个非常好的方案。

WordPress 相关文章插件 wprecWordPress 相关文章插件 wprec

wprec利用相似度算法计算每篇文章之间的相似度,找到与当前文章最相似的一些文章,展现在文章底部作为相关文章。我们知道,相关推荐插件推荐的原理是根据当前文章的特征(文章的高权重标签),从文章库中召回相关文章,再根据相关性评分,最后选出To