在iptables中,”4表5链“是指iptables的四个表和五个链,它们共同作用于数据包的过滤和处理。

iptables 的四表五链(filter 表、nat 表、mangle 表、raw 表,以及 INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING 链)都属于三层协议(网络层)处理。

如果数据包在二层(数据链路层)进行转发,例如通过网桥(bridge)或交换机进行转发,这些数据包不会经过 iptables 的这些链。

四表

  1. filter表:这是最常用的表,主要用于数据包过滤。它包含了所有与防火墙相关的规则。
  2. nat表:用于网络地址转换(NAT),例如源地址转换(SNAT)和目的地址转换(DNAT)。
  3. mangle表:用于修改数据包的内容,例如更改TTL值或设置标记。
  4. raw表:用于配置数据包的跟踪(connection tracking),通常用于排除某些数据包不被跟踪。

五链

  1. PREROUTING链:在数据包进入防火墙时最先处理的链,主要用于修改数据包的目的地址。
  2. INPUT链:处理进入本地系统的数据包。
  3. FORWARD链:处理转发的数据包,即那些不进入本地系统的数据包。
  4. OUTPUT链:处理从本地系统发出的数据包。
  5. POSTROUTING链:在数据包离开防火墙时处理,主要用于修改数据包的源地址。

规则

在iptables规则中,target(目标)指定了当数据包匹配规则时应执行的动作。target可以是内置的动作,也可以是用户自定义的链。以下是一些常见的target及其作用:

  1. ACCEPT:允许数据包通过。
  2. DROP:丢弃数据包,不发送任何响应。
  3. REJECT:拒绝数据包,并发送一个响应(例如ICMP错误消息) 。
  4. LOG:记录数据包的相关信息到系统日志中,但不改变数据包的处理。
  5. MASQUERADE:用于动态网络地址转换(NAT),通常用于共享互联网连接。
  6. SNAT:静态网络地址转换,修改数据包的源地址。
  7. DNAT:目的地址转换,修改数据包的目的地址。
  8. REDIRECT:重定向数据包到本地机器的另一个端口。

这些target可以通过-j选项在iptables规则中指定。例如:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

这条规则表示允许所有到达本地端口22的TCP数据包通过。

转发

在二层转发的情况下,数据包是根据 MAC 地址进行处理和转发的,而不是根据 IP 地址。因此,iptables 的规则不会应用于这些数据包。

如果你希望在二层转发时也能应用 iptables 规则,可以启用 bridge-nf-call-iptables 参数,这样二层桥接的数据包在转发时也会调用 iptables 的 FORWARD 链规则:

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

启用后,二层桥的数据包在转发时会经过 FORWARD 链,从而可以应用 iptables 规则。