很早之前就想写一点关firewall的东西,在ip产品的开发中firewall使我们无法避免的东西,你想要和ineternet 通信就必须用到firewall。
其实firewall 也没有那么神奇, 我们现在所说的iptables 不过是一个上层的app 相当于netfilter的一个configure app。所有关于packets的处理都在kernel中完成的也就是netfilter module中。 下面我们就iptables 来讲一下:
1. 我们所讲的 iptables 有四个表和五条连(也就是钩子 hook 一般懂一点的都喜欢把它称之为钩子 而不成为连)
2. 四个表 raw nat filter mangle 四个表有优先顺序的 raw > mangle > nat > filter
3. 五个钩子 prerouting input output forward postrouting
首先要明确 data packets 是沿着hook去流动的。
raw --- 这个表只做 去跟踪(就是不让这掉数据记录经conection track中) 明白了这一点就知道他会在那几个hook点出现了,(prerouting, output)
mangle -- 修改packet是中的ttl tos 等mark 标志的,所以五个hook点都可以有该表
nat -- 这个表就是为了路由处理 所以有 prerouting output postrouting 三个hook点可已有该表
filter -- 这就是进行packet filter的 所以 hook点有 input output forward
prerouting --- 可以理解为nat 前主要是做dest ip的转换
input --- 主要是处理进入本地的packet
output -- 主要是处理从本地出去的packets
forward -- 转要是处理dest 不是本地的packets
postrouting -- nat后主要是做source ip 转换的。