在甲骨文云 Ubuntu 20.04 实例上放行 80 端口,必须同时在甲骨文云控制台的虚拟云网络安全列表中添加入站规则,并在操作系统内部配置 iptables 或 ufw 防火墙。仅配置系统防火墙而忽略云平台安全组,外部流量仍会被拦截。
先说结论:甲骨文云实例的网络访问受云平台安全组和操作系统防火墙双重控制,缺一不可。
- 适合:需要在 Ubuntu 20.04 上部署 Web 服务并对外提供 HTTP 访问的场景。
- 先看:确认甲骨文云控制台安全列表是否已放行 TCP 80 端口。
- 建议:优先使用 ufw 管理防火墙规则以保持系统一致性,或直接操作 iptables 但需处理持久化。
命令速用版
如果系统未启用 ufw,可直接使用 iptables 命令放行端口。
sudo iptables -I INPUT -p tcp `--dport` 80 -j ACCEPT如果系统默认启用 ufw,建议使用 ufw 命令配置。
sudo ufw allow 80/tcp为什么会这样
甲骨文云实例的网络流量经过云平台虚拟网络层和操作系统网络层两道关卡。
云平台层面的安全列表(Security List)是首要过滤层,若此处未放行,数据包无法到达实例网卡。操作系统层面的 iptables 或 ufw 是第二道过滤层,用于控制本地进程接收权限。两层配置必须一致放行,外部请求才能成功建立连接。
分步处理
按照云平台配置、系统防火墙配置、规则持久化的顺序操作。
步骤 1:配置甲骨文云安全列表
登录甲骨文云控制台,进入实例详情页,点击子网链接,找到安全列表。添加入站规则,源 CIDR 设为 0.0.0.0/0,协议选 TCP,目的端口范围填 80。
步骤 2:配置系统防火墙
检查 ufw 状态,命令为 sudo ufw status。若状态为 active,执行 sudo ufw allow 80/tcp。若未使用 ufw,执行 sudo iptables -I INPUT -p tcp `--dport` 80 -j ACCEPT。
步骤 3:保存规则
iptables 规则重启后默认不保存。若直接使用 iptables,需安装 iptables-persistent 包并保存规则,命令为 sudo netfilter-persistent save。ufw 规则会自动持久化。
怎么验证是否生效
使用外部网络请求测试端口连通性,并检查本地规则列表。
在本地电脑或另一台服务器上执行 curl http://<实例公网 IP>。若返回网页内容或连接成功,说明端口已通。在实例内部执行 sudo iptables -L INPUT -n 或 sudo ufw status,确认列表中存在允许 80 端口的规则。
常见坑
规则顺序错误和防火墙工具冲突是主要风险点。
iptables 规则按顺序匹配,若前方有 DROP 规则,新增的 ACCEPT 规则需插在前方。Ubuntu 20.04 默认可能启用 ufw,直接操作 iptables 可能导致规则被 ufw 覆盖或管理混乱。建议统一使用一种工具管理防火墙。
常见问题
配置后仍然无法访问 80 端口怎么办?
检查甲骨文云控制台安全列表是否生效,以及实例内部是否有其他安全软件拦截。
iptables 规则重启后失效了如何解决?
安装 iptables-persistent 服务并执行保存命令,或改用 ufw 管理规则。
放行 80 端口会影响服务器安全吗?
放行端口本身不直接导致入侵,但需确保运行的 Web 服务软件自身无漏洞。
参考来源
- Oracle Cloud Infrastructure Documentation, "Security Lists", https://docs.oracle.com/en-us/iaas/
- Ubuntu Server Guide, "Firewall", https://ubuntu.com/server/docs