鉴于在防火墙中整合数据包检测功能是种良好解决思路方法它可以弥补现有防火墙缺点并且具有像入侵检测系统样检测功能本文将介绍基于Linux netfilter/iptables架构实现机制和扩展技术,在此基础上提出了扩展匹配选项实现防火墙入侵检测功能扩充后防火墙可以像Snort样具有入侵检测功能并且可将Snort规则转化为防火墙规则实现规则集扩充
1 Linux防火墙扩展netfilter/iptables技术
Linux中防火墙Netfilter/Iptables系统主要包括两个基本组件 :定义在内核空间中通用框架Net filter和数据包选择系统(Packet Selection).其中后者又由两部分构成:在Net filter框架上定义数据结构“IP表”(IP Tables)和在用户空间实现应用iptables.具体防火墙工作流程见[1][2]
由于Net filter架构加入可以通过简单内核模块化来实现新功能扩展在现有Netfilter/Iptables中可以通过两种方式对现有防火墙进行扩充种是扩展Net filter通过编写相关内核模块nf_register_hook直接在相关钩子上注册从而获得新特性种是扩展IP表通过编写相关匹配标准和目标来实现新特性;扩展IP表方式是对现有表匹配规则扩充和具体表无关扩展IP表需要编写内核和用户两方代码内核模块提供了实际数据包匹配规则代码用户方代码提供了IPTABLE 新命令行选项共享库99aaf1786dO9xzDD
2 Linux防火墙入侵检测扩展匹配设计
目前入侵检测系统普遍采用精确模式匹配算法如Snort采用基于规则方式对数据包进行规则匹配来检测多种区别入侵行为和探测活动这种方式简单而有效因此可以借鉴这种思想在防火墙匹配选项中加入匹配选项来检测数据包中内容由于扩展IP表具有很好地灵活性为此可以选用这种方式扩充匹配标准来实现入侵检测模块
这种方式需要编写内核和用户空间代码Netfilter/Iptables标准化提供了两方使用重要数据结构在实现这两部分代码时主要是填充相应数据结构内容然后将它们注册从而扩展功能
2.1 内核模块数据结构
新MATCH功能可作为个独立模块为了能使新模块能被别模块使用可以使用iptable提供ipt-register-match将该模块进行注册新MATCH模块核心是ipt-match结构它将作为ipt-register-match参数注册到MATCH链表中备用从而增加新规则匹配选项
Struct ipt_match
{struct list_head list;般设定为{NULL,NULL}由核心使用
const char name;MTACH功能名称该名称必须和模块名相匹配
(*match);个指向MTACH功能指针返回非0表示匹配
(*check entry);个指向检查规则规范标准指针如果返回0规则不会加入iptables
void (*destroy); 当个使用该MATCH入口被删除时该以释放所占资源
struct module me 是否是模块定义是模块设置为THIS_MODULE 否则NULL}
在该数据结构中重要是match check entry MATCH将实现接收从底层传来数据包检查数据包实现匹配功能如果数据包和所定义规则相同那么返回TRUE如果不成功返回FALSE并且可以设置参数表示数据包可以被立即被丢弃Check entry指向个检查规则规范标准指针如果返回0表明这条规则不能从用户空间接受
2.2用户空间数据结构
在内核中加入相关内核模块选项后为了在用户空间使用iptables软件Software提供相关规则必须为该软件Software提供相关命令行选项为了使各个扩展模块使用个版本iptables软件Software而不必编写相关扩展特定软件Software版本采用共享库
最新评论