iptables笔记
几个概念
关于Netfilter
首先防火墙的实现是基于Linux内核中的Netfilter
模块的,该框架在网络数据包处理的五个节点(如下表)插入hook函数进而干预ip数据包的转发处理过程。
节点 | 作用 |
---|---|
PREROUTING | 路由判断之前的阶段 |
INPUT | 路由判断后如果是自己的则进入该节点 |
FORWARD | 路由判断后如果是不是自己的包则进入该节点 |
OUTPUT | 上层处理完毕后返回处理结果发出去时经过的节点 |
POSTROUTING | INPUT和FORWARD都会经过的节点 |
关于iptables
iptables
是运行在用户空间的用来管理和配置Netfilter
的软件。
关于dfw
和firewalld
两者是基于iptables或者nftables的管理软件,用于更方便的进行配置管理,具体不同发行版有所差异。
iptables的结构
iptables包含四表五链,每个表包含几种链,关于表和链的更多讲解。
四表的优先级为raw–>mangle–>nat–>filter。
raw
包含PREROUTING
和POSTROUTING
不常用略去。
mangle
默认五条链都包括,用于修改数据包
filter
用于处理过滤过程,主要包含三条链
- INPUT 链:过滤所有目标地址是本机的数据包
- FORWARD 链:过滤所有路过本机的数据包
- OUTPUT 链:过滤所有由本机产生的数据包
nat
处理网络地址转换,可以进行 Snat(改变数据包的源地址)、Dnat(改变数据包的目标地址)
- PREROUTING 链:可以在数据包到达防火墙时改变目标地址
- OUTPUT 链:可以改变本地产生的数据包的目标地址
- POSTROUTING 链:在数据包离开防火墙时改变数据包的源地址
一般处理流程:
- 数据包进入的时候,先进 mangle 表的 PREROUTING 链。在这里可以根据需要,改变数据包头内容之后,进入 nat 表的 PREROUTING 链,在这里可以根据需要做 Dnat,也就是目标地址转换。
- 进入路由判断,判断是进入本地的还是转发的。
- 如果是进入本地的,就进入 INPUT 链,之后按条件过滤限制进入。
- 之后进入本机,再进入 OUTPUT 链,按条件过滤限制出去,离开本地。
- 如果是转发就进入 FORWARD 链,根据条件过滤限制转发。
- 之后进入 POSTROUTING 链,这里可以做 Snat,离开网络接口。
参考资料
iptables笔记
https://blog.yrpang.com/posts/44305/