tutorial

DigitalOcean Cloud Firewall deny 规则教程:阻止恶意 IP 与规则优先级

DigitalOcean Cloud Firewall 现已支持 deny 规则。本文说明 deny 与 allow 的优先级、控制台和 API 配置、protocol all 限制及上线前验证方法。

DigitalOcean Cloud Firewall deny 规则教程:阻止恶意 IP 与规则优先级

DigitalOcean 于 2026 年 8 月 4 日为 Cloud Firewalls 增加了 deny 动作。过去主要通过允许列表开放必要流量,现在还可以在较宽的允许范围中明确拒绝已知恶意 IP 或网段,减少为了处理单个来源而重写整套规则的成本。

本文聚焦新 deny 规则的配置方法、优先级、API 限制和上线检查。Cloud Firewalls 是作用于 Droplet 网络边界的有状态防火墙,不需要在服务器里安装额外软件。

核心结论

  • deny 的优先级高于 allow,即使两条规则来自绑定到同一 Droplet 的不同防火墙。
  • 控制台和 DigitalOcean API 已支持 action: deny;当前 doctl 尚不能设置规则的 action 字段。
  • 拒绝全部协议时可以使用 protocol: all,并省略端口或把端口写为 0
  • 没有匹配到允许规则的流量仍会被默认拒绝,因此不需要为“拒绝其他全部流量”再创建一条 deny 规则。

什么时候适合使用 deny 规则?

典型场景是保留一条面向较大来源范围的允许规则,同时阻止其中少量已确认有风险的地址。例如,应用需要向公网开放 HTTPS,但某个来源持续产生恶意请求时,可以添加针对该地址的 deny 规则,而不必把原来的公网允许范围拆成多个网段。

Cloud Firewall 工作在网络层,不能根据 X-Forwarded-ForUser-Agent 等 HTTP 请求头过滤流量。如果应用位于负载均衡器、反向代理或 CDN 后面,应确认防火墙实际看到的源地址,并在应用层或边缘层补充相应策略。

在控制台创建 deny 规则

  1. 登录 DigitalOcean 控制台,进入 Networking → Firewalls,打开已有防火墙或创建新防火墙。
  2. 在 Inbound Rules 或 Outbound Rules 中添加自定义规则。
  3. 将 Action 选择为 Deny,再设置协议、端口以及来源或目标。
  4. 确认防火墙绑定的 Droplet 或标签范围,保存后从未被阻止的管理地址重新测试业务和 SSH。

如果同一个 Droplet 绑定了多个 Cloud Firewalls,需要把它们视为一套共同生效的策略:任何匹配的 deny 规则都会覆盖 allow 规则。上线前应同时审查所有关联防火墙,避免规则分散导致误判。

使用 API 添加 deny 规则

下面用文档保留地址 203.0.113.5 演示拒绝单个来源的全部协议。请替换防火墙 ID 和地址,并通过环境变量提供令牌,不要把令牌写进脚本或版本库。

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  -d '{"inbound_rules":[{"protocol":"all","ports":"0","sources":{"addresses":["203.0.113.5"]},"action":"deny"}]}' \
  "https://api.digitalocean.com/v2/firewalls/$FIREWALL_ID/rules"

成功添加或删除规则时,API 返回 HTTP 204。如果省略 action,规则按 allow 处理。需要自动化 deny 规则时应直接调用 API;不要假设当前 doctl 已支持该字段。

规则优先级与协议限制

检查项行为
deny 与 allow 同时匹配deny 生效
规则位于不同防火墙只要作用于同一 Droplet,deny 仍优先
未匹配任何允许规则默认拒绝
deny 使用全部协议可设置 protocol: all
allow 使用全部协议需要分别创建 TCP、UDP 或 ICMP 规则

容量和运维限制

  • 每个防火墙的入站与出站规则合计最多 50 条,deny 规则也计入总数。
  • 所有 deny 规则中的来源或目标条目合计最多 1000 个。
  • 新增规则不会主动终止已经建立的连接,验证时要创建新连接,必要时等待旧连接结束。
  • Cloud Firewall 过滤发生在流量到达资源之前,因此当前不提供被拒流量的防火墙日志。

安全上线检查清单

  1. 先记录现有允许规则、绑定资源和可用的紧急管理入口。
  2. 使用精确的单个 IP 测试,再按需求扩大到网段;不要从未经确认的宽网段开始。
  3. 从被拒来源建立新连接,确认目标端口不可达;再从合法来源验证页面、API、SSH 和监控。
  4. 检查同一 Droplet 上的所有防火墙,确认没有更宽的 deny 规则误伤业务。
  5. 把规则用途、负责人和复查日期写入变更记录,定期移除已经失效的封禁地址。

官方资料与下一步

进一步配置前,请以 DigitalOcean Cloud Firewall 规则文档Cloud Firewalls 限制说明DigitalOcean Release Notes为准。

如果还没有 Cloud Firewall,可前往 DigitalOcean Cloud Firewalls 产品页了解功能并从控制台创建防火墙。建议先在测试 Droplet 上验证规则,再逐步应用到生产标签。