在 iptables 中打开 443 不起作用

在 iptables 中打开 443 不起作用

我的 CentOS 6.2 机器上有 iptables。安装并配置了 apache2,支持 SSL,并且在禁用 iptables 的情况下也能正常工作。

当我添加以下规则时:

iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

当我保存此信息并重新启动 iptables 时,浏览器中的连接超时...有什么建议吗?

完整脚本

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [19:1748]
-A INPUT -p tcp -m tcp --dport 389 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

答案1

您将此规则添加到 iptables 的末尾。

如果您有:

 iptables -A INPUT -j DROP

在此之前,数据包会被丢弃,然后再评估你的规则。你应该尝试将规则放在顶部(插入,而不是附加):

iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT   # -I instead of -A

此外,iptables 会立即应用,因此它无需保存/重新启动即可工作。

答案2

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

第一行:如果现在规则已经匹配,则拒绝此数据包。REJECT是一个终端规则,因此如果它匹配,则之后的任何内容都不会被评估。

由于您的443规则在此之后,因此永远不会被测试。您需要在脚本中的拒绝行上方插入规则。

iptables -I用于在实时表上插入规则。

答案3

您不应该iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT将该规则放在 INPUT 表的末尾,而应该iptables -I INPUT 5 -p tcp -m tcp --dport 443 -j ACCEPT将其放在 INPUT 表中的“REJECT”规则之前。

无需将其作为表中的第一个条目,只需将该规则放在“REJECT”规则之上即可。此外,您可能希望将该选项添加-m state --state NEW到命令中,以便它只匹配新连接。

相关内容