Fail2ban、防火墙与安全事件
配置自动封禁、白名单、搜索引擎验证、CDN 回源信任和 WordPress 安全事件。
Fail2ban 自动封禁
面板会根据登录攻击、XML-RPC、访问过快、敏感文件扫描和大量 404 请求执行自动封禁,并同步到系统防火墙和网站访问规则。重复违规会逐步延长封禁时间。
WordPress 登录和 XML-RPC 爆破会显示为独立的“登录防护”来源,不受网站选择哪种访问日志模式影响,也不会和全站访问频率混在一起计数。
常见封禁时间会从 10 分钟逐步增加到 1 小时、6 小时、24 小时,最长 7 天。管理员可以手工解封或设置永久封禁。
白名单和搜索引擎
网站与 SSH 白名单只应用于明确可信的来源。Googlebot、Bingbot 等搜索引擎需要通过官方 IP 信息验证,只有 User-Agent 名称不能证明身份。
修改 CDN 回源组会同时影响 Nginx 和 Fail2ban。配置检查失败时,面板会尝试恢复修改前的设置。
安全事件
安全报告会汇总敏感文件扫描、SQL 注入探测、可疑 PHP 请求、假搜索引擎、文件变化和访客 IP 信息异常。
HTTP 444 表示请求已经被规则拒绝。安全事件是排查线索,不代表每一条都需要再次永久封禁。
误封处理
- 在防火墙页查看 IP、封禁来源、时间和累计次数。
- 核对网站访问日志中的访客地址和实际连接来源。
- 确认 CDN 使用了正确的严格模式或兼容模式。
- 确认误封后执行解封,只有长期可信的来源才加入白名单。
敏感文件保护
面板会在网站服务层拦截一小部分高风险的敏感文件访问,例如 .env 配置文件和 .git 目录,避免网站凭据被直接读取。WordPress 和普通 PHP 网站都默认开启,并且不会误伤正常的业务页面。
WordPress 网站还额外开启了「探测限速」:当某个来源在短时间内频繁扫描并不存在的配置或程序文件时,会先被限速提示,持续异常再交给自动封禁处理。这个保护不会拦截后台、接口和正常的登录操作。
普通 PHP 网站默认不开启探测限速,以免误伤合法的接口、下载或安装页面。
WordPress SQL 注入请求防护
在“安全设置”中,可以分别开启高置信度 SQL 请求拦截和重复来源自动封禁,并设置独立阈值与统计窗口。命中高置信度 URL 结构的请求会在进入 PHP 前返回 403;较弱信号只作为安全证据记录。默认情况下,可信来源在 600 秒内累计 5 次后由独立规则临时封禁。
WordPress 首页只有 s 参数的纯搜索,以及文章或页面 REST 接口只有 search 参数的纯搜索会放行;同时带有其他参数时,不会因为含有搜索参数而整体豁免。该功能只检查 URL,不检查 POST 或 JSON 请求体,也不是完整 WAF。一次拦截只说明请求命中特征,不代表已经确认漏洞或入侵成功。
直连和严格可信代理/CDN 模式可以参与自动封禁;兼容代理模式仍会返回 403 并留证,但不会按请求头中的地址自动封禁。Cloudflare 官方 IP 段和真实 IP Header 由系统全局严格处理,无需在网站详情中选择 Cloudflare 组;网站级 CDN 配置用于其他 CDN、自定义可信段或兼容模式。
关闭拦截或自动封禁不会立即释放已有封禁,已有记录按原到期时间自然解除,也可在“安全防御”中手动解封。SQL 证据和处置集中在“安全防御”,不会发送面板、邮件或 Webhook 通知。
保存安全设置失败时
同一次保存涉及 SQL 注入防护、Fail2ban、限速或日志白名单时,面板会把数据库修改作为一个整体提交,并按顺序应用服务器配置。如果任一配置应用失败,面板会恢复保存前的设置并重新应用旧配置;即使恢复某个子系统失败,也会继续尝试其余子系统并汇总错误。
保存请求会串行执行,避免一个失败请求覆盖另一个已经成功保存的新值。看到失败提示后,不要假定部分新设置已经可靠生效,应按提示检查实际运行状态。
IPv4 与 IPv6 持久封禁
扫描防御、面板登录防护和管理员手动封禁会按地址类型写入独立的 IPv4、IPv6 Nftables 集合。当前封禁页会合并 Fail2ban、持久 Nftables 与 Nginx 黑名单的真实执行状态;数据库只补充原因、等级和时间。
如果 IPv4 或 IPv6 任一集合读取失败,页面仍会保留其他层已经确认的结果,并提示列表可能不完整。不能把读取失败理解为没有封禁。
需要通过 SSH 人工核验时,应分别检查两个地址族:
nft list set ip wppanel_persist banned_ips
nft list set ip6 wppanel_persist banned_ips
文件锁与代码完整性
只有已经开启文件锁且锁定状态健康的 WordPress 站点,面板才会在网站目录之外建立 SHA-256 比较基线,并约每小时检查 WordPress 核心、插件、主题、MU 插件、Drop-in、关键根目录文件,以及运行目录中的 PHP 文件。发现增删改时会留下证据并告警,但不会自动删除、隔离或恢复文件。
- 第一次建立基线只是今后比较的起点,不表示站点当时已经安全。
- 关闭文件锁后不再进行代码和组件监控;锁定期间已有变化转为历史,不再计入当前风险。
- 暂停站点会保留旧基线但不扫描;重新启用后会比较暂停期间的变化,暂停不等于授权维护。
- 第一版根据文件变化识别安装、删除和代码修改,不比较插件启用、停用或主题切换。
通过维护密码正确开启的维护窗口,或由面板受控的组件任务,在第一次回锁成功、权限验证和状态保存都成功时,只记录插件、主题、MU 插件或 Drop-in 的变化摘要并接受新基线,不发送安全通知。首次回锁失败、重启后恢复回锁、状态未知或变化发生在授权区间外时,不会静默接受变化,而会保留旧基线并按异常变化告警。
待人工处理的失败更新会暂时阻止完整性扫描,处理完成后才恢复。这段时间属于检测空窗,应优先处理失败任务。
完整性监控用于提醒和取证,不能替代恶意代码扫描,也不会替管理员自动处置。