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

参考资料

  1. A Deep Dive into Iptables and Netfilter Architecture
  2. iptables与netfilter架构
  3. iptables 概念、原理及相关操作介绍

你可能感兴趣的:(iptables介绍)