基于Netfilter的Linux内核数据包处理
安全研究
6年前
6.51K
基于Netfilter的Linux内核数据包处理已关闭评论
14
一、Netfilter介绍
Netfilter是Linux操作系统核心层内部的一个数据包处理框架,可以在Linux内核中过滤、修改和封装数据包,Netfilter在IP报文处理流程中插入5个挂载点来,可以在挂载点注册处理数据包的回调函数,当数据包进入Linux内核经过挂载点的时候,会执行回调函数来处理数据包。
二、Netfilter挂载点示意图
- NF_IP_PRE_ROUTING 在数据包校验之后路由选择之前
- NF_IP_LOCAL_IN 在路由选择之后,数据包的目的是本机
- NF_IP_FORWARD 目的地是其它主机地数据包
- NF_IP_LOCAL_OUT 本机数据包其离开本机的过程中
- NF_IP_POST_ROUTING 在数据包离开本地主机之前
注册到挂载点的回调函数,可以获取完整的数据包,对数据包进行操作,回调函数需要一个返回值三、回调函数返回值
- NF_ACCEPT 继续正常的报文处理;
- NF_DROP 将报文丢弃;
- NF_STOLEN 由钩子函数处理了该报文,不要再继续传送;
- NF_QUEUE 将报文入队,通常交由用户程序处理;
- NF_REPEAT 再次调用该钩子函数。
三、基本操作
1、在Linux内核中利用Netfilter解析数据包,自适应多层VLan和PPPoe网络环境;
2、对特定DNS域名的请求数据包进行过滤;
3、解析IP层数据头部
4、对特定端口的数据包进行过滤;
5、解析HTTP请求和返回数据包,对特定Host、URI、文件下载的数据包进行过滤;
6、在以太网环境中,对数据包进行处理
7、在网桥环境中,对经过网桥的数据包进行解析;