iptables 链 OUTPUT 如何工作?

iptables 链 OUTPUT 如何工作?

第一次使用 iptables,用它将流量从端口 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)我是否应该重定向到端口 80 而不是 8080?重定向到 8080 对我来说似乎是错误的,因为在我的印象中,客户端会将请求发送到 80。他们难道不也希望从这样的端口得到响应吗?

2)为什么引用 localhost 和主机名这里?如果是输出,那么目的地难道不是这里以外的任何地方吗?

任何答案都值得感激---我是个完全的菜鸟,这不是特别紧急,但我确实想了解这一点。

答案1

有两件事需要了解:

首先,DNAT(REDIRECT)应该使用 conntrack 自动“修复”回程中的 IP/端口信息。因此,iptables 中没有明确的规则将端口 8080 映射回 80,它是自动处理的。您可以在/proc/net/ip_conntrack或使用conntrack 工具包裹。

其次,OUTPUT 链用于处理来自该计算机的数据包,而 PREROUTING 链用于处理从外部到达计算机的数据包。这里有一个解释这里,但给出的流程图是基于防火墙操作的,因此它没有显示数据包发送给自身时所经过的路径。本质上,这两个 OUTPUT 规则是为了确保如果您从服务器连接到自身(目的地是 127.0.0.1 或公共 IP),则连接会从 80 重定向到 8080。

相关内容