Nginx 400 异常请求分析:MySQL 协议扫描流量误投 Web 端口

Nginx 日志出现 \xFF 二进制乱码与 400 错误?一次典型 MySQL 端口扫描分析

在维护 Nginx 网站日志时,经常会遇到一些看起来像 “乱码” 的异常请求记录,这类请求往往伴随着 400 Bad Request 状态码,让不少运维和站长困惑不已。

今天我们就通过一条真实的 Nginx 访问日志,完整分析一次典型的恶意扫描行为,让大家以后遇到类似日志不再迷茫。

一、原始日志记录

45.142.154.103 - - [31/May/2026:00:08:19 +0800] "\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x7F\x03\x01NULL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 400 166 "-" "-"

第一眼看上去,请求内容是大量 \x00 空字节、\xFF 和乱码,没有正常的 GET/POST 等 HTTP 方法,服务器直接返回 400 错误。

二、日志字段简单解释

  • 45.142.154.103:发起请求的来源 IP
  • [31/May/2026:00:08:19 +0800]:请求时间
  • 中间一长串十六进制乱码:实际请求内容
  • 400:HTTP 状态码,表示非法请求
  • 末尾 -:无 Referer、无 User-Agent

三、核心:这段 \xFF 开头的乱码到底是什么?

通过协议特征可以明确判断:

这是一段标准的 MySQL 数据库连接握手数据包,被错误发送到了 Web 80/443 端口。

关键特征:

  1. \xFF 开头,是 MySQL 协议的典型标识
  2. 包含版本协商字段 \x7F
  3. 大量 \x00 空字节填充,符合 MySQL 握手包结构
  4. 无任何 HTTP 语义,不属于正常网页访问

简单说:

扫描器本来想扫 3306 端口,结果把 MySQL 探测包发到了我的网站端口。

四、来源 IP 是什么性质?

IP:45.142.154.103

这类 IP 通常属于:

  • 僵尸网络扫描节点
  • 自动化数据库弱口令爆破脚本
  • 全网端口扫描器
  • 常见于东欧、俄罗斯等机房段

它们并不针对你个人,只是在全网批量扫 IP 段,寻找开放的 MySQL、Redis、Mongo、PostgreSQL 等未授权访问数据库。

五、这种请求危险吗?

结论:完全安全,没有危害。

原因:

  1. 请求发错了端口,Web 服务器无法识别
  2. Nginx 直接返回 400,拒绝处理
  3. 没有执行任何代码,没有漏洞利用
  4. 没有访问敏感路径,没有上传文件
  5. 服务器没有暴露任何敏感服务

我们看到的 400,本质上是防御成功的记录。

六、遇到这类日志应该怎么办?

  1. 不必惊慌,这是互联网常态
  2. 无需手动封禁,除非同一 IP 高频密集攻击
  3. 建议安装 fail2ban,自动屏蔽频繁恶意 IP,觉得最近fail2ban还是有效果的。
  4. 确保 MySQL、Redis 等服务仅内网访问,不暴露公网
  5. 定期查看日志,了解服务器暴露面即可

七、总结

Nginx 中出现 \xFF 开头的二进制乱码 + 400 错误,99% 情况都是数据库扫描流量误投 Web 端口

  • 请求来源:自动化僵尸网络扫描
  • 内容:MySQL 协议握手包
  • 结果:被 Web 服务器正常拒绝
  • 风险:无

下次再看到类似日志,你就可以直接判断:又是扫错端口的脚本,不用管。

本文首发于 58Linux技术博客,专注Ubuntu桌面使用、Linux服务器运维与网站搭建实战。

发表评论

粤ICP备10052831号 | © 2026 58Linux 技术笔记. All Rights Reserved. | 联系我们 | 关于本站
本站内容开放共享,仅供学习交流 | 专注 Ubuntu & Linux 实战教程
Built with GeneratePress