我最近在端口 80 上设置了 Tomcat,使用Werner Puschitz 提供的说明。本质上,我必须执行这两个 iptables 命令:
iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -I OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 8080
我实现了与 Tomcat 相关的目标,但它搞砸了一些其他的事情;例如,当我尝试运行“yum update yum”时,出现以下错误:
http://mirror.stanford.edu/yum/pub/centos/5.5/addons/x86_64/repodata/repomd.xml: [Errno 4] IOError: <urlopen error (111, 'Connection refused')>
Trying other mirror.
http://mirrors.adams.net/centos/5.5/addons/x86_64/repodata/repomd.xml: [Errno 4] IOError: <urlopen error (111, 'Connection refused')>
etc...
WGET 以类似的方式失败。
我知道 iptables 规则是罪魁祸首,因为删除它们可以解决 YUM 和 WGET 的问题。那么,为什么这些规则会搞砸 YUM 和 WGET?我猜是 OUTPUT 规则,对吧?它实际上起什么作用,为什么有必要这样做?这种令人讨厌的副作用可以避免吗?
答案1
如果您在服务器上运行 Tomcat,则需要将入站流量重定向到端口 8080,而不是出站流量。
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-ports 8080
第二条规则重定向从运行 Tomcat 的本地节点生成的端口 80 上的传入请求,如链接中所述。仅当您想从服务器内部访问端口 80 上的 tomcat 时才需要它。