安装 RHEL 时,iptables 似乎拒绝来自 1531 (oracle) 的连接。这是我的配置:
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
我需要解释这些规则才能理解为什么端口 1531 不被接受。我可以看到没有接受它,但我也没有看到任何“拒绝所有”类型的语句。
答案1
这是同一个文件,不是内核中的实际防火墙规则,但它们在此处的显示顺序与在运行的防火墙中的顺序相同。在这种情况下发生的情况是,传入的数据包一一遍历 INPUT 链中的所有规则,并不断失败,直到到达保存为 的规则-A INPUT -j REJECT --reject-with icmp-host-prohibited
。此时,它们被防火墙拒绝。
您可以通过在此 REJECT 规则之前插入 ACCEPT 规则或完全禁用防火墙来解决此问题。
混乱来自于默认策略是 ACCEPT;在许多安全圈中,首选逻辑是删除显式的 REJECT 规则,只需将链上的默认策略设置为 REJECT 或 DROP。要查看任何给定时间的活动防火墙规则,您可以使用iptables -L
。要更新防火墙,我强烈建议执行以下过程:
- 设置一个“计时器”,将在 5 分钟内重置防火墙状态(例如
echo "service iptables restart" | at now + 5 minutes
) - 修改内核防火墙规则集并确认您的修改按需要工作,没有任何不良副作用。如果您将自己锁在门外,请等待 5 分钟,直到计时器到期并重置防火墙。
- 通过保存修改后的规则集
service iptables save
答案2
您的 iptables 中似乎未配置该端口。这看起来像默认的 iptables 文件,我认为 iptables 使用隐式拒绝,因此您必须明确声明您希望允许的端口。
您可以通过在 REJECT 语句之前插入一行来手动编辑它,如下所示:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1531 -j ACCEPT
完成后,重新启动 iptables:
红帽 6.x:service iptables restart
红帽 7.x:systemctl restart iptables.service
请记住,我主要处理 CentOS,这有点相同...还有其他方法可以打开端口(通过命令行),但这很容易您自己研究。