iptables笔记

本文最后更新于:21 天前

几个概念

关于Netfilter

首先防火墙的实现是基于Linux内核中的Netfilter模块的,该框架在网络数据包处理的五个节点(如下表)插入hook函数进而干预ip数据包的转发处理过程。

节点作用
PREROUTING路由判断之前的阶段
INPUT路由判断后如果是自己的则进入该节点
FORWARD路由判断后如果是不是自己的包则进入该节点
OUTPUT上层处理完毕后返回处理结果发出去时经过的节点
POSTROUTINGINPUT和FORWARD都会经过的节点

各节点位置及流程图

关于iptables

iptables是运行在用户空间的用来管理和配置Netfilter的软件。

iptables网站

关于dfwfirewalld

两者是基于iptables或者nftables的管理软件,用于更方便的进行配置管理,具体不同发行版有所差异。

iptables的结构

iptables包含四表五链,每个表包含几种链,关于表和链的更多讲解

四表的优先级为raw–>mangle–>nat–>filter。

raw

包含PREROUTINGPOSTROUTING不常用略去。

mangle

默认五条链都包括,用于修改数据包

filter

用于处理过滤过程,主要包含三条链

  • INPUT 链:过滤所有目标地址是本机的数据包
  • FORWARD 链:过滤所有路过本机的数据包
  • OUTPUT 链:过滤所有由本机产生的数据包

nat

处理网络地址转换,可以进行 Snat(改变数据包的源地址)、Dnat(改变数据包的目标地址)

  • PREROUTING 链:可以在数据包到达防火墙时改变目标地址
  • OUTPUT 链:可以改变本地产生的数据包的目标地址
  • POSTROUTING 链:在数据包离开防火墙时改变数据包的源地址

整体结构

一般处理流程:

  1. 数据包进入的时候,先进 mangle 表的 PREROUTING 链。在这里可以根据需要,改变数据包头内容之后,进入 nat 表的 PREROUTING 链,在这里可以根据需要做 Dnat,也就是目标地址转换。
  2. 进入路由判断,判断是进入本地的还是转发的。
  3. 如果是进入本地的,就进入 INPUT 链,之后按条件过滤限制进入。
  4. 之后进入本机,再进入 OUTPUT 链,按条件过滤限制出去,离开本地。
  5. 如果是转发就进入 FORWARD 链,根据条件过滤限制转发。
  6. 之后进入 POSTROUTING 链,这里可以做 Snat,离开网络接口。

参考资料

1 Compare: Firewalld / Iptables / Nftables / Netfilter


本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!