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规则转化为相应的防火墙规则可以迅速更新规则库及时检测攻击,同时通过该方式也可以按照自身需要扩展防火墙功能,设计出廉价、安全、实用、易定制的防火墙。