iptables:我是否正确理解了这些命令?

网络工程 防火墙
2022-02-26 05:02:36

看看这组命令:

iptables -F

iptables -P OUTPUT DR0P
iptables -P INPUT DROP
iptables -P FORWARD DROP

iptables -A FORWARD -d 195.83.164.0/23 -p udp --dport 53 -i eth0 -j ACCEPT
iptables -A FORWARD -s 195.83.164.0/23 -p udp --sport 53 -j ACCEPT

iptables -A FORWARD -p tcp --sport 22 -j ACCEPT
iptables -A FORWARD -p tcp --dport 22 -j ACCEPT

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE

iptables -A INPUT -i eth0 -j REJECT

告诉我以下几点是否正确:

  1. 第 N°1 行刷新所有表(MANGLE、NAT、FILTER、...)的所有链(FORWARD、INPUT、OUTPUT...)

  2. 第 N°2、N°3、N°4 行将默认表的 (FILTER) OUTPUT/INPUT/FORWARD 链的默认操作设置为 DROP

  3. 首先,任何数据包都会被 MANGLE 的 PREROUTING 链分析:没有任何指示,所以我们假设默认动作是 ACCEPT

  4. 然后会被NAT的PREROUTING链解析:同

  5. 然后,读取数据包的目的地址............:

  6. 如果数据包的目的地不是路由器(“NDTR”),那么...:

  7. MANGLE 的 FORWARD 链分析 NDTR 数据包:没有任何指示,因此我们假设默认操作是 ACCEPT

  8. 然后,NDTR 数据包由 FILTER 的 FORWARD 链分析:N°5、N°6、N°7、N°8 和 N°4 行告诉 NDTR 数据包只有在其目的地是 195.83.164.0 时才会被接受/23 AND 目标端口是 53 AND 目标接口是 eth0 ] 或者如果 [ 它的源是 195.83.164.0/23 AND 目标端口是 53 ] 或者如果 [ 它是一个 SSH 数据包 ] ELSE,它将被丢弃。

  9. 如果 NDTR 数据包被丢弃,那么……嗯……它被丢弃了,这就是这个“算法”的结束。否则,如果是ACCEPTED,就会被MANGLE的POSTROUTING链分析:什么都不指明,我们假设默认动作是ACCEPT:那么,它会被NAT的POSTROUTING链分析:什么都不指明,再次默认接受。然后,数据包已到达其目的地。

  10. 否则,如果数据包实际发往此路由器(“DR”)......:

  11. MANGLE 的 INPUT 链将分析 DR 数据包:没有任何指示,我们假设 ACCEPT

  12. 然后,DR 数据包将由 FILTER 的 INPUT 链分析:如果其目标接口是 eth0,它将被拒绝,否则将被丢弃。

  13. 在这两种情况下,它都是结束。

  14. 仅供参考:数据包将由 MANGLE 的 OUTPUT 链分析,然后由 NAT 的 OUTPUT 链分析,然后由 FILTER 的 OUTPUT 链分析,然后由 MANGLE 的 POSTROUTING 链分析,然后由 NAT 的 POSTROUTING 链分析,然后将其返回给发送它的主机。

好吧,我是否正确理解了 Netfilter/iptables ?

1个回答

你做的大部分都是正确的,有几点是小问题。

  1. NAT 引擎是基于连接的。只有连接的第一个数据包通过 NAT 链。对于后面的数据包,连接转换是基于第一个数据包创建的映射执行的。我不确定在该过程中的确切位置应用现有数据包的翻译。

  2. 您的描述似乎错过了 nat 表 POSTROUTING 链中的 MASQUERADE 规则。