Linux中国  设为主页
 收藏本站
 
当前位置: > 首页 ->Linux技术 ->Linux安全 ->LINUX2.4.x网络安全框架
  相关分类: 
入门与提高
系统管理
网络应用
嵌入式系统
内核研究
服务器相关
发行版专区
Linux程序设计
Linux安全
BSD相关
桌面应用
  站内搜索: 
热门文章排行
热门文章排行 linux环境变量设置及保存地点 (04-22)
Apache 门户项目组介绍 (04-22)
黑客高级技巧 Linux后门技术及实践 (05-01)
安全多方位 Linux系统守护进程详解 (04-20)
UNIX 高手的10 个习惯 (04-22)
精采文章排行
精采文章排行 黑客高级技巧 Linux后门技术及实践 (05-01)
IP安全加密 IPSec安全技术全面接触 (05-01)
LINUX2.4.x网络安全框架 (04-26)
分级防御对Linux服务器的攻击 (04-26)
基于Linux开发的FireboxⅡFastVPN (04-26)
  ·黑客高级技巧 Linux后门技术及实践 ·LINUX2.4.x网络安全框架 ·分级防御对Linux服务器的攻击 ·基于Linux开发的FireboxⅡFastVPN ·十项Linux安全管理技巧经验总结 ·高级Linux安全管理技巧 ·发现Linux压缩格式漏洞 达第二最危险级别·Unix和Linux下的Acrobat Reader 5受攻击 ·Linux操作系统下防垃圾邮件基本功

LINUX2.4.x网络安全框架

作者:Webmaster   来源:中联绿盟    点击:   日期:2007-04-26 [收藏] [投稿]

  IE是否经常中毒?推荐您

3. iptables

iptables实现对规则的管理和访问。它里面有几个重要的数据结构ipt_entry,ipt_match,ipt_target,ipt_table,用于构造规则表。还有一个重要的函数ipt_do_table,用于遍历规则表并处理规则表上的结构。

ipt_entry是规则的数据结构,如下:

struct ipt_entry
{
            struct ipt_ip ip;
            unsigned int nfcache;
            u_int16_t target_offset;    /* target在规则中的偏移 */
            u_int16_t next_offset;      /* 下一条规则的偏移 */
            unsigned int comefrom;
            struct ipt_counters counters;    /* 匹配规则的数据包的统计计数 */
            unsigned char elems[0];
};

在ipt_entry中ipt_ip是一个基本的match,它是固定的,用于匹配数据包的源地址/源端口、目的地址/目的端口、协议等。其他的match按需要添加,个数并不固定,所以在ipt_entry有一个变长的字符数组保存规则中match的指针,这些指针指向系统中注册的match。每个规则有一个target,决定数据包完全匹配规则后怎样处理这个数据包,它也是一个指向系统注册的target的指针,并且也放在前面提到的变长字符数组中。ipt_entry中的target_offset是target在规则中的偏移,偏移是从规则的起始地址到target所在位置的长度,还有一个变量next_offset指示下一条规则偏移,它其实就是本条规则的长度。

前面提到在iptables中沿用了LINUX2.2.x中的chain和rule的概念,那么在ipt_entry中如何区分chain和rule的哪?

我们知道chain是某个检查点上检查的规则的集合。除了默认的chain外,还可以创建新的chain。在iptables中,同一个chain里的规则是连续存放的。默认的chain的最后一条规则的target是chain的policy。用户创建的chain的最后一条规则的target的调用返回值是NF_RETURN,遍历过程将返回原来的chain。规则中的target也可以指定跳转到某个用户创建的chain上,这时它的target是ipt_stardard_target,并且这个target的verdict值大于0。如果在用户创建的chain上没有找到匹配的规则,遍历过程将返回到原来chain的下一条规则上。

ipt_match用于匹配数据包的参数,如TCP数据包中的标志位,ICMP协议中的类型等,每个match所感兴趣的参数都不一样,所以一条规则可能有多个match。ipt_target决定在数据包完全匹配规则后应做什么样的处理。这两个在使用之间都必须先注册到系统的链表中才能被规则引用。对这两个数据结构不做过多分析,读者可以自行参考源代码。

ipt_table是规则表的数据结构,如下:

struct ipt_table
{
            struct list_head list;
            char name[IPT_TABLE_MAXNAMELEN];
            struct ipt_replace table;            /* 用户空间传递的规则表 */
            unsigned int valid_hooks;          /* 有效的检查点置位*/
            rwlock_t lock;
            struct ipt_table_info private;      /* 规则表在内核中的存储结构 */
            struct module *me;
};

在ipt_table中,ipt_replace是用户空间配置程序传递给内核的规则表,这个规则表不能直接使用,必须先根据它里面包含的match和target的名称将match和target转换成在内核注册的match和target的指针,还有一项重要的工作是检查规则表中是否有循环,如果有循环,要给用户空间的配置程序报告错误。转换之后的规则表存储在ipt_table_info中。valid_hooks指示与这个表相关的检查点,并把相应的位置为1。一个table中可以有多个chain,chain分为系统默认的chain(与table注册的检查点对应)和用户创建的chain。所有的table都注册放在一个链表中,而chain和rule则用偏移值next_offset连接成一个单向链表。用户空间的配置工具在添加、删除规则之前先把内核中的规则表取到用户空间,然后在用户空间做添加或删除的动作,然后再将修改过的规则表传递到内核空间,由内核空间的函数完成后续的转换和检查。

函数ipt_do_table遍历table上的规则,其实这个函数的指针就保存在nf_hook_ops结构中,并在检查点上被调用。调用这个函数时须指定它遍历的table的指针和调用它的检查点的值。检查点的值用来定位table中默认chain的位置,前面我们提到,默认的chain是和检查点对应的,在检查点上检查对应chain的规则。遍历规则,如果找到匹配的规则,则调用这条规则的target中定义的函数,并将它的返回值返回给调用ipt_do_table的函数,如果没有找到匹配的规则,则调用默认chain上最后一条规则的target定义的函数,这个函数的返回值就是这个chain的policy。

4. nf_sockopt_ops

前面提到LINUX2.4.x网络安全框架支持多种协议。规则的配置和查询通过系统调用get/setsockopt完成。在调用这两个系统调用时,不同协议使用的参数不同,所以每个实现网络安全功能的协议栈都定义了自己的nf_sockopt_ops结构并把它注册系统的链表中。在调用get/setsockopt时根据不同的参数决定引用哪一个nf_sockopt_ops来完成真正的工作。

5.网络安全功能点的实现

在LINUX2.4.x中实现网络安全的功能点需要做以下几件事情:一是定义nf_hook_ops结构,并将它注册到netfilter中;二是定义iptable,match,target结构,并将它注册到iptables中,如果需要还须注册nf_sockopt_ops结构以便处理特殊的get/setsockopt参数。下图就是IPV4中的功能点注册到netfilter中的nf_hook_ops结构:

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<

上一页 1 23 下一页

上一篇:分级防御对Linux服务器的攻击   下一篇:黑客高级技巧 Linux后门技术及实践
文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论

   相关文章:
·IP安全加密 IPSec安全技术全面接触

   文章评论:(1条)
  
 请留名: 匿名评论   点击查看所有评论 论坛讨论
 

 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。