Iptables的端口redirect – 为什么需要打开这两个端口?

我正在使用iptablesredirect来使RHEL7上的Tomcat可以在端口443上访问(用于httpsstream量),如此处所述。 重要的规则应该是这三个:

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到外面? 当我closures它,只打开443,它不起作用。 据我了解,redirect应该发生在内部,不是吗? 或者可以以某种方式configuration不同?

备注:eth3是我实际需要保护的一个接口。 还有其他的,但那些只是内部的。

我想我只是自己弄明白了:预先路由显然发生在实际接受/放弃规则被击中之前。 因此,请求从443redirect到8443,并且规则仅适用于redirect的通信。 因此,我不必使用接受规则打开端口443。 无论如何,redirect似乎“打开”。 所以第一个规则(接受443)可以省略。

我不使用Tomcat,但是您是否在server.xml文件中检查了Tomcat的端口? 当我在http://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html#Edit_the_Tomcat_Configuration_File阅读时,它看起来可能使用端口8443作为标准。 编辑它是一个连接器端口,而不是内部redirect。