0x00 引言
Linux系统下,防火墙在内核态是使用netfilter实现的,而iptables则是为了方便用户在用户态控制防火墙的规则而产生的。
iptables通过指定规则(源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等),当数据包与规则匹配时做相应处理(放行(accept)、拒绝(reject)和丢弃(drop)等)。
iptables控制数据包传递的总体流程图如下:
NetFilter SDK 是一个对通过网络传输的数据包进行透明过滤的框架,可以理解为是代理。
0x01 IPtables
1 | 1 五链四表 |
1、五链四表
1.1、五链
- 五链 - 数据包从网卡传入,根据其去向必经的五个链条,流程图如下
- PREROUTING - 路由前
- INPUT - 数据包流入口
- FORWARD - 转发管卡
- OUTPUT - 数据包出口
- POSTROUTING - 路由后
- 到本机某进程的报文:PREROUTING –> INPUT
- 由本机转发的报文:PREROUTING –> FORWARD –> POSTROUTING
- 由本机的某进程发出报文(通常为响应报文):OUTPUT –> POSTROUTING
1.2、四表
- 四表 - 每条链下会有很多用户定义的规则,相同功能的规则被分类为一个表,最后形成了一下四表,图以PREROUTING链为例:
- raw - 控制nat表中连接追踪机制的启用状况
- mangle - 修改数据包中的原数据
- nat - 控制数据包中地址转换
- filter - 控制数据包是否允许进出及转发
- 每条链上的规则表有检测的优先级,其优先级排序(由高到低)如下:
- raw –> mangle –> nat –> filter
2、堵通策略
- 堵通策略 - 在数据包匹配了规则后,防火墙需要对数据包做出对应操作,常用策略如下:
- ACCEPT - 允许数据包通过
- DROP - 不允许数据包通过,不给发送者反馈
- REJECT - 不允许数据包通过,给发送者拒绝反馈
0x02 Nftables
nftables 是一个新式的数据包过滤框架,用于取代iptables。其诞生于 2008 年,2013 年底合并到 Linux 内核,从 Linux 内核 3.13 版本开始大多数场景下 nftables 已经可以使用,但是完整的支持(即:nftables 优先级高于 iptables)应该是在 Linux 内核 3.15 版本。
firewalld 是 Red Hat 公司开发的防火墙软件,其默认后端就为 nftables ,同时也兼容 netfilter 。
0x03 NetFilter SDK
windows上驱动负责网络数据捕获,将数据抛到应用层,应用层根据规则过滤、改包,之后应用层通过接口将修改Packet发送至驱动,注入到对应的层从而闭环。
linux则是通过iptables转发数据包到一个代理服务端口,监听处理经过这个端口的数据包。
1 | graph LR |