# 云服务器防火墙和安全管理

Source: https://support.kapsulehost.com/zh-cn/cloud-servers-firewall

## 打开管理页面

1. 登录 [KPanel](https://kpanel.kapsulehost.com)。
2. 在左侧边栏中点击**云服务器**，然后点击您的服务器。
3. 点击页面顶部操作按钮中的**管理**。

直接地址是 `/cloud-servers/<server-id>/management`。该页面自身描述为"防火墙、操作系统补丁、fail2ban 和 ModSecurity。更改在几秒内通过 SSH 应用。"

![KPanel 中云服务器的服务器管理页面](https://support.kapsulehost.com/help/screenshots/cloud-servers-firewall.d05a26ce.webp)

> **Note:** 如果横幅显示"Live apply unavailable. Changes will save to the next provisioning run but won't take effect immediately"（实时应用不可用。更改将保存到下次配置运行，但不会立即生效），则该面板现在无法到达服务器。您的设置仍然保存，但尚未应用。请检查服务器是否正在运行且可访问。

## 默认防火墙策略

**防火墙 (UFW)** 部分用一行话说明了策略："Default-deny inbound. SSH (22) is always open. App-stack ports open automatically. Add custom rules below."（默认拒绝入站。SSH (22) 始终开放。应用堆栈端口自动开放。在下方添加自定义规则。）

实际上这意味着：

- 除非规则允许，否则互联网上的任何东西都无法到达您的服务器。
- 端口 22 始终开放，因此防火墙更改永远不会将您锁定在计算机之外。
- 您的应用堆栈需要的端口，例如用于 Web 应用的 80 和 443，会为您打开。
- 来自服务器的出站流量不受限制。

没有自定义规则时，该部分显示"No custom rules. Defaults: SSH + app-stack ports."（没有自定义规则。默认值：SSH + 应用堆栈端口。）这是一个健康的状态，而不是缺少的配置。

## 添加自定义规则

当您在默认策略不涵盖的端口上运行某些内容时，请添加规则：在 3000 上的 Node 应用、需要直接访问的 5432 上的数据库、UDP 端口上的游戏或媒体服务器。

1. 打开**防火墙 (UFW)** 部分。
2. 将**端口**号输入到第一个字段中。有效值为 1 到 65535。
3. 选择 **TCP** 或 **UDP**。
4. 选择**允许**或**拒绝**。
5. 点击**添加**。

该规则将出现在列表中，带有 **ALLOW** 或 **DENY** 徽章以及端口和协议，例如 `3000/tcp`。它会在几秒内通过管理连接推送到服务器。

要删除规则，请点击其行末尾的 **X**。删除**允许**规则会立即再次关闭该端口。

> **Warning:** 将数据库端口暴露给整个互联网是服务器被攻击的最常见方式之一。在允许 3306、5432、6379 或 27017 之前，请考虑连接的东西是否可以通过服务器自己的回环接口或私有网络到达数据库。如果确实必须从外部访问，请确保该服务本身需要强身份验证和加密。

> **Tip:** 先添加规则，然后启动服务。在关闭的端口后面启动的服务看起来与启动失败的服务完全相同，您可能会浪费很长时间调试错误的层。

## 应用堆栈

**应用堆栈**部分告诉平台这个服务器运行什么类型的应用，以便加固预设可以针对其进行调整。通过面板安装应用会为您设置此项。

识别的堆栈有 WordPress、WooCommerce、Ghost、Nextcloud、GitLab、Mattermost、Generic web（通用网络）和 No app stack（无应用堆栈）。该部分的说明为："The hardening preset is tuned to your app. Installing an app from the marketplace auto-sets this."（加固预设针对您的应用进行了调整。从市场安装应用会自动设置此项。）

堆栈影响哪些端口自动开放，以及其他保护如何调整，在 fail2ban 中最明显。

## fail2ban

fail2ban 监视身份验证尝试，并禁止持续失败的地址。它默认开启，页面对其描述为："Bans IPs that brute-force SSH. For WordPress sites, adds wp-login.php protection too."（禁止暴力破解 SSH 的 IP。对于 WordPress 站点，也添加 wp-login.php 保护。）

保持开启。这是该页面上最便宜的单一保护，它不会产生任何性能成本，并且将不断的密码猜测尝试的背景噪音变为无。在 WordPress 或 WooCommerce 堆栈上，它也保护登录表单，这是 WordPress 攻击实际发生的地方。

## ModSecurity，Web 应用防火墙

ModSecurity 根据 OWASP Core Rule Set 检查 HTTP 请求，并标记看起来像攻击的请求。在 KapsuleHost 服务器上，它以仅检测模式启动："OWASP Core Rule Set in DetectionOnly mode by default. Logs suspicious traffic without blocking; flip to active mode in your server once tuned."（默认以检测模式启动 OWASP Core Rule Set。记录可疑流量而不阻止；调整后在您的服务器中切换到活跃模式。）

仅检测是正确的起点。Core Rule Set 很全面，在真实应用上，一些合法请求将匹配规则。运行一段时间的仅检测，读取日志，找出您自己的流量触发的规则，只有到那时才切换到阻止。

> **Warning:** 在调整前打开阻止可能会破坏您自己的站点。带有富文本的表单提交、文件上传和具有异常有效载荷的 API 客户端是通常的受害者。在切换前检查您的日志。

## 操作系统自动补丁

安全更新会自动为您应用。该部分解释了安全网："Security updates applied automatically. Snapshot-protected: a server snapshot is taken before each run, with automatic rollback if the server becomes unreachable after reboot."（安全更新自动应用。快照保护：在每次运行前拍摄服务器快照，如果服务器在重启后无法访问，则自动回滚。）

切换下有两个设置：

- **当内核更新需要时允许自动重启（仅在下面的安静时段内）。** 内核更新只有在重启后才会生效。如果您关闭此选项，内核补丁会被安装但在您自己重启前不会生效。
- **安静窗口 (UTC)**，一个起始小时和结束小时。重启只会在其内发生。将其设置为对您的受众最安静的时段，并记住该字段以 UTC 为单位，而不是您的本地时间。

> **Tip:** 保持自动补丁开启。绝大多数被攻击的服务器运行的是数周前发布的补丁的软件。带有自动回滚的补前快照意味着通常的异议（更新可能会破坏某些东西）已经被处理。

### 补丁历史和立即运行补丁

**补丁历史**部分列出每次运行，状态为 RUNNING、SUCCESS、ROLLED_BACK、FAILED 或 SKIPPED，更新的包数、服务器是否重启以及启动时间。

要立即修补而不是等待计划，请点击**立即运行补丁**。确认信息为："A snapshot is created first. The server stays online except for a brief reboot if a kernel update needs it."（首先创建快照。服务器保持在线，除非需要内核更新才会进行短暂重启。）

ROLLED_BACK 条目意味着安全网履行了其职责：服务器在重启后没有正常启动，因此恢复了补前快照。请参阅[云服务器快照](https://support.kapsulehost.com/zh-cn/cloud-servers-snapshots)了解这些快照的工作原理。

## 合理的基线

对于大多数服务器，这是完整的安全配置：

| 设置 | 推荐 |
|---|---|
| 防火墙 | 开启，默认规则，加上仅您的应用需要的端口 |
| fail2ban | 开启 |
| ModSecurity | 开启，仅检测模式直到您阅读日志 |
| 操作系统自动补丁 | 开启，允许在安静时段重启 |
| SSH 身份验证 | 密钥，而非密码 |

最后一行不在此页面上，但比其他所有内容加在一起都更重要。请参阅[使用 SSH 连接到您的云服务器](https://support.kapsulehost.com/zh-cn/cloud-servers-ssh-connect)。

## 故障排除

**"Could not load management config."（无法加载管理配置。）** 该面板无法读取此服务器的设置。重新加载，并检查服务器是否存在且已配置。

**"Port must be 1-65535."（端口必须为 1-65535。）** 端口字段接受该范围内的整数。范围和服务名称在此处不被接受。

**我的规则已保存但没有任何改变。** 查找"Live apply unavailable"（实时应用不可用）横幅。如果显示，更改已存储但尚未推送到服务器。

**我可以从一个网络到达我的服务，但无法从另一个网络到达。** 这通常是您自己的出站防火墙，而不是服务器的。在更改此处的规则前，从其他连接测试。

**补丁运行显示 FAILED。** 读取行上的错误消息。磁盘已满是最常见的原因。释放一些空间并点击**立即运行补丁**。

**合法流量开始被阻止。** 如果您将 ModSecurity 切换到阻止模式，将其改回仅检测，读取日志，并在重试前识别规则。

如果防火墙规则拒绝应用，或者您被锁定在允许的服务外，请向 [support@kapsulehost.com](mailto:support@kapsulehost.com) 发送电子邮件，附上服务器名称、端口和您期望访问它的方式。
