基于Linux的IPv6复合防火墙的设计

欢迎进入IT技术社区论坛,与200万技术人员互动交流 >>进入

  引言

  IPv6运用AH和ESP对所传输的数据进行认证和加密,保证了数据的机密性、完整性和可靠性,实现了信息在传输过程的安全性。但IPv6并不能保障网络系统本身的安全及其提供的服务的可用性,也不能防止黑客的非法入侵和窃取私有数据。面对IPv6将要广泛的应用,有必要将其和防火墙相结合来保障整个网络系统的安全。

  目前Linux操作系统自2.2内核以来已提供对IPv6的支持,其性能稳定且安全性较高,因此本文以Linux为平台来研究设计针对IPv6的防火墙系统。

  Linux内核对数据包的过滤处理

  netfilter框架机制

  netfilter是linux2.4内核以后实现数据包过滤处理的一个抽象的、通用化的功能框架,它提供了不同于BSD Socket接口的操作网络数据包的机制。在netfilter中,协议栈每种协议都定义了若干个钩子(HOOK),而对应协议的数据包将按照一定的规则通过一些钩子,每一个钩子都是处理函数挂载点。内核模块可以在各个钩子上注册处理函数以操作经过对应钩子的数据包。数据包经过所注册的函数处理后,根据一定的策略返回给内核进行下一步的处理。

  IPv6协议定义了五个钩子:

  (1)NF_IPv6_PRE_ROUTING:数据包在抵达路由之前经过这个钩子。一般应用于防止拒绝服务攻击和NAT。

  (2)NF_IPv6_LOCAL_IN:目的地为本地主机的数据包经过这个钩子,这个钩子可以应用于防火墙。

  (3)NF_IPv6_FORWARD:目的地非本地主机的数据包经过这个钩子。

  (4)NF_IPv6_POST_ROUTING:数据包在离开本地主机之前经过这个钩子,包括源地址为本地主机和非本地主机的数据包。

  (5)NF_IPv6_LOCAL_OUT:本地主机发出的数据包经过这个钩子。这个钩子可以应用于防火墙。如图1所示。

  图1 netfilter框架机制

  数据包从左边进入系统,进行IP校验以后,数据包经过第一个钩子NF_IP6_PRE_ROUTING注册函数进行处理,然后就进入路由代码决定该数据包是需要转发还是发给本机。若该数据包是发给本机的,则该数据经过钩子NF_IP6_LOCAL_IN注册函数的处理以后传递给上层协议。若该数据包应该被转发则它被NF_IP6_FORWARD注册函数处理。经过转发的数据包经过最后一个钩子NF_IP6_POST_ROUTING注册函数的处理以后,再传输到网络上。本地产生的数据经过钩子NF_IP6_LOCAL_OUT注册函数处理以后,进行路由选择处理,然后经过NF_IP6_POST_ROUTING注册函数的处理以后发送到网络上。每个注册函数处理完后,将返回一个整形常量,内核根据这个返回值来对数据包作下一步的处理,现在内核共定义了以下五个常量:

  (1)NF_DROP表示丢弃此数据包,而不进入此后的处理;

  (2)NF_ACCEPT表示接受此数据包,进入下一步的处理;

  (3)NF_STOLEN表示异常分组;

  (4)NF_QUEUE表示排队到用户空间,等待用户处理;

  (5)NF_REPEAT表示再次进入该钩子函数作处理。

  ip6tables数据包过滤系统

  目前,基于Netfilter框架的、称为ip6tables的IPv6数据包选择系统在Linux2.4以上的内核中被应用,它可以让用户访问内核过滤规则和命令。这种数据包选择主要用于实现数据包过滤(filter表)、网络地址转换(nat表)及数据包处理(mangle表)。Linux2.4内核提供的这三种数据包处理功能都基于Netfilter的钩子函数和IP表。它们相互之间是独立的模块,但完美的集成到由Netfilter提供的框架中。

  filter表格不对数据包进行修改,只对数据包进行过滤。它通过钩子函数NF_IP6_LOCAL_IN、NF_IP6_FORWARD及NF_IP6_LOCAL_OUT接入Netfilter框架。NAT表格监听三个Netfilter钩子函数:

  NF_IP6_PRE_ROUTING、NF_IP6_POST_ROUTING及NF_IP6_LOCAL_OUT,用于源NAT、目的NAT、伪装(是源NAT的一个特例)及透明代理(是目的NAT的一个特例)。mangle表格在NF_IP6_PRE_ROUTING和NF_IP6_LOCAL_OUT钩子中进行注册。使用mangle表,可以实现对数据包的修改或给数据包附上一些额外数据。

  ip6tables用户命令基本上包含以下5部分:

  (1)希望工作在哪个表(Filter、NAT、Mangle);

  (2)希望使用⑴所指定的表的哪个链(INPUT、OUTPUT、FORWARD等);

  (3)进行的操作(插入、添加、删除、修改);

  (4)对特定规则的目标动作;

  (5)匹配数据包条件。ip6tables的语法为:

  #ip6tables[-ttable] command [match] [target] [-ttable]有三种可用的表选项:filter、nat和mangle。该选项如果未指定,则filter用作缺省表。filter表用于一般的信息包过滤,它包含INPUT、OUTPUT和FORWARD链。nat表用于要转发的信息包,它包含PREROUTING、OUTPUT和POSTROUTING链。

  PREROUTING链由指定信息包一到达防火墙就改变它们的规则所组成,而POSTROUTING链由指定正当信息包打算离开防火墙时改变它们的规则所组成。如果信息包及其头内进行了任何更改,则使用mangle表。该表包含一些规则来标记用于高级路由的信息包,该表包含PREROUTING和OUTPUT链。

  ip6tables的基本操作(command):-A表示在链尾添加一条规则,-I表示插入一条规则,-D表示删除一条规则,-R表示替代一条规则,-L表示列出所有规则。

  ip6tables基本目标动作(target)(适用于所有的链):ACCEPT表示接收该数据包,DROP表示丢弃该数据包,QUEUE表示排队该数据包到用户空间,RETURN表示返回到前面调用的链,FOOBAR表示用户自定义链。

  ip6tables基本匹配条件(match)(适用于所有的链):-p表示指定协议,-s表示源地址,-d表示目的地址,-i表示数据包输入接口,-o表示数据包输出接口。例如,识别IPv6的网络服务器上的SSH连接时可以使用以下规则:

  #ip6tables-AINPUT-ieth0-ptcp-s3ffe:ffff:100::1/128–dport22-jACCEPT

  当然,还有其他对规则进行操作的命令,如清空链表,设置链缺省策略,添加用户自定义的链等,这里不再详述。

  INPUT、OUTPUT、FORWARD链是ip6tables内置的过滤链,每条链都可定义若干条过滤规则,构成了基本的ip6tables包过滤防火墙,如图2所示。

  图2 ip6tables内置的过滤链表

[1][2]

君子当权积福,小人仗势欺人。

基于Linux的IPv6复合防火墙的设计

相关文章:

你感兴趣的文章:

标签云: