iptables介绍
iptables是什么
iptables是linux中进行网络规则配置的工具,netfilter工作在内核空间,iptables设置的规则是通过netfilter进行生效的。
下图展示了各个协议栈以及iptables中规则的应用情况
image.png image.png
netfilter hooks
netfilter 提供了 5 个 hook 点。包经过协议栈时会触发内核模块注册在这里的处理函数 。触发哪个 hook 取决于包的方向(是发送还是接收)、包的目的地址、以及包在上一个 hook 点是被丢弃还是拒绝等等。
下面几个 hook 是内核协议栈中已经定义好的:
- NF_IP_PRE_ROUTING: 接收到的包进入协议栈后立即触发此 hook,在进行任何路由判断 (将包发往哪里)之前
- NF_IP_LOCAL_IN: 接收到的包经过路由判断,如果目的是本机,将触发此 hook
- NF_IP_FORWARD: 接收到的包经过路由判断,如果目的是其他机器,将触发此 hook
- NF_IP_LOCAL_OUT: 本机产生的准备发送的包,在进入协议栈后立即触发此 hook
- NF_IP_POST_ROUTING: 本机产生的准备发送的包或者转发的包,在经过路由判断之后, 将触发此 hook
iptables基础概念
iptables 表
先来看看 iptables 提供的 table 类型。这些 table 是按规则类型区分的。
Filter Table
filter table 是最常用的 table 之一,用于判断是否允许一个包通过。
在防火墙领域,这通常称作“过滤”包(”filtering” packets)。这个 table 提供了防火墙 的一些常见功能。
NAT Table
nat table 用于实现网络地址转换规则。
当包进入协议栈的时候,这些规则决定是否以及如何修改包的源/目的地址,以改变包被 路由时的行为。nat table 通常用于将包路由到无法直接访问的网络。
Mangle Table
mangle (修正)table 用于修改包的 IP 头。
例如,可以修改包的 TTL,增加或减少包可以经过的跳数。
这个 table 还可以对包打只在内核内有效的“标记”(internal kernel “mark”),后 续的 table 或工具处理的时候可以用到这些标记。标记不会修改包本身,只是在包的内核 表示上做标记。
Raw Table
iptables 防火墙是有状态的:对每个包进行判断的时候是依赖已经判断过的包。
建立在 netfilter 之上的连接跟踪(connection tracking)特性使得 iptables 将包 看作已有的连接或会话的一部分,而不是一个由独立、不相关的包组成的流。连接跟踪逻 辑在包到达网络接口之后很快就应用了。
raw table 定义的功能非常有限,其唯一目的就是提供一个让包绕过连接跟踪的框架。
Security Table
security table 的作用是给包打上 SELinux 标记,以此影响 SELinux 或其他可以解读 SELinux 安全上下文的系统处理包的行为。这些标记可以基于单个包,也可以基于连接。
iptables 规则(链)
对于各个具体的链而言:
- INPUT 链:处理来自外部的数据。
- OUTPUT 链:处理向外发送的数据。
- FORWARD 链:数据转发。通过路由表后发现目的地址非本机,则匹配该链中的规则。
- PREROUTING 链:处理刚到达本机并在路由转发前的数据包。
- POSTROUTING 链: 处理即将离开本机的数据包。
iptables 常用命令
iptables -t filter -L