王凯 李继民
摘要:为了避免基于Linux系统的计算机在网络世界中受到恶意攻击,本课题利用Linux内核提供的iptables模块所提供的接口函数来设置对网络数据包的控制,从而实现保护个人计算机的目的。
关键词:Linux;防火墙;网络安全
1 引言
防火墙作为互联网络中使用最广泛的安全措施,伴随着互联网的快速发展而得到广泛应用。Linux作为在全球范围内得到广泛接受和应用的开源操作系统,所提供的灵活性和可操作性为开发和配置防火墙以及按照特定网络环境的要求构建防火墙提供了一个价格低廉、性能优良的平台,日益获得了众多企业和个人用户的广泛接受。
本课题研究的是在Linux下实现自己的防火墙,以便对本地主机的网络保护,屏蔽外界一些不必要的信息,如对外来IP地址的访问加以限制。本软件利用Linux内核提供的iptables模块所提供的接口函数来设置对网络数据包的控制策略。所有我们认为是有用的数据流都被在防火墙中显式地“声明”成合法的数据包,没有被“声明”的数据包默认是非法的,是要被防火墙软件锁在计算机外面的。另外本软件还实现了文件系统实时监控,这个功能能够实时地通知用户哪些文件被改动了。
2 关键技术
2.1 iptables内核模块
内建于Linux内核的iptables为我们建立自己的防火墙提供了技术上的保障。无论是为Linux服务器提供防火墙,还是为内部LAN提供防火墙/路由器,iptables都能够提供强大的过滤能力。Linux具有任何希望构造防火墙的人所需要的灵活性和实力,而且它还独具成本低廉的优点。
iptables在处理不同种类的数据包时使用不同的规则表。这些规则表由功能上相互独立的表模块来实现。三个主要的模块是filter表,nat表和对数据包进行特殊处理的mangle表,而且这三个表模块都有自己的扩展模块,它们会在首次引用时被动态载入。
作为防火墙的管理程序,iptables为输入输出规则链建立单独的数据包过滤规则以组成防火墙。定义防火墙规则的一个重要方面就是规则的定义顺序。数据包过滤规则以它们的定义顺序存储在内核的输入、输出或转发规则链中。单个规则被插入到链的开头或结尾。本防火墙软件采用的是加到链的结尾的。规则的定义顺序就是它们加入到内核表中的顺序。
在本软件的实现过程中,所有过滤的条目使用的是数字服务端口号而不是它们的名称。iptables支持符号化的服务端口名称,之所以不使用符号名称而使用数字是因为在Linux的不同版本中符号的名称不太统一。在个人自定义的规则中可以使用符号名称,但是防火墙就有可能在系统升级之后被攻破,因而使用端口号将更为可靠。而且,使用符号名称可能引起防火墙规则的含糊性。
2.2 脚本解释器——Shell
Shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入要执行的命令。本防火墙软件作为Shell的脚本来实现,脚本名字为rc.firewall里面包含了许多的命令,这些命令都用Shell作为解释器。
在Shell脚本中会设置一些变量,其中最重要的变量就是iptables本身的命令。因为将iptables命令作为变量非常重要,因此在这里必须明确的指出来。在一个防火墙脚本中含糊不清是绝对不允许的,在本软件开发过程当中,表示iptables命令的变量是$IPT。出现$IPT时,就表示这是iptables命令。
脚本中以“#”开头来调用Shell作为脚本的解释程序。脚本中的第一行如下:#!/bin/sh
3 系统设计思路
3.1 功能介绍
3.1.1 对输入数据的处理。本软件对外界数据的访问首先要到达输入接口(即自扩展的INPUT内建规则键),当数据到达时,系统根据事先设定好的各条规则逐条进行对比,如果访问信息符合规则链当中的任何一条则接受,否则拒绝。
3.1.2 对转发数据的处理。由于本软件作为个人电脑所用的防火墙软件,并不是作为网络结点服务器使用,故而所有涉及到转发的入站数据包(即最终目的地址不是本机的数据包)一律采取丢弃策略。
3.1.3 对输出数据的处理。本软件对本地产生的出站数据包在发出前依据OUTPUT规则链定义了一系列的出站规则,这些规则指定了这些出站数据在出站前所做的修改,如屏蔽本地主机一些重要的信息等等。如果出站数据包非法则对其进行丢弃处理,而并不需要另行通知本机。
3.1.4 文件系统监控功能。任何一个Linux文件系统中的文件被修改时,本软件都会通知给用户,提醒用户注意。
文件系统监控模块的实现是从根目录“/etc”开始进行扫描,这个扫描过程间隔10秒进行一次,过程中进行判断是否为一个文件,如果不是文件而是目录则往下进行扫描,如果是文件则对文件进行时间戳的操作。首先读取当前的系统时间,然后再读取文件的最后修改时间,而后再调用时间比对函数difftime()计算当前时间与最后修改时间的差值,用这个差值与扫描间隔时间10秒进行比较,如果小于10秒则说明该文件是在最近5秒内被修改过了,这时则通知给用户有文件被修改。
3.2 系统活动图
本软件系统开始于用户启用防火墙,当用户开启了防火墙时,本软件自动启动数据流匹配模块和文件系统监控模块。当网络数据交换中的数据包符合输入输出数据匹配规则时则允许该数据包的访问,否则拒绝该数据包的访问。而文件系统监控模块则一直在后台进行文件系统的描述工作,当发现有文件被修改时则通知给用户。而数据流匹配模块和文件系监控模块的运行都终止于本软件的关闭。系统的活动图如图1所示。
4 软件运行效果
本软件作为Shell的脚本存放在/etc/rc.d/下,shell作为本防火墙脚本的解释器,用户只需要到此路径下找到防火墙软件并使之启动即可。启动参数为start。软件运行后用户无需任何其它操作,在网络上的数据流保护过程都是程序在后台完成的,当有数据流通过或拒绝时不对用户进行任何通知。如果用户想知道网络上的行为,可以到防火墙日志文件当中去查看,这个日志文件是Linux系统自行维护的,是Linux操作系统自带的功能模块,在开发本防火墙软件时只需要链接上就可以了。
系统启动、退出及文件系统监控提示信息如图2所示。
5 结束语
本软件作为单系统防火墙是防火墙结构中的“最小安全”形式,但“最小安全”形式并不是不安全,只是比拥有较多机器的更复杂的防火墙软件稍差一些;如果要求更高的安全性,需要用户付出更多的投入和关注。需要指出的是,拥有防火墙并不意味着完全的保护。安全是一个过程,简单的电子邮件也是有可能带来危害的。所以本软件只是采取了大量措施来减少成功的入侵带来的危害。
参考文献
[1]W.Richard Stevens. UNIX 环境高级编程(第2版)[M].北京:人民邮电出版社,2006.5.
[2]Steve Suehring等. Linux防火墙[M].北京:机械工业出版社,2006.6.
[3]谢希仁.计算机网络(第5版)[M].北京:电子工业出版社,2008.1.
作者简介:王凯(1980-),女,辽宁建昌人,大连东软信息学院计算机科学与技术系讲师。