内容管理系统(Content Management Systems)便于创建、更新和管理内容。但它们也可能引入漏洞,导致服务器被入侵与数据被盗。
有许多 Cloudflare 功能可用于防范此类攻击,但它们也可能干扰正常的管理流程,例如登录或上传图片。通过正确配置,你可以在不损失重要功能的情况下保护站点免受攻击。
在此阶段,你将加强 zone 的安全功能,这可能在应用例外之前额外干扰管理功能。因此,建议在预期会有管理停机时间时进行这些更改。
以下内容应视为部分推荐安全操作的概览,而非全面指南。有关具体产品或功能的更多信息,请参阅开发者文档。
WAF Managed Rulesets 是预配置的规则集,可立即防范多种攻击,并会定期更新。许多规则默认开启,但并非全部。建议浏览 Cloudflare Managed Ruleset,查找标记为你的内容管理系统且尚未启用的其他规则,并启用它们:
虽然自定义这些 managed rulesets 的功能需要付费计划,但 Free Cloudflare Managed Ruleset ↗ 会在任何新建的 Cloudflare zone 上自动部署。该规则集专门设计用于在非常广泛的流量类型上将误报降至最低。截至目前,该规则集包含以下规则:
- 匹配 URI 与 HTTP 标头中 payload 的 Log4J 规则;
- Shellshock 规则;
- 匹配非常常见的 WordPress 漏洞利用的规则;
此外,你可以配置 OWASP Core Ruleset 的多个方面,包括异常阈值(anomaly threshold)、偏执级别(paranoia level)以及个别规则。一个良好实践是确保与 XSS 和 SQL 注入相关的规则均已启用。
遵循最小权限原则,你可以从管理面板执行一些测试操作,审计哪些请求被拦截、哪些被允许。据此信息,你可以创建精确的例外。如果行为与预期不符,请务必检查:
- DNS 记录已代理(proxied)
- 你没有任何会干扰 WAF 的规则(例如设置为 Disable Security 的 Page Rule)
生成足够请求并在 Firewall Events 中获得良好样本后,观察 Managed rules 部分中采取的操作:
接下来,你可使用此信息创建 Skip Rule,仅排除阻止管理操作的规则:
建议尽可能严格地定义此规则,尤其是在没有下方所列额外保护的情况下。具体内容因站点而异,但可使用的部分字段包括:
- IP Source Address
- AS Num
- Cookie
- User Agent
请确保将规则仅应用于 CMS 的管理部分。以 WordPress 为例,你可以设置类似“URI Path contains /wp-admin/”的条件。
这些字段中的任意一个都可能被伪造,因此其本身并非安全措施。目的是仅在可能需要的情况下恢复管理功能,同时使用其他工具与功能(包括为 CMS 登录使用强密码!)来保护访问。
接下来,你要根据 Firewall 日志中的信息,通过添加例外来选择要跳过的规则。对于 WordPress,我选择了以下规则:
完成后,你还需要为任何阻止登录的规则集创建类似规则。在我的用例中,我只需跳过 “OWASP Core Ruleset 949110”。
注意: 如果为站点的非 CMS 部分启用了 CMS 专用规则并导致问题,你可能还希望添加一条规则来跳过这些规则。只需按上述步骤操作,并将其设置为跳过上面启用的任何 Cloudflare Managed Ruleset 规则。你可基于 hostname、URI 或 cookie 进行设置,并使用运算符 does not equal、does not match 或 does not contain。
请确保将 Skip 规则的优先级设置得高于 Execute 规则。
现在,你已提升安全性以保护站点的公开可访问部分免受攻击,并恢复了必要的管理能力,接下来可以进一步限制谁能访问管理面板,以防登录凭据较弱或已泄露。
Zero Trust ↗ Web Applications 是限制管理面板访问的最佳方式。你可以按用户而非设备限制访问,并支持非常细粒度的控制。Self-hosted web application 的设置非常简单,更多信息请参阅 Zero Trust 开发者文档中的 Self-hosted applications 部分。
配置 Web 应用后,用户在访问受限内容之前需要以某种方式进行身份验证。默认方法是通过电子邮件多因素身份验证:
虽然 mTLS 设计用于无法执行登录的设备身份验证,但你也可以将其用作另一种多因素身份验证方法(你知道的信息与你拥有的凭证),以基于设备证书进行身份验证。
请执行以下操作:
- 创建客户端证书,并将证书与密钥保存到你的设备。
- 将证书导入计算机的密钥存储。在 macOS Keychain 中,可使用 Test in the browser 中列出的步骤。
- 通过添加正确的主机启用 mTLS。
- 在 SSL/TLS > Client Certificates(客户端证书) 中,选择 Create mTLS Rule(创建 mTLS 规则)。
- 在 When incoming requests match(当传入请求匹配时) 下,为 URI Path(URI 路径) 字段输入值,将规则范围收窄到管理部分,否则会阻止访客访问公开内容。
- 将规则设置为:若客户端证书未通过验证,则 Block 对管理面板发起的任何请求。
- 选择 Deploy(部署)。这将创建一条 WAF 自定义规则,检查所有对管理部分的请求是否具有有效的客户端证书。
注意: 如果证书验证出现问题,请尝试在隐私窗口中访问该页面。如果可以访问,则可能是之前成功的 TLS 状态已缓存在浏览器中。
速率限制规则可帮助保护你的登录页面,防止攻击者通过暴力破解攻击 ↗猜测账户密码。你可以为匹配表达式的请求定义速率限制,以及达到这些限制时要执行的操作。
Rate Limiting Rules 现已在所有计划上免费提供(unmetered)。更多信息请参阅开发者文档。