写点什么

Iptables 的基本原理

作者:阿泽🧸
  • 2022 年 7 月 18 日
  • 本文字数:1134 字

    阅读完需:约 4 分钟

Iptables的基本原理

Netfilter 是 Linux 内核提供的一套完善的数据包处理框架,通过一整套的钩子(hook)管理机制,可以实现数据包过滤、网络地址转换以及基于协议类型的连接跟踪等功能,Iptables 是基于 Netfilter 的数据包过滤系统,通过自己设定的规则以及处理动作对数据报文进行检测和处理。


Iptables 分为内核模块和用户态两部分,用户空间的 Iptables 位于/sbin/目录下,是用于设置规则的命令行工具,通过命令行制定相应的规则,指定内核模块进行相应的数据访问控制。链、表和规则是 Iptables 内核处理中非常重要的几个概念。


链也可以称为钩子,是指 Iptables 过滤的时机。Iptables 当前有 PREROUTING、INPUT、FORWARD、OUTPUT 和 POSTROUTE 5 种链,其中 PREROUTING 用于在路由选择前处理数据包,POSTROUTE 用于在路由选择后处理数据包,INPUT 用于处理发送到本机的数据包,OUTPUT 负责处理本机发送出去的数据包,FORWARD 负责对转发数据包进行处理。


针对不同的数据流,有如下 3 种典型的链处理时机。

1)发送给本机的数据包:当数据包从物理层和数据链路层传输过来,如果数据包是访问 Linux 主机本身,则经过 PREROUTING 和 INPUT 钩子函数,到达传输层和应用层。

2)转发数据包:数据包从物理层和数据链路层传输过来,如果数据包需要转发,则经过 PREROUTING、FORWARD 和 POSTROUTE 3 个钩子函数。

3)发送数据包:当数据包从 Linux 主机本身向外发送数据包,要经过 OUTPUT 和 POSTROUTE 两个钩子函数。


表是负责完成某个过滤功能的模块,Iptables 当前有 Filter 表、NAT 表、mangle 表和 raw 表 4 个,它们在内核中对应 4 个不同的模块,这几个模块对应的功能和包含的钩子函数如下。

1)Filter 表:Filter 表是 Iptables 默认的过滤功能,确定是否放行数据包,包含 INPUT、FORWAD 和 OUTPUT 3 个钩子函数。

2)NAT 表:NAT 表负责修改数据包的源 IPPORT 和目的 IPPORT,包含 PREROUTING、OUTPUT 和 POSTROUTE 这几个钩子函数。

3)mangle 表:mangle 表用于对连接进行跟踪,包含 PREROUTING、INPUT、FORWARD、OUTPUT 和 POSTROUTE 5 个钩子函数。

4)raw 表:raw 表用于关闭 NAT 表上开启的连接跟踪功能,包含 PREROUTING、OUTPUT 2 个钩子函数。


综合来说,Iptables、表、链和规则之间是层层包含的关系,Iptables 可以包含多个表,每个表包含多个链,每个链包含多个用于过滤的规则。


  1. Iptables 在 Istio 中的使用

Iptables 负责对 Envoy 的入口和出口流量进行拦截。针对入口流量拦截,假设所有的流量均需要定向到 Envoy 代理,8090 是 Envoy 的监听端口,Iptables 规则如下:

iptables -t nat -A PREROUTING -p tcp -j REDIRECT -to-port 8090
复制代码

针对出口流量拦截,也是类似的思路,Iptables 规则如下:

iptables -t nat -A OUTPUT -p tcp -j REDIRECT -to-port 8090
复制代码

通过 Iptables 拦截转发后,目标端口被改写了,可以通过 SO_ORIGINAL_DST TCP 套接字获取原始的 ipport。

发布于: 刚刚阅读数: 4
用户头像

阿泽🧸

关注

还未添加个人签名 2020.11.12 加入

还未添加个人简介

评论

发布
暂无评论
Iptables的基本原理_iptables_阿泽🧸_InfoQ写作社区