Answers:
NAT表:
该表仅应用于不同数据包上的NAT(网络地址转换)。换句话说,它仅应用于转换数据包的源字段或目标字段。
筛选表:
过滤器表主要用于过滤数据包。我们可以匹配数据包并以我们想要的任何方式对其进行过滤。这是我们实际对数据包采取行动并查看其包含的内容并根据其内容进行DROP或/ ACCEPT的地方。当然,我们也可以事先进行过滤。但是,此特定表是设计过滤的地方。
在表和链的遍历中,我们可以看到过滤器的FORWARD链仅由转发的数据包(来自网络并发往网络的数据包)遍历,即您的计算机像路由器一样工作,而nat的PREROUTING链则由转发的两个数据包遍历。数据包和目的地为本地主机的数据包。
您应该仅使用nat的PREROUTING来更改数据包的目标地址,而仅使用过滤器的FORWARD进行过滤(丢弃/接受数据包)。
如果我们在第一个路由决策中收到了一个不以本地机器本身为目的地的数据包,则它将通过FORWARD链进行路由。另一方面,如果该数据包指定用于本地计算机正在侦听的IP地址,则可以通过INPUT链将数据包发送到本地计算机。 数据包可能发往本地计算机,但是可以通过执行NAT在PREROUTING链中更改目标地址。由于这是在第一个路由决策之前发生的,因此将在此更改后查看数据包。因此,可以在完成路由决策之前更改路由。请注意,所有数据包都将通过此映像中的一条或另一条路径。如果您使用DNAT将数据包发回来自其的同一网络,则该数据包仍将通过链的其余部分传播,直到将其发回网络。
PREROUTING:此链用于在(PRE)发送任何数据包之前做出与路由相关的决定。始终记住,在PREROUTING/POSTROUTING
ie NAT
表ACCEPT/DROP/REJECT
中,默认FILTER
表的etc目标将不起作用。该NAT
表仅用于做出路由决策。PREROUTING
在做出任何路由决策时(例如,在数据包开始遍历网络之前需要做出的决策),您应该使用。这是一个示例,我们将所有刚从端口80到达服务器的流量重定向到端口8080:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
FORWARD:顾名思义,FORWARD
表链FILTER
用于将数据包从源转发到目标,此处源和目标是两个不同的主机。因此,您可以想象FORWARD
规则基本上是在服务器上使用的,其中一台主机通过服务器从另一台主机发送/接收流量。当从服务器生成数据包时,链OUTPUT
即流量从其自身流出,而INPUT
链则意味着数据包仅用于服务器本身。这是一个FORWARD
链示例,其中在主机TCP
接口上的端口80上接收的任何流量都将被接受并转发到:eth0
192.168.0.4
192.168.0.4
iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 192.168.0.4 -j ACCEPT
FORWARD
链的两个不同接口的上下文中弄错了。当数据包从局域网的一台主机传输到局域网的另一台主机时,数据包将仅通过单个接口,并且所使用的链路将是FORWARD
严格的,尽管此处的服务器(介质)在严格意义上将不充当路由器而是可以认为是一个开关。