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

2016-01-29 19:50 5 1 收藏

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

【 tulaoshi.com - Linux 】

  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 再次调用该钩子函数

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/linux/)

  一个基于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字段。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/linux/)

  源码分析

  如果我们想加入自己的代码,便要用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_hoo

来源:http://www.tulaoshi.com/n/20160129/1510209.html

延伸阅读
标签: 电脑入门
系统防火墙能够保障我们的电脑免受黑客的攻击,对系统的安全是十分重要的,但有时因为某些程序的运行需要关闭防火墙,那么要如何手动关闭防火墙呢?下面图老师小编就给大家介绍下Linux手动关闭防火墙的方法。 所谓防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障。是一种获取...
第一步:在电脑主页打开我的电脑,进入我的电脑后,在左边菜单里找到控制面板。打开。 第二步:进入控制面板之后,我们在里面找到安全中心,点击打开安全中心。 第三步:打开之后,我们就可以看到安全基础,在里面找到防火墙,双击。出现一个师傅关闭防火墙,点击是。 第四步:然后会进入防火墙设置,会弹出一个提...
  一:双击打开我的电脑,选择控制面板。     二:在控制面板中,点击安全中心。     三:在打开的安全选项中,点击windows防火墙。     四:在弹出的windows防火墙中选...
  一次在网上闲逛,突然看到论坛有一条消息说有一种方法,可以让已经关闭的Linux机器继续运行ipchains,并且让这台机器继续实现防火墙的功能。当时我的第一反映是不屑一顾,难道一个防火墙还可以在关机的状态下工作?依照论坛中所指的链接,我找到了一个帖子,上面说在2.0.x内核中,使用Shutdown ?h(关机)命令可以使防火墙仍处于激活...
随着网络的高速发整,现在使用防火墙的企业越来越多,产品也越来越多,但可能很多人还不了解防火墙,到底能干什么。下面我就简单的说说软件防火墙到底能干些什么吧。 什么是软件防火墙? 顾名思义,软件防火墙就是像office 等,是一个安装在PC上(当然,这里是指可以在PC上安装,但具体使用的时候最好用服务器),的一个软件,而且一般...

经验教程

361

收藏

30
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部