基于Iptables的Linux防火墙设计与实现

龙源期刊网 http://www.qikan.com.cn

基于Iptables的Linux防火墙设计与实现

作者:陆 伟 胡成峰 钱朝阳

来源:《安徽理工大学学报·自然科学版》2009年第02期

摘要:在对现有防火墙技术分析的基础上,描述了一种基于Linux操作系统下iptables服务的小型防火墙系统。网络管理员可以很方便地通过图形用户界面对其进行配置与管理。该系统具有很好的稳定性与可扩展性,能很好地满足小型企业局域网的安全需求。最后给出了该系统的实现。

关键词:Linux;iptables;防火墙;图形用户界面

中图分类号:TP393.08 文献标识码:A 文章编号:1672-1098(2009)02-0047-03

随着计算机的普及和互联网的发展,人们的工作、学习和生活已经和网络技术密不可分,网络的安全问题日趋成为人们关注的焦点,防火墙作为一种最为有效地网络安全产品得到了广泛的应用。根据使用的技术不同主要可以将其分为包过滤防火墙、应用层网关防火墙。包过滤防火墙通过检查数据包的地址、协议、端口等信息来决定是否允许此数据包通过。应用层网关防火墙通过自身复制传递数据,检查进出的数据包,防止在受信主机与非受信主机间直接建立联系。与应用层网关防火墙相比,包过滤防火墙具有速度快、效率高的特点。Linux操作系统性能优异、功能强大,其内核中实现了防火墙组件Netfiher,并通过外部的iptables服务来进行配置。以Linux操作系统和Netfilter/iptables为基础,来实现具有包过滤功能、图形用户界面的局域网防火墙。

1 防火墙的结构与功能分析

1.1防火墙系统网络结构

防火墙就是内部网络与外部网络之间的一道安全防护系统。通过对经过的网络数据包的扫描与分析,过滤掉一些网络攻击并阻止非授权用户访问内部网络。从而大大提高内部网络的安全(见图1)。图1中的防火墙就是采用了Netfiher/iptables机制的Linux服务器,服务器配置有两块网卡,其中一块连接到外网,另一块与交换机(集线器)相连。这样内部的多台主机就可以通过交换机(集线器)访

龙源期刊网 http://www.qikan.com.cn

1.2防火墙系统功能模块

经过对现有防火墙系统以及iptables的使用和分析,设计了防火墙系统,包括登陆、基本参数设置、元素及规则定义、规则应用、地址扫描、文件管理和登陆设置模块(见图2)。 本防火墙系统包括最基本的包过滤和网络地址转换(NAT)功能,它可以满足小型局域网安全性与网络应用。在此基础上添加了MAC地址绑定、自动扫描相邻主机IP地址、基于时间的规则调度以及日志等较为实用的功能。

2 防火墙系统实现

2.1界面设计

Qt是跨平台的基于C++语言的图形用户界面(GUI)工具包,它是TrollTeeh公司的标志产品。Qt能以漂亮的用户界面,快速而有效地开发软件。Qt又是一种跨平台的GUI工具包,能确保软件非常方便地应用于绝大多数的操作系统,如Mi—crosoft Windows系列,Linux,Solaris,FreeBSD等。Qt类库拥有超过400个c++类,同时还在不断扩展。它封装了用于端到端应用程序开发所需要的所有基础结构。

龙源期刊网 http://www.qikan.com.cn

采用了Qt库来开发防火墙系统的图形用户界面,使用qt Designer设计了登陆界面、防火墙主界面、登陆设置界面、规则文件管理界面以及帮助界面。其中主界面是防火墙的核心界面,它提供了对主要功能的访问和对参数的设置功能(见图3)。

防火墙主界面包括五个标签页,能分别对防火墙基本参数和规则元素及过滤规则进行设置。顶部的功能按钮提供了对不同服务功能模块的访问。

为了使界面中的多个对象之间协同工作,需要应用信号和槽来进行组件通信。信号和槽是一种高级接口,应用于对象之间的通信,它是Qt的核心特性,也是Qt区别于其它工具包的重要地方。信号和槽是Qt自行定义的一种通信机制,它独立于标准的C/C++语言,因此要借助称为MOC(Meta Ob-jeet Compiler)的Qt工具来正确的处理信号和槽,该工具是一个c++预处理程序,它为高层次的事件处理自动生成所需要的附加代码。

2.2底层设计

系统底层需要完成保存用户定义的规则及元素、实现多线程地址扫描、规则的应用以及规则文件的导入和导出等功能。分别进行如下说明:

(1)数据的保存定义了5个链表类:IpList、Group、GroupList、ServiceList和RuleList,用来保存用户定义的IP地址、地址组、服务和防火墙规则。各个类提供了对用户定义数据的添加、修改、删除、查询和排序等功能,通过程序界面的按钮响应函数来调用对应功能。 (2)多线程地址扫描Qt提供了丰富的多线程编程支持,在Qt系统中与线程相关的最重要的类是QThread类,该类提供了创建一个新线程以及控制线程运行的各种方法。为了完成所需要的功能,可以从QThread类派生出自己的线程类,重载它的run()函数以实现自己需要的功能。为了实现多线程之间的通信,该派生类可以使用系统提供的信号与槽机制,因此它必须多继承QThread类与QObject类。并声明其信号和槽。

(3)规则的应用 将规则划分为若干规则参数,包括规则类型、源和目的地址、服务、时间调度参数以及对匹配数据包的操作,利用Qt系统函数system()执行包含了各种参数的SHELL语句,通过它调用编写好的SHELL脚本,向iptables中导入用户所定义的防火墙规则。 (4)规则文件导入和导出 通过QFile类打开需要写入或读取的文件,再利用它构建QTextStr-eam字符流对象,通过对该对象的操作来逐行的写入或读取规则信息。

2.3时间调度的实现

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4