论文部分内容阅读
摘要:本文首先分析了隧道机制本身容易引起地址欺骗攻击,而当前防火墙往往无法抵御这样的网络攻击,针对这样的缺陷,笔者通过改进netfilter机制实现了适用于过渡网络的防火墙功能。同时采用GIMP Toolkit+2.0(GTK+2.0)设计了针对该防火墙的图形界面,从而能方便地配置IPv4或IPv6防火墙过滤规则。最后利用隧道机制搭建过渡网络环境进行防火墙功能测试,验证了方案的有效性。
关键词:隧道;netfilter;GTK;防火墙
中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)18-31536-01
Implementation of Graphic Firewall under Tunneling Mechanisms
DAI Xiao-miao,LIU Ying,ZHANG Si-dong
(School of Electronics and Information Engineering,Beijing Jiaotong University,Beijing 100044,China)
Abstract:Tunneling mechanisms may introduce spoofing attack which today firewalls can not stand against.In order to solve such a problem,authors implement a firewall suitable for networks during the period of IPv4/IPv6 transition by improving netfilter.Then authors design a graphical interface of firewall during this period with GIMP Toolkit+2.0 (GTK+2.0),thus conveniently setting filtering rules for users. Lastly,the solution is tested whether it is effective in the transitional environment.
Key words: tunneling;netfilter;GTK;firewall
目前接入IPv6网络的方式主要是隧道机制和双协议栈机制,其中隧道机制是将IPv6的分组封装到IPv4的分组中,封装后的IPv4分组源地址和目的地址分别是隧道入口和出口的IPv4地址,并将报头的“协议”字段设置为41,表明该分组的负载是一个IPv6分组。在隧道的出口处,再将IPv6分组解封并转发到目的地。由于IPv6分组隐藏在IPv4报头之后,而当前防火墙又无法识别隐藏着的IPv6分组是否非法,因此往往无法抵御类似的地址欺骗攻击,严重地影响了网络性能。基于这样的安全需求,本文设计的防火墙不仅能够识别“协议”字段为41的数据包,而且能根据封装在IPv4分组的IPv6分组信息对数据包进行过滤,此外本文还开发了相应的图形界面,方便了用户操作。
1 防火墙功能分析与实现
Linux提供了一个防火墙工具——Netfilter/iptables,其中Netfilter是一个结构化的防火墙底层架构,而Iptables是Netfilter的用户态接口管理工具,此外,ip6tables是应用在IPv6环境下的相应工具。在基于双栈机制的过渡网络中,这样的防火墙已经起到不错的保护作用。
但是,由于隧道机制是在隧道出口把隧道包解封成IPv6数据包的,而我们的防火墙是应用在隧道两端之间、以透明网桥的方式工作的,所以当数据包经过防火墙的时候,防火墙不能看到IPv4报头后的IPv6分组,因此基于IPv6的防火墙功能也起不了作用。在应用隧道机制接入的过渡网络中,这样的防火墙是无法保证网络安全的。
本文的设计思想就是当接收到IPv4数据包时,设置在NF_IP_FORWARD这个点的钩子函数首先根据数据包的协议字段来判断该包是否为隧道包,如果不是则正常处理;否则,提取IPv6分组,并根据设置好的IPv6防火墙规则信息来判断IPv6分组是否非法,从而采取相应的措施。具体处理流程如图1所示。
2 图形界面实现
防火墙的图形界面实现主要是用GTK+2.0来完成的。它使用一些称为“构件”的对象来创建GUI应用程序。它提供了窗口、按钮、框架、列表框、组合框、树、状态条等很多构件,可以构造丰富的用户界面。本文就是通过创建这些构件来布局图形界面的。最常用的是盒状容器,它有两种形式:横向盒和纵向盒。通过GTK_box_pack_start( )或GTK_box_pack_end( )函数,我们从左到右(从上到下)或从右到左(从下到上)地把构件组装到横向盒(纵向盒)中,也可以使用任意的盒组合,比如盒套盒、盒挨盒,以产生预想的效果。
图1 防火墙功能流程图
2.1规则设置界面
由于IPv4和IPv6数据包的“协议”字段不完全一样,源/目的地址的格式也有区别,所以要根据版本进行设置不同的规则,此时要利用GTK+中的无线按钮GtkRadioButton,因为其同组内的各个选项是互斥的。
另外,当选择版本为IPv6时,需要隐藏源/目的v4地址标签;同样,当选择版本为IPv4时,需要隐藏源/目的v6地址标签。这可以通过函数gtk_widget_set_sensitive(GtkWidget *widget, FALSE)来实现,从而在选择某种版本时,将另一种版本的地址输入框显示成灰色,从而无法输入。
图2就是进行阻断源IPv4地址为192.168.3.1、目的IPv4地址为192.168.3.2、源IPv6地址为3ffe::1、目的IPv6地址为3ffe::2的IPv6-in-IPv4隧道包的示例。
图2 规则设置界面示例
2.2图形接口实现
这里主要使用GTK+2.0中的回调函数来处理窗口外部传来的事件、消息、或信号。即先为窗口或控件定义一系列的信号,然后引用信号名称或控件添加回调函数,这个回调函数往往是我们要实现的功能。之后,当信号发生的时候,程序自动调用与该信号相关的回调函数。
本文在设计规则设置界面的时候,将点击确定按钮发出的信号与回调函数联系在一起。即:g_signal_connect(GTK_OBJECT(button),”clicked”,GTK_SIGNAL_FUNC(our_firewall), NULL)。它的含义是当点击按钮发出clicked信号,则执行回调函数也就是我们的防火墙程序our_firewall,它主要是把规则设置界面中的参数传递到iptables/ip6tables规则表中,并调用了iptables/ ip6tables功能。
3 测试
如图3所示,PC A通过ISATAP隧道机制获得IPv6地址,从而能够与处于IPv6网络中的PC B进行通信,这里,防火墙C也就是我们设计的图形防火墙串联在PC A与ISATAP服务器之间,从而监控着PC A与PC B之间的数据传输。
图3 试验的过渡环境
在PC A上ping6 PC B的IPv6地址时,发现在未设置任何规则时,PC A和PC B是相通的。
这时,打开如图1所示的规则设置界面,并输入要拒绝的IPv6地址2001:da8:205:ffff:0: 5efe:211.71.71.137来设置阻断规则,可以发现规则生效,PC A和PC B已经不能通信了。清除该规则后,隧道两端又可以通信了。
4 结束语
本文很好的解决了隧道机制引起的地址欺骗问题,开发的图形界面也使得防火墙更加简单易用。事实上,该防火墙的设计思想不止可以用于基于隧道机制的过渡网络中,它同样适用于任何采用隧道机制的网络环境中。
参考文献:
[1]RFC 4213,Basic Transition Mechanisms for IPv6 Hosts and Routers[S],2005.
[2]Draft-ietf-v6ops-security-overview-06.txt,IPv6 Transition/Co-existence Security Considera-tions[S],2007.
[3]SLLSCN.Iptables指南1.1.19 [EB/OL].http://man.lupaworld.com/content/network/ iptables -tutorial-cn-1.1.19.html#prelude.
[4]Rusty Russell,Harald Welte.Linux netfilter Hacking HOWTO [EB/OL].http://debian. linuxsir.org /book/nhh/ FreeWill/ netfilter-hacking-HOWTO.htm.
[5]STEVE SUEHRING.何泾沙.Linux防火墙[M].北京:机械工业出版社,2006.
[6]宋国伟.GTK+2.0编程范例[M].北京:清华大学出版社,2002.
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
关键词:隧道;netfilter;GTK;防火墙
中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)18-31536-01
Implementation of Graphic Firewall under Tunneling Mechanisms
DAI Xiao-miao,LIU Ying,ZHANG Si-dong
(School of Electronics and Information Engineering,Beijing Jiaotong University,Beijing 100044,China)
Abstract:Tunneling mechanisms may introduce spoofing attack which today firewalls can not stand against.In order to solve such a problem,authors implement a firewall suitable for networks during the period of IPv4/IPv6 transition by improving netfilter.Then authors design a graphical interface of firewall during this period with GIMP Toolkit+2.0 (GTK+2.0),thus conveniently setting filtering rules for users. Lastly,the solution is tested whether it is effective in the transitional environment.
Key words: tunneling;netfilter;GTK;firewall
目前接入IPv6网络的方式主要是隧道机制和双协议栈机制,其中隧道机制是将IPv6的分组封装到IPv4的分组中,封装后的IPv4分组源地址和目的地址分别是隧道入口和出口的IPv4地址,并将报头的“协议”字段设置为41,表明该分组的负载是一个IPv6分组。在隧道的出口处,再将IPv6分组解封并转发到目的地。由于IPv6分组隐藏在IPv4报头之后,而当前防火墙又无法识别隐藏着的IPv6分组是否非法,因此往往无法抵御类似的地址欺骗攻击,严重地影响了网络性能。基于这样的安全需求,本文设计的防火墙不仅能够识别“协议”字段为41的数据包,而且能根据封装在IPv4分组的IPv6分组信息对数据包进行过滤,此外本文还开发了相应的图形界面,方便了用户操作。
1 防火墙功能分析与实现
Linux提供了一个防火墙工具——Netfilter/iptables,其中Netfilter是一个结构化的防火墙底层架构,而Iptables是Netfilter的用户态接口管理工具,此外,ip6tables是应用在IPv6环境下的相应工具。在基于双栈机制的过渡网络中,这样的防火墙已经起到不错的保护作用。
但是,由于隧道机制是在隧道出口把隧道包解封成IPv6数据包的,而我们的防火墙是应用在隧道两端之间、以透明网桥的方式工作的,所以当数据包经过防火墙的时候,防火墙不能看到IPv4报头后的IPv6分组,因此基于IPv6的防火墙功能也起不了作用。在应用隧道机制接入的过渡网络中,这样的防火墙是无法保证网络安全的。
本文的设计思想就是当接收到IPv4数据包时,设置在NF_IP_FORWARD这个点的钩子函数首先根据数据包的协议字段来判断该包是否为隧道包,如果不是则正常处理;否则,提取IPv6分组,并根据设置好的IPv6防火墙规则信息来判断IPv6分组是否非法,从而采取相应的措施。具体处理流程如图1所示。
2 图形界面实现
防火墙的图形界面实现主要是用GTK+2.0来完成的。它使用一些称为“构件”的对象来创建GUI应用程序。它提供了窗口、按钮、框架、列表框、组合框、树、状态条等很多构件,可以构造丰富的用户界面。本文就是通过创建这些构件来布局图形界面的。最常用的是盒状容器,它有两种形式:横向盒和纵向盒。通过GTK_box_pack_start( )或GTK_box_pack_end( )函数,我们从左到右(从上到下)或从右到左(从下到上)地把构件组装到横向盒(纵向盒)中,也可以使用任意的盒组合,比如盒套盒、盒挨盒,以产生预想的效果。
图1 防火墙功能流程图
2.1规则设置界面
由于IPv4和IPv6数据包的“协议”字段不完全一样,源/目的地址的格式也有区别,所以要根据版本进行设置不同的规则,此时要利用GTK+中的无线按钮GtkRadioButton,因为其同组内的各个选项是互斥的。
另外,当选择版本为IPv6时,需要隐藏源/目的v4地址标签;同样,当选择版本为IPv4时,需要隐藏源/目的v6地址标签。这可以通过函数gtk_widget_set_sensitive(GtkWidget *widget, FALSE)来实现,从而在选择某种版本时,将另一种版本的地址输入框显示成灰色,从而无法输入。
图2就是进行阻断源IPv4地址为192.168.3.1、目的IPv4地址为192.168.3.2、源IPv6地址为3ffe::1、目的IPv6地址为3ffe::2的IPv6-in-IPv4隧道包的示例。
图2 规则设置界面示例
2.2图形接口实现
这里主要使用GTK+2.0中的回调函数来处理窗口外部传来的事件、消息、或信号。即先为窗口或控件定义一系列的信号,然后引用信号名称或控件添加回调函数,这个回调函数往往是我们要实现的功能。之后,当信号发生的时候,程序自动调用与该信号相关的回调函数。
本文在设计规则设置界面的时候,将点击确定按钮发出的信号与回调函数联系在一起。即:g_signal_connect(GTK_OBJECT(button),”clicked”,GTK_SIGNAL_FUNC(our_firewall), NULL)。它的含义是当点击按钮发出clicked信号,则执行回调函数也就是我们的防火墙程序our_firewall,它主要是把规则设置界面中的参数传递到iptables/ip6tables规则表中,并调用了iptables/ ip6tables功能。
3 测试
如图3所示,PC A通过ISATAP隧道机制获得IPv6地址,从而能够与处于IPv6网络中的PC B进行通信,这里,防火墙C也就是我们设计的图形防火墙串联在PC A与ISATAP服务器之间,从而监控着PC A与PC B之间的数据传输。
图3 试验的过渡环境
在PC A上ping6 PC B的IPv6地址时,发现在未设置任何规则时,PC A和PC B是相通的。
这时,打开如图1所示的规则设置界面,并输入要拒绝的IPv6地址2001:da8:205:ffff:0: 5efe:211.71.71.137来设置阻断规则,可以发现规则生效,PC A和PC B已经不能通信了。清除该规则后,隧道两端又可以通信了。
4 结束语
本文很好的解决了隧道机制引起的地址欺骗问题,开发的图形界面也使得防火墙更加简单易用。事实上,该防火墙的设计思想不止可以用于基于隧道机制的过渡网络中,它同样适用于任何采用隧道机制的网络环境中。
参考文献:
[1]RFC 4213,Basic Transition Mechanisms for IPv6 Hosts and Routers[S],2005.
[2]Draft-ietf-v6ops-security-overview-06.txt,IPv6 Transition/Co-existence Security Considera-tions[S],2007.
[3]SLLSCN.Iptables指南1.1.19 [EB/OL].http://man.lupaworld.com/content/network/ iptables -tutorial-cn-1.1.19.html#prelude.
[4]Rusty Russell,Harald Welte.Linux netfilter Hacking HOWTO [EB/OL].http://debian. linuxsir.org /book/nhh/ FreeWill/ netfilter-hacking-HOWTO.htm.
[5]STEVE SUEHRING.何泾沙.Linux防火墙[M].北京:机械工业出版社,2006.
[6]宋国伟.GTK+2.0编程范例[M].北京:清华大学出版社,2002.
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。