0%

iptables基础概念

iptables 是标准的linux防火墙命令行控制工具, 其底层调用netfilter来实现各种功能

iptables 中最重要的概念就是 table, chain 和 rule

table

iptables 中包含多个 table, 每个 table 又包含多个 chain, table 是 chain 的集合, 通常可以将 table 视作 chain 按照目的进行的分类

从数据进入网卡到流出网卡的过程中, iptables 会按照一定顺序调用各个 table 的 chain, 我们可以在某个 table 中添加 chain 或 rule 来在某个特定的时间点处理数据。

iptables 中包含了 raw, filter, nat, mangle, security 五个 table, 其中最常用的就是 nat 和 filter。

nat 中包含了会在数据收发阶段被调用的 chain, 因此可以用来对数据进行预处理和后处理。

filter 中包含了会在收发阶段转发阶段被调用的 chain, 因此通常用来实现防火墙, 对数据的原目的地址端口协议等进行检查。

chain

chain 是规则(rule)的集合, 每个 table 中会包含数量不定的 chain, 不同 table 中的 chain 可能具有相同的名字

例如 nat 中包含了 PREROUTING, POSTROUTING, OUTPUT 三个 chain, filter 中包含了 INPUT, OUTPUT, FORWARD 三个 chain

在 iptables 默认的5个 table 中, 每个 table 都包含了数量不一的 chain, 这些 chain 会在数据处理的各个节点被调用, 我们通过在这些默认的 chain 中添加 rule 就可以实现对数据包的捕获和处理。

rule

rule 是处理数据的具体规则, 数据收发过程中, iptables 会按照一定顺序调用各个 table 的 chain, 我们在这些 chain 中添加规则就可以随心所欲的处理数据。

通常来说, 一个 rule 功能包括:

  1. 接受或拒绝一个包
  2. 将一个包送到某个 chain 里继续处理
  3. 改写包

调用顺序

按照下图所示, 我们只关注 filter 和 nat

对于收到的目的地址为本机的数据包, 依次经过 filter 和 nat 的5个 chain:

  1. nat: PEROUTING
  2. filter: INPUT
  3. nat: OUTPUT
  4. filter: OUTPUT
  5. nat: POSTOUTING

对于收到的目的地址不为本机的数据包, 依次经过 filter 和 nat 的3个 chain:

  1. nat: PEROUTING
  2. filter: FORWARD
  3. nat: POSTOUTING
https://www.it.uu.se/edu/course/homepage/sakdat/vt09/pm/programme/iptables.pdfhexo