如何在CentOS防火墙中开放Oracle数据库端口?

阿墨同学_2788

阿墨同学_2788

2026-11-12

652人浏览

原创

只在CentOS防火墙放行1521端口大概率连不上Oracle,因连接失败多源于listener.ora中HOST未设为真实IP、SELinux未设为permissive或disabled、以及未启用共享服务器模式导致随机端口被拦。

如何在centos防火墙中开放oracle数据库端口?

只在CentOS防火墙里放行1521端口,大概率连不上Oracle——因为Oracle连接失败常不在网络层,而在监听绑定、SELinux或共享套接字配置上。

firewalld vs iptables:先确认你用的是哪个防火墙

CentOS 7/8 默认用 firewalld,但很多Oracle部署文档仍沿用 iptables 配置,混用会导致规则不生效。

  • 查当前启用的防火墙:systemctl status firewalld(若显示 active,则用 firewall-cmd);若报“not found”或 inactive,再查 systemctl status iptables
  • 如果两个都停着,Oracle 连接失败就和防火墙无关,问题一定出在监听器或 Oracle 实例本身
  • 切勿同时启用两者:曾有案例因 firewalld 和 iptables 规则冲突,导致 1521 端口看似开放实则被静默丢包

用 firewall-cmd 开放 1521 端口(推荐 CentOS 7+)

这是最稳妥的方式,无需手动编辑配置文件,且支持运行时生效。

  • 永久添加端口:sudo firewall-cmd --permanent --zone=public --add-port=1521/tcp
  • 重载规则(必须!):sudo firewall-cmd --reload(仅 --reload,不是 restart)
  • 验证是否成功:sudo firewall-cmd --query-port=1521/tcp → 返回 yes 才算真正生效
  • 别漏掉 zone:若 Oracle 客户端从非默认网段来(比如 Docker 容器或跳板机),需确认该 IP 所属 zone 是否为 public,可用 firewall-cmd --get-active-zones 查看

用 iptables 开放 1521 端口(仅限明确禁用 firewalld 的场景)

有些老脚本或自动化工具仍依赖 iptables,此时必须确保服务已启用且规则写对位置。

QuantOracle
QuantOracle

63个确定性量化金融计算器 + 10个通过MCP的复合工作流。期权定价、Greeks、奇异衍生品、风险指标、投资组合优化……

下载
  • 先关掉 firewalld:sudo systemctl stop firewalld && sudo systemctl disable firewalld
  • 安装并启用 iptables-services:sudo yum install -y iptables-services && sudo systemctl start iptables && sudo systemctl enable iptables
  • 编辑 /etc/sysconfig/iptables,在 COMMIT 前插入这一行:-A INPUT -p tcp -m state --state NEW -m tcp --dport 1521 -j ACCEPT
  • 重启服务:sudo systemctl restart iptables,再执行 sudo service iptables save(否则重启后丢失)
  • 注意顺序:这条规则必须放在所有 REJECT 或 DROP 规则之前,否则会被拦截

开放端口只是第一步,连不上请立刻检查这三处

90% 的“防火墙已开但连不上”问题,卡在这三个地方:

  • listener.ora 中的 HOST 值不能是 localhost 或 127.0.0.1,得换成本机真实 IP(如 192.168.1.100)或可被客户端解析的主机名;改完必须 lsnrctl stop && lsnrctl start,reload 不生效
  • CentOS 上 SELinux 必须设为 permissive 或 disabled:sudo setenforce 0(临时),再改 /etc/selinux/config 中 SELINUX=disabled
  • Linux 不需要注册表,但 Oracle 实例必须启用共享服务器模式(尤其高并发场景),否则监听器分配的随机端口会被防火墙拦住;可通过 sqlplus / as sysdba 执行 SHOW PARAMETER shared_servers 查看,值为 0 就得调大

真正难的从来不是敲那条 firewall-cmd,而是从 telnet 通了之后,发现 tnsping 超时、sqlplus 报 ORA-12170,这时就得回头翻监听日志、查 lsnrctl status 输出里的 Listening Endpoints Summary —— 绑定地址对不对,才是生死线。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

4943

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

1011

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

1289

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

6981

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

3663

4

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

2024.04.07

6980

11

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

2024.04.29

9741

6

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1330

5

sql中删除一列的命令是什么
sql中删除一列的命令是什么

在sql中,使用alter table语句可以删除一列,语法为:alter table table_name drop column column_name。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1152

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程