我的 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
到命令中,以便它只匹配新连接。