甲骨文服务器 2096 端口防火墙问题排查记录
一、问题起因
一开始我以为:
- 宝塔面板已经接管了防火墙;
- 宝塔里把防火墙关闭后,就等于服务器端口全部放开。
但实际使用时发现:
- 订阅接口
2096无法访问。
这说明:
“宝塔防火墙关闭 = 整台服务器端口全部放开”这个理解是错的。
二、第一次排查:查看系统 INPUT 规则
我先查看了服务器系统的 iptables INPUT 规则:
sudo iptables -L INPUT -n --line-numbers关键输出如下:
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:14505
5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:14505
6 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21412
8 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2095
9 IN_BT all -- 0.0.0.0/0 0.0.0.0/0
10 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
11 ufw-before-logging-input all -- 0.0.0.0/0 0.0.0.0/0
12 ufw-before-input all -- 0.0.0.0/0 0.0.0.0/0
13 ufw-after-input all -- 0.0.0.0/0 0.0.0.0/0
14 ufw-after-logging-input all -- 0.0.0.0/0 0.0.0.0/0
15 ufw-reject-input all -- 0.0.0.0/0 0.0.0.0/0
16 ufw-track-input all -- 0.0.0.0/0 0.0.0.0/0当时发现的重点
- 已明确放行的端口有
22、14505、21412、2095 - 没有看到
2096 - 后面还有
IN_BT和REJECT
这时候我开始怀疑:
2096很可能不是服务本身有问题,而是系统防火墙这边没有放行。
三、自己尝试插入 2096,结果立刻恢复访问
为了验证是不是系统规则的问题,我直接手动往 INPUT 里插入 2096 的放行规则。
插入后,2096 立刻就可以访问了。
这一步非常关键,因为它直接证明了:
问题不在程序本身,而在服务器系统防火墙规则。
也正是这一步,让我产生了新的疑惑:
- 宝塔不是已经开启了吗?
- 宝塔里面防火墙不是关闭状态、默认全部通过吗?
- 为什么还要我手动在系统里插入
2096,端口才能访问?
四、继续排查后,确认是服务器原本规则先拦截了流量
在我手动插入 2096 后端口立刻恢复访问,这时就可以确定:
问题不是宝塔本身没放行,而是服务器里原本就存在一套旧的防火墙规则,流量先被这些规则处理了。
也就是说:
- 宝塔里虽然设置成了“防火墙关闭 / 默认全部通过”
- 但请求在进入宝塔规则之前,就已经被服务器原本的规则影响到了
- 所以看起来像是“宝塔已经放开了,但端口还是不通”
到这里我才真正明白:
服务器里原本就有一套规则,宝塔也有自己的一套规则。原有规则先生效,导致流量根本没有正常走到宝塔防火墙那一步。
这也是为什么:
- 我手动插入
2096后马上就通了 - 因为我实际上打通的是系统层,而不是单纯改了宝塔显示状态
五、处理思路:清掉旧规则,只使用宝塔防火墙
确认问题来源后,后面的处理方向就明确了:
处理目标
- 不再让系统旧规则、手动插入规则、UFW残留、宝塔规则混在一起
- 避免再次出现“宝塔显示全部通过,但端口实际不通”的情况
- 统一只用宝塔防火墙管理端口
处理方式
- 先备份当前规则
iptables-save > /root/iptables.bak- 查看当前 INPUT 规则编号
iptables -L INPUT -n --line-numbers- 把以前手动加的旧规则逐条删除
- 包括手动插入的
2096 - 包括历史遗留的端口放行规则
- 包括不再需要的旧限制规则
- 包括手动插入的
示例:
iptables -D INPUT <编号>如果 UFW 不再使用,就保持停用,不再混用
- 避免 UFW、手动 iptables、宝塔三套逻辑同时存在
最后只保留宝塔这一套规则
- 以后像
2096这样的端口,不再手动往INPUT里单独插 - 统一在宝塔防火墙里配置和维护
- 以后像
这样处理之后,逻辑就变得很清楚:
- 系统里不再有额外旧规则抢先生效
- 请求可以正常进入宝塔规则
- 端口是否放行,统一看宝塔配置
六、最终结论
这次问题最关键的转折点是:
我手动往系统
INPUT插入2096后,端口立刻恢复访问。
这一步说明:
- 问题确实是服务器系统规则造成的;
- 宝塔面板里“防火墙关闭”并不等于系统底层规则已经全部清空;
- 如果系统原有规则先把流量拦了,宝塔那边就算默认全部通过,也没有机会生效。
最终结论就是:
不是宝塔失效,而是系统原本规则先影响了流量。后面把旧规则清掉,只保留宝塔,端口管理逻辑才真正统一。
七、经验总结
这次排查的核心经验:
- 不能只看宝塔面板的开关状态
- 端口通不通,最终还是要看系统底层
iptables - 宝塔只是管理入口,真正执行的还是系统规则
- 最稳妥的方式是:
- 清理旧规则
- 不混用多套防火墙
- 统一只让宝塔管理防火墙