是,防火墙可能拦截1521端口;需依次检查系统防火墙(firewalld/ufw/iptables)、云平台安全组、selinux端口策略及navicat代理或ssl设置,因ora-12537常由网络层阻断导致监听无法响应。
防火墙是否拦截了1521端口
ora-12537 报错时,如果监听已启动、tnsnames.ora 配置无误、用户权限正常,但 navicat 仍连不上,第一个要验证的就是网络通路——特别是 linux 服务器上的防火墙是否放行了 oracle 默认端口 1521。
常见现象是:本地 telnet 192.168.x.x 1521 超时,或 nc -zv 192.168.x.x 1521 返回 connection refused / failed,而服务端 lsnrctl status 显示监听正常、状态为 READY。
- CentOS/RHEL 7+ 默认使用
firewalld:运行sudo firewall-cmd --list-ports查看是否含1521/tcp;若无,执行sudo firewall-cmd --add-port=1521/tcp --permanent && sudo firewall-cmd --reload - Ubuntu/Debian 多用
ufw:检查sudo ufw status verbose,若未允许,运行sudo ufw allow 1521/tcp - 云服务器(如阿里云、腾讯云)必须额外检查安全组规则——控制台里确认入方向规则已放开
1521端口,源 IP 设置为实际客户端 IP 或0.0.0.0/0(测试阶段) - Windows Server 防火墙同样需手动启用“OracleService
SID”对应入站规则,或直接放行 TCP 1521
iptables 规则干扰监听通信
有些老环境仍用 iptables,它可能在 INPUT 链中默认 DROP 所有新连接,导致监听进程收不到 SYN 包——此时 lsnrctl status 看似正常,但外部无法建立三次握手。
运行 sudo iptables -L INPUT -n --line-numbers,重点检查是否有类似这样的规则优先级过高:
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
- 临时放行:在 REJECT 规则前插入
sudo iptables -I INPUT -p tcp --dport 1521 -j ACCEPT - 保存规则(CentOS 6):
sudo service iptables save;(CentOS 7+)改用firewalld更稳妥 - 注意:不要仅依赖
iptables -F清空——这会同时删掉 SSH 规则,可能导致失联
SELinux 强制限制 socket 绑定
在启用 SELinux 的系统(如默认安装的 CentOS/RHEL)上,即使防火墙放行、监听启动成功,lsnrctl start 也可能因 SELinux 策略拒绝 Oracle 进程绑定到网络端口,最终表现为客户端连接瞬间被关闭,报 ORA-12537。
验证方式:sudo ausearch -m avc -ts recent | grep -i oracle 或查看 /var/log/audit/audit.log 是否有 avc: denied { name_bind } 记录。
- 临时缓解(仅调试):
sudo setenforce 0,再试连接;若恢复,则确认是 SELinux 导致 - 永久修复:给 Oracle 监听打策略标签,运行
sudo semanage port -a -t oracle_port_t -p tcp 1521(需先安装policycoreutils-python-utils) - 不推荐直接禁用 SELinux(
SELINUX=disabledin/etc/selinux/config),尤其在生产环境
Navicat 自身网络代理或 TLS 设置冲突
部分企业内网强制走代理,或 Navicat 启用了「SSL 加密连接」但服务端未配置对应 wallet 和证书,也会触发连接被主动断开,错误码仍显示为 ORA-12537。
- 在 Navicat 连接配置中,取消勾选「Use SSL」,再测试
- 检查 Navicat 是否启用了系统代理(工具 → 选项 → 连接 → HTTP 代理);如有,临时禁用
- 若用的是 Oracle Instant Client,确认其版本与服务端兼容(例如 Oracle 19c 不建议用 10g client);可改用
instantclient-basic-windows.x64-21.x并通过TNS_ADMIN指向正确路径
防火墙类问题最易被跳过——因为 lsnrctl status 成功就以为“网络没问题”。实际只要中间任意一层(宿主机防火墙、云平台安全组、SELinux、Navicat 代理)掐断了 socket 建立过程,Oracle 服务端根本收不到连接请求,自然只能返回连接已关闭。











