https://www.jianshu.com/p/ed001ae61c58
原文有几处写的不明白的地方加以重整:
可以参考这个人写的,感觉他明白的笔记透彻:
https://blog.51cto.com/13677371/2094355
-
作者一共在内核空间中选择了5个位置
这五个位置也被称为五个钩子函数(hook functions),也叫五个内置规则链
对应关系
- PREROUTING(路由前) 进入/离开本机的内网接口
- INPUT(数据包流流入入) 数据包从内核流入用户空间的 | 内核--->应用程序
- FORWARD(转发) 从一个网络接口进来, 到另一个网络接口去的(内核里设置关卡)
- OUTPUT(数据包流出) 数据包从用户空间流出的 | 应用程序-----流出----->
- POSTROUTING(路由后) 进入/离开本机的外网接口
-
iptables的工作机制
从上面知道了作者选择的5个位置, 来作为控制的地方, 其实蓝色字体的三个位置已经基本上能够将路径彻底封锁了, 但是为什么已经在进出的口(指的是用户与内核之间的联系的进出)设置了关卡后还要在内部卡(指的是完全在内核中的PREROUTING & POSTROUTING)呢 ? 由于数据包尚未进行路由决策(也叫查找路由表/路由选择/路由判断(查找路由的过程在PREROUTING和FORWARD之间)),还不知道数据要走向那里, 所以在进出口是没有办法实现数据过滤的. 所以要在内核空间里设置转发的关卡. 进入用户空间的关卡,从用户空间出去的关卡,
也可以这样理解 他们没什么用 为什么还要设置他们这个问题: 因为我们要先做NAT和DNAT,做了NAT即完成目标地址转换,而这个转换必须在路由之前进行, 所以我们在外网而后内网的接口进行设置关卡.
红色字体参考最下图 :示例图 .
图9.1-2 P308 单一网域,仅有一个路由器:
防火墙除了可以作为 Linux 本机的基本防护之外,他还可以架设在路由器上面以管控整个局域网络的封包进出。 因此,在这类的防火墙上头通常至少需要有两个接口,将可信任的内部与不可信任的 Internet 分开, 所以可以分别设定两块网络接口的防火墙规则啦!简单的环境如同下列图 9.1-2 所示。
在图 9.1-2 中,由于防火墙是设定在所有网络封包都会经过的路由器上头, 因此这个防火墙可以很轻易的就掌控到局域网络内的所有封包.
图9.3-4 含义: 比较简单的封包透过 iptables 而传送到后端主机的表格与链流程
Tips: 有没有发现有两个『路由判断』呢?因为网络是双向的,所以进与 出要分开来看!因此,进入的封包需要路由判断, 送出的封包当然 也要进行路由判断才能够发送出去啊!了解乎?
示例图
《鸟哥的Linux私房菜-服务器架设篇(第三版)高清晰_PDF密码解除》
当网络布线如图 9.1-2的架构,若内部 LAN 有任何一部主机想要传送封包出去时, 那么这个封包要如何透过
Linux 主机而传送出去?他是这样的:
1. 先经过 NAT table 的 PREROUTING 链;
2. 经由路由判断确定这个封包是要进入本机与否,若不进入本机,则下一步;
3. 再经过 Filter table 的 FORWARD 链;
4. 通过 NAT table 的 POSTROUTING 链,最后传送出去。