连接网上的服务器系统,不管是什么情况都要明确一点:网络是不安全的。因此,虽然创建一个防火墙并不能保证系统100%安全,但却是绝对必要的。传统意义上的防火墙技术分为三大类,“包过滤”(Packet Filtering)、“应用代理”(Application Proxy)和“状态检测”(Stateful Inspection),无论一个防火墙的实现过程多么复杂,归根结底都是在这三种技术的基础上进行功能扩展的。
一、Solaris包过滤防火墙IPFilter简介
IPFilter是目前比较流行的包过滤防火墙软件,它目前拥有多种平台的版本,安装配置相对比较简单。可以用它来构建功能强大的软件防火墙,下面就其的安装以及一些典型的配置作一下说明。IPFfilter 的作者是 Darren Reed 先生,他是一位致力于开源软件开发的高级程序员,目前工作于 SUN 公司。IP Filter 软件可以提供网络地址转换(NAT)或者防火墙服务。简单的说就是一个软件的防火墙,并且这个软件是开源免费的。当前的版本是4.1.15,目前支持 FreeBSD、NetBSD、Solaris、AIX 等操作系统平台。IPFilter是它是一个在引导时配置的可加载到内核的模块。这使得它十分安全,因为已不能由用户应用程序篡改。我用Solaris10 来作为实验的平台介绍一下IP Filter。IP Filter过滤器会执行一系列步骤。图1说明处理包的步骤,以及过滤如何与 TCP/IP 协议栈集成在一起。
2. IP 记帐 :可以分别设置输入规则和输出规则,从而记录所通过的字节数。每次与规则匹配时,都会将包的字节计数添加到该规则中,并允许收集层叠统计信息。
3. 片段高速缓存检查 :如果当前流量中的下一个包是片段,而且允许前一个包通过,则也将允许包片段通过,从而绕过状态表和规则检查。
4. 包状态检查 :如果规则中包括 keep state,则会自动传递或阻止指定会话中的所有包,具体取决于规则指明了 pass 还是 block。
5. 防火墙检查 :可以分别设置输入规则和输出规则,确定是否允许包通过 Solaris IP 过滤器传入内核的 TCP/IP 例程或者传出到网络上。
6. 组:通过分组可以按树的形式编写规则集。
7. 功能 :功能是指要执行的操作。可能的功能包括 block、pass、literal 和 send ICMP response。
8. 快速路由 :快速路由指示 Solaris IP 过滤器不将包传入 UNIX IP 栈进行路由,从而导致 TTL 递减。
9. IP 验证 :已验证的包仅通过防火墙循环一次来防止双重处理。
二、学会编写IPFfilter 规则
典型的防火墙设置有两个网卡:一个流入,一个流出。IPFfilter读取流入和流出数据包的报头,将它们与规则集(Ruleset)相比较,将可接受的数据包从一个网卡转发至另一个网卡,对被拒绝的数据包,可以丢弃或按照所定义的方式来处理。 通过向防火墙提供有关对来自某个源地址、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。通过使用IPFfilter系统提供的特殊命令建立这些规则,并将其添加到内核空间特定信息包过滤表内的链中。关于添加、去除、编辑规则的命令,一般语法如下:
action [in|out] option keyword, keyword...
参数说明:
1. 每个规则都以操作开头。如果包与规则匹配,则 Solaris IP 过滤器将操作应用于该包。以下列表包括应用于包的常用操作。
block :阻止包通过过滤器。
pass :允许包通过过滤器。
log :记录包但不确定是阻止包还是传递包。使用 ipmon 命令可查看日志。
count :将包包括在过滤器统计信息中。使用 ipfstat 命令可查看统计信息。
skip number :使过滤器跳过 number 个过滤规则。
auth :请求由验证包信息的用户程序执行包验证。该程序会确定是传递包还是阻止包。
preauth :请求过滤器查看预先验证的列表以确定如何处理包。
2. 操作后面的下一个单词必须是 in 或 out。您的选择将确定是将包过滤规则应用于传入包还是应用于传出包。
3. 接下来,可以从选项列表中进行选择。如果使用多个选项,则这些选项必须采用此处显示的顺序。
log :如果规则是最后一个匹配规则,则记录包。使用 ipmon 命令可查看日志。
quick :如果存在匹配的包,则执行包含 quick 选项的规则。所有进一步的规则检查都将停止。
on interface-name :仅当包移入或移出指定接口时才应用规则。
dup-to interface-name:复制包并将 interface-name 上的副本向外发送到选择指定的 IP 地址。
to interface-name :将包移动到 interface-name 上的外发队列。
4. 指定选项后,可以从确定包是否与规则匹配的各关键字中进行选择。必须按此处显示的顺序使用以下关键字。
tos :基于表示为十六进制或十进制整数的服务类型值,对包进行过滤。
ttl :基于包的生存时间值与包匹配。在包中存储的生存时间值指明了包在被废弃之前可在网络中存在的时间长度。
# svcs -a |grep network |egrep "pfil|ipf"
disabled 7:17:43 svc:/network/ipfilter:default
online 7:17:46 svc:/network/pfil:default
2.查看网卡接口
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
pcn0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
inet 10.1.1.8 netmask ff000000 broadcast 10.255.255.255
可以看到网卡接口是pcn0。
3.修改/etc/ipf/pfil.ap 文件
此文件包含主机上网络接口卡 (network interface card, NIC) 的名称。缺省情况下,这些名称已被注释掉。对传输要过滤的网络通信流量的设备名称取消注释。编辑配置文件修改为如下内容:
图2 配置文件修改为如下内容
4. 编辑防火墙规则
使服务器对ping没有反应 ,防止你的服务器对ping请求做出反应,对于网络安全很有好处,因为没人能够ping你的服务器并得到任何反应。TCP/IP协议本身有很多的弱点,黑客可以利用一些技术,把传输正常数据包的通道用来偷偷地传送数据。使你的系统对ping请求没有反应可以把这个危险减到最小。修改配置文件/etc/ipf/ipf.conf添加一行:
block out quick proto icmp from any to 192.168.0.2/24 icmp-type 0
如图 3
图 3 配置文件/etc/ipf/ipf.conf添加一行
说明:IP 过滤协议的关键字有4种(icmp、tcp、udp、tcp/udp),启用对协议的控制就是在协议的关键字前加proto关键字。ICMP全称Internet Control Message Protocol,中文名为因特网控制报文协议。它工作在OSI的网络层,向数据通讯中的源主机报告错误。ICMP可以实现故障隔离和故障恢复。我们平时最常用的ICMP应用就是通常被称为Ping的操作。在使用ICMP协议控制的时候,可以使用icmp-type关键字来指定ICMP协议的类型,类型的值以下几种见表1。
表1 ICMP协议内容简介
类型 名称 备注
0 回波应答(Echo Reply) 不允许ping命令回应
8 回波(Echo) 允许ping命令回应
9 路由器公告(Router dvertisement)
10 路由器选择(Router Selection)
所以把icmp-type设置为 0即可。
5. 启动服务
使用命令:svcadm enable svc:/network/ipfilter:default
6. 使 pfil.ap配置文件生效
autopush -f /etc/ipf/pfil.ap
说明:此步骤只需要做一次,以后更改防火墙规则就不需要再做。
7. 重新引导计算机,使用命令:“init 6”。
8. 使用命令再次查看IPFilter包过滤防火墙运行情况 。
图四 使用命令再次查看IPFilter包过滤防火墙运行
四、IPFilter包过滤防火墙规则编写方法
在创建IPFilter包过滤防火墙规则的第一步是与用户咨询确定一个可接受的服务列表。许多公司会有—个可接受的使用策略,该策略会控制哪些端口应当可用和应当赋予用户启动的服务的权限。在你确定了开放的流入端口和外出的端口需求之后,最好是编写一条规则:首先拒绝全部数据包,然后编写另外的规则:允许使用的端口。你还必须设置两个方向启用允许的服务。例如.用户同时接收和发送电子邮件通常是必要的,于是你需要对sendmail(端口25)包括一条入站和出站规则。
1、方法1
要阻止从 IP 地址 192.168.1.0/16 传入的流量,需要在规则列表中包括以下规则:
block in quick from 192.168.1.0/16 to any
下面的例子阻止来自b类网络148.126.0.0的任何数据包:
block in quick from 148.126.0.0/16 to any
2、方法2
通俗来说就是:禁止是block ,通过是pass ,进入流量是in,出去流量是out 。然后配合起来使用就行了,再加上可以指定在哪个网卡上使用,也就是再加个on pcn0,另外还有一个关键字就是all,这是匹配(禁止或者通过)所有的包。基于IP地址和防火墙接口的基本过滤方式:
block in quick on hme0 from 192.168.0.14 to any
block in quick on hme0 from 132.16.0.0/16 to any
pass in all
应用此规则将阻止通过hme0口来自于192.168.0.14和132.16.0.0网段的所有包的进入,但是允许其他网段的包进入到防火墙,同时对出去的包不作任何限制。
3、方法3:基于IP地址和防火墙接口的完全双向过滤方式:
block out quick on hme0 from any to 192.168.0.0/24
block out quick on hme0 from any to 172.16.0.0/16
block in quick on hme0 from 192.168.0.0/24 to any
block in quick on hme0 from 172.16.0.0/16 to any
pass in all
应用此规则后将阻止通过hme0口来自于192.168.0.0和172.16.0.0网段的所有包的进入和外出,但是允许其他网段的包进入到防火墙,同时对出去的包不作任何限制。
4、方法4
使用“port”关键字对TCP和UDP的端口进行过滤:
block in log quick on hme0 proto tcp from any to 192.168.0.0/24 port = 513
block in log quick on hme0 proto tcp from any to 192.168.0.0/24 port = 8080
block in log quick on hme0 proto tcp from any to 192.168.0.0/24 port = 23
pass in all
应用此规则后将阻止从192.168.0.0网段通过8080和23端口对防火墙内的数据通信,但是允许其他网段的包进入到防火墙,同时对出去的包不作任何限制。
5、方法5
quick关键字使用提示:假如你的防火墙有100条规则,最有用的可能只有前10条,那么quick是非常有必要的。
pass in log quick proto tcp from 10.4.128.163/32 to any port = telnet
block in log all from any to any
假如你希望禁止服务器的所有包而只希望一个IP只能够telnet的话,那么就可以加上quick关键字,quick的作用是当包符合这条规则以后,就不再向下进行遍历了。如果没有quick的情况下,每一个包都要遍历整个规则表,这样的开销是十分大的,但是如果滥用quick也是不明智的,因为它毕竟不会产生日志。
6、管理 Solaris IP 过滤器的 NAT 规则
查看活动的 NAT 规则。
# ipnat -l
删除当前的 NAT 规则。
# ipnat -C
将规则附加到 NAT 规则
在命令行上使用 ipnat -f - 命令,将规则附加到 NAT 规则集。
# echo "map dmfe0 192.168.1.0/24 -> 20.20.20.1/32" | ipnat -f -
五、关闭 Solaris IP 过滤防火墙的方法
有些情况可能希望取消激活或禁用包过滤,例如要进行测试另外在认为系统问题是由 Solaris IP 过滤器所导致时,对这些问题进行疑难解答。首先成为管理员权限,
禁用包过滤,并允许所有包传入网络的命令:
# ipf –D
取消激活 Solaris IP 过滤器规则方法:
从内核中删除活动规则集。
# ipf -Fa
此命令取消激活所有的包过滤规则。
删除传入包的过滤规则。
# ipf -Fi
此命令取消激活传入包的包过滤规则。
删除传出包的过滤规则。
# ipf -Fo
此命令取消激活传出包的包过滤规则。
六、Solaris IP 过滤防火墙的监控和管理
1. 查看包过滤规则集
启用 Solaris IP 过滤器后,活动和非活动的包过滤规则集都可以驻留在内核中。活动规则集确定正在对传入包和传出包执行的过滤。非活动规则集也存储规则,但不会使用这些规则,除非使非活动规则集成为活动规则集。可以管理、查看和修改活动和非活动的包过滤规则集。查看装入到内核中的活动包过滤规则集,使用命令:ipfstat –io 。
如果希望查看非活动的包过滤规则集。可以同使用命令:
# ipfstat -I –io
2. 激活不同的包过滤规则集
以下示例显示如何将一个包过滤规则集替换为另一个包过滤规则集。
# ipf -Fa -f filename
活动规则集将从内核中删除。filename 文件中的规则将成为活动规则集。
3. 将规则附加到活动的包过滤规则集
以下示例显示如何从命令行将规则添加到活动的包过滤规则集。
# ipfstat -io
empty list for ipfilter(out)
block in log quick from 10.0.0.0/8 to any
# echo "block in on dmfe1 proto tcp from 10.1.1.1/32 to any" | ipf -f -
# ipfstat -io
empty list for ipfilter(out)
block in log quick from 10.0.0.0/8 to any
block in on dmfe1 proto tcp from 10.1.1.1/32 to any
4. 监控整个IP管理器防火墙查看状态表
使用没有参数的ipfstat命令即可,图5 是整个IP过滤器防火墙查看状态表的输出。
图5 整个IP过滤器防火墙查看状态表的输出
另外可以使用命令:“ipfstat -s” 查看 Solaris IP 过滤器的状态统计,使用命令:“ipnat -s” 查看 Solaris IP 过滤器的NAT状态统计。使用 ippool -s 命令查看地址池统计。
七、查看 Solaris IPFilter包过滤防火墙的日志文件
使用命令如下:
ipmon –o -a [S|N|I] filename
参数说明:
S :显示状态日志文件。
N:显示 NAT 日志文件。
I:显示常规 IP 日志文件。
-a:显示所有的状态日志文件、NAT 日志文件和常规日志文件。
清除包日志文件使用命令:
# ipmon -F
八、使用fwbuilder管理防火墙
事实上,如果读者们不是很熟悉Solaris中IPFilter命令的使用方式,在这里介绍一个不错的图形管理程序,就是fwbuilder (
http://www.fwbuilder.org/),可以从
http://www.fwbuilder.org/nightly_builds/取得读者们所需要的版本或是原始码。Fwbuilder 是一个相当有弹性的防火墙图形接口,它不仅可以产生IPFilter 的规则,也可以产生 Cisco 的 FWSM (FireWall Service Module ,用于 Cisco 高阶第三层交换机 6500 及 7600 系列 ) 及 PIX 的规则,更有趣的是,每次我们改变某台机器的设定后,它会使用 RCS 来做版本控管,相当实用。fwbuilder所支援的防火牆有:FWSM、ipfilter、ipfw、iptables、PF、PIX。
1、安装qt库
Qt 是一个跨平台的 C++ 图形用户界面库,由挪威 TrollTech 公司出品,目前包括Qt, 基于 Framebuffer 的 Qt Embedded,快速开发工具 Qt Designer,国际化工具 Qt Linguist 等部分 Qt 支持所有 Unix 系统,当然也包括 Solaris,还支持 WinNT/Win2k/2003 平台。
# pkgadd -d qt-3.3.4-sol10-intel-local.pkg
2、安装openssl
#pkgadd -d openssl-0.9.7g-sol10-intel-local.pkg
3、安装snmp
简单网络管理协议(SNMP)是目前TCP/IP网络中应用最为广泛的网络管理协议。1990年5月,RFC 1157定义了SNMP(simple network management protocol)的第一个版本SNMPv1。RFC 1157和另一个关于管理信息的文件RFC 1155一起,提供了一种监控和管理计算机网络的系统方法。因此,SNMP得到了广泛应用,并成为网络管理的事实上的标准。大多数网络管理系统和平台都是基于SNMP的。
#pkgadd -d netsnmp-5.1.4-sol10-x86-local.pkg
4、安装gtk+
GTK+ 是一种图形用户界面(GUI)工具包。也就是说,它是一个库(或者,实际上是若干个密切相关的库的集合),它支持创建基于 GUI 的应用程序。可以把 GTK+ 想像成一个工具包,从这个工具包中可以找到用来创建 GUI 的许多已经准备好的构造块。最初,GTK+ 是作为另一个著名的开放源码项目 —— GNU Image Manipulation Program (GIMP) —— 的副产品而创建的。在开发早期的 GIMP 版本时,Peter Mattis 和 Spencer Kimball 创建了 GTK(它代表 GIMP Toolkit),作为 Motif 工具包的替代,后者在那个时候不是免费的。(当这个工具包获得了面向对象特性和可扩展性之后,才在名称后面加上了一个加号。)这差不多已经 10 年过去了。今天,在 GTK+ 的最新版本 —— 2.8 版上,仍然在进行许多活动,同时,GIMP 无疑仍然是使用 GTK+ 的最著名的程序之一,不过现在它已经不是惟一的使用 GTK+ 的程序了。已经为 GTK+ 编写了成百上千的应用程序,而且至少有两个主要的桌面环境(Xfce 和 GNOME)用 GTK+ 为用户提供完整的工作环境。
#wget
http://mirrors.easynews.com/sunfreeware/i386/10/gtk+-1.2.10-sol10-intel-local.gz
#pkgadd -d gtk+-1.2.10-sol10-intel-local.pkg
5、安装fwbuilder
如果以上的库已经安装,就可以执行下面的命令来安装:
#pkgadd -d libfwbuilder-2.0.10-sol10-x86-local.pkg
#pkgadd -d fwbuilder-2.0.10_build-657-i386.pkg
另外也可以使用在线安装方式部署fwbuilder,命令如下:
#/opt/csw/bin/pkg-get -i fwbuilder。
6、使用fwbuilder
为了使用方便在桌面建立一个启动器,单击鼠标右键选择创建启动器。如图6 。在命令栏目输入:/opt/csw/bin/fwbuilder即可。
图6 创建fwbuilder启动器
桌面背景启动器可以启动应用程序,也可以链接到某个特定的文件、文件夹、FTP 站点或 URI 位置。要在桌面背景上添加启动器,请执行以下步骤:右击桌面背景,然后选择“创建启动器”。在“创建启动器”对话框中键入要求的信息。为该启动器输入的命令就是在使用桌面背景对象时执行的命令。 通过任何菜单当您在任何菜单中右击启动器时,即可打开启动器的弹出菜单。您可以使用该弹出菜单向面板添加该启动器。也可以将菜单、启动器和面板应用程序从菜单拖动到面板中。通过文件管理器每个启动器都对应一个 .desktop 文件。您可以将 .desktop 文件拖动到面板上,从而将该启动器添加到面板上。点击启动器即可启动fwbuilder,如图7。
图 7 fwbuilder的使用界面
总结:尽管IPFilter技术十分容易了解,并且对于在网络传输上设置具体的限制特别有用, —般而言,配置IPFilter防火墙存在一些缺点,因为防火墙配置涉及编写规则,常用规则语言的话法通常对于初学者(特别是Windows 初学者)难于理解,这样数据包过滤可能难于正确配置。虽然,包过滤防火墙有如上所述的缺点,但是在管理良好的小规模网络上,它能够正常的发挥其作用。一般情况下,人们不单独使用包过滤防火墙,而是将它和其他设备(如堡垒主机等)联合使用。
CIO之家 www.ciozj.com 公众号:imciow