Linux防火墙扩展技术与入侵检测实现pc软件 文章资讯 手机软件

您当前的位置→图文中心安全防范Linux防火墙扩展技术与入侵检测实现

Linux防火墙扩展技术与入侵检测实现


2009/7/12  编辑:佚名 来源:本站整理  关键词:

Linux防火墙扩展技术与入侵检测实现

 

按照防火墙对内外来往的数据信息的处理方法, 防火墙可以能够分为包过滤防火墙和应用层防火墙, 包过滤防火墙工作就在网络net层, 它只是检测包的协议头对数据信息包来进行裁决, 它运行速度快但再也不能够对高层的协议内容来进行检查, 应用层防火墙则可以能够对高层数据信息来进行转发和过滤并强制身份验证, 但对不同的服务有请求需要提供代理应用程序并且建立了网络net瓶颈;并且将包过滤技术和多种应用技术融合到一起, 构成复合型防火墙是就在目前我们国家内防火墙产品的一个特点, 也是防火墙今后发展的主流技术。

鉴于就在防火墙中整合数据信息包检测功能是一种良好的解决处理方法, 它可以能够弥补现有防火墙的缺点并且具有像入侵检测系统system一样的检测功能, 本文将介绍说明基于Linux netfilter/iptables架构实现机制和扩展技术,就在此基础上提出了扩展匹配选择中项实现防火墙的入侵检测功能, 扩充后的防火墙可以能够像Snort一样具有入侵检测功能, 并且可将Snort规则转化为防火墙规则实现规则集的扩充。

1 Linux防火墙的扩展netfilter/iptables的技术

Linux中防火墙Netfilter/Iptables系统system主要包括两个可以说是组件 :定义就在内核空间中的通用框架Net filter和数据信息包选择中系统system(Packet Selection).其中后者又由两部分构成:就在Net filter框架上定义的数据信息结构“IP表”(IP Tables)和就在用户空间实现的应用程序iptables.具体防火墙工作流程见[1][2]。

由于Net filter架构的加入, 可以能够可以通过不复杂的内核模块化来实现新功能的扩展, 就在现有的Netfilter/Iptables中可以能够可以通过两种方式对现有的防火墙来进行扩充, 一种是扩展Net filter可以通过编写相关内核模块调用nf_register_hook()直接就在相关的钩子上注册从而获得新特性, 一种是扩展IP表可以通过编写相关的匹配标准和目标来实现新特性;扩展IP表方式是对现有表的匹配规则的扩充与具体表无关。 扩展IP表有请求需要编写内核和用户两方的代码, 内核模块提供了实际的数据信息包匹配规则代码, 用户方代码提供了IPTABLE 新的命令行选择中项的共享库。

2 Linux防火墙入侵检测扩展匹配设计design

就在目前入侵检测系统system普遍采用精确的模式匹配算法, 如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功能的名称, 该名称就一定要与模块名相匹配
int (*match)();一个指向MTACH功能函数的指针, 返回非0表示匹配
int (*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软件提供相关的规则就一定要为该软件提供相关的命令行选择中项, 为了使各个扩展模块使用一个版本的iptables软件而不必编写相关扩展的特定软件版本, 采用共享库可以能够解决处理该问题, 共享库应该具有-init()功能, 它的功能和内核模块功能相似, 就在装载时被全自动调用, 该功能根据记录添加的新MATCH和新TARGET不同分别调用register-match()或register-target(), 共享库可以能够提供初始化数据信息结构和提供相关选择中项的功能。

编写共享库中使用的重要数据信息结构是iptables_match, 它作为参数传递给register-match()注册相关的命令行匹配选择中项让iptables识别该新匹配。

Struct iptables_match
{struct iptables_match *next;用于形成一个MATCH列表的指针, 初始化为NULL
ipt_chainlabel name; MATCH功能的名字,
就一定要与库函数名相同便于主程序根据记录MATCH名加载相应的动态连载库
const char *version;版本信息通常被布置设置IPTABLES_version宏
size_t size;该MATCH的数据信息大小
size_t userspacesize;由于内核有可能修改某些域,
就在这里填写被改变数据信息区大小, 它一般和size大小同
void (*help)(void);打印协助选择中项大纲
void (*init)();初始化ipt-entry-match结构
int (*parse)();扫描并接收本MATCH的命令行参数, 对的接受返回非0
void (*final_check)();检查是否强制选择中项(如--ids)被描述, 如果不对的退出
void (*print)();查询当前表中的规则时, 显示使用了当前match规则的额外信息
void (*save)();PARSE的反转, 被iptable-save调用再生match的命令行参数
const struct option *extra_opts;NULL结尾的参数列表, 提供命令行其余选择中项
/*以下参数由iptables内部使用, 用户不必填写*/
Unsigned int option_offset;
Struct ipt_entry_match *m;
Unsigned int mflags;
Unsigned int used;
}

2.3 入侵检测模块的实现

本文介绍说明的功能扩展主要是可以通过IPTABLE命令向防火墙“IP表”添加字符串匹配规则和数据信息包内容相匹配从而实现对数据信息包的检测, 就在内核中有请求需要添加一个ids检测匹配模块, 就在用户空间命令行上有请求需要提供一个 “iptables -m ids –ids “匹配内容””的选择中项。

就在内核模块中主要是实现MATCH指针函数, 就在该函数中使用了字符串的模式匹配算法用于检测数据信息包的内容。 模式匹配是指就在文本Text= tlt2t3...tn中检索子串Pat=P1 P2...pn(模式)的所有出现, 著名的匹配算法有BF算法、KMP算法、BM算法及一些改进算法,基于BM算法的BMH算法 被证明是一种快速、高效的算法, 于是就在设计design时采用该算法。

BMH算法于1980年Horspool提出的, 该算法就在匹配的过程中模式从左向右来进行, 但字符的比较从右向左来进行, 就在发现不匹配时, 算法根据记录预先计算好的skip数组将模式右移, BMH算法就在最坏的情况下复杂度为O(NM), 就在一般情况下比BM有更好的性能,它只使用一个数组, 简化了初始化过程.以下是就在match函数中使用的BMH算法:

Char *ids_match
(char *pattern, char *text, int pattern_len, int text_len)
{
int k, right_end, j, i, *skip; 
K = right_end = pattern _len-1;
for (i = 0; i <1024; i++) skip[i] = pattern_len;//初始化skip数组 
for (i = 0; pattern [i]; i++) skip[pattern [i]] = k - i; //对skip数组来进行修正
While (right_end < text_len){
For (i = 0; i < pattern _len && text [right_end - i] == pattern [k - i]; i++); 
If (i == pattern _len) {
return text+(right_end - k);//返回text匹配的现在开始处
}
right_end = right_end + skip[text [right_end]];
//模式向右移skip[text [right_end]]位
}
Return NULL;
}

检测功能主要由match(const struct sk_buff *skb,const struct net_device *in, const struct net_device *out, const void *match info, int offset, const void *hdr,u_int16_t datalen,int *hotdrop)函数实现, 该函数从缓冲区skb读取网络net数据信息包, 使用match info接受来自用户空间的匹配内容, 从skb中计算出数据信息包的大小tlen, 从match info中获取匹配内容的大小mlen, 如果数据信息包内容为空或mlen>tlen则返回0不能够来进行比较;否则将网络net数据信息包内容和大小tlen、match info中数据信息及大小mlen作为参数调用ids_match来进行匹配, 之后返回匹配结果。

填充用户空间的数据信息结构时, 要保证name与核心对应的Match名相同, 并且为了提供命令行附加选择中项有请求需要填充extra_opts数据信息结构为{"ids",1,0,'1'}, 它表示ids带参数值, 如果出现“—ids “匹配值””就一定会返回’1’用于parse()的参数来对附加信息来进行处理如检查附加选择中项中是否有非(!)号存就在, 从命令行解析得到匹配内容并将其填充到传入到内核模块的数据信息结构中。

2.4 IPTABLE补丁的机制

就在将用户空间和内核空间代码编写完成后, 可以能够直接修改源码并编译安装, 为了标准化和方便, NETFILTER/IPTABLES提供了扩展内核和用户空间的补丁程序:用于内核补丁的patch-o-iptables和就在iptables源码下的extensions目录用于iptables程序本身补丁。

就在patch-o-iptables中提供了一个“runme”脚本来为核心打补丁, 按功能有请求需要的文件程序有五部分 :主程序文件程序、内核配置文件程序补丁、内核配置文件程序协助补丁、runme脚本显示协助信息、内核make file文件程序补丁。 iptables本身的扩展稍微不复杂一些, 那就是就在extensions目录下增加一个libipt_ids.c的文件程序, 之后就在本子目录的Make file的PF_EXT_SLIB宏中附加一个ids字符串。

可以通过补丁或将代码添加进内核后需重新编译内核添加相应的功能模块, 就在用户空间也就一定要重新编译iptables以便提供新的功能选择中项。

2.5 Snort规则转为IPTABLES规则

添加好字符匹配模块后, 就可以能够可以通过IPTABLES定义相应的字符匹配规则从而实现入侵检测功能, 如有些蠕虫病毒的请求中包含了cmd.exe, 可以能够编写如下的规则来对这样的请求来进行丢弃:iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m ids --ids "cmd.exe" 。

这种运行方式和SNORT的检测方式相似, 并且SNORT 的规则及更新速度快可以能够将它的相关规则集转化为就在防火墙中可以能够使用的规则集。 以下是将Snort中用于检测扫描器的规则转换为防火墙规则的实例:

alert icmp 192.168.0.12 any -> 192.168.0.27 any
(msg:"ICMP PING Sniffer Pro/Net Ray network scan";
itype:8; content:"Cinco Network, Inc."; depth:32;
classtype:misc-activity; sid:484; rev:4;)
Iptables –A INPUT -p icmp -s 192.168.0.12 -d 192.168.0.27
--icmp-type 8 -m ids --ids "Cinco Network,
Inc." -j LOG --log-prefix " SID484 "  
# "ICMP PING Sniffer Pro/Net Ray network scan"
classtype:misc-activity sid:484

3 结束语

可以通过实验该防火墙可以能够对常见的蠕虫、探测扫描、病毒等SNORT规则集能匹配的大多数攻击有良好的抵御作用。 由于Netfilter/iptables具有很好的灵活性, 就在该框架上可以能够方便地对防火墙来进行功能扩充。 本文可以通过扩展匹配选择中项实现入侵检测的功能, 弥补了传统的两种类型防火墙不足, 由于检测功能就在内核中保证了检测的响应速度, 可以通过将现有的大量Snort规则转化为相应的防火墙规则可以能够迅速更新规则库及时检测攻击, 同一个时间可以通过该方式也可以能够按照自身有请求需要扩展防火墙功能, 设计design出廉价、安全、实用、易定制的防火墙

相关文章
  • A Sharper Scaling图片放大不失真软件使用方法
  • 解决找不到libXmuu.dll的问题 libXmuu.dll控件常规安装方法
  • flipboard怎么注册 Flipboard注册方法
  • Android中Glide获取缓存大小并清除缓存图片
  • LIGO发表第三个重力波事件
  • NASA科学家协助LIGO实现第三次引力波观测
  • Linux/Unix系统Samba远程代码执行漏洞修复方案
  • LIGO不仅可以探测到引力波,还可以产生引力波
  • iPhone 8很可能继续使用Lightning,为什么?
  • ella曝水中分娩 Selina曝生产过程Ella宫缩全部人都哭疯了
  • 发表评论
    阅读排行
    相关热门
    网站帮助 - 广告合作 - 下载声明 - 网站地图