甲骨文云防火墙 iptables 规则如何永久生效

文章导读
iptables 规则默认仅保存在内存中,重启即失效,需通过保存配置文件并启用恢复服务来实现永久生效,同时务必确认甲骨文云控制台的安全列表已放行对应端口。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
A A

iptables 规则默认仅保存在内存中,重启即失效,需通过保存配置文件并启用恢复服务来实现永久生效,同时务必确认甲骨文云控制台的安全列表已放行对应端口。

先说结论:在甲骨文云实例内部配置 iptables 永久生效,本质是让 Linux 系统在启动时自动加载保存的规则文件,且必须优先排查云平台层面的网络 ACL 限制。

  • 适合:需要在 Oracle Linux、Ubuntu 或 CentOS 实例上手动管理防火墙规则的技术人员。
  • 先准备:确保拥有有效的 SSH 连接备份方案,防止规则错误导致无法远程登录;确认已安装 iptables 服务包。
  • 验收:重启实例后检查规则是否自动加载,并从外部测试端口连通性。

命令速用版

如果你已确认规则无误,以下是基于常见 Linux 发行版的持久化命令参考。注意大部分命令需要 root 权限或 sudo。

Oracle Linux 7+ / CentOS 7+ 及传统 iptables 环境:

yum install iptables-services -y
systemctl stop firewalld
systemctl disable firewalld
systemctl enable iptables
service iptables save

Ubuntu / Debian 环境(需安装持久化模块):

apt-get update
apt-get install iptables-persistent -y
netfilter-persistent save

通用手动保存与恢复测试:

mkdir -p /etc/iptables
iptables-save > /etc/iptables/rules.v4
iptables-restore < /etc/iptables/rules.v4

为什么会这样

iptables 是 Linux 内核 netfilter 框架的用户态管理工具,它运行的规则默认存储在易失性内存里。一旦实例重启或崩溃,内存清空,规则自然消失。要实现永久生效,必须将当前规则导出到磁盘文件,并配置系统服务在引导阶段执行导入操作。

另外,甲骨文云实例处于虚拟云网络(VCN)中,流量进入实例前会先经过云平台的安全列表(Security List)或网络安全组(NSG)。即使本地 iptables 放行,如果云平台层面的安全列表禁止了该端口,外部请求依然无法到达实例,这是很多用户配置失效的根本原因。

分步处理

1. 备份当前 SSH 会话与规则

在修改防火墙前,务必保持一个已连接的 SSH 窗口不要关闭,另开一个窗口进行操作。一旦新规则误删了 22 端口,保留的会话可作为急救通道。

甲骨文云防火墙 iptables 规则如何永久生效
sudo iptables-save > /root/iptables.backup.$(date +%F)

2. 确认操作系统防火墙类型

较新的 Oracle Linux 7/8/9 默认使用 firewalld 而非原生 iptables 服务。如果强制混用可能导致冲突。检查服务状态:

systemctl status firewalld
systemctl status iptables

若需使用原生 iptables,建议先停止 firewalld 并安装 iptables-services(Oracle Linux 示例):

sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo yum install iptables-services -y

3. 配置规则并保存

添加完所需规则后,执行保存命令。不同发行版保存路径略有差异,常见为 /etc/sysconfig/iptables/etc/iptables/rules.v4注意确保目录存在

sudo service iptables save
# 或手动保存(确保目录存在)
sudo mkdir -p /etc/sysconfig
sudo iptables-save > /etc/sysconfig/iptables

4. 启用开机自启服务

确保系统引导时调用恢复命令:

sudo systemctl enable iptables
sudo systemctl start iptables

5. 检查甲骨文云控制台安全列表

登录甲骨文云控制台,进入实例详情页,点击子网链接,查看关联的安全列表。确保入站规则(Ingress Rules)中已添加允许对应协议和端口的条目,源 CIDR 通常设为 0.0.0.0/0 或特定 IP。

甲骨文云防火墙 iptables 规则如何永久生效

怎么验证是否生效

1. 本地规则检查

重启实例前,先查看当前规则列表确认无误:

sudo iptables -L -n -v

2. 重启验证

执行重启命令,待实例启动完成后重新 SSH 登录,再次运行 iptables -L -n -v,对比规则是否存在。

sudo reboot

3. 外部连通性测试

在本地电脑使用 telnet 或 nc 测试端口是否通:

nc -zv 实例公网 IP 端口号

如果本地规则存在但外部不通,大概率是控制台安全列表未放行。

常见坑

1. 云平台安全列表拦截

甲骨文云防火墙 iptables 规则如何永久生效

这是最高频的问题。本地 iptables 放行只是过了第二道门,第一道门(甲骨文云安全列表)没开,流量根本进不来。务必两边都检查。

2. firewalld 与 iptables 冲突

在 Oracle Linux 7 及以上版本,firewalld 是默认管理工具。如果同时启用 iptables 服务,两者可能争夺内核规则链,导致行为不可控。建议二选一,新手推荐使用 firewalld 或 ufw。若必须用 iptables,请先禁用 firewalld。

3. 默认策略设为 DROP 前未放行 SSH

如果在设置 INPUT DROP 默认策略前,没有先添加允许 22 端口的规则,保存重启后会直接锁定自己。操作顺序必须是:先允许 SSH,再设置默认拒绝,最后保存。

4. 规则文件路径与目录缺失

不同 Linux 发行版读取的规则文件路径不同。CentOS/Oracle Linux 通常读取 /etc/sysconfig/iptables,而 Debian/Ubuntu 的 iptables-persistent 通常读取 /etc/iptables/rules.v4。手动保存时,若 /etc/iptables 目录不存在,重定向保存会报错,需先执行 mkdir -p

5. 服务未安装直接保存

新系统默认未安装 iptables-services 直接执行 save 会失败。务必先执行 yum install iptables-services -yapt-get install iptables-persistent -y