CentOS 6环境下Oracle RAC 端口配置及防火墙规则
以下是针对 Oracle RAC(Linux/CentOS 6) 的端口配置、端口查看、防火墙规则配置的完整解决方案,按需求分模块说明:
一、Oracle RAC 必须开放的端口(核心)
Oracle RAC 依赖多个端口实现节点间通信、数据库服务、集群管理等,需开放以下端口(所有节点均需配置):
| 端口范围 / 号 | 用途说明 | 协议 | 备注 | 
| 1521 | Oracle 数据库监听端口(默认) | TCP | 客户端连接数据库的核心端口 | 
| 1522 | 数据库 SCAN 监听备用端口(可选,建议开放) | TCP | 高可用场景备用 | 
| 4899 | Oracle Cluster Synchronization Service (CSS) | TCP/UDP | 集群同步服务(关键,节点间通信) | 
| 5000-5019 | Oracle RAC interconnect 端口(私网) | TCP/UDP | 节点间缓存融合、数据同步(私网必开) | 
| 6200-6203 | Oracle Cluster Ready Services (CRS) | TCP/UDP | 集群就绪服务(集群管理核心) | 
| 2483-2484 | Oracle Net Listener 备用端口 | TCP | 监听备用(可选,建议开放) | 
| 1158 | Enterprise Manager (EM) 端口 | TCP | 网格控制(若使用 EM 需开放) | 
| 5520-5539 | Oracle ASM 实例端口 | TCP/UDP | 自动存储管理(ASM 环境必开) | 
| 3938 | Oracle Notification Service (ONS) | TCP/UDP | 服务通知(RAC 高可用依赖) | 
| 22 | SSH 端口 | TCP | 节点间免密登录、集群部署 / 维护必开 | 
注意:
- 私网端口(如 5000-5019)仅需在 RAC 私有网络开放,公网可屏蔽;
 - 若修改过默认端口(如监听端口改为 1523),需同步开放修改后的端口;
 - 所有端口需在 防火墙(iptables)中开放,且确保 SELinux 未拦截(建议临时关闭 SELinux 测试)。
 
二、Linux 查看当前使用的端口及对应程序
CentOS 6 需通过 netstat 或 lsof 工具查看(默认已安装),以下是常用命令:
1. 查看所有监听端口及对应程序(推荐)
| # 查看 TCP 端口(-t)、监听状态(-l)、程序名(-p)、数字端口(-n)
 netstat -tlnp # 查看 UDP 端口 netstat -ulnp # 若 netstat 未安装,先安装: yum install -y net-tools  | 
2. 查看指定端口的占用情况
| # 例如查看 1521 端口(Oracle 监听)
 netstat -tlnp | grep 1521 lsof -i :1521 # 另一种方式,需安装 lsof:yum install -y lsof  | 
3. 查看所有已建立的连接(含端口和程序)
| netstat -tunap | 
输出说明:
- Local Address:本地 IP: 端口;
 - PID/Program name:占用端口的进程 ID 和程序名(如 ora_listener是 Oracle 监听进程)。
 
三、CentOS 6 开放两个节点之间的所有端口
CentOS 6 防火墙使用 iptables,需配置规则允许两个 RAC 节点(假设节点 IP 为 192.168.1.101 和 192.168.1.102)之间所有端口通信:
1. 临时开放(重启 iptables 后失效)
| # 允许节点 1 访问节点 2 的所有端口(在节点 2 执行)
 iptables -A INPUT -s 192.168.1.101 -j ACCEPT # 允许节点 2 访问节点 1 的所有端口(在节点 1 执行) iptables -A INPUT -s 192.168.1.102 -j ACCEPT # 保存临时规则(避免重启失效) service iptables save  | 
2. 永久开放(修改配置文件,重启不失效)
编辑 iptables 配置文件:
| vi /etc/sysconfig/iptables | 
在 COMMIT 之前添加以下规则(两个节点分别配置对方 IP):
| # 节点 1 配置(允许节点 2 所有访问)
 -A INPUT -s 192.168.1.102 -j ACCEPT # 节点 2 配置(允许节点 1 所有访问) -A INPUT -s 192.168.1.101 -j ACCEPT  | 
保存后重启 iptables:
| service iptables restart | 
验证规则:
| iptables -L INPUT --line-numbers # 查看 INPUT 链规则 | 
四、iptables 规则删除命令(CentOS 6)
1. 按规则序号删除(推荐,精准)
| # 1. 查看规则序号
 iptables -L INPUT --line-numbers # 2. 删除 INPUT 链第 N 条规则(例如删除第 3 条) iptables -D INPUT 3 # 3. 保存修改 service iptables save  | 
2. 按规则内容删除(需完全匹配)
| # 例如删除“允许 192.168.1.101 所有访问”的规则
 iptables -D INPUT -s 192.168.1.101 -j ACCEPT # 保存修改 service iptables save  | 
3. 清空所有规则(谨慎使用)
| iptables -F  # 清空所有链规则
 iptables -X # 删除自定义链 service iptables save # 保存(清空后需重新配置必要规则)  | 
五、指定 IP 访问端口 + 拒绝其他所有 IP 访问 22 端口
需求:仅允许特定 IP(如 192.168.1.200)访问 22 端口(SSH),拒绝其他所有 IP 访问 22 端口。
1. 配置规则(CentOS 6 iptables)
| # 1. 先删除原有 22 端口的规则(若存在)
 # 查看 22 端口规则序号:iptables -L INPUT --line-numbers | grep 22 # 假设序号为 5,删除:iptables -D INPUT 5 # 2. 添加“允许指定 IP 访问 22 端口”(必须放在拒绝规则之前) iptables -A INPUT -p tcp --dport 22 -s 192.168.1.200 -j ACCEPT # 3. 添加“拒绝所有其他 IP 访问 22 端口” iptables -A INPUT -p tcp --dport 22 -j REJECT # REJECT 会返回拒绝响应 # 或使用 DROP(直接丢弃数据包,更安全): # iptables -A INPUT -p tcp --dport 22 -j DROP # 4. 保存规则 service iptables save # 5. 重启 iptables 生效 service iptables restart  | 
2. 验证规则
| # 查看 22 端口相关规则
 iptables -L INPUT | grep 22 # 测试:从 192.168.1.200 连接 SSH(应成功),从其他 IP 连接(应拒绝)  | 
注意:
- 规则顺序至关重要:允许规则必须在拒绝规则之前(iptables 按顺序匹配,先匹配到允许则执行,后续规则不再生效);
 - 若需允许多个 IP,可重复添加 iptables -A INPUT -p tcp --dport 22 -s 目标IP -j ACCEPT。
 
六、补充:关闭 SELinux(避免拦截 RAC 端口)
CentOS 6 的 SELinux 可能会拦截 Oracle RAC 端口,建议临时关闭测试,或永久关闭:
1. 临时关闭(重启系统失效)
| setenforce 0 | 
2. 永久关闭(重启系统生效)
编辑 /etc/selinux/config:
| vi /etc/selinux/config | 
修改 SELINUX 参数:
| SELINUX=disabled # 默认为 enforcing | 
保存后重启系统:
| reboot | 
验证 SELinux 状态:
| getenforce # 输出 Disabled 表示已关闭 | 
总结
- Oracle RAC 核心端口需按表格开放,私网端口仅开放给节点间;
 - 查看端口用 netstat -tlnp或 lsof -i :端口;
 - 节点间开放所有端口需在 iptables 中添加对方 IP 的 ACCEPT 规则;
 - 规则删除需按序号或内容精准操作,避免误删;
 - 限制 22 端口访问需先允许指定 IP,再拒绝所有,规则顺序不能反。