首先体验w / iptables,使用它将stream量从端口80重新路由到8080,这样我就可以运行只有用户权限的应用服务器。 我解决了这个问题,但是我不知道它为什么会起作用,而且我希望能够设定好。
我的iptables -t nat -L如下:
Chain PREROUTING (policy ACCEPT) target prot opt source destination REDIRECT tcp -- anywhere anywhere tcp dpt:http redir ports 8080 Chain OUTPUT (policy ACCEPT) targetprot opt source destination REDIRECT tcp -- anywhere localhost tcp dpt:http redir ports 8080 REDIRECT tcp -- anywhere _hostname_ tcp dpt:http redir ports 8080
关于OUTPUT规则的两件事情我无法理解:
1)我不应该redirect到80端口而不是8080? redirect到8080对我来说似乎是错误的,因为我的印象是,客户端发送请求到80.他们不会期待这样的反应吗?
2)为什么在这里引用localhost和hostname ? 如果是OUTPUT,那么不是在任何地方的目的地,但在这里呢?
任何答案都赞赏—我是一个总noob,这不是特别紧迫,但我想要了解这一点。
有两件事要知道:
首先,DNAT(REDIRECT)应使用conntrack自动“修复”返程上的IP /端口信息。 因此,iptables没有明确的规定将端口8080映射回80端口,这是自动处理的。 您可以在/proc/net/ip_conntrack下使用conntrack-tools软件包观看conntrack。
其次,OUTPUT链是用于在该计算机上发送的数据包,而PREROUTING是用于从外部到达计算机的数据包。 这里有一个解释,但是给出的stream程图基于防火墙操作,所以它不显示数据包发送到自身的path。 从本质上讲,这两个OUTPUT规则是要确保如果你从服务器连接到它自己(目的地是127.0.0.1或公共IP),连接被redirect从80到8080。