iptables
。我已经阅读了Iptables手册并了解了一些基本概念,例如链、表、钩子、规则和目标。在Linux生态系统中,iptables是一种广泛使用的防火墙工具,它与内核的netfilter数据包过滤框架接口。route table
。在Linux中,还有另一个表route table
。
我试图弄清楚它们之间的关系,并将它们放在一个大的画面中。
这是一个很好的图表,展示了 iptables 的流程,有两个route
阶段。在哪一步,内核会利用“路由表”?
参考
- DigitalOcean:深入探讨 Iptables 和 Netfilter 架构
- 我读过这个问题“StackOverflow:iptables 与路由有什么区别?”,但它没有回答我的问题。
答案1
iptables 根据数据包内容或数据包寻址决定如何通过以下一项或多项操作来响应数据包:
- filter :忽略、拒绝或接受数据包(防火墙)
- mangle :更改数据包,包括 NAT 重写
如图所示,适当的 iptables(蓝色)可以在每个路由步骤之前和之后参与。
路由表完全根据标头中的地址来决定数据包的去向:
- 输入路由决定是否在本地接受(进入 iptables INPUT 表)或转发(iptables FORWARD 表);如果相应的 ip 表为空或表接受数据包,则数据包将分别发送到侦听应用程序或(如果启用转发)发送到输出路由。
- 输出路由获取转发的数据包和应用程序发送的数据包。然后,它决定将数据包发送到哪个网络接口,以及是否将其直接发送到其目标主机(与该接口位于同一网络上),还是发送到外部路由器
- 标记为“本地进程”的框不是路由步骤,而是代表系统上正在接收数据包或发出新数据包的本地应用程序 - 两个可能不相关的操作。
转发可能需要更多解释。当 Linux 机器启用转发时,它就像路由器一样。通常,这意味着它具有多个网络接口,并且它可能接收的数据包不是发往本地系统的,而是发往与接收数据包的接口不同的接口上的网络的。在以太网中,每个数据包都有一个以太网 (LAN) 地址以及源和目标的 IP 地址。通过将路由器的以太网地址和 WAN IP 地址放入各自的目标地址中,可以将数据包发送到 WAN 地址。然后路由器(可能是另一个 Linux 机器)将通过其路由表运行该数据包并确定将其发送到的下一个网络。
答案2
在两个“路线”步骤中。一种用于传入数据包,一种用于从本地应用程序创建的数据包。
请注意,iptables 和路由适用于两个完全不同的概念:路由回答“这个数据包应该传送到哪里?”的问题,而 iptables 回答“我是否需要过滤或以某种方式特殊处理这个数据包?”的问题。
虽然您可以滥用过滤过程来强制将数据包传递到某个地方,但这不是初衷,但互联网上有太多人认为他们必须以某种方式这样做。 (抱歉,我的咆哮是我最讨厌的事情之一)。