• 欢迎光临
Linux系统中防火墙的框架分析
  站点:
  • 首 页
  • 全部更新
  • 资讯更新
  • 国产类别
  • 国外类别
  • 汉化工具
  • 教程下载
  • 字体下载
  • 网络工具
  • 系统工具
  • 应用工具
  • 联络聊天
  • 媒体工具
  • 图形图像
  • 行业类别
  • 教育教学
  • 安全相关
  • 游戏
  • 编程
我们 [D9下载网] 是一个非常干净的下载网,如果您觉得不错,请介绍给需要的朋友,谢谢!
返回资讯首页 >> 组网教程 >> Linux系统中防火墙的框架分析

Linux系统中防火墙的框架分析

 

加入时间: 2008-10-10 14:57:45  作者: 不详  阅读次数:6   来源: 天极网

       

  Netfilter提供了一个抽象、通用化的框架,该框架定义的一个子功能的实现就是包过滤子系统。Netfilter框架包含以下五部分:

  1. 为每种网络协议(IPv4、IPv6等)定义一套钩子函数(IPv4定义了5个钩子函数), 这些钩子函数在数据报流过协议栈的几个关键点被调用。在这几个点中,协议栈将把数据报及钩子函数标号作为参数调用netfilter框架。

  2. 内核的任何模块可以对每种协议的一个或多个钩子进行注册,实现挂接,这样当某个数据包被传递给netfilter框架时,内核能检测是否有任何模块对该协议和钩子函数进行了注册。若注册了,则调用该模块的注册时使用的回调函数,这样这些模块就有机会检查(可能还会修改)该数据包、丢弃该数据包及指示netfilter将该数据包传入用户空间的队列。

  3 .那些排队的数据包是被传递给用户空间的异步地进行处理。一个用户进程能检查数据包,修改数据包,甚至可以重新将该数据包通过离开内核的同一个钩子函数中注入到内核中。

  4. 任何在ip层要被抛弃的ip数据包在真正抛弃之前都要进行检查。例如允许模块检查ip-spoofed包(被路由抛弃)。

  5.IP层的五个HOOK点的位置如下所示 :

  1. NF_IP_PRE_ROUTING:刚刚进入网络层的数据包通过此点(刚刚进行完版本号,校验 和等检测), 源地址转换在此点进行;ip_input.c中IP_rcv调用。

  2. NF_IP_LOCAL_IN:经路由查找后,送往本机的通过此检查点,INPUT包过滤在此点进行;ip_local_deliver中调用

  3. NF_IP_FORWARD:要转发的包通过此检测点,FORWORD包过滤在此点进行;

  4. NF_IP_POST_ROUTING:所有马上便要通过网络设备出去的包通过此检测点,内置的目的地址转换功能(包括地址伪装)在此点进行;

  5. NF_IP_LOCAL_OUT:本机进程发出的包通过此检测点,OUTPUT包过滤在此点进行。

  这些点是已经在内核中定义好的,内核模块能够注册在这些HOOK点进行的处理,可使用nf_register_hook函数指定。在数据报经过这些钩子函数时被调用,从而模块可以修改这些数据报,并向netfilter返回如下值:

  NF_ACCEPT 继续正常传输数据报

  NF_DROP 丢弃该数据报,不再传输

  NF_STOLEN 模块接管该数据报,不要继续传输该数据报

  NF_QUEUE 对该数据报进行排队(通常用于将数据报给用户空间的进程进行处理)

  NF_REPEAT 再次调用该钩子函数

  一个基于Netfilter框架的、称为iptables的数据报选择系统在Linux2.4内核中被应用,其实它就是ipchains的后继工具,但却有更强的可扩展性。内核模块可以注册一个新的规则表(table),并要求数据报流经指定的规则表。这种数据报选择用于实现数据报过滤(filter表),网络地址转换(Nat表)及数据报处理(mangle表)。 Linux2.4内核提供的这三种数据报处理功能都基于netfilter的钩子函数和IP表。它们是独立的模块,相互之间是独立的。它们都完美的集成到由Netfileter提供的框架中。

  包过滤

  filter表格不会对数据报进行修改,而只对数据报进行过滤。iptables优于ipchains的一个方面就是它更为小巧和快速。它是通过钩子函数NF_IP_LOCAL_IN, NF_IP_FORWARD及NF_IP_LOCAL_OUT接入netfilter框架的。因此对于任何一个数 据报只有一个地方对其进行过滤。这相对ipchains来说是一个巨大的改进,因为在ipchains中一个被转发的数据报会遍历三条链。

  NAT

  NAT表格监听三个Netfilter钩子函数:NF_IP_PRE_ROUTING、NF_IP_POST_ROUTING及NF_IP_LOCAL_OUT。 NF_IP_PRE_ROUTING实现对需要转发的数据报的源地址进行地址转换而NF_IP_POST_ROUTING则对需要转发的数据包的目的地址进行地址转换。对于本地数据报的目的地址的转换则由NF_IP_LOCAL_OUT来实现。NAT表格不同于filter表格,因为只有新连接的第一个数据报将遍历表格,而随后的数据报将根据第一个数据报的结果进行同样的转换处理。NAT表格被用在源NAT,目的NAT,伪装(其是源NAT的一个特例)及透明代理(其是目的NAT的一个特例)。

  数据报处理(Packet mangling)

  mangle表格在NF_IP_PRE_ROUTING和NF_IP_LOCAL_OUT钩子中进行注册。使用 mangle表,可以实现对数据报的修改或给数据报附上一些带外数据。当前mangle表支持修改TOS位及设置skb的nfmard字段。
  源码分析

  如果我们想加入自己的代码,便要用nf_register_hook函数,其函数原型为:

  int nf_register_hook(struct nf_hook_ops *reg)

  struct nf_hook_ops

  {

  struct list_head list;

  /* User fills in from here down. */

  nf_hookfn *hook;

  int pf;

  int hooknum;

  /* Hooks are ordered in ascending priority. */

  int priority;

  };

  我们的工作便是生成一个struct nf_hook_ops结构的实例,并用nf_register_hook将其HOOK上。其中list项我们总要初始化为{NULL,NULL};由于一般在IP层工作,pf总是PF_INET;hooknum就是我们选择的HOOK点;一个HOOK点可能挂多个处理函数,谁先谁后,便要看优先级,即priority的指定了。netfilter_ipv4.h中用一个枚举类型指定了内置的处理函数的优先级:

  enum nf_ip_hook_priorities {

  NF_IP_PRI_FIRST = INT_MIN,

  NF_IP_PRI_CONNTRACK = -200,

  NF_IP_PRI_MANGLE = -150,

  NF_IP_PRI_NAT_DST = -100,

  NF_IP_PRI_FILTER = 0,

  NF_IP_PRI_NAT_SRC = 100,

  NF_IP_PRI_LAST = INT_MAX,

  };

  hook是提供的处理函数,也就是我们的主要工作,其原型为:

  unsigned int nf_hookfn(unsigned int hooknum,

  struct sk_buff **skb,

  const struct net_device *in,

  const struct net_device *out,

  int (*okfn)(struct sk_buff *));

  它的五个参数将由NFHOOK宏传进去。

  nf_register_hook根据reg中注册的协议簇类型和优先级在nf_hooks中找到相应的位置并插入到此表中。struct list_head nf_hooks[NPROTO][NF_MAX_HOOKS]在netfilter初始化时(netfilter_init/netfilter.c,而它在sock_init时调用)已经初始为一个空表。

  例如iptable在初始化时(init/iptable_filter.c)调用nf_register_hook注册他的hook函数。

  static struct nf_hook_ops ipt_ops[]

  = { { { NULL, NULL }, ipt_hook, PF_INET, NF_IP_LOCAL_IN, NF_IP_PRI_FILTER },

  { { NULL, NULL }, ipt_hook, PF_INET, NF_IP_FORWARD, NF_IP_PRI_FILTER },

  { { NULL, NULL }, ipt_local_out_hook, PF_INET, NF_IP_LOCAL_OUT,

  NF_IP_PRI_FILTER }

  };

  mangle在init/iptable_mangle.c中注册它自己的hook函数。

  static struct nf_hook_ops ipt_ops[]

  = { { { NULL, NULL }, ipt_hook, PF_INET, NF_IP_PRE_ROUTING, NF_IP_PRI_MANGLE },

  { { NULL, NULL }, ipt_local_out_hook, PF_INET, NF_IP_LOCAL_OUT,

  NF_IP_PRI_MANGLE }

  };

  NAT在init/ip_nat_standalone.c中注册它自己的hook函数

  /*包过滤前,更改目的地址*/

  static struct nf_hook_ops ip_nat_in_ops

 

上下文章:

 

上一篇: RedHat打造高效的代理服务器 下一篇: 电力线也可以玩宽带上网

相关软件:

  • JSeeIII数码相片处理系统 0.2.0.1018 绿色版
  • 光华系统漏洞修护工具 Bulid V1201 绿色版
  • Glary Utilities (系统工具集合) V2.9.0.518 绿色中文版
  • 万和会员积分管理系统 V5.1 单机版
  • 衡水无纸化考试系统 V8.7 绿色版
  • 飞扬系统DIY工具 V1.2 绿色版

相关文章:

  • Windows XP系统中Net User命令的另类用法
  • Windows XP操作系统镜像文件减肥实战
  • 教你如何找回Win XP系统工具栏中的文件夹选项
  • Windows XP操作系统十六招超级应用技巧
  • 在Windows98/XP双系统中安全删除XP

 

 

文章分类分类目录

  • IT报道
  • 操作系统
  • 软件学堂
  • 组网教程
  • 服务器类
  • 设计学类
  • 网页学院
  • 数据库类
  • 编程学院
  • 游戏快讯
  • 手机数码
  • 奇闻趣图

文章阅读推荐

  • 在这讲解下:ADSL故障的排解方法与...
  • 经验之谈:如何排除局域网故障
  • 轻松管理维护学校网络机房及网吧
  • 推荐:中小学校园网方案
  • 实例:代理服务器架设与维护
  • 在WIN2000下共享ADSL的办法
  • 优秀网管心得三则
  • 玩转网卡MAC地址
  • 机房共享上网应用全接触
  • 局域网“NAT”服务器组建全攻略

组网教程热门文章

  • 详解:网线的制作方法与网线关联知...
  • 无线网卡轻松DIY安装
  • 玩转网卡MAC地址
  • 使用双网卡服务器进行宽带共享
  • 快速切换笔记本Win2K网络配置
  • 映射网络驱动器的使用
  • 家庭无线网络设置指南
  • 利用Windows自带ICS功能共享上网
  • 解说:FTP命令格式完全详细
  • 命令行方式安装DHCP服务器

文章阅读TOP排行

  • Photoshop结合数位板打造古典美女
  • 如何用Photoshop清晰化处理数码照...
  • 打造windows XP/2003万能GHOST
  • 详解:网线的制作方法与网线关联知...
  • 教你如何用Photoshop达出素描画像...
  • Photoshop:10则小技巧
  • Photoshop 通道应用系列2:通道就...
  • 无线网卡轻松DIY安装
  • 腾讯最早准确预测主火炬手名单
  • 美术基础图解:素描、笔触与色彩

广告位置

字母引索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 返回顶部

关于我们 | 联系我们 | 下载声明 | 下载帮助 | 网站地图 | 友情连接

Copyright© 2008 D9down.com D9下载网 版权所有