![通过 FirewallD 和 SELinux 允许时,目标无法访问(主机管理禁止)](https://linux22.com/image/739684/%E9%80%9A%E8%BF%87%20FirewallD%20%E5%92%8C%20SELinux%20%E5%85%81%E8%AE%B8%E6%97%B6%EF%BC%8C%E7%9B%AE%E6%A0%87%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%EF%BC%88%E4%B8%BB%E6%9C%BA%E7%AE%A1%E7%90%86%E7%A6%81%E6%AD%A2%EF%BC%89.png)
我正在尝试连接到在 Oracle Linux 7.6 上运行 Oracle Database XE 18c 并通过 Oracle SQL 开发人员使用桥接网络的 VM,但是没有成功。
我已永久允许 Oracle Listener 端口 (1521) 通过 FirewallD 中的接口区域,禁用 iptables 并将 SELinux 设置为宽容。
服务器本身上的 Oracle 数据库服务很好,似乎一切正常,但是当我尝试通过 Oracle SQL Developer 连接到我的服务器(在 LAN 上运行)时,出现以下信息:
状态:失败 - 测试失败:IO 错误:网络适配器无法建立连接
因此,我尝试使用它nmap
来确定主机上的端口是打开还是关闭,然后得到了以下结果:
Host is up (0.0024s latency).
PORT STATE SERVICE
1521/tcp filtered oracle
ping 服务器一切正常,只有这个端口即使通过系统的防火墙和 SELinux 仍被阻止。在 Wireshark 中捕获返回的数据包时,我看到了以下内容:
目的地不可达(主机管理禁止)
因此,我的猜测是,连接肯定是接通了,但是某个地方的某些东西阻止了它继续进行,而我不知道它是什么。
注:作为参考,我遵循这教程来在我的服务器上设置 Oracle 数据库,并且我正在使用标准 NBN 运营商/家庭级互联网服务(如果有帮助的话)。
答案1
您需要在防火墙中打开端口。不幸的是,您以为您已经这样做了,但实际上并没有。
firewall-cmd --add-port=1521/tcp
您实际上所做的是添加--permanent
命令,它会写入持久配置,但不会更改正在运行的防火墙。
除了需要它的情况(例如添加和删除区域)外,--permanent
不建议使用。您应该更改正在运行的配置,这样如果出现错误导致您被锁定,您可以重新启动防火墙或计算机并重新进入。一旦您确定它可以正常工作,您就可以使用 保存正在运行的配置firewall-cmd --runtime-to-permanent
。