功能

WardPane 2.0 的功能

WardPane 2.0 可托管静态、PHP 和 Node.js 网站,自动签发证书并支持 Cloudflare。防护和流量控制按网站在 Web 服务器内部运行。在对比页面的八款面板中,大多数要靠 ModSecurity 或付费附加组件才能实现这些功能。

面向新手,也面向经验丰富的管理员

新手可以获得一条命令完成安装、自动签发的证书、在沙箱中运行的网站,以及用通俗语言解释的设置。经验丰富的管理员可以获得所有选项、浏览器中的终端、每个所有者一个 PM2、.htaccess、按已知顺序执行的按网站规则、Cloudflare API、导出与导入、发布包校验和以及源代码。

托管

网站采用与 ISPmanager 类似的目录结构,归一个 Linux 用户所有,由 WardPane 本身在 80 和 443 端口上提供服务。

网站与别名
一个网站由一个域名加最多 99 个别名组成(一张 Let's Encrypt 证书最多包含 100 个名称)。别名可以提供主网站的内容,如果它有自己的文件夹,则提供该文件夹的内容。网站可以设置显示名称。
所有者目录结构
文件位于 /var/www/<owner>/data/www/<domain>,日志和临时文件在其旁边。默认所有者是 www-root,这是 WardPane 创建的一个 Linux 用户。来自 1.x 的网站保留原来的文件夹。
三种处理程序
无处理程序(静态托管)、PHP 或 Node.js,按网站选择,可随时切换。其他处理程序的设置会被保留,切换回来时会恢复。
静态文件
SPA 模式(未知路径交给 index.html)、自定义 404.html、支持断点续传的强 ETag、HTTP 到 HTTPS 的重定向,以及永远无法离开网站文件夹的符号链接。
运行时
面板列出服务器上已安装的 PHP 版本,以及它支持的 Node.js 主版本:20、22、24 和 26,默认为 24(20 已于 2026 年 4 月停止支持)。Node.js 构建来自 nodejs.org,并会对照公布的 SHA256 校验和进行校验。
每个网站都有菜单
网站列表的每一行都有一个菜单,包含该网站的所有操作;还有一个开关,可以停用网站并重新启用,不会删除任何内容。
浏览器中的 shell
终端就在面板中:在 root 会话中是 root shell,否则是网站所有者在网站文件夹中的 shell。对于 Node.js 网站,可以在其中使用 pm2 list 和 pm2 restart。
导出与导入
每个网站及其所有设置,加上全局黑名单,都会写入一个 JSON 文件。导入时可以合并或替换,会先检查整个文件,并且绝不触碰 /var/www 中的文件。
网站列表,包括处理程序、证书有效期和已启用的防护

PHP 与 Node.js

每个动态网站都以独立的 Linux 用户身份在 systemd 沙箱中运行。出故障或被入侵的网站无法读取相邻网站的内容。

每个网站一个 php-fpm 池
没有共享的池,也没有共享的 opcache 或会话。代码对 PHP 是只读的;它只能写入 tmp/、logs/、data/ 以及您列出的文件夹,而且 PHP 永远不会在这些文件夹中执行。
严格的 PHP 沙箱
除 php-fpm 本身外,整个文件系统都是只读且 noexec 的;设置了 open_basedir;禁用了 exec、system、shell_exec、proc_open、popen 和 putenv;系统调用也经过过滤。
无需 Apache 的 .htaccess
真实网站中的重写规则、重定向、访问规则、Basic auth、响应头和缓存设置都能原样生效:WordPress、Laravel 以及常见的 HTTPS 和 www 重定向。无法应用的行会被显示出来,绝不靠猜测处理。
带 PM2 的 Node.js
选择 Node.js 主版本、npm 脚本或入口文件、环境变量和限制。每个所有者一个 PM2 守护进程负责运行应用,因此 pm2 可以在所有者的 shell 中使用。
应用前面的代理
如有需要,public/ 中的文件会被直接提供,其余请求转给应用,并在 X-Forwarded-For 和 X-Real-IP 中携带真实访客 IP。WebSocket 同样要先通过相同的防护检查。
重启、npm install 和日志
“处理程序”选项卡提供重启和 npm install(存在 lockfile 时使用 npm ci)按钮,输出、错误和安装日志,以及可从中选择的 package.json 脚本。
网站的“处理程序”选项卡:Node.js 版本、启动脚本、环境变量和限制

证书与 Cloudflare

证书的签发和续期无需手动操作,位于 Cloudflare 之后的网站也一样。

Let's Encrypt,全自动
每个网站一张证书,包含其所有别名,在有效期剩余三分之一时续期。DNS 未指向服务器的名称会被跳过,并在指向正确后加入,面板会显示原因。
同样检查 IPv6
Let's Encrypt 会优先尝试 IPv6,因此每条 AAAA 记录都必须指向服务器。WardPane 会在申请证书前检查这些记录。
为 IP 签发证书
服务器 IP 会获得一张短期证书,每隔几天续期一次。位于 https://<ip>:1500 的面板打开时不会出现警告。
Let's Encrypt 速率限制
面板不会重复申请证书,会一次性报告一个订单中所有失败的名称,每次失败后等待更长时间,并替换已停用的 ACME 账户。
一键获取 Cloudflare 令牌
“创建 Cloudflare 令牌”按钮会打开 Cloudflare,并预先填好所需的权限。把令牌粘贴回面板后,面板即可检查并修复您网站的区域配置。

防护

每个网站都有自己的检查,它们在 PHP 或 Node.js 看到请求之前于 Web 服务器内部运行。只有明确的攻击才会导致地址被封禁。

地域规则:国家分组、例外以及最终的国家列表
Bot Fight 设置:机器人类别、按 IP 验证的爬虫、公共 IP 源、探测、恶意载荷和扫描检测
速率限制与封禁
默认情况下,每个地址 10 秒内最多可发送 150 个请求。超过限制后返回 404,并按您设定的分钟数封禁。IPv6 访客按其 /64 计数和封禁,因此更换地址无济于事。每个网站都有允许列表。
Bot Fight
拦截 AI 爬虫、SEO 爬虫、漏洞扫描器、脚本和无头浏览器、空 User-Agent 以及您自己的列表。搜索引擎和链接预览仅在您选择时拦截。监控服务和 RSS 阅读器不受影响。
探测与恶意载荷
请求 /.env、/.git、/wp-login.php 等网站上并不存在的类似名称,会导致该地址被封禁。URL 中明确的 SQL 注入、XSS、路径遍历和 Log4Shell 载荷会触发封禁;含义不明确的只会拒绝该请求。
扫描检测
连续多次未命中(默认 60 秒内 25 次)看起来像 gobuster 或 ffuf,会导致该地址被封禁。缺失的图片只算十分之一次未命中,因此一个图片损坏的旧页面不会被当作扫描。
经过验证的爬虫
Google、Bing、DuckDuckGo、Apple、OpenAI、Anthropic、Perplexity 和 Ahrefs 会公布其 IP 范围。WardPane 每天下载这些范围,并封禁从其他地址冒充它们的任何人。即使这些爬虫伪装成浏览器的 User-Agent,您也可以按 IP 拦截它们。
公共 IP 源
Spamhaus DROP、FireHOL level 1 和 blocklist.de,每天更新,一个开关即可按网站启用。
支持分组的地域规则
逐个或按分组允许或拒绝国家:前苏联、独联体、欧亚经济联盟、欧盟、欧洲经济区、申根区、北约、七国集团、二十国集团、经合组织、金砖国家、上合组织、东盟、阿拉伯国家联盟、南方共同市场、各大洲等。可以添加例外,并查看最终的国家列表。
托管网络与 AS 编号
拦截来自 AWS、Azure、Google Cloud、Hetzner、OVH、DigitalOcean、Vultr 等云平台的请求(大多数自动化流量都来自这些平台),或来自您列出的任意 AS 编号的请求。
语言过滤
按浏览器语言允许或拒绝,对完全不发送语言信息的请求有单独的开关。这是国家之外一个有用的补充信号,例如在访客使用 VPN 时。
设备
只允许 Windows、macOS、Linux、Android、iOS 或其他系统访问,作为针对普通浏览器的过滤器。
仅限链接
必需的 URL 参数:网站只对通过您的链接来访的人开放,例如来自广告的 ?ref=metaads。已签名的 Cookie 以及可选的访客 IP 会让他们持续保持访问。用于 webhook 和支付回调的路径保持开放。
密码
用于草稿和网站测试副本的 HTTP Basic 登录。密码以 scrypt 哈希存储,并在主线程之外、所有其他过滤器之后进行校验。
防盗链
其他网站无法嵌入您的图片和文件。可以选择扩展名、允许的网站(支持通配符),以及如何处理不带 Referer 的请求。
安全响应头
按网站设置 X-Frame-Options、Referrer-Policy、带 includeSubDomains 和 preload 的 HSTS、Content-Security-Policy 和 Permissions-Policy。
蜜罐
一个被 robots.txt 禁止的路径。正常人不会打开它,因此请求它的一方会被立即封禁。
自定义拦截页面
为设备、机器人、地域和仅限链接拦截设置您自己的页面和状态码(404、403 或 200),并以 no-store 方式返回。
全局黑名单
在所有网站上拦截的地址和网络,存储在磁盘上,重启后依然保留。即使某个网站关闭了防护,它也同样生效。

流量控制

决定谁能访问每个网站、规则按什么顺序生效,以及被拦截的访客会看到什么。

每个请求的检查顺序

  1. Cloudflare:真实访客 IP、仅允许经由 Cloudflare 访问
  2. 全局黑名单,然后是网站允许列表
  3. 速率限制与当前封禁
  4. Bot Fight:User-Agent、经过验证的爬虫、IP 源、探测、恶意载荷、扫描、蜜罐
  5. 地域:国家与分组、托管网络、AS 编号、浏览器语言
  6. 设备
  7. 安全响应头与防盗链
  8. 仅限链接
  9. 密码
  10. .htaccess 规则,然后是处理程序:文件、PHP 或 Node.js
感知 Cloudflare 的真实 IP
只有当连接确实来自 Cloudflare 时,访客地址才从 CF-Connecting-IP 中获取。网络列表每天从 cloudflare.com 更新。
仅允许经由 Cloudflare 访问
直接访问服务器 IP 的请求会得到 404,因此谁都无法绕过 CDN 及其规则。
开关关闭时
位于 Cloudflare 之后但未作此标记的网站,绝不会封禁 Cloudflare 地址,并且每台 Cloudflare 服务器的限额提高到十倍。日志会给出修复建议。
Cloudflare Workers
来自 Worker 的请求按其区域计数,适用正常的限额和封禁;您自己区域的 Worker 被视为 Cloudflare。
拦截页面的状态码
用 404 让地址看起来是空的,用 403 表明请求被拒绝,或用 200 显示您自己的页面。被限速和被封禁的客户端始终只会得到一个纯 404。
缓存安全的响应
依赖链接通行凭证的响应会带上 Cache-Control: private 和 Vary: Cookie,因此 CDN 绝不会把它们交给没有链接的人。

面板安全

面板以无特权用户 wardpane 的身份运行,其登录页面有自己的暴力破解限制。

root 登录
可选择使用服务器的 root 密码以 root 身份登录。密码由 unix_chkpwd 通过一个小型 root 辅助程序进行校验,该辅助程序的套接字只有面板能打开。默认关闭。
暴力破解限制
失败 5 次会将一个地址(IPv6 为其 /64)封锁 15 分钟,失败 50 次会封锁其 /48。如果大量地址接连登录失败,面板会对未知地址关闭登录 5 分钟。过去 30 天内成功登录过的地址可以继续使用。
IP 允许列表
设置 PANEL_ALLOW_IPS 后,面板完全不响应其他地址。如果某个列表会把您当前使用的地址锁在外面,面板会拒绝该列表。
root 辅助程序隔离
面板只写入期望的状态;由 systemd 启动的 root 辅助程序在创建用户、文件夹和单元之前会再次检查每个值。
沙箱化的 PHP 与 Node.js
按网站划分的 Linux 用户、只读系统、私有 /tmp、禁止获取新权限、内存和 CPU 限制,以及可选的禁止出站连接。
发布包校验和
每个压缩包都随附其 SHA-256 校验和一同发布,并包含完整源代码。安装程序通过 HTTPS 下载压缩包,并在运行任何内容之前校验 SHA-256。
可撤销的更新
每次更新都会创建一个带恢复脚本的备份,检查新版本能否启动,如果不能则自动回滚。
恢复访问
如果把自己锁在了外面,在服务器上运行一条命令即可重置面板登录和 IP 允许列表,并解除登录封锁。
“安全”部分:全局黑名单、带更新日期的爬虫 IP 列表、IP 查询

后续计划

以下功能计划在 2.0 之后的版本中推出,2.0 中不包含。

查看完整路线图
  1. 2.1数据库与站点配置文件MySQL 和 MariaDB:数据库、用户与权限 · 每个站点一个类似 nginx 语法的配置文件,与表单保持同步 · gzip 和 brotli、带轮转的访问日志、location 块
  2. 2.2用户使用操作系统密码登录 · 只能看到自己网站的用户 · 由 root 设置权限,并可以用户身份登录以提供帮助
  3. 2.3面向新手首次登录时的设置向导 · 简单模式与专家模式 · 一键应用的防护预设 · 带修复按钮的健康检查和更丰富的仪表盘
  4. 2.4证书与 DNSSSL 证书管理页面 · 您自己的 DNS 服务器和域名服务器 · Cloudflare DNS 同步 · 使用 Cloudflare 登录
  5. 2.5邮件邮件域名、邮箱和别名 · Postfix、Dovecot、Rspamd 和 DKIM · Roundcube 网页邮箱

在一台闲置服务器上试试

在全新的 Ubuntu 24.04 上安装只需几分钟。