linux 3.5 版本内核开始集成一个 IP 信息包过滤系统 — iptables。 利用 iptables,我们可以很有效的控制 IP 信息包的过滤条件和防火墙配置。 他可以配置有状态的防火墙规则,通过发送或接收信息包所建立的连接的状态来对网络信息包进行过滤。 本文我们就从原理出发,详细介绍一下 iptables。

iptables 包含 netfilter 与 iptables 两个组件,因此通常称为“netfilter/iptables”。
netfilter 是 linux 操作系统内核的一个数据包处理模块,它作为一个通用的、抽象的框架。 提供一整套的hook函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协议类型的连接跟踪成为了可能。

如上图所示,netfilter 对网络传输的五个关键节点进行了过滤,每个 hook 函数都可以返回以下五种处理结果之一:
iptables 内核模块用来管理和操作所有的 netfilter hook 来实现网络信息包的过滤规则管理。

iptables 通过链的模式管理 netfilter 的所有 hook,所有经过某个关卡的报文,都将经过这条链上的所有规则,执行相应匹配的动作。 iptables 将所有的规则抽象为 4 个表来管理:
- | PREROUTING | INPUT | FORWARD | OUTPUT | POSTROUTING |
|---|---|---|---|---|---|
raw 表 | √ | X | X | √ | X |
mangle 表 | √ | √ | √ | √ | √ |
nat 表 | √ | √ | X | √ | √ |
filter 表 | X | √ | √ | √ | X |

iptables 让我们可以配置一系列规则,iptables 内核模块通过指定的规则条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理。
iptables 的规则匹配条件包含:
https://wangchujiang.com/linux-command/c/iptables.html。 https://wiki.archlinux.org/index.php/Iptables_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) http://man.linuxde.net/iptables。 https://www.jianshu.com/p/41d5cdbd6219?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation。 http://blog.chinaunix.net/uid-23069658-id-3160506.html。 http://www.zsythink.net/archives/1199。