【面向绝对新手】什么是可疑访问?

目录
介绍
您好。我是 Paru,系统解决方案部门的二年级基础设施工程师,将于 2024 年毕业。
开门见山地说,大家能立刻想象出什么是访问日志吗?
作为一名处理告警的基础架构工程师,访问日志是我每天都会看到的基本日志之一,但在我入行的第一年,我特别讨厌它,甚至可以说是非常反感它。
所以,这次为那些还不熟悉访问日志的人写一篇文章,例如那些“不知道访问日志里写了什么”、不知道如何调查访问日志““无法确定哪种访问是攻击”的人。
*本文是关于如何进行调查的,因此没有提及任何调查命令,但是页面底部的参考网站中列出了许多优秀的文章,希望您能去看看!
了解访问日志
访问日志的用途是什么?
网站加载缓慢或出现错误导致无法浏览的情况相当常见。
虽然流量增加和服务器负载过高并非造成这些问题的唯一原因,但查看访问日志流量是否是根本原因有助于确定
输出访问日志对于找出问题根源至关重要。
我们来看一下访问日志。
我们来看一个例子。
例如,假设您访问某个网站(http://example.net)。
那么,以下消息将作为访问日志输出到服务器。
192.168.100.101 - - [1/Nov/2025:10:20:50 +0900] "GET /index.php HTTP/1.1" 200 1042 "http://example.com" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
乍一看,它像是一串简单的字符,类似于代码,但实际上,它只是何时、何人、何地以及他们来的目的按固定顺序记录的
内容有点长,但我们下面来逐一分析。
192.168.100.101...原始客户端的 IP 地址(这是发起访问的 IP 地址)-… 客户端标识符(通常不使用,所以用 - 表示)-... 请求者的用户名(访问需要身份验证的页面的人的姓名。通常是 -)。[2025年11月1日 10:20:50 +0900]... 访问日期和时间(+0900 表示与 UTC 有 9 小时时差)“GET... HTTP 方法(有多种类型,例如 GET 通信和 POST 通信)”/index.php... 请求 URI(此路径告诉服务器:“我想要这个文件!”)HTTP/1.1”... HTTP 版本200…… 状态码(200 表示请求成功!)1042... 响应字节数(服务器返回的数据大小;单位为字节)"http://example.com"... 来源网址(您通过链接访问的上一页面的网址。这是您在访问 http://example.net/index.php 之前所在的页面)"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"... 用户代理(浏览器和操作系统信息。显示正在使用 Chrome 浏览器。)
如何设置输出格式
Web 服务器输出的访问日志没有固定格式;您可以在配置文件中自由定义“记录哪些信息以及记录顺序”。
此设置通常/etc,但格式会因所使用的中间件(Apache、Nginx
等)而异。以下是一个编写示例。
Apache 版本
LogFormat "%{X-Forwarded-For}i %l %u [%t] \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Nginx 版本
log_format combined '$http_x_forwarded_for - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
Apache 示例中的 %{X-Forwarded-For}i Nginx 示例中的 $http_x_forwarded_for 让我们简要地了解一下
默认情况下不会写入此项,但写入后,负载均衡器或反向代理的即使在前端存在可以确定访问来源的 IP 地址。
相反,如果不写入此设置,则只会写入前端负载均衡器或反向代理的 IP 地址,无法进行详细调查。
简而言之,根据您在配置文件中的编写方式自由定制可以
更改信息的写入顺序会改变输出顺序,您还可以记录特殊值(例如,本例中的头部信息)。
有关格式的详细说明,请参阅以下文章。
ア我们来查看一下访问日志。
这是一份非常简略的访问日志调查指南,列出了您可能需要查看的内容。
由于访问内容和调查方法差异很大,请将此视为一个示例。
前提:您的服务器 CPU LA(等待队列)正在上升!让我们来调查一下!
步骤 1:检查接入号码的趋势
首先,为了检查服务器负载是否是访问量不足的原因,我们来统计一下每分钟的访问次数。
10 [2025年10月29日 12:00 10
[2025年10月29日 12:01 11
[2025年10月29日 12:02
2529 [2025年10月29日 12:03 5107
[2025年10月29日 12:04
2714 [2025年10月29日 12:05 26
[2025年10月29日 12:06 30
[2025年10月29日 12:07
从12:03开始的短短三分钟内访问量突然激增,这非常奇怪。
这似乎是CPU负载增加的原因。
步骤二:识别可疑活动
一旦发现访问量突然激增,下一步“谁访问了以及访问原因”。就是确定
接下来,你需要重点查看访问量激增时段的日志,寻找任何可疑之处。
① 访问源IP
检查是否存在来自特定 IP 地址的频繁访问。
# 访问次数 IP 地址
10143 192.0.2.115
128 192.0.2.22
62 192.0.2.88
17 192.0.2.54
如果你在IP地址查询网站上查看IP地址信息,发现一个面向日本用户的网站收到大量来自海外IP地址的访问,那就很可疑了。这很可能是网络爬虫或攻击。
② 访问路径(请求 URI)
我们将分析网站上哪些路径的流量最大。
重点关注可疑的IP地址并检查其路径,会让情况更加明朗。
# IP 地址 192.0.2.115 的访问目标:路径
105 /wp-login.php
98 /xmlrpc.php
42 /?author=1
27 /wp-admin/admin-ajax.php
15 /wp-config.php.bak
15 /wp-admin/profile.php
14 /wp-content/plugins/file-manager/readme.txt
这里很难区分“可疑”和“不可疑”,所以我们逐一来看。
网站一家商店,合法访问(只需点击网址)是前门,而可疑访问(试图访问 WordPress 的管理面板等)后门我们把
wp-login.php 和 xmlrpc.php(可疑)
目的:未经授权的登录(暴力破解攻击)
示例:就像尝试所有可能的 ID 和密码来摇晃商店“员工专用后门”的门把手一样。
/?author=1(可疑)
目的:识别用户名
示例:在前门询问“请问有工号为 1 的员工吗?”,试图窃取员工姓名(登录用户名)
wp-config.php.bak(可疑)
用途:窃取机密信息
示例:就像检查是否已下载包含商店“安全组合”(例如数据库密码)的备忘录备份文件(.bak)。
合法
功能(例如自动保存文章、动态处理等)。如果访问量异常高,则可能被用于攻击。wp
-admin/profile.php(根据访问 IP 地址可能无可疑之处)——允许已登录用户查看自己的个人资料。plugins
/.../readme.txt(可能用于侦察)——用于扫描插件。
以上只是一个例子,但访问这种明显可疑的路径非常普遍。
③ 获取通信和发布通信
我已经详细讨论过路径,但如何通过这些路径进行通信来获取信息同样重要的。
我想简要谈谈常见的“获取通信”和“发布通信”。
GET 通信(图片:明信片)
用途:用于请求信息。(例如:显示页面,查看信息,使用 /?author=1)
特点:您发送的信息会附加到 URL 中(例如 ?author=1)。信息完全可见,因此无法发送重要信息。
POST 通信(图片:信封里的信件)
用途:请求某人“请接收此信息!”(例如:登录、提交表单)
特点:发送的信息(ID 和密码)可以通过将其放在信封中来隐藏。信息不会显示在 URL 中。
为什么这很重要?
在这个调查示例中,针对 /wp-login.php(后门)的攻击需要在发送时隐藏“ID 和密码”等敏感信息,因此它们总是使用 POST 请求。
如果您查看日志并发现GET 请求“这很可能是扫描,而不是攻击。则可以判断
相反大量 POST请求,这可能是暴力破解攻击!则可以判断
③ 状态码
看看服务器如何响应。
# 访问次数 状态码
6821 404
153 500
112 403
35 200
4xx(未找到等)或5xx(内部服务器错误等)错误,则表明访问尝试失败。4xx
5xx错误仍然允许 Web 服务器响应,。错误则表示服务器无响应(即程序抛出错误),这会降低服务器速度并导致负载增加
如果对可疑访问返回 200 OK(正常)状态码呢?
需要注意的是,200 OK(请求成功)
仅仅表示服务器返回了请求的内容,并不代表访问是安全的。打个比方
,404 就像是死路一条,意思是“保险箱密码不在这里”,而你已经把密码交给了你,说“给你”。则表示
如何解读登录攻击(wp-login.php)日志
POST /wp-login.php → 200 OK(登录失败)
含义:用户名或密码错误。系统将重新显示登录页面。
如果这种情况反复发生,则可以断定正在进行暴力破解攻击。
POST /wp-login.php → 302 Found(登录成功)
含义:身份验证成功!您将被重定向到后台管理面板 (/wp-admin/)。
如果攻击 IP 地址返回 302 状态码,则表明您的网站已被攻击者入侵,这是一个危险的信号。
因此,如果您在访问可疑路径时收到 200 OK 或 302 Found,则攻击开始成功,您应该更加仔细地进行调查。
还有许多其他类型的状态码,请参阅下面的文章了解更多详情。
④ 用户代理
最后,看看你是用什么方式访问它的。
# 用户代理示例
:“Mozilla/5.0 (compatible; DotBot/1.2; ...)”
“Mozilla/5.0 (... compatible; Google-Read-Aloud; ...)”
日志中“bot”或“crawler包含恶意爬虫程序但也存在
此外,如果此部分包含奇怪的字符串,或者访问明显偏向特定用户代理,攻击的迹象
信息量很大,让人疲惫……
粗略地说,根据以上信息,我们将确定服务器负载是否由访问引起,以及哪些类型的访问可以被认为是“可疑的”。
如何处理可疑访问?
在实际处理这个问题时,你需要与客户达成协议,但这里有一些处理此类问题的典型例子。
① 屏蔽 IP 地址(最快的方法)
经过调查,我们发现异常多的访问来自特定的 IP 地址(例如 192.0.2.115),因此最快的解决方法是阻止来自该地址的访问。
阻止访问的方法因环境而异。
在 Nginx 环境中,您可以在配置文件中写入 `deny 192.0.2.115;`;在 Apache 环境中,您可以使用 .htaccess 文件限制访问。您还可以通过操作系统防火墙阻止访问,或者如果操作系统防火墙前部署了 Web 应用防火墙 (WAF),也可以通过 WAF 阻止访问。
② 限制对特定路径的访问
攻击者wp-login.php会瞄准“仅限员工访问的后门(例如严格限制对这些“后门”的访问至关重要
例如,wp-login.php您可以在 Nginx 配置文件中添加一个设置,内容为“仅允许贵公司的 IP 地址访问
*请注意,语法可能因 Nginx 版本而异!
location = /wp-login.php {
# 只允许我的 IP 地址
allow 1.2.3.4;
# 拒绝所有其他
deny all;# 别忘了包含 PHP 代码:
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm/www.sock;
}
对于您不希望从未指定数量的 IP 地址访问的路径(例如,仅用于攻击的 xmlrpc.php),使用 deny all 可以有效地使其从一开始就完全不可见。
概括
你觉得怎么样?
我以前很讨厌访问日志,但研究了一年之后,我逐渐开始理解它们。我希望这
能对那些正在为调查访问日志而苦恼的人有所帮助。
感谢您读到最后🌷
参考网站:
如何查看 Linux 访问日志 | 清晰解释日志位置、查看方法和使用示例;
解释用于简化日志阅读的“grep”和“awk”命令;
[案例研究] WordPress 网站遭篡改后我们如何恢复并采取应对措施;
学习 HTTP 请求的基础知识:GET 和 POST 的区别;
设置管理员屏幕访问限制作为 WordPress 的安全措施
3
