首页 > 范文大全 > 正文

一种基于双栈的双效防火墙设计

开篇:润墨网以专业的文秘视角,为您筛选了一篇一种基于双栈的双效防火墙设计范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:在IPv6过渡阶段,实现对用户完全透明的过渡将有效带动IPv6的发展进程,由squid实现IPv6孤岛与 IPv4海洋之间通信的同时,结合Linux内核的netfilter/ip6tables数据包过滤防火墙,实现了一种基于IPv4/IPv6双协议栈网络环境下的双效防火墙

关键词:;双栈;防火墙;Netfilter;ip6tables;squid

中图分类号:TP393文献标识码:A文章编号:1009-3044(2009)33-9564-03

Dual-stack Based Firewall Designed for Double-effect

WANG Yi-wu,REN Yu,SHU Hui

(Educational Technology Center, Chengdu Medical College, Chengdu 610083, China)

Abstract: In the IPv6 transition period, it will effectively promote the development of IPv6 to achieve the completely transparent transition to the user.As the communication between IPv6 island and IPv4 ocean come true with squid proxy server, combinated with the netfilter/ip6tables packet filtering firewall of the Linux kernel, has designed a double-effect firewall which based on IPv4/IPv6 dual-stack network environment.

Key words: proxy; dual-stack; firewall; netfilter; ip6tables; squid

IPv6在中国启动以来,通过各高校、研究机构、网络营运商的不懈努力,已经取得了一系列可喜的成果,并且已经在众多高校率先使用,其部分应用如BT、视频点播等凝聚了庞大的忠实用户,让我们对IPv6的发展充满了希望。但是,仔细想想,IPv6仍然只是IPv4海洋中的一个个孤岛,过渡阶段的严峻困难仍然横亘在我们面前:如何解决用户从IPv4到IPv6过渡和衔接的问题?

另外,IPv6虽然从地址分配方案, IPSEC服务等对IPv4协议安全问题有所改善,但是IPSEC对应用层的安全威胁仍无能为力。更替代不了传统的网络安全设备,因终端用户或管理员的原因而出现简单的配置错误需要由防火墙进行弥补。

通过安装有双协议栈的LINUX主机,加载SQUID程序,配合系统自带的NETFILTER/IP6TABLES防火墙,即可架设实现IPv4与IPv6互通的安全网关。

1 应用服务

Squid是目前最常用的软件之一,支持FTP、gopher 和HTTP 协议。从版本2.5开始,squid开始IPv6补丁以支持IPv6,3.0版本后自动支持IPv6。

Squid实现的原理是NAT(Network Address Translation),Squid中的NAT实际上是一个socket替换机制,在配置双栈的主机上,它可替换source socket、destination socket,不论是IPv4还是IPv6,因此,可以利用SNAT和DNAT轻松实现透明,重定向和转发功能。

Squid默认并未开启IPv6,编译安装时须加入--enable-IPv6命令开启IPv6支持。

#./configure--prefix=/var/squid

--sysconfdir=/etc

--enable-arp-acl

--enable-linux-netfilter

--enable-pthreads

--enable-err-language="Simplify_Chinese"

--enable-storeio=ufs,null

--enable-default-err-language="Simplify_Chinese"

--enable-IPv6

同时在访问控制列表中加入如下语句以控制使IPv4和IPv6的数据包通过squid。

acl to_IPv6 dst IPv6

tcp_outgoing_address 1.2.3.4 to_IPv6

tcp_outgoing_address 2001:da8::aaaa to_IPv6

以HTTP服务为例,当IPv4用户访问IPv6的HTTP服务时,会将请求送往squid服务器IPv4地址的3128端口, squid根据配置策略中开放得服务和访问控制列表中的规则来处理该请求。由于请求的是HTTP服务,目的地址是IPv6,squid将通过IPv6地址将该请求转发出去。如果是IPv6用户访问IPv4的HTTP服务,则将请求送往squid服务器IPv6地址的3128端口,通过squid的IPv4地址将该请求转发,如图1所示。

对没有在squid.conf中定义的源地址、目的地址、服务类型,squid默认将对该请求拒绝处理(deny all)。

2 Netfilter/ ip6tables包过滤器

虽然Netfilter/iptables IP信息过滤系统被称为单个实体,但它实际上由两个组件Netfilter和ip6tables组成。Netfilter组件也称内核空间(KernelSpace),ip6talbes被叫做用户空间(UserSpace)。Linux2.4内核中Netfilter是新的用来实现防火墙的过滤器,通过简单的构造一个内核模块可实现网络新特性的扩展。IP6tables是用来指定Netfilter规则的用户工具。

2.1 Netfilter框架

Netfilter框架包括一下三个要点:

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

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

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

图中一共用到5个钩子函数,

1) NF_IP6_PRE_ROUTING :接收进入网络层的数据包,并按要求进行源地址转换;

2) NF_IP6_LOCAL_IN : 进入本地主机的数据包经过改点;

3) NF_IP6_FORWARD :要转发的数据包通过该点;

4) NF_IP6_POST_ROUTING:要出网络设备的数据包,并可按要求进行目的地址转换

5) NF_IP6_LOCAL_OUT:本地主机发出的数据包经过改点。

内核模块可以对一个或多个这样的钩子函数进行注册挂接,并且在数据报经过这些钩子函数时被调用,每个注册函数处理完后,将返回一个整形常量,内核根据这个返回值来对数据包作进一步的处理,内核常量定义如下:

1) NF_ACCEPT继续正常传输数据报;

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

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

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

5) NF_REPEAT再次调用该钩子函数.

2.2 IP6tables组件

IP6tables是一个管理内核包过滤的工具,可以加入、插入或删除核心包过滤表格中的规则。实际上真正来执行这些过滤规则的是Netfilter。

它提供三种类型的规则表(tables),并要求数据报流经指定的规则表。这种数据报选择用来实现数据报过滤(filter表),网络地址转换(nat表)及数据报处理(mangle表)。每个表由内建链(built-in chains)组成.在filter表中维持了3个内建链,分别INPUT、OUTPUT和 FOR-WARD 链、NAT表维持3个内建链:PREROUTING(用于目的NAT)、OUTPUT和 POSTROUTING(用于源NAT),mangle表包含 PREROUTING 和OUTPUT链。

链表中的每个元素都是指向Netfilter中的钩子函数。在相应的钩子点调用钩子函数时,根据协议族和钩子点找到相应的链表入口,用户可以在这三条过滤链表中配置不同的过滤规则,当数据包到达相应的过滤链表时, 系统便逐一检查此数据包是否满足过滤规则条件,如果数据包和设定规则相匹配,则执行该规则,否则执行下一条规则,如果全部都不匹配,则按照缺省规则执行,一般缺省规则为丢弃数据包(DROP)。

根据源地址和目的地址不同,数据包将调用不同的链表,以源和目的均不是本地的数据包为例,数据包将调用如下链表进行转发:

线路---->接口---->mangle. PREROUTING---->nat. PREROUTING----> [routing] ---->mangle. FORWARD---->mangle. POSTROUTING---->nat. POSTROUTING---->接口---->线路---->。

其中,[routing]指本地路由策略。

IP6tables配置命令的基本形式如下:

IP6tables-[AD]chain-name rule-specification

命令中各项参数解释如下:

1) A:添加规则,D:删除规则;

2) Chain-name指INPUT、OUTPUT、FORWARD;

3) Rule-specification指定具体规则内容,可指定协议(-p)、源地址(-s)、目的地址(-d)、数据包进入的网络接口(-i)、数据包输出的网络接口(-o)、源端口(--sport)、目的端口(--dport)、满足规则所执行的动作(包括ACCEPT、DROP、QUEUE、RETURN)。

例如:拒绝IPv6网络上的某网段用户访问445端口可添加如下规则:

#ip6tables -A INPUT -i eth0 -p tcp -s 2001:da8:abcd::/48 --dport 445 -j DROP

3 实现

包过滤防火墙和squid双效合一。由Netfilter/ip6tables对底层通信的协议、端口、ip进行选择,服务器对应用层服务进行过滤,构筑起一道从网络层到应用层的安全屏障。

当数据包进入此双效防火墙,将对该数据包的包头进行检验,查看ip6tables规则中是否和该数据包中的源地址、目的地址、协议、端口相符合,根据规则来决定该数据包的流向。而squid对从ip6tables防火墙转发过来的数据包将通过访问控制列表进一步过滤。

比如,允许源地址为2002:da8::bb的客户机访问目的地址为2000:da8::aa的http服务,可通过squid可通过IP6tables添加规则将请求送往squid监听HTTP服务的3128端口,由squid完成访问,将最终信息返还给用户。

#IP6tables -t nat -A PREROUTING -i eth0 -s 2002:da8::bb/128 -p tcp --dport 80 -j REDIRECT --to-ports 3128(eth0为防火墙主机输入接口)

4 结论

在IPv6过渡阶段,抓住用户是关键,通过IPv4/IPv6双向的方式实现两种协议栈的网络互访,用户无需进行地址转换,也不必重写应用或升级IT基础架构,即可实现应用、服务和数据在IPv4和IPv6环境下的顺利过渡。通过实现IPv4/IPv6互访,对用户来说完全透明,对工作人员来说实现简单,在此基础上架设双栈双效防火墙,实现网络层到应用层的安全保障,在易用性、实用性、安全性、经济性上来说都是不错的选择。

参考文献:

[1] Ellermann U.IPv6 and Firewalls[C]. Proc.of 14th International Congress on Computer and Communications Security Protection,1996.

[2] 王常杰,秦浩,王育民.基于IPV6的防火墙设计[J].计算机学报,24(2).

[3] Moske M.IPv6 Packet Handling in inux2.4[D]. University Mannheim.2002.

[4] 董剑安,王永刚,吴秋峰.iptables防火墙的研究与实现[J].计算机工程与应用,2003(17):161-163.

[5] 范振岐.基于 Linux 的IPv6复合防火墙的设计[J].网络安全技术与使用,2006(2):35-37.

[6] 朱立才,杨寿保,李舜洪.Netfilter/iptables 防火墙性能优化方案与实现[J].计算机工程与应用,2006(15):117-120.