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 表示已关闭

总结

  1. Oracle RAC 核心端口需按表格开放,私网端口仅开放给节点间;
  2. 查看端口用 netstat -tlnp或 lsof -i :端口;
  3. 节点间开放所有端口需在 iptables 中添加对方 IP 的 ACCEPT 规则;
  4. 规则删除需按序号或内容精准操作,避免误删;
  5. 限制 22 端口访问需先允许指定 IP,再拒绝所有,规则顺序不能反。
阅读剩余
THE END