如何处理宝塔面板被恶意扫描导致的资源耗尽_配置面板防火墙黑名单IP

夜敏小哥_7504

夜敏小哥_7504

2026-05-06

1019人浏览

原创

应先用tail+awk分析日志识别高频IP及随机路径,再结合netstat查并发连接、宝塔拦截记录和User-Agent指纹确认是否为恶意扫描,而非仅凭404误判。

如何处理宝塔面板被恶意扫描导致的资源耗尽_配置面板防火墙黑名单ip

宝塔面板被恶意扫描拖垮服务器,光靠“封IP”没用,得先确认是不是真被扫——很多502、CPU飙高其实是PHP慢脚本或Redis被清库导致的假象。

怎么确认是恶意扫描不是其他问题

别一看到访问日志里一堆404就断定是扫描。先查真实攻击特征:

  • 用 tail -n 1000 /www/wwwlogs/your-site.com/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -20 看哪些IP请求最多;如果单个IP每秒几十次且路径随机(如 /phpmyadmin/、/wp-admin/setup-config.php),基本可判为扫描
  • 检查 netstat -an | grep :80 | grep ESTABLISHED | wc -l,若远超正常并发(比如 >500),但 ps aux | grep 'php-fpm:' | wc -l 却只有十几,说明大量连接卡在Nginx层,大概率是CC类扫描
  • 看宝塔「安全 → 防火墙」里「今日拦截记录」,如果同一IP反复触发「目录遍历」「SQL注入特征」等规则,就是典型扫描行为

宝塔防火墙黑名单不生效的常见原因

很多人加了IP进黑名单却还在被扫,问题往往出在链路顺序或配置遗漏:

  • 黑名单只对「经过防火墙规则的流量」生效,如果你开了CDN或反向代理(如Nginx前置负载),真实IP会被替换成CDN节点IP,此时封错对象——必须在Nginx配置里加 real_ip_header X-Forwarded-For; 并配 set_real_ip_from 段
  • 宝塔防火墙默认只拦截「未匹配白名单的请求」,如果开了「IP白名单」但漏写了自己办公IP,连后台都打不开,更别说封别人
  • 黑名单规则是「内存缓存」,重启服务器或宝塔服务后会丢失——必须点「安全 → 防火墙 → 黑名单 → 导出」备份,或改用fail2ban做持久化封禁
  • 部分扫描器用代理池轮换IP,封单个IP意义不大;应配合「登录失败5次自动封锁」和「CC防护阈值调低至10次/60秒」

手动加黑名单IP的正确操作流程

别直接在防火墙界面点「添加」就完事,容易漏掉关键动作:

btpanel phpsite 宝塔面板PHP网站
btpanel phpsite 宝塔面板PHP网站

宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理

下载
  • 从 /www/wwwlogs/your-site.com/access.log 提取高频恶意IP: awk '$9 ~ /^4/ {print $1}' /www/wwwlogs/your-site.com/access.log | sort | uniq -c | sort -nr | head -10 | awk '{print $2}' > /tmp/badips.txt
  • 进宝塔「安全 → 防火墙 → 黑名单」,粘贴IP(每行一个),勾选「同时封禁该IP所有端口」——否则只封80/443,攻击者可能转扫SSH或Redis
  • 点击「保存」后,**必须点右上角「重载防火墙规则」**,否则配置不写入 iptables 或 firewalld
  • 验证是否生效:在服务器执行 iptables -L INPUT -n | grep "你的IP",能看到对应DROP规则才算成功

为什么建议用fail2ban替代纯黑名单

宝塔自带黑名单是静态的,而fail2ban能动态响应日志行为,更适合对抗扫描:

  • 它监听Nginx的 access.log,一旦检测到某IP在1分钟内触发5次404+非白名单路径,自动调用 iptables 封10分钟
  • 支持多 jail 配置:除了Nginx,还能同时监控SSH(auth.log)、FTP、甚至PHP错误日志里的恶意函数调用
  • 封禁记录写入 /var/log/fail2ban.log,比宝塔防火墙日志更详细,含触发规则名和原始日志行
  • 安装后默认只开 sshd,要防Web扫描得手动启用 nginx-badbots 或自定义 [nginx-404] jail,路径在 /etc/fail2ban/jail.local

真正难的不是封IP,而是区分「扫描流量」和「合法爬虫」——比如百度蜘蛛带 User-Agent: Baiduspider 却大量404,不该封;而 sqlmap 或 dirsearch 的请求头里通常有明显指纹。盯紧日志里 User-Agent 和 Referer 字段,比盲目拉黑更有效。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

120

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

60

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

60

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

40

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

60

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

20

15

Golangci-lint安装与入门教程
Golangci-lint安装与入门教程

本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。

2026.10.22

40

15

PHP2Shell高危漏洞修复教程
PHP2Shell高危漏洞修复教程

PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。

2026.10.22

320

12

剧云人物设定与关系管理教程
剧云人物设定与关系管理教程

本专题介绍剧云人物设定与关系管理,讲解角色小传、性格职业、人物目标、背景资料和关系网络的创建及维护方法。

2026.10.22

40

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
宝塔入门指引手册
宝塔入门指引手册

共0课时 | 0人学习

宝塔官方实践教程
宝塔官方实践教程

共0课时 | 0人学习