我正在使用 iptables 重定向使 RHEL7 上的 Tomcat 在端口 443(用于 https 流量)上可访问,如此处所述。重要的规则应该是这三个:
iptables -A INPUT -p tcp --dport 443 -i eth3 -j ACCEPT
iptables -A INPUT -p tcp --dport 8443 -i eth3 -j ACCEPT
iptables -A PREROUTING -t nat -p tcp --dport 443 -j REDIRECT --to-port 8443
iptables -A INPUT -m state --state ESTABLISHED,RELATED -i eth3 -j ACCEPT
# Drop all other incoming packets on the interface eth3
iptables -A INPUT -i eth3 -j DROP
所以我不明白的是为什么我需要向外部开放端口 8443 的规则?当我关闭它并只打开 443 时,它不起作用。据我了解,重定向应该在内部发生,不是吗?或者这可以以某种方式进行不同的配置?
备注:eth3 是我真正需要保护的一个接口。还有其他的,但那些只是内部的。
我想我自己想通了:预路由显然发生在实际的接受/丢弃规则被击中之前。因此,请求从 443 重定向到 8443,并且规则仅适用于重定向的流量。因此,我不必使用接受规则打开端口 443。无论如何,重定向似乎都“打开”了它。所以第一条规则(接受 443)可以省略。
我不使用 Tomcat,但是您是否在 server.xml 文件中检查了 Tomcat 的端口?当我在http://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html#Edit_the_Tomcat_Configuration_File阅读时,它看起来可能使用端口 8443 作为标准。编辑它是一个连接器端口,而不是一个内部重定向。