Linux之iptables详解及tcpdump

https://www.jianshu.com/p/ed001ae61c58

原文有几处写的不明白的地方加以重整:

  • 作者一共在内核空间中选择了5个位置
    这五个位置也被称为五个钩子函数(hook functions),也叫五个内置规则链

对应关系

 

  1.    PREROUTING(路由前)    进入/离开本机的外网接口 |  进入/离开本机的内网接口
  2.  INPUT(数据包流流入入)     数据包从内核流入用户空间的
  3.   FORWARD(转发)              从一个网络接口进来, 到另一个网络接口去的(内核里设置关卡)
  4.   OUTPUT(数据包流出)       数据包从用户空间流出的
  5.   POSTROUTING(路由后)  进入/离开本机的外网接口 |  进入/离开本机的内网接口



     
  • iptables的工作机制

从上面知道了作者选择的5个位置, 来作为控制的地方, 其实蓝色字体的三个位置已经基本上能够将路径彻底*了, 但是为什么已经在进出的口(指的是用户与内核之间的联系的进出)设置了关卡后还要在内部卡(指的是完全在内核中的PREROUTING & POSTROUTING)呢 ? 由于数据包尚未进行路由决策(也叫查找路由表/路由选择/路由判断(查找路由的过程在PREROUTING和FORWARD之间)),还不知道数据要走向那里, 所以在进出口是没有办法实现数据过滤的. 所以要在内核空间里设置转发的关卡. 进入用户空间的关卡,从用户空间出去的关卡,

也可以这样理解 他们没什么用 为什么还要设置他们这个问题: 因为我们要先做NAT和DNAT,做了AT即完成目标地址转换,而这个转换必须在路由之前进行, 所以我们在外网而后内网的接口进行设置关卡.

红色字体参考图:

Linux之iptables详解及tcpdump

Linux之iptables详解及tcpdump

Tips: 有没有发现有两个『路由判断』呢?因为网络是双向的,所以进与 出要分开来看!因此,进入的封包需要路由判断, 送出的封包当然 也要进行路由判断才能够发送出去啊!了解乎?