甲骨文云安全组规则配置后端口依然不通怎么排查?

文章导读
大多数情况下,问题不在甲骨文云控制台的安全规则,而是实例内部的操作系统防火墙(如 firewalld、iptables)拦截了流量,或者子网层面的“安全列表”未放行。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

大多数情况下,问题不在甲骨文云控制台的安全规则,而是实例内部的操作系统防火墙(如 firewalld、iptables)拦截了流量,或者子网层面的“安全列表”未放行。

先说结论:甲骨文云的网络访问控制是多层级的,控制台配置只是其中一层,必须同时检查实例内部防火墙和子网安全列表。

  • 先确认:登录实例内部,检查操作系统自带的防火墙状态。
  • 先处理:在控制台同时核对“安全列表”和“网络安全组”的入站规则。
  • 再验证:使用外部工具或另一台机器测试端口连通性,不要只在本地 ping。

命令速用版

如果你能登录服务器,先执行以下命令快速定位是系统拦截还是云端拦截:

# 查看防火墙状态 (CentOS/RHEL)
sudo firewall-cmd `--state`

# 查看防火墙状态 (Ubuntu/Debian)
sudo ufw status

# 临时关闭防火墙测试 (仅用于排查,测试完请恢复)
sudo systemctl stop firewalld
# 或
sudo ufw disable

# 监听端口确认服务是否在运行
sudo netstat -tulpn | grep 端口号

为什么会这样

甲骨文云(OCI)的网络防护是分层设计的,数据包从互联网到达你的应用,至少要经过三道关卡:

甲骨文云安全组规则配置后端口依然不通怎么排查?
  1. 子网级别:由“安全列表”(Security Lists)控制,作用于整个子网内的所有实例。
  2. 实例网卡级别:由“网络安全组”(NSG)控制,只作用于绑定该组的特定网卡。
  3. 操作系统级别:由实例内部的 iptables、firewalld 或 ufw 控制。

很多用户习惯只配置控制台里的“网络安全组”,却忽略了子网默认的“安全列表”可能依然阻塞流量,或者系统内部防火墙默认策略是拒绝。此外,甲骨文云的术语中对应 AWS“安全组”的概念主要是“网络安全组”,但旧版文档或习惯称呼容易混淆,配置时需确认具体作用范围。

分步处理

按照从内到外的顺序排查,避免在控制台反复修改规则却无效。

甲骨文云安全组规则配置后端口依然不通怎么排查?

1. 检查操作系统内部防火墙

这是最常见的拦截点。即使云端规则全开,系统防火墙也会丢弃数据包。

  • CentOS 7/8/9:检查 firewalld 是否运行,确认是否添加了永久规则。
  • Ubuntu:检查 ufw 状态,确认是否允许了特定端口。
  • 操作:如果不确定,可临时停止防火墙服务测试连通性。若停止后通了,说明需要配置系统防火墙规则而非修改云端设置。

2. 检查子网安全列表 (Security Lists)

登录甲骨文云控制台,进入“虚拟云网络” -> 选择你的 VCN -> 点击“安全列表”。

  • 确认点:查看实例所在子网关联的安全列表。
  • 操作:确保“入站规则”中存在允许该端口协议(TCP/UDP)和源 CIDR(如 0.0.0.0/0 或你的 IP)的规则。
  • 注意:即使你绑定了 NSG,子网安全列表依然生效,两者是“并集”关系,任一拦截都会导致不通。

3. 检查网络安全组 (NSG)

进入“网络安全组”,确认该组已关联到实例的 VNIC(虚拟网卡)。

甲骨文云安全组规则配置后端口依然不通怎么排查?
  • 确认点:规则方向必须是“入站”,源类型和端口范围需匹配。
  • 操作:如果未关联 NSG,实例仅受安全列表控制;如果已关联,需同时满足 NSG 和安全列表的允许规则。

4. 检查路由表与公网 IP

如果端口监听正常且防火墙已关,但仍无法从外网访问,需检查路由。

  • 公网 IP:确认实例是否绑定了公共 IP( ephemeral 或 reserved)。
  • 路由表:子网关联的路由表必须包含指向“互联网网关”(Internet Gateway)的路由规则,目标 CIDR 为 0.0.0.0/0。

怎么验证是否生效

修改规则后,不要只依赖控制台的状态显示,需通过实际流量验证。

  • 外部测试:使用本地电脑的 telnet IP 端口nc -zv IP 端口 命令。
  • 在线工具:使用第三方端口扫描工具(如 yougetsignal.com 的端口检查器)测试。
  • 抓包确认:在服务器内部运行 sudo tcpdump -i any port 端口号,如果外部发起请求时服务器能看到 SYN 包,说明云端规则已放行,问题在系统内部;如果完全看不到包,说明流量在云端就被丢弃了。

常见坑

  • 源地址限制过严:测试时建议先将源 CIDR 设为 0.0.0.0/0 排除 IP 白名单问题,通后再限制特定 IP。
  • ICMP 与 TCP 混淆:能 ping 通不代表端口通。Ping 使用的是 ICMP 协议,而网页或数据库使用的是 TCP/UDP,需分别配置规则。
  • 状态性规则误解:甲骨文云的安全列表和 NSG 默认是状态化的(Stateful),配置了入站规则后,出站响应流量会自动允许,无需额外配置出站规则,除非你显式配置了状态无状态规则。
  • 多网卡场景:如果实例有多个 VNIC,每个网卡可能关联不同的 NSG,需确认流量走向的具体网卡。

参考来源

  • Oracle Cloud Infrastructure Documentation, "Overview of Security Lists", https://docs.oracle.com/en-us/iaas/Content/Network/Concepts/securitylists.htm
  • Oracle Cloud Infrastructure Documentation, "Overview of Network Security Groups", https://docs.oracle.com/en-us/iaas/Content/Network/Concepts/networksecuritygroups.htm